From 9591cb9d6db56355b40750b8f7d5f748bbc0e6b3 Mon Sep 17 00:00:00 2001 From: Saurabh Vijayvargiya Date: Fri, 16 Feb 2018 18:20:21 +0530 Subject: [PATCH 1/7] edit gitignore file --- .gitignore | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index 2ea8568..dc3cf74 100755 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,5 @@ node_modules .ideas # Ignore files generated by PhpStorm -/*/*/.idea/ \ No newline at end of file +/*/*/.idea/ +patch \ No newline at end of file From bf1f2da27f196095713078317ff42fd3e0f2a38d Mon Sep 17 00:00:00 2001 From: Saurabh Vijayvargiya Date: Fri, 16 Feb 2018 18:32:05 +0530 Subject: [PATCH 2/7] Change code for change register --- commerce_pos.links.task.yml | 6 ++++++ commerce_pos.permissions.yml | 2 ++ commerce_pos.routing.yml | 9 ++++++++- 3 files changed, 16 insertions(+), 1 deletion(-) diff --git a/commerce_pos.links.task.yml b/commerce_pos.links.task.yml index 89da886..7f7f429 100644 --- a/commerce_pos.links.task.yml +++ b/commerce_pos.links.task.yml @@ -21,3 +21,9 @@ commerce_pos.close_register: route_name: 'commerce_pos.close_register' base_route: 'commerce_pos.main' description: 'Close Register' + +commerce_pos.select_register: + title: 'Select Register' + route_name: 'commerce_pos.select_register' + base_route: 'commerce_pos.main' + description: 'Select a new register' diff --git a/commerce_pos.permissions.yml b/commerce_pos.permissions.yml index 1517321..96a3a97 100755 --- a/commerce_pos.permissions.yml +++ b/commerce_pos.permissions.yml @@ -4,3 +4,5 @@ title: 'Use the commerce point of sale standard functionality' 'access commerce pos order lookup': title: 'Use the commerce point of sale order lookup' +'change commerce pos register': + title: 'Change commerce point of sale register' diff --git a/commerce_pos.routing.yml b/commerce_pos.routing.yml index 6f9ac26..68562b6 100644 --- a/commerce_pos.routing.yml +++ b/commerce_pos.routing.yml @@ -1,4 +1,3 @@ - commerce_pos.cashier-login-form: path: '/cashier-login' defaults: @@ -56,6 +55,14 @@ commerce_pos.order_lookup: requirements: _permission: 'access commerce pos order lookup' +commerce_pos.select_register: + path: '/admin/commerce/pos/register' + defaults: + _form: '\Drupal\commerce_pos\Form\RegisterSelectForm' + _title: 'Point of Sale Select Register' + requirements: + _permission: 'change commerce pos register' + commerce_pos.parked_order_lookup: path: '/admin/commerce/pos/orders/parked' defaults: From 5804f6c45e7a9c4326860c2b148f6d6ca5e15812 Mon Sep 17 00:00:00 2001 From: Saurabh Vijayvargiya Date: Sun, 18 Feb 2018 22:45:45 +0530 Subject: [PATCH 3/7] change word from change to modify --- commerce_pos.permissions.yml | 4 ++-- commerce_pos.routing.yml | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/commerce_pos.permissions.yml b/commerce_pos.permissions.yml index 96a3a97..cf0cdd8 100755 --- a/commerce_pos.permissions.yml +++ b/commerce_pos.permissions.yml @@ -4,5 +4,5 @@ title: 'Use the commerce point of sale standard functionality' 'access commerce pos order lookup': title: 'Use the commerce point of sale order lookup' -'change commerce pos register': - title: 'Change commerce point of sale register' +'modify commerce pos register': + title: 'Modify commerce point of sale register' diff --git a/commerce_pos.routing.yml b/commerce_pos.routing.yml index 68562b6..4d16ccf 100644 --- a/commerce_pos.routing.yml +++ b/commerce_pos.routing.yml @@ -61,7 +61,7 @@ commerce_pos.select_register: _form: '\Drupal\commerce_pos\Form\RegisterSelectForm' _title: 'Point of Sale Select Register' requirements: - _permission: 'change commerce pos register' + _permission: 'modify commerce pos register' commerce_pos.parked_order_lookup: path: '/admin/commerce/pos/orders/parked' From fd4d93976ddaa4ce07981172621451271c66e2dc Mon Sep 17 00:00:00 2001 From: Saurabh Vijayvargiya Date: Mon, 12 Mar 2018 09:45:27 +0530 Subject: [PATCH 4/7] Change in permission file as per Josh comment --- commerce_pos.permissions.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/commerce_pos.permissions.yml b/commerce_pos.permissions.yml index cf0cdd8..4ba1913 100755 --- a/commerce_pos.permissions.yml +++ b/commerce_pos.permissions.yml @@ -4,5 +4,5 @@ title: 'Use the commerce point of sale standard functionality' 'access commerce pos order lookup': title: 'Use the commerce point of sale order lookup' -'modify commerce pos register': - title: 'Modify commerce point of sale register' +'modify commerce pos active register': + title: 'Modify which commerce point of sale register is active' From 5a4d9ba5e869c2ea638f0dc34df2753c1a0693c6 Mon Sep 17 00:00:00 2001 From: Saurabh Vijayvargiya Date: Mon, 12 Mar 2018 16:32:26 +0530 Subject: [PATCH 5/7] select register test --- src/Form/POSForm.php | 4 ++ .../SelectRegisterTest.php | 70 +++++++++++++++++++ 2 files changed, 74 insertions(+) create mode 100644 tests/src/FunctionalJavascript/SelectRegisterTest.php diff --git a/src/Form/POSForm.php b/src/Form/POSForm.php index 738d9ca..ea38acc 100644 --- a/src/Form/POSForm.php +++ b/src/Form/POSForm.php @@ -578,6 +578,10 @@ protected function addTotalsDisplay(array &$form, FormStateInterface $form_state $form['totals'] = [ '#type' => 'container', ]; + $current_register = \Drupal::service('commerce_pos.current_register')->get()->getName(); + $form['totals']['register'] = [ + '#markup' => '
Register: ' . $current_register . '
', + ]; $number_formatter_factory = \Drupal::service('commerce_price.number_formatter_factory'); $number_formatter = $number_formatter_factory->createInstance(); diff --git a/tests/src/FunctionalJavascript/SelectRegisterTest.php b/tests/src/FunctionalJavascript/SelectRegisterTest.php new file mode 100644 index 0000000..8297e08 --- /dev/null +++ b/tests/src/FunctionalJavascript/SelectRegisterTest.php @@ -0,0 +1,70 @@ +setUpStore(); + $register = Register::create([ + 'store_id' => $test_store->id(), + 'name' => 'Other register', + 'default_float' => new Price('100.00', 'USD'), + ]); + $register->save(); + $this->drupalLogin($this->rootUser); + } + + /** + * Tests adding and removing products from the POS form. + */ + public function testRegisterSelection() { + $web_assert = $this->assertSession(); + $this->drupalGet('admin/commerce/pos/main'); + + $this->getSession()->getPage()->fillField('register', '1'); + $this->getSession()->getPage()->fillField('float[number]', '10.00'); + $this->getSession()->getPage()->findButton('Open Register')->click(); + $current_register_name = Register::load($this->getSession()->getCookie('commerce_pos_register'))->getName(); + // Goto register seletion page. + $this->drupalGet('admin/commerce/pos/register'); + + // Asserting current register. + $field = $this->assertSession()->optionExists('register', 1)->getText(); + $this->assertEquals($field, $current_register_name); + $this->getSession()->getPage()->fillField('register', '2'); + $this->getSession()->getPage()->fillField('float[number]', '10.00'); + $this->getSession()->getPage()->findButton('Open Register')->click(); + + $this->drupalGet('admin/commerce/pos/main'); + $web_assert->pageTextNotContains("Register: $current_register_name"); + $current_register_name = Register::load($this->getSession()->getCookie('commerce_pos_register'))->getName(); + $web_assert->pageTextContains("Register: $current_register_name"); + } + +} From b46e1019ac2d96839fcc710eb17149e4130e0709 Mon Sep 17 00:00:00 2001 From: Saurabh Vijayvargiya Date: Mon, 12 Mar 2018 23:29:25 +0530 Subject: [PATCH 6/7] Added deriver for the select regiister tab and worked as per Alex notes --- commerce_pos.links.task.yml | 6 ++-- src/Form/RegisterSelectForm.php | 2 +- .../Derivative/DynamicSelectRegister.php | 32 +++++++++++++++++++ .../SelectRegisterTest.php | 26 +++++++++++++++ 4 files changed, 61 insertions(+), 5 deletions(-) create mode 100644 src/Plugin/Derivative/DynamicSelectRegister.php diff --git a/commerce_pos.links.task.yml b/commerce_pos.links.task.yml index 7f7f429..e547b25 100644 --- a/commerce_pos.links.task.yml +++ b/commerce_pos.links.task.yml @@ -23,7 +23,5 @@ commerce_pos.close_register: description: 'Close Register' commerce_pos.select_register: - title: 'Select Register' - route_name: 'commerce_pos.select_register' - base_route: 'commerce_pos.main' - description: 'Select a new register' + deriver: 'Drupal\commerce_pos\Plugin\Derivative\DynamicSelectRegister' + weight: 100 diff --git a/src/Form/RegisterSelectForm.php b/src/Form/RegisterSelectForm.php index b0fe09c..c4dfde8 100755 --- a/src/Form/RegisterSelectForm.php +++ b/src/Form/RegisterSelectForm.php @@ -36,7 +36,7 @@ public function buildForm(array $form, FormStateInterface $form_state) { return $form; } - $register_options = ['' => '-']; + $register_options = []; foreach ($registers as $id => $register) { $register_options[$id] = $register->getName(); } diff --git a/src/Plugin/Derivative/DynamicSelectRegister.php b/src/Plugin/Derivative/DynamicSelectRegister.php new file mode 100644 index 0000000..59c4b90 --- /dev/null +++ b/src/Plugin/Derivative/DynamicSelectRegister.php @@ -0,0 +1,32 @@ +getRegisters(); + if (count($registers) > 1) { + $this->derivatives['select_register'] = $base_plugin_definition; + $this->derivatives['select_register']['title'] = $this->t("Select Register"); + $this->derivatives['select_register']['base_route'] = 'commerce_pos.main'; + $this->derivatives['select_register']['route_name'] = 'commerce_pos.select_register'; + return $this->derivatives; + } + return ''; + } + +} + diff --git a/tests/src/FunctionalJavascript/SelectRegisterTest.php b/tests/src/FunctionalJavascript/SelectRegisterTest.php index 8297e08..74ad2f0 100644 --- a/tests/src/FunctionalJavascript/SelectRegisterTest.php +++ b/tests/src/FunctionalJavascript/SelectRegisterTest.php @@ -51,6 +51,25 @@ public function testRegisterSelection() { $this->getSession()->getPage()->fillField('float[number]', '10.00'); $this->getSession()->getPage()->findButton('Open Register')->click(); $current_register_name = Register::load($this->getSession()->getCookie('commerce_pos_register'))->getName(); + + // Now we should be able to select order items. + $autocomplete_field = $this->getSession()->getPage()->findField('order_items[target_id][product_selector]'); + $autocomplete_field->setValue('Jum'); + $this->getSession()->getDriver()->keyDown($autocomplete_field->getXpath(), 'p'); + $web_assert->waitOnAutocomplete(); + $results = $this->getSession()->getPage()->findAll('css', '.ui-autocomplete li'); + $this->assertCount(3, $results); + // Click on of the auto-complete. + $results[0]->click(); + $web_assert->assertWaitOnAjaxRequest(); + + // Assert that the product is listed as expected. + $web_assert->pageTextContains('Jumper'); + $web_assert->fieldValueEquals('order_items[target_id][order_items][0][quantity]', '1.00'); + $web_assert->fieldValueEquals('order_items[target_id][order_items][0][unit_price][number]', '50.00'); + $web_assert->pageTextContains('Total $50.00'); + $web_assert->pageTextContains('To Pay $50.00'); + // Goto register seletion page. $this->drupalGet('admin/commerce/pos/register'); @@ -65,6 +84,13 @@ public function testRegisterSelection() { $web_assert->pageTextNotContains("Register: $current_register_name"); $current_register_name = Register::load($this->getSession()->getCookie('commerce_pos_register'))->getName(); $web_assert->pageTextContains("Register: $current_register_name"); + + // Assert that the product is listed as expected. + $web_assert->pageTextContains('Jumper'); + $web_assert->fieldValueEquals('order_items[target_id][order_items][0][quantity]', '1.00'); + $web_assert->fieldValueEquals('order_items[target_id][order_items][0][unit_price][number]', '50.00'); + $web_assert->pageTextContains('Total $50.00'); + $web_assert->pageTextContains('To Pay $50.00'); } } From 04ac64f0bcbd1080581361dad0a51bdf8a306fbd Mon Sep 17 00:00:00 2001 From: Saurabh Vijayvargiya Date: Mon, 12 Mar 2018 23:33:36 +0530 Subject: [PATCH 7/7] Change made as per https://www.drupal.org/project/commerce_pos/issues/2938694#comment-12521496 --- commerce_pos.permissions.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/commerce_pos.permissions.yml b/commerce_pos.permissions.yml index 4ba1913..ce148f5 100755 --- a/commerce_pos.permissions.yml +++ b/commerce_pos.permissions.yml @@ -4,5 +4,5 @@ title: 'Use the commerce point of sale standard functionality' 'access commerce pos order lookup': title: 'Use the commerce point of sale order lookup' -'modify commerce pos active register': - title: 'Modify which commerce point of sale register is active' +'change commerce pos active register': + title: 'Change the active commerce point of sale register'