diff --git a/master/bt5/vifib_base/SkinTemplateItem/portal_skins/vifib_simulation/VifibDeliveryBuilder_selectPlannedDeliveryList.xml b/master/bt5/vifib_base/SkinTemplateItem/portal_skins/vifib_simulation/VifibDeliveryBuilder_selectPlannedDeliveryList.xml index fe99d9d0a4e47c93ba69f6289086f4badff0b0e3..b4f4eb87d9788668de27da6930d7eba604266570 100644 --- a/master/bt5/vifib_base/SkinTemplateItem/portal_skins/vifib_simulation/VifibDeliveryBuilder_selectPlannedDeliveryList.xml +++ b/master/bt5/vifib_base/SkinTemplateItem/portal_skins/vifib_simulation/VifibDeliveryBuilder_selectPlannedDeliveryList.xml @@ -51,9 +51,11 @@ <item> <key> <string>_body</string> </key> <value> <string>portal_type = context.getDeliveryPortalType()\n -# make sure that the result of the simulation state is update to date, so check getSimulationState manually\n -return [x.getObject() for x in context.portal_catalog(portal_type=portal_type,simulation_state=\'planned\') \n - if x.getObject().getSimulationState()==\'planned\']\n +simulation_state = \'planned\'\n +# use catalog to prefetch, but check later in ZODB\n +return [x.getObject() for x in context.getPortalObject().portal_catalog(\n + portal_type=portal_type,\n + simulation_state=simulation_state) if x.getSimulationState() == simulation_state]\n </string> </value> </item> <item> diff --git a/master/bt5/vifib_base/SkinTemplateItem/portal_skins/vifib_simulation/VifibInvoiceTransaction_postGeneration.xml b/master/bt5/vifib_base/SkinTemplateItem/portal_skins/vifib_simulation/VifibInvoiceTransaction_postGeneration.xml index 139f72dbbe6ca1af02e87459ded001c03a245e7d..36cf916aa57ef27a83b93c3e021b40fd443491c2 100644 --- a/master/bt5/vifib_base/SkinTemplateItem/portal_skins/vifib_simulation/VifibInvoiceTransaction_postGeneration.xml +++ b/master/bt5/vifib_base/SkinTemplateItem/portal_skins/vifib_simulation/VifibInvoiceTransaction_postGeneration.xml @@ -54,7 +54,7 @@ the new Invoice.\n """\n from Products.ERP5Type.Message import translateString\n -\n +from DateTime import DateTime\n if related_simulation_movement_path_list is None:\n raise RuntimeError, \'related_simulation_movement_path_list is missing. Update ERP5 Product.\'\n \n @@ -65,6 +65,9 @@ if not invoice.Invoice_isAdvanced():\n if not invoice.getResource():\n invoice.setResource(invoice.getPriceCurrency())\n \n +if invoice.getStartDate() is None:\n + invoice.setStartDate(DateTime())\n +\n # initialize accounting_workflow to planned state\n plan_tag = \'%s_plan\' % invoice.getPath()\n if invoice.getSimulationState() == \'draft\':\n diff --git a/master/bt5/vifib_base/SkinTemplateItem/portal_skins/vifib_simulation/VifibPaymentTransaction_postGeneration.xml b/master/bt5/vifib_base/SkinTemplateItem/portal_skins/vifib_simulation/VifibPaymentTransaction_postGeneration.xml index 1ce062763af36322357934bb61aceda27df0ce65..3706aeec8380bfc5d0460e8b89d10cb8591ead01 100644 --- a/master/bt5/vifib_base/SkinTemplateItem/portal_skins/vifib_simulation/VifibPaymentTransaction_postGeneration.xml +++ b/master/bt5/vifib_base/SkinTemplateItem/portal_skins/vifib_simulation/VifibPaymentTransaction_postGeneration.xml @@ -51,6 +51,7 @@ <item> <key> <string>_body</string> </key> <value> <string>from Products.ERP5Type.Message import translateString\n +from DateTime import DateTime\n \n payment_transaction = context\n \n @@ -58,12 +59,29 @@ payment_transaction = context\n if payment_transaction.getSimulationState() == "draft":\n payment_transaction.plan(comment=translateString("Initialised by Delivery Builder."))\n \n +if payment_transaction.getStartDate() is None:\n + payment_transaction.setStartDate(DateTime())\n +\n # First set the payment transaction in the building state on the causality workflow\n payment_transaction.startBuilding()\n \n # Then an activity should put the causality state in diverged or solved\n payment_transaction.activate(after_path_and_method_id=(related_simulation_movement_path_list,\n (\'immediateReindexObject\',\'recursiveImmediateReindexObject\'))).updateCausalityState()\n +\n +# update casuality from movements\n +causality_list = payment_transaction.getCausalityList()\n +causality_list.sort()\n +modified = 0\n +for movement in payment_transaction.getMovementList():\n + movement_causality = movement.getCausality()\n + if movement_causality not in causality_list:\n + modified = 1\n + causality_list.append(movement_causality)\n +\n +if modified:\n + causality_list.sort()\n + payment_transaction.setCausalityList(causality_list)\n </string> </value> </item> <item> diff --git a/master/bt5/vifib_base/bt/revision b/master/bt5/vifib_base/bt/revision index 6ffe0d0bf6ccb6246fd343665efe0b19df8b2e8b..b2786cdcdc01d7ec1c11b9d3bcfb793bf3a81643 100644 --- a/master/bt5/vifib_base/bt/revision +++ b/master/bt5/vifib_base/bt/revision @@ -1 +1 @@ -348 \ No newline at end of file +351 \ No newline at end of file diff --git a/master/bt5/vifib_data/PreferenceTemplateItem/portal_preferences/vifib_default_system_preference.xml b/master/bt5/vifib_data/PreferenceTemplateItem/portal_preferences/vifib_default_system_preference.xml index 2fd85293f6e86995d9c6408906abdd05ddcaf0d1..aa3740e94f680d5a005e2fee7eceb91e966e78e1 100644 --- a/master/bt5/vifib_data/PreferenceTemplateItem/portal_preferences/vifib_default_system_preference.xml +++ b/master/bt5/vifib_data/PreferenceTemplateItem/portal_preferences/vifib_default_system_preference.xml @@ -127,9 +127,7 @@ </item> <item> <key> <string>preferred_payzen_integration_site</string> </key> - <value> - <none/> - </value> + <value> <string>portal_integrations/vifib_payzen_integration</string> </value> </item> <item> <key> <string>preferred_software_setup_resource</string> </key> diff --git a/master/bt5/vifib_data/bt/revision b/master/bt5/vifib_data/bt/revision index 7730ef7f3e0586b9070623baed6032dff904c9ea..0fa6a7b088051e48b8dc94d598b7e324e6f691c9 100644 --- a/master/bt5/vifib_data/bt/revision +++ b/master/bt5/vifib_data/bt/revision @@ -1 +1 @@ -89 \ No newline at end of file +90 \ No newline at end of file diff --git a/master/bt5/vifib_data_simulation/PathTemplateItem/business_process_module/vifib_sale_business_process/account.xml b/master/bt5/vifib_data_simulation/PathTemplateItem/business_process_module/vifib_sale_business_process/account.xml index d8899479b7ff504275128938ce1163fc9dee1231..48613af25e7920f360dcabff475d3a8dc354c293 100644 --- a/master/bt5/vifib_data_simulation/PathTemplateItem/business_process_module/vifib_sale_business_process/account.xml +++ b/master/bt5/vifib_data_simulation/PathTemplateItem/business_process_module/vifib_sale_business_process/account.xml @@ -114,9 +114,7 @@ <key> <string>completed_state</string> </key> <value> <tuple> - <string>confirmed</string> <string>delivered</string> - <string>started</string> <string>stopped</string> </tuple> </value> diff --git a/master/bt5/vifib_data_simulation/PathTemplateItem/business_process_module/vifib_sale_business_process/pay.xml b/master/bt5/vifib_data_simulation/PathTemplateItem/business_process_module/vifib_sale_business_process/pay.xml index c6f50510426c86132db6bc672d368e4cd7398da6..c862f3dc7e27ef5a004a36ef2e4d0602fabc147a 100644 --- a/master/bt5/vifib_data_simulation/PathTemplateItem/business_process_module/vifib_sale_business_process/pay.xml +++ b/master/bt5/vifib_data_simulation/PathTemplateItem/business_process_module/vifib_sale_business_process/pay.xml @@ -115,9 +115,7 @@ <item> <key> <string>completed_state</string> </key> <value> - <tuple> - <string>confirmed</string> - </tuple> + <tuple/> </value> </item> <item> @@ -149,6 +147,14 @@ <none/> </value> </item> + <item> + <key> <string>frozen_state</string> </key> + <value> + <tuple> + <string>delivered</string> + </tuple> + </value> + </item> <item> <key> <string>id</string> </key> <value> <string>pay</string> </value> diff --git a/master/bt5/vifib_data_simulation/PathTemplateItem/portal_deliveries/vifib_payment_transaction_builder/category_movement_group_on_delivery.xml b/master/bt5/vifib_data_simulation/PathTemplateItem/portal_deliveries/vifib_payment_transaction_builder/category_movement_group_on_delivery.xml index a3c6a5248ead1b590c7358412125fa8f1c47f32c..4d0b1cc48a8c998b76b73d7542dac9446c0728c6 100644 --- a/master/bt5/vifib_data_simulation/PathTemplateItem/portal_deliveries/vifib_payment_transaction_builder/category_movement_group_on_delivery.xml +++ b/master/bt5/vifib_data_simulation/PathTemplateItem/portal_deliveries/vifib_payment_transaction_builder/category_movement_group_on_delivery.xml @@ -37,13 +37,10 @@ <key> <string>tested_property</string> </key> <value> <tuple> - <string>source_payment</string> - <string>destination_payment</string> <string>source_section</string> <string>destination_section</string> <string>payment_mode</string> <string>resource</string> - <string>specialise</string> </tuple> </value> </item> diff --git a/master/bt5/vifib_data_simulation/PathTemplateItem/portal_deliveries/vifib_payment_transaction_builder/category_movement_group_on_line.xml b/master/bt5/vifib_data_simulation/PathTemplateItem/portal_deliveries/vifib_payment_transaction_builder/category_movement_group_on_line.xml index ed0a8776011f21236fd39aab82aa981b5a119a9a..3e71e2caac73b1f524c8b8110ef11f1ca289375c 100644 --- a/master/bt5/vifib_data_simulation/PathTemplateItem/portal_deliveries/vifib_payment_transaction_builder/category_movement_group_on_line.xml +++ b/master/bt5/vifib_data_simulation/PathTemplateItem/portal_deliveries/vifib_payment_transaction_builder/category_movement_group_on_line.xml @@ -27,7 +27,7 @@ </item> <item> <key> <string>int_index</string> </key> - <value> <int>2</int> </value> + <value> <int>1</int> </value> </item> <item> <key> <string>portal_type</string> </key> @@ -41,6 +41,9 @@ <string>destination</string> <string>source_project</string> <string>destination_project</string> + <string>source_payment</string> + <string>destination_payment*</string> + <string>specialise</string> </tuple> </value> </item> @@ -48,6 +51,10 @@ <key> <string>title</string> </key> <value> <string>category_movement_group_on_line</string> </value> </item> + <item> + <key> <string>update_always</string> </key> + <value> <int>0</int> </value> + </item> </dictionary> </pickle> </record> diff --git a/master/bt5/vifib_data_simulation/PathTemplateItem/portal_deliveries/vifib_payment_transaction_builder/delivery_causality_assignement_movement_group_on_delivery.xml b/master/bt5/vifib_data_simulation/PathTemplateItem/portal_deliveries/vifib_payment_transaction_builder/delivery_causality_assignement_movement_group_on_line.xml similarity index 84% rename from master/bt5/vifib_data_simulation/PathTemplateItem/portal_deliveries/vifib_payment_transaction_builder/delivery_causality_assignement_movement_group_on_delivery.xml rename to master/bt5/vifib_data_simulation/PathTemplateItem/portal_deliveries/vifib_payment_transaction_builder/delivery_causality_assignement_movement_group_on_line.xml index 2b93245cbc5740c5165f762cabbbb0eb857bf0be..42261dffcafc02acd693cd1a003649612d129a1d 100644 --- a/master/bt5/vifib_data_simulation/PathTemplateItem/portal_deliveries/vifib_payment_transaction_builder/delivery_causality_assignement_movement_group_on_delivery.xml +++ b/master/bt5/vifib_data_simulation/PathTemplateItem/portal_deliveries/vifib_payment_transaction_builder/delivery_causality_assignement_movement_group_on_line.xml @@ -10,7 +10,7 @@ <key> <string>categories</string> </key> <value> <tuple> - <string>collect_order_group/delivery</string> + <string>collect_order_group/line</string> </tuple> </value> </item> @@ -22,7 +22,7 @@ </item> <item> <key> <string>id</string> </key> - <value> <string>delivery_causality_assignement_movement_group_on_delivery</string> </value> + <value> <string>delivery_causality_assignement_movement_group_on_line</string> </value> </item> <item> <key> <string>int_index</string> </key> @@ -34,7 +34,7 @@ </item> <item> <key> <string>title</string> </key> - <value> <string>Delivery Causality Assignement Movement Group On Delivery</string> </value> + <value> <string>delivery_causality_assignement_movement_group_on_line</string> </value> </item> </dictionary> </pickle> diff --git a/master/bt5/vifib_data_simulation/PathTemplateItem/portal_deliveries/vifib_payment_transaction_builder/property_movement_group_on_delivery.xml b/master/bt5/vifib_data_simulation/PathTemplateItem/portal_deliveries/vifib_payment_transaction_builder/property_movement_group_on_line.xml similarity index 79% rename from master/bt5/vifib_data_simulation/PathTemplateItem/portal_deliveries/vifib_payment_transaction_builder/property_movement_group_on_delivery.xml rename to master/bt5/vifib_data_simulation/PathTemplateItem/portal_deliveries/vifib_payment_transaction_builder/property_movement_group_on_line.xml index 6436fb8009629d30dc9893cdcc1b0c9221156277..72d9b3461f45a1a915b2ab889f5c2f9b48527f56 100644 --- a/master/bt5/vifib_data_simulation/PathTemplateItem/portal_deliveries/vifib_payment_transaction_builder/property_movement_group_on_delivery.xml +++ b/master/bt5/vifib_data_simulation/PathTemplateItem/portal_deliveries/vifib_payment_transaction_builder/property_movement_group_on_line.xml @@ -11,7 +11,7 @@ <value> <tuple> <string>divergence_scope/property</string> - <string>collect_order_group/delivery</string> + <string>collect_order_group/line</string> </tuple> </value> </item> @@ -23,7 +23,7 @@ </item> <item> <key> <string>id</string> </key> - <value> <string>property_movement_group_on_delivery</string> </value> + <value> <string>property_movement_group_on_line</string> </value> </item> <item> <key> <string>int_index</string> </key> @@ -44,7 +44,11 @@ </item> <item> <key> <string>title</string> </key> - <value> <string>property_movement_group_on_delivery</string> </value> + <value> <string>property_movement_group_on_line</string> </value> + </item> + <item> + <key> <string>update_always</string> </key> + <value> <int>0</int> </value> </item> </dictionary> </pickle> diff --git a/master/bt5/vifib_data_simulation/PathTemplateItem/portal_deliveries/vifib_sale_invoice_builder.xml b/master/bt5/vifib_data_simulation/PathTemplateItem/portal_deliveries/vifib_sale_invoice_builder.xml index 7b8ec3ffd695789ee1775de1617def1a87bb2a1c..8ee0e4f2f7f7b6b663119297c35d251693601da3 100644 --- a/master/bt5/vifib_data_simulation/PathTemplateItem/portal_deliveries/vifib_sale_invoice_builder.xml +++ b/master/bt5/vifib_data_simulation/PathTemplateItem/portal_deliveries/vifib_sale_invoice_builder.xml @@ -126,7 +126,7 @@ </item> <item> <key> <string>delivery_select_method_id</string> </key> - <value> <string>VifibInvoiceBuilder_selectPlannedSaleInvoiceList</string> </value> + <value> <string>VifibDeliveryBuilder_selectPlannedDeliveryList</string> </value> </item> <item> <key> <string>description</string> </key> diff --git a/master/bt5/vifib_data_simulation/PathTemplateItem/portal_deliveries/vifib_sale_invoice_builder/category_movement_group_on_delivery.xml b/master/bt5/vifib_data_simulation/PathTemplateItem/portal_deliveries/vifib_sale_invoice_builder/category_movement_group_on_delivery.xml index 302a013b8eea6711e67543b5630d21815f4ca9ea..47523661434ac1707e7b4c3366d22744154ff4f9 100644 --- a/master/bt5/vifib_data_simulation/PathTemplateItem/portal_deliveries/vifib_sale_invoice_builder/category_movement_group_on_delivery.xml +++ b/master/bt5/vifib_data_simulation/PathTemplateItem/portal_deliveries/vifib_sale_invoice_builder/category_movement_group_on_delivery.xml @@ -27,7 +27,7 @@ </item> <item> <key> <string>int_index</string> </key> - <value> <int>2</int> </value> + <value> <int>1</int> </value> </item> <item> <key> <string>portal_type</string> </key> @@ -37,8 +37,6 @@ <key> <string>tested_property</string> </key> <value> <tuple> - <string>delivery_mode</string> - <string>incoterm</string> <string>source</string> <string>destination</string> <string>source_section</string> @@ -51,6 +49,10 @@ <key> <string>title</string> </key> <value> <string>category_movement_group_on_delivery</string> </value> </item> + <item> + <key> <string>update_always</string> </key> + <value> <int>0</int> </value> + </item> </dictionary> </pickle> </record> diff --git a/master/bt5/vifib_data_simulation/PathTemplateItem/portal_deliveries/vifib_sale_invoice_builder/category_movement_group_on_line.xml b/master/bt5/vifib_data_simulation/PathTemplateItem/portal_deliveries/vifib_sale_invoice_builder/category_movement_group_on_line.xml index 5c6e19eec86e185759d8ece3e961572a7512efa0..ede4d2f59c5eea3bd10dbfda7b163c966b5d70dc 100644 --- a/master/bt5/vifib_data_simulation/PathTemplateItem/portal_deliveries/vifib_sale_invoice_builder/category_movement_group_on_line.xml +++ b/master/bt5/vifib_data_simulation/PathTemplateItem/portal_deliveries/vifib_sale_invoice_builder/category_movement_group_on_line.xml @@ -55,6 +55,8 @@ <string>destination_project</string> <string>source_payment</string> <string>destination_payment</string> + <string>delivery_mode</string> + <string>incoterm</string> </tuple> </value> </item> @@ -62,6 +64,10 @@ <key> <string>title</string> </key> <value> <string>category_movement_group_on_line</string> </value> </item> + <item> + <key> <string>update_always</string> </key> + <value> <int>0</int> </value> + </item> </dictionary> </pickle> </record> diff --git a/master/bt5/vifib_data_simulation/PathTemplateItem/portal_deliveries/vifib_sale_invoice_transaction_builder/category_movement_group_on_line.xml b/master/bt5/vifib_data_simulation/PathTemplateItem/portal_deliveries/vifib_sale_invoice_transaction_builder/category_movement_group_on_line.xml index 0fe758a8c496b65a051b0c7ea8760dbf3df94ecf..025c542be9fc5a67e9ee8c278328b5910a2372f1 100644 --- a/master/bt5/vifib_data_simulation/PathTemplateItem/portal_deliveries/vifib_sale_invoice_transaction_builder/category_movement_group_on_line.xml +++ b/master/bt5/vifib_data_simulation/PathTemplateItem/portal_deliveries/vifib_sale_invoice_transaction_builder/category_movement_group_on_line.xml @@ -37,6 +37,7 @@ <key> <string>tested_property</string> </key> <value> <tuple> + <string>specialise</string> <string>resource</string> <string>source</string> <string>destination</string> @@ -52,6 +53,10 @@ <key> <string>title</string> </key> <value> <string>category_movement_group_on_line</string> </value> </item> + <item> + <key> <string>update_always</string> </key> + <value> <int>0</int> </value> + </item> </dictionary> </pickle> </record> diff --git a/master/bt5/vifib_data_simulation/bt/revision b/master/bt5/vifib_data_simulation/bt/revision index 9cd72aa941214d4cb8522dda34eb12cf878e3e8b..9d1ce53f8cc2ee2d55094091042b3fd02f9bd1ce 100644 --- a/master/bt5/vifib_data_simulation/bt/revision +++ b/master/bt5/vifib_data_simulation/bt/revision @@ -1 +1 @@ -72 \ No newline at end of file +82 \ No newline at end of file diff --git a/master/bt5/vifib_erp5/LocalRolesTemplateItem/portal_integrations/vifib_payzen_integration.xml b/master/bt5/vifib_erp5/LocalRolesTemplateItem/portal_integrations/vifib_payzen_integration.xml new file mode 100644 index 0000000000000000000000000000000000000000..bc872675527c8aa49c39a89ee19d67bc7d13ffec --- /dev/null +++ b/master/bt5/vifib_erp5/LocalRolesTemplateItem/portal_integrations/vifib_payzen_integration.xml @@ -0,0 +1,11 @@ +<local_roles_item> + <local_roles> + <role id='R-MEMBER'> + <item>Auditor</item> + <item>Author</item> + </role> + <role id='superluke'> + <item>Owner</item> + </role> + </local_roles> +</local_roles_item> \ No newline at end of file diff --git a/master/bt5/vifib_erp5/bt/dependency_list b/master/bt5/vifib_erp5/bt/dependency_list index 2df82551a8b0435060908288c236c57cd220c36f..b237e391ec812922c238bdfbe1b4f59dd71d624f 100644 --- a/master/bt5/vifib_erp5/bt/dependency_list +++ b/master/bt5/vifib_erp5/bt/dependency_list @@ -1 +1,2 @@ -vifib_data_simulation \ No newline at end of file +vifib_data_simulation +vifib_data_payzen \ No newline at end of file diff --git a/master/bt5/vifib_erp5/bt/revision b/master/bt5/vifib_erp5/bt/revision index 41a4a819ada66b2e8f7fea82f094eb1314f2e9ca..e8a4e6b71bedf09fc8698c29284df058b6ac5e8b 100644 --- a/master/bt5/vifib_erp5/bt/revision +++ b/master/bt5/vifib_erp5/bt/revision @@ -1 +1 @@ -328 \ No newline at end of file +329 \ No newline at end of file diff --git a/master/bt5/vifib_erp5/bt/template_local_role_list b/master/bt5/vifib_erp5/bt/template_local_role_list index ed6667d89edcb1add06e5042d47e574e83f7b57c..a46e320b158cda80bb01c5aad7f3975dfbd6d482 100644 --- a/master/bt5/vifib_erp5/bt/template_local_role_list +++ b/master/bt5/vifib_erp5/bt/template_local_role_list @@ -47,6 +47,7 @@ person_module/test_vifib_user_developer portal_contributions portal_gadgets portal_integrations +portal_integrations/vifib_payzen_integration product_module purchase_order_module purchase_packing_list_module diff --git a/master/bt5/vifib_erp5/bt/template_local_roles_list b/master/bt5/vifib_erp5/bt/template_local_roles_list index 06d80ad0ebc78ad97595ade3666c31e95870bcc5..a46e320b158cda80bb01c5aad7f3975dfbd6d482 100644 --- a/master/bt5/vifib_erp5/bt/template_local_roles_list +++ b/master/bt5/vifib_erp5/bt/template_local_roles_list @@ -12,8 +12,8 @@ account_module/refundable_vat account_module/sales accounting_module business_process_module -business_process_module/vifib_sale_business_process business_process_module/vifib_purchase_business_process +business_process_module/vifib_sale_business_process campaign_module component_module computer_module @@ -47,6 +47,7 @@ person_module/test_vifib_user_developer portal_contributions portal_gadgets portal_integrations +portal_integrations/vifib_payzen_integration product_module purchase_order_module purchase_packing_list_module diff --git a/master/bt5/vifib_payzen/PathTemplateItem/portal_alarms/register_planned_payment_transaction_payzen.xml b/master/bt5/vifib_payzen/PathTemplateItem/portal_alarms/register_planned_payment_transaction_payzen.xml new file mode 100644 index 0000000000000000000000000000000000000000..193a2fe8ca5e71bfb7bf256babcd24a49b970840 --- /dev/null +++ b/master/bt5/vifib_payzen/PathTemplateItem/portal_alarms/register_planned_payment_transaction_payzen.xml @@ -0,0 +1,97 @@ +<?xml version="1.0"?> +<ZopeData> + <record id="1" aka="AAAAAAAAAAE="> + <pickle> + <global name="Alarm" module="erp5.portal_type"/> + </pickle> + <pickle> + <dictionary> + <item> + <key> <string>active_sense_method_id</string> </key> + <value> <string>Alarm_registerPlannedPaymentTransactionPayzen</string> </value> + </item> + <item> + <key> <string>description</string> </key> + <value> + <none/> + </value> + </item> + <item> + <key> <string>enabled</string> </key> + <value> <int>1</int> </value> + </item> + <item> + <key> <string>id</string> </key> + <value> <string>register_planned_payment_transaction_payzen</string> </value> + </item> + <item> + <key> <string>periodicity_hour</string> </key> + <value> + <tuple/> + </value> + </item> + <item> + <key> <string>periodicity_minute</string> </key> + <value> + <tuple/> + </value> + </item> + <item> + <key> <string>periodicity_minute_frequency</string> </key> + <value> <int>5</int> </value> + </item> + <item> + <key> <string>periodicity_month</string> </key> + <value> + <tuple/> + </value> + </item> + <item> + <key> <string>periodicity_month_day</string> </key> + <value> + <tuple/> + </value> + </item> + <item> + <key> <string>periodicity_start_date</string> </key> + <value> + <object> + <klass> + <global name="DateTime" module="DateTime.DateTime"/> + </klass> + <tuple> + <none/> + </tuple> + <state> + <tuple> + <float>1288051200.0</float> + <string>GMT</string> + </tuple> + </state> + </object> + </value> + </item> + <item> + <key> <string>periodicity_week</string> </key> + <value> + <tuple/> + </value> + </item> + <item> + <key> <string>portal_type</string> </key> + <value> <string>Alarm</string> </value> + </item> + <item> + <key> <string>sense_method_id</string> </key> + <value> + <none/> + </value> + </item> + <item> + <key> <string>title</string> </key> + <value> <string>Register planned Payment Transaction in payzen</string> </value> + </item> + </dictionary> + </pickle> + </record> +</ZopeData> diff --git a/master/bt5/vifib_base/SkinTemplateItem/portal_skins/vifib_simulation/VifibInvoiceBuilder_selectPlannedSaleInvoiceList.xml b/master/bt5/vifib_payzen/SkinTemplateItem/portal_skins/vifib_payzen/Alarm_registerPlannedPaymentTransactionPayzen.xml similarity index 81% rename from master/bt5/vifib_base/SkinTemplateItem/portal_skins/vifib_simulation/VifibInvoiceBuilder_selectPlannedSaleInvoiceList.xml rename to master/bt5/vifib_payzen/SkinTemplateItem/portal_skins/vifib_payzen/Alarm_registerPlannedPaymentTransactionPayzen.xml index 94761b55da16715b9f1bc7b98a8f5ec6487eeb06..eee99bcee1ff46e4dd096248ec868221cba16c3d 100644 --- a/master/bt5/vifib_base/SkinTemplateItem/portal_skins/vifib_simulation/VifibInvoiceBuilder_selectPlannedSaleInvoiceList.xml +++ b/master/bt5/vifib_payzen/SkinTemplateItem/portal_skins/vifib_payzen/Alarm_registerPlannedPaymentTransactionPayzen.xml @@ -50,21 +50,24 @@ </item> <item> <key> <string>_body</string> </key> - <value> <string>portal_catalog = context.getPortalObject().portal_catalog\n -simulation_state = \'planned\'\n -# use catalog to prefetch, but check later in ZODB\n -return [q.getObject() for q in portal_catalog(\n - portal_type=\'Sale Invoice Transaction\',\n - simulation_state=simulation_state) if q.getSimulationState() == simulation_state]\n + <value> <string>portal = context.getPortalObject()\n +for payment_transaction in portal.portal_catalog(\n + portal_type="Payment Transaction", \n + simulation_state="planned",\n + limit=10\n + ):\n + # do not trust catalog\n + if payment_transaction.getSimulationState() == \'planned\':\n + payment_transaction.PaymentTransaction_registerPayzen()\n </string> </value> </item> <item> <key> <string>_params</string> </key> - <value> <string>**kw</string> </value> + <value> <string></string> </value> </item> <item> <key> <string>id</string> </key> - <value> <string>VifibInvoiceBuilder_selectPlannedSaleInvoiceList</string> </value> + <value> <string>Alarm_registerPlannedPaymentTransactionPayzen</string> </value> </item> </dictionary> </pickle> diff --git a/master/bt5/vifib_payzen/bt/revision b/master/bt5/vifib_payzen/bt/revision index 31ff414b74c276a48419201e1024d3b860413a3b..2e66562e2705f8e5c5ddccceeecaab861194f30a 100644 --- a/master/bt5/vifib_payzen/bt/revision +++ b/master/bt5/vifib_payzen/bt/revision @@ -1 +1 @@ -48 \ No newline at end of file +49 \ No newline at end of file diff --git a/master/bt5/vifib_payzen/bt/template_path_list b/master/bt5/vifib_payzen/bt/template_path_list index 25716e18b34985bd915bdb8bbed9fd378f9af1c5..ceb755f869361ac943b45e3d967324d1d6405e45 100644 --- a/master/bt5/vifib_payzen/bt/template_path_list +++ b/master/bt5/vifib_payzen/bt/template_path_list @@ -1 +1,2 @@ -portal_alarms/payzen_update_confirmed_payment_transaction \ No newline at end of file +portal_alarms/payzen_update_confirmed_payment_transaction +portal_alarms/register_planned_payment_transaction_payzen \ No newline at end of file diff --git a/master/bt5/vifib_slap/PathTemplateItem/portal_alarms/stop_planned_sale_invoice_transaction.xml b/master/bt5/vifib_slap/PathTemplateItem/portal_alarms/stop_planned_sale_invoice_transaction.xml new file mode 100644 index 0000000000000000000000000000000000000000..8c26796509d4ea2526f49602fc8e4b168df3d6a8 --- /dev/null +++ b/master/bt5/vifib_slap/PathTemplateItem/portal_alarms/stop_planned_sale_invoice_transaction.xml @@ -0,0 +1,91 @@ +<?xml version="1.0"?> +<ZopeData> + <record id="1" aka="AAAAAAAAAAE="> + <pickle> + <global name="Alarm" module="erp5.portal_type"/> + </pickle> + <pickle> + <dictionary> + <item> + <key> <string>active_sense_method_id</string> </key> + <value> <string>Alarm_stopPlannedSaleInvoiceTransaction</string> </value> + </item> + <item> + <key> <string>description</string> </key> + <value> + <none/> + </value> + </item> + <item> + <key> <string>enabled</string> </key> + <value> <int>1</int> </value> + </item> + <item> + <key> <string>id</string> </key> + <value> <string>stop_planned_sale_invoice_transaction</string> </value> + </item> + <item> + <key> <string>periodicity_hour</string> </key> + <value> + <tuple/> + </value> + </item> + <item> + <key> <string>periodicity_minute</string> </key> + <value> + <tuple/> + </value> + </item> + <item> + <key> <string>periodicity_minute_frequency</string> </key> + <value> <int>5</int> </value> + </item> + <item> + <key> <string>periodicity_month</string> </key> + <value> + <tuple/> + </value> + </item> + <item> + <key> <string>periodicity_month_day</string> </key> + <value> + <tuple/> + </value> + </item> + <item> + <key> <string>periodicity_start_date</string> </key> + <value> + <object> + <klass> + <global name="DateTime" module="DateTime.DateTime"/> + </klass> + <tuple> + <none/> + </tuple> + <state> + <tuple> + <float>3660.0</float> + <string>GMT</string> + </tuple> + </state> + </object> + </value> + </item> + <item> + <key> <string>periodicity_week</string> </key> + <value> + <tuple/> + </value> + </item> + <item> + <key> <string>portal_type</string> </key> + <value> <string>Alarm</string> </value> + </item> + <item> + <key> <string>title</string> </key> + <value> <string>Stop planned Sale Invoices before current month</string> </value> + </item> + </dictionary> + </pickle> + </record> +</ZopeData> diff --git a/master/bt5/vifib_slap/SkinTemplateItem/portal_skins/vifib_slap/Alarm_stopPlannedSaleInvoiceTransaction.xml b/master/bt5/vifib_slap/SkinTemplateItem/portal_skins/vifib_slap/Alarm_stopPlannedSaleInvoiceTransaction.xml new file mode 100644 index 0000000000000000000000000000000000000000..73d443efe132beeb43882f58c390ff490873ba25 --- /dev/null +++ b/master/bt5/vifib_slap/SkinTemplateItem/portal_skins/vifib_slap/Alarm_stopPlannedSaleInvoiceTransaction.xml @@ -0,0 +1,86 @@ +<?xml version="1.0"?> +<ZopeData> + <record id="1" aka="AAAAAAAAAAE="> + <pickle> + <global name="PythonScript" module="Products.PythonScripts.PythonScript"/> + </pickle> + <pickle> + <dictionary> + <item> + <key> <string>Script_magic</string> </key> + <value> <int>3</int> </value> + </item> + <item> + <key> <string>_bind_names</string> </key> + <value> + <object> + <klass> + <global name="NameAssignments" module="Shared.DC.Scripts.Bindings"/> + </klass> + <tuple/> + <state> + <dictionary> + <item> + <key> <string>_asgns</string> </key> + <value> + <dictionary> + <item> + <key> <string>name_container</string> </key> + <value> <string>container</string> </value> + </item> + <item> + <key> <string>name_context</string> </key> + <value> <string>context</string> </value> + </item> + <item> + <key> <string>name_m_self</string> </key> + <value> <string>script</string> </value> + </item> + <item> + <key> <string>name_subpath</string> </key> + <value> <string>traverse_subpath</string> </value> + </item> + </dictionary> + </value> + </item> + </dictionary> + </state> + </object> + </value> + </item> + <item> + <key> <string>_body</string> </key> + <value> <string encoding="cdata"><![CDATA[ + +from DateTime import DateTime\n +from Products.ERP5Type.DateUtils import getClosestDate\n +\n +portal = context.getPortalObject()\n +this_month = getClosestDate(target_date=DateTime())\n +for sale_invoice_transaction in portal.portal_catalog(\n + portal_type=\'Sale Invoice Transaction\',\n + simulation_state=\'planned\',\n + limit=10,\n + **{"delivery.start_date": \'< %s\' % this_month}\n +):\n + if sale_invoice_transaction.getSimulationState() == \'planned\' and sale_invoice_transaction.getStartDate() < this_month:\n + # do not trust catalog\n + sale_invoice_transaction.confirm()\n + sale_invoice_transaction.start()\n + sale_invoice_transaction.stop()\n + + +]]></string> </value> + </item> + <item> + <key> <string>_params</string> </key> + <value> <string>**kw</string> </value> + </item> + <item> + <key> <string>id</string> </key> + <value> <string>Alarm_stopPlannedSaleInvoiceTransaction</string> </value> + </item> + </dictionary> + </pickle> + </record> +</ZopeData> diff --git a/master/bt5/vifib_slap/bt/revision b/master/bt5/vifib_slap/bt/revision index ec52cb80b9b9cef0839254b8e8d1412ed04924dd..99f9f071dc26630c3d51364ba0f006051ee47b71 100644 --- a/master/bt5/vifib_slap/bt/revision +++ b/master/bt5/vifib_slap/bt/revision @@ -1 +1 @@ -501 \ No newline at end of file +502 \ No newline at end of file diff --git a/master/bt5/vifib_slap/bt/template_path_list b/master/bt5/vifib_slap/bt/template_path_list index e97340224e9dc1485d3b441f446cbabd06e9ced4..109487b95b851ec08df18dc0ab75275623c5424a 100644 --- a/master/bt5/vifib_slap/bt/template_path_list +++ b/master/bt5/vifib_slap/bt/template_path_list @@ -1,4 +1,6 @@ portal_alarms/confirm_ordered_sale_order portal_alarms/confirm_ordered_sale_order/** +portal_alarms/stop_planned_sale_invoice_transaction +portal_alarms/stop_planned_sale_invoice_transaction/** portal_alarms/vifib_trigger_build portal_alarms/vifib_trigger_build/** \ No newline at end of file diff --git a/master/product/Vifib/tests/testVifibInstanceHostingRelatedDocument.py b/master/product/Vifib/tests/testVifibInstanceHostingRelatedDocument.py index ead0ee53d1124642fa222d2421a204c73324f8f3..f5ff4d729e1e470a6405c9fb58e5c02b332c72d3 100644 --- a/master/product/Vifib/tests/testVifibInstanceHostingRelatedDocument.py +++ b/master/product/Vifib/tests/testVifibInstanceHostingRelatedDocument.py @@ -10,9 +10,6 @@ class TestVifibInstanceHostingRelatedDocument(TestVifibSlapWebServiceMixin): def stepTriggerBuild(self, sequence, **kw): self.portal.portal_alarms.vifib_trigger_build.activeSense() - def stepCheckPayment(self, sequence, **kw): - raise NotImplementedError - def stepCheckSubscriptionSalePackingListCoverage(self, sequence, **kw): hosting_subscription = self.portal.portal_catalog.getResultValue( uid=sequence['hosting_subscription_uid']) @@ -145,12 +142,17 @@ class TestVifibInstanceHostingRelatedDocument(TestVifibSlapWebServiceMixin): self.assertEqual(0, len(subscription_invoice_line_list)) # invoice shall be solved - self.assertEqual('solved', setup_invoice_line_list[0].getCausalityState()) + invoice = setup_invoice_line_list[0].getParentValue() + self.assertEqual('solved', invoice.getCausalityState()) # invoice shall have causality of one packing list self.assertEqual( [setup_delivery_line_list[0].getParentValue().getUid()], - setup_invoice_line_list[0].getParentValue().getCausalityUidList()) + invoice.getCausalityUidList()) + + # there shall be no payment transaction related + self.assertEqual([], invoice.getCausalityRelatedList( + portal_type='Payment Transaction')) sequence.edit( subscription_delivery_uid_list=[q.getParentValue().getUid() for q in \ @@ -244,6 +246,352 @@ class TestVifibInstanceHostingRelatedDocument(TestVifibSlapWebServiceMixin): [q.getParentValue().getUid() for q in subscription_delivery_line_list if q.getSimulationState() == 'stopped']), sorted(setup_invoice_line_list[0].getParentValue().getCausalityUidList())) + def stepSelectPlannedInvoice(self, sequence, **kw): + hosting_subscription = self.portal.portal_catalog.getResultValue( + uid=sequence['hosting_subscription_uid']) + + invoice_line = self.portal.portal_catalog.getResultValue( + portal_type='Invoice Line', + aggregate_relative_url=hosting_subscription.getRelativeUrl(), + simulation_state='planned' + ) + + # there shall be no payment transaction related + self.assertEqual([], invoice_line.getParentValue().getCausalityRelatedList( + portal_type='Payment Transaction')) + + sequence.edit(invoice_uid=invoice_line.getParentValue().getUid()) + + def stepConfirmInvoice(self, sequence, **kw): + self.portal.portal_catalog.getResultValue( + uid=sequence['invoice_uid']).confirm() + + def stepCheckHostingSubscriptionConfirmedInvoiceDocumentCoverage(self, + sequence, **kw): + catalog = self.portal.portal_catalog + hosting_subscription = catalog.getResultValue( + uid=sequence['hosting_subscription_uid']) + hosting_subscription_url = hosting_subscription.getRelativeUrl() + + # hosting is confirmed, so no invoice + hosting_delivery_line_list = catalog(portal_type='Sale Packing List Line', + aggregate_relative_url=hosting_subscription_url, + resource_relative_url=sequence['hosting_resource']) + + self.assertEqual(1, len(hosting_delivery_line_list)) + self.assertEqual('confirmed', hosting_delivery_line_list[0]\ + .getSimulationState()) + + hosting_invoice_line_list = catalog(portal_type='Invoice Line', + aggregate_relative_url=hosting_subscription_url, + resource_relative_url=sequence['hosting_resource']) + self.assertEqual(0, len(hosting_invoice_line_list)) + + # setup is stopped, and has there is invoice + setup_delivery_line_list = catalog(portal_type='Sale Packing List Line', + aggregate_relative_url=hosting_subscription_url, + resource_relative_url=sequence['setup_resource']) + + self.assertEqual(1, len(setup_delivery_line_list)) + self.assertEqual('stopped', setup_delivery_line_list[0]\ + .getSimulationState()) + + setup_invoice_line_list = catalog(portal_type='Invoice Line', + aggregate_relative_url=hosting_subscription_url, + resource_relative_url=sequence['setup_resource']) + self.assertEqual(1, len(setup_invoice_line_list)) + self.assertEqual('confirmed', setup_invoice_line_list[0]\ + .getSimulationState()) + + # there are 10 confirmed and 2 stopped subscription, so 2 invoice line + subscription_delivery_line_list = catalog( + portal_type='Sale Packing List Line', + aggregate_relative_url=hosting_subscription_url, + resource_relative_url=sequence['subscription_resource']) + + self.assertEqual(12, len(subscription_delivery_line_list)) + self.assertEqual((['confirmed'] * 10) + (['stopped'] * 2), + sorted([q.getSimulationState() for \ + q in subscription_delivery_line_list])) + + subscription_invoice_line_list = catalog(portal_type='Invoice Line', + aggregate_relative_url=hosting_subscription_url, + resource_relative_url=sequence['subscription_resource']) + self.assertEqual(2, len(subscription_invoice_line_list)) + self.assertEqual(['confirmed', 'planned'], + sorted([q.getSimulationState() for q in subscription_invoice_line_list])) + + # there are three invoice lines, where two share same invoice + # and other is on new one + self.assertEqual( + setup_invoice_line_list[0].getParentValue().getRelativeUrl(), + [q.getParentValue().getRelativeUrl() for q in \ + subscription_invoice_line_list \ + if q.getSimulationState() == 'confirmed'][0] + ) + self.assertNotEqual( + setup_invoice_line_list[0].getParentValue().getRelativeUrl(), + [q.getParentValue().getRelativeUrl() for q in \ + subscription_invoice_line_list \ + if q.getSimulationState() == 'planned'][0] + ) + + confirmed_invoice = setup_invoice_line_list[0].getParentValue() + planned_invoice = [q.getParentValue() for q in \ + subscription_invoice_line_list \ + if q.getSimulationState() == 'planned'][0] + + # invoices shall be solved + self.assertEqual('solved', planned_invoice.getCausalityState()) + self.assertEqual('solved', confirmed_invoice.getCausalityState()) + + # there shall be no payment transaction related + self.assertEqual([], planned_invoice.getCausalityRelatedList( + portal_type='Payment Transaction')) + self.assertEqual([], confirmed_invoice.getCausalityRelatedList( + portal_type='Payment Transaction')) + + # confirmed invoice shall have causality of two packing lists + self.assertEqual( + sorted([setup_delivery_line_list[0].getParentValue().getUid()] + + [q.getParentValue().getUid() for q in subscription_delivery_line_list \ + if q.getSimulationState() == 'stopped' and \ + q.getParentValue().getUid() != sequence['subscription_delivery_uid']]), + sorted(confirmed_invoice.getCausalityUidList())) + + # planned invoice shall have causality of one packing list + self.assertEqual( + [q.getParentValue().getUid() for q in subscription_delivery_line_list \ + if q.getSimulationState() == 'stopped' and \ + q.getParentValue().getUid() == sequence['subscription_delivery_uid']], + planned_invoice.getCausalityUidList()) + + def stepStartInvoice(self, sequence, **kw): + self.portal.portal_catalog.getResultValue( + uid=sequence['invoice_uid']).start() + + def stepStopInvoice(self, sequence, **kw): + self.portal.portal_catalog.getResultValue( + uid=sequence['invoice_uid']).stop() + + def stepCheckHostingSubscriptionStoppedInvoiceDocumentCoverage(self, + sequence, **kw): + catalog = self.portal.portal_catalog + hosting_subscription = catalog.getResultValue( + uid=sequence['hosting_subscription_uid']) + hosting_subscription_url = hosting_subscription.getRelativeUrl() + + # hosting is confirmed, so no invoice + hosting_delivery_line_list = catalog(portal_type='Sale Packing List Line', + aggregate_relative_url=hosting_subscription_url, + resource_relative_url=sequence['hosting_resource']) + + self.assertEqual(1, len(hosting_delivery_line_list)) + self.assertEqual('confirmed', hosting_delivery_line_list[0]\ + .getSimulationState()) + + hosting_invoice_line_list = catalog(portal_type='Invoice Line', + aggregate_relative_url=hosting_subscription_url, + resource_relative_url=sequence['hosting_resource']) + self.assertEqual(0, len(hosting_invoice_line_list)) + + # setup is stopped, and has there is invoice + setup_delivery_line_list = catalog(portal_type='Sale Packing List Line', + aggregate_relative_url=hosting_subscription_url, + resource_relative_url=sequence['setup_resource']) + + self.assertEqual(1, len(setup_delivery_line_list)) + self.assertEqual('stopped', setup_delivery_line_list[0]\ + .getSimulationState()) + + setup_invoice_line_list = catalog(portal_type='Invoice Line', + aggregate_relative_url=hosting_subscription_url, + resource_relative_url=sequence['setup_resource']) + self.assertEqual(1, len(setup_invoice_line_list)) + self.assertEqual('stopped', setup_invoice_line_list[0]\ + .getSimulationState()) + + # there are 10 confirmed and 2 stopped subscription, so 2 invoice line + subscription_delivery_line_list = catalog( + portal_type='Sale Packing List Line', + aggregate_relative_url=hosting_subscription_url, + resource_relative_url=sequence['subscription_resource']) + + self.assertEqual(12, len(subscription_delivery_line_list)) + self.assertEqual((['confirmed'] * 10) + (['stopped'] * 2), + sorted([q.getSimulationState() for \ + q in subscription_delivery_line_list])) + + subscription_invoice_line_list = catalog(portal_type='Invoice Line', + aggregate_relative_url=hosting_subscription_url, + resource_relative_url=sequence['subscription_resource']) + self.assertEqual(2, len(subscription_invoice_line_list)) + self.assertEqual(['planned', 'stopped'], + sorted([q.getSimulationState() for q in subscription_invoice_line_list])) + + # there are three invoice lines, where two share same invoice + # and other is on new one + self.assertEqual( + setup_invoice_line_list[0].getParentValue().getRelativeUrl(), + [q.getParentValue().getRelativeUrl() for q in \ + subscription_invoice_line_list \ + if q.getSimulationState() == 'stopped'][0] + ) + self.assertNotEqual( + setup_invoice_line_list[0].getParentValue().getRelativeUrl(), + [q.getParentValue().getRelativeUrl() for q in \ + subscription_invoice_line_list \ + if q.getSimulationState() == 'planned'][0] + ) + + stopped_invoice = setup_invoice_line_list[0].getParentValue() + planned_invoice = [q.getParentValue() for q in \ + subscription_invoice_line_list \ + if q.getSimulationState() == 'planned'][0] + + # invoices shall be solved + self.assertEqual('solved', planned_invoice.getCausalityState()) + self.assertEqual('solved', stopped_invoice.getCausalityState()) + + # there shall be no payment transaction related to planned invoice + self.assertEqual([], planned_invoice.getCausalityRelatedList( + portal_type='Payment Transaction')) + + # there shall be one payment transaction related to stopped invoice + payment_transaction_list = stopped_invoice.getCausalityRelatedValueList( + portal_type='Payment Transaction') + self.assertEqual(1, len(payment_transaction_list)) + payment_transaction = payment_transaction_list[0] + + # this payment transaction shall be planned and solved + self.assertEqual('planned', payment_transaction.getSimulationState()) + self.assertEqual('solved', payment_transaction.getCausalityState()) + + # only this invoice shall be covered by this payment transaction + self.assertEqual(stopped_invoice.getRelativeUrl(), + payment_transaction.getCausality()) + + # this payment shall fully pay the invoice + self.assertEqual(stopped_invoice.getTotalPrice(), + payment_transaction.PaymentTransaction_getTotalPayablePrice()) + + # Stopped invoice shall have causality of two packing lists + self.assertEqual( + sorted([setup_delivery_line_list[0].getParentValue().getUid()] + + [q.getParentValue().getUid() for q in subscription_delivery_line_list \ + if q.getSimulationState() == 'stopped' and \ + q.getParentValue().getUid() != sequence['subscription_delivery_uid']]), + sorted(stopped_invoice.getCausalityUidList())) + + # planned invoice shall have causality of one packing list + self.assertEqual( + [q.getParentValue().getUid() for q in subscription_delivery_line_list \ + if q.getSimulationState() == 'stopped' and \ + q.getParentValue().getUid() == sequence['subscription_delivery_uid']], + planned_invoice.getCausalityUidList()) + + def stepCheckHostingSubscriptionTwoStoppedInvoiceDocumentCoverage(self, + sequence, **kw): + catalog = self.portal.portal_catalog + hosting_subscription = catalog.getResultValue( + uid=sequence['hosting_subscription_uid']) + hosting_subscription_url = hosting_subscription.getRelativeUrl() + + # hosting is confirmed, so no invoice + hosting_delivery_line_list = catalog(portal_type='Sale Packing List Line', + aggregate_relative_url=hosting_subscription_url, + resource_relative_url=sequence['hosting_resource']) + + self.assertEqual(1, len(hosting_delivery_line_list)) + self.assertEqual('confirmed', hosting_delivery_line_list[0]\ + .getSimulationState()) + + hosting_invoice_line_list = catalog(portal_type='Invoice Line', + aggregate_relative_url=hosting_subscription_url, + resource_relative_url=sequence['hosting_resource']) + self.assertEqual(0, len(hosting_invoice_line_list)) + + # setup is stopped, and has there is invoice + setup_delivery_line_list = catalog(portal_type='Sale Packing List Line', + aggregate_relative_url=hosting_subscription_url, + resource_relative_url=sequence['setup_resource']) + + self.assertEqual(1, len(setup_delivery_line_list)) + self.assertEqual('stopped', setup_delivery_line_list[0]\ + .getSimulationState()) + + setup_invoice_line_list = catalog(portal_type='Invoice Line', + aggregate_relative_url=hosting_subscription_url, + resource_relative_url=sequence['setup_resource']) + self.assertEqual(1, len(setup_invoice_line_list)) + self.assertEqual('stopped', setup_invoice_line_list[0]\ + .getSimulationState()) + + # there are 10 confirmed and 2 stopped subscription, so 2 invoice line + subscription_delivery_line_list = catalog( + portal_type='Sale Packing List Line', + aggregate_relative_url=hosting_subscription_url, + resource_relative_url=sequence['subscription_resource']) + + self.assertEqual(12, len(subscription_delivery_line_list)) + self.assertEqual((['confirmed'] * 10) + (['stopped'] * 2), + sorted([q.getSimulationState() for \ + q in subscription_delivery_line_list])) + + subscription_invoice_line_list = catalog(portal_type='Invoice Line', + aggregate_relative_url=hosting_subscription_url, + resource_relative_url=sequence['subscription_resource']) + self.assertEqual(2, len(subscription_invoice_line_list)) + self.assertEqual(['stopped', 'stopped'], + sorted([q.getSimulationState() for q in subscription_invoice_line_list])) + + # there are three invoice lines, where two share same invoice + # and other is on other one + first_invoice = setup_invoice_line_list[0].getParentValue() + second_invoice = [q.getParentValue() for q in subscription_invoice_line_list \ + if q.getParentValue().getUid() != first_invoice.getUid()][0] + + # invoices shall be solved + self.assertEqual('solved', first_invoice.getCausalityState()) + self.assertEqual('solved', second_invoice.getCausalityState()) + + # both invoice shall have shared payment transaction + payment_transaction_list = first_invoice.getCausalityRelatedValueList( + portal_type='Payment Transaction') + self.assertEqual(1, len(payment_transaction_list)) + payment_transaction = payment_transaction_list[0] + self.assertEqual([payment_transaction.getRelativeUrl()], + second_invoice.getCausalityRelatedList( + portal_type='Payment Transaction')) + + # this payment transaction shall be planned and solved + self.assertEqual('planned', payment_transaction.getSimulationState()) + self.assertEqual('solved', payment_transaction.getCausalityState()) + + # this payment shall fully pay both invoices + self.assertEqual( + first_invoice.getTotalPrice() + second_invoice.getTotalPrice(), + payment_transaction.PaymentTransaction_getTotalPayablePrice()) + + sequence.edit(payment_transaction_uid=payment_transaction.getUid()) + + def stepConfirmPayment(self, sequence, **kw): + self.portal.portal_catalog.getResultValue( + uid=sequence['payment_transaction_uid']).confirm() + + def stepCheckPayment(self, sequence, **kw): + payment_transaction = self.portal.portal_catalog.getResultValue( + uid=sequence['payment_transaction_uid']) + self.assertEqual('confirmed', payment_transaction.getSimulationState()) + self.assertEqual('solved', payment_transaction.getCausalityState()) + + def stepInvoiceSetStartDatePreviousMonth(self, sequence, **kw): + invoice = self.portal.portal_catalog.getResultValue( + uid=sequence['invoice_uid']) + invoice.setStartDate(getClosestDate(target_date=DateTime())-1) + + def stepTriggerStopInvoiceAlarm(self, sequence, **kw): + self.portal.portal_alarms.stop_planned_sale_invoice_transaction.activeSense() def test_OpenOrder_sale_packing_list(self): """ @@ -263,7 +611,7 @@ class TestVifibInstanceHostingRelatedDocument(TestVifibSlapWebServiceMixin): # Nothing shall change CheckHostingSubscriptionInitialDocumentCoverage - # Stop first Subscriptoin delivery and after triggering build check + # Stop first Subscription delivery and after triggering build check # that invoice got updated SelectNextSubscriptionDelivery @@ -276,6 +624,54 @@ class TestVifibInstanceHostingRelatedDocument(TestVifibSlapWebServiceMixin): CheckHostingSubscriptionStoppedDocumentCoverage + # proff that alarm will ignore this month invoices + TriggerStopInvoiceAlarm + Tic + CheckHostingSubscriptionStoppedDocumentCoverage + + # Confirm current invoice and stop next delivery. After triggering build + # new planned invoice shall be available. + + SelectPlannedInvoice + ConfirmInvoice + Tic + + SelectNextSubscriptionDelivery + StartSubscriptionDelivery + StopSubscriptionDelivery + Tic + + TriggerBuild + Tic + + CheckHostingSubscriptionConfirmedInvoiceDocumentCoverage + + # Lets check the payment + + StartInvoice + StopInvoice + Tic + + TriggerBuild + Tic + + CheckHostingSubscriptionStoppedInvoiceDocumentCoverage + + # Proof that alarm is capable to stop previous month invoice + SelectPlannedInvoice + InvoiceSetStartDatePreviousMonth + Tic + TriggerStopInvoiceAlarm + Tic + + # Payment should cover both invoices + TriggerBuild + Tic + + CheckHostingSubscriptionTwoStoppedInvoiceDocumentCoverage + + ConfirmPayment + Tic CheckPayment """ sequence_list.addSequenceString(sequence_string)