From 2703e1d6ceb99ecd8e5543be3be1ab1a630b8dae Mon Sep 17 00:00:00 2001 From: Vincent Pelletier <vincent@nexedi.com> Date: Tue, 2 Jun 2009 07:55:52 +0000 Subject: [PATCH] Move Coramy product from "products" to "obsolete". git-svn-id: https://svn.erp5.org/repos/public/erp5/trunk@27325 20353a03-c40f-0410-a6d1-a30d3c3de9de --- product/Coramy/.cvsignore | 2 - product/Coramy/Constraint/.cvsignore | 2 - product/Coramy/Constraint/__init__.py | 0 product/Coramy/Document/.cvsignore | 2 - product/Coramy/Document/AssortedResource.py | 106 -- product/Coramy/Document/Assortiment.py | 168 --- product/Coramy/Document/Coloris.py | 107 -- product/Coramy/Document/Composant.py | 158 --- product/Coramy/Document/Container.py | 138 -- product/Coramy/Document/ContainerLine.py | 122 -- .../Coramy/Document/CorrespondanceMesures.py | 241 ---- .../Coramy/Document/CorrespondanceTailles.py | 223 --- product/Coramy/Document/DeliveryLine.py | 119 -- product/Coramy/Document/Discount.py | 100 -- product/Coramy/Document/ElementTarif.py | 144 -- product/Coramy/Document/Forme.py | 184 --- product/Coramy/Document/Gamme.py | 141 -- product/Coramy/Document/GrilleConsommation.py | 155 -- product/Coramy/Document/Inventory.py | 113 -- product/Coramy/Document/InventoryLine.py | 121 -- product/Coramy/Document/Invoice.py | 131 -- product/Coramy/Document/Item.py | 178 --- product/Coramy/Document/Machine.py | 83 -- product/Coramy/Document/Modele.py | 181 --- product/Coramy/Document/ModeleMachine.py | 91 -- product/Coramy/Document/Morceau.py | 140 -- product/Coramy/Document/Nomenclature.py | 124 -- product/Coramy/Document/Operation.py | 157 -- product/Coramy/Document/OptionMachine.py | 75 - product/Coramy/Document/Order.py | 119 -- product/Coramy/Document/OrderLine.py | 138 -- product/Coramy/Document/PackingList.py | 112 -- product/Coramy/Document/PaymentCondition.py | 99 -- product/Coramy/Document/ProductionOrder.py | 132 -- product/Coramy/Document/ProductionReport.py | 118 -- .../Coramy/Document/ProductionReportCell.py | 124 -- .../Coramy/Document/ProductionReportLine.py | 118 -- product/Coramy/Document/SampleOrderLine.py | 123 -- product/Coramy/Document/SamplesOrder.py | 129 -- product/Coramy/Document/SamplesPackingList.py | 125 -- product/Coramy/Document/SetMappedValue.py | 157 -- product/Coramy/Document/Supply.py | 114 -- product/Coramy/Document/SupplyLine.py | 130 -- product/Coramy/Document/Tissu.py | 163 --- product/Coramy/Document/TradeCondition.py | 140 -- product/Coramy/Document/Transformation.py | 175 --- .../Coramy/Document/TransformedResource.py | 137 -- product/Coramy/Document/VarianteComposant.py | 138 -- product/Coramy/Document/VarianteGamme.py | 130 -- product/Coramy/Document/VarianteModele.py | 141 -- .../Coramy/Document/VarianteMorphologique.py | 132 -- product/Coramy/Document/VarianteTissu.py | 136 -- product/Coramy/Document/VariatedReference.py | 247 ---- product/Coramy/Document/Vetement.py | 261 ---- product/Coramy/Document/__init__.py | 0 product/Coramy/Extensions/BuildInventory.py | 39 - .../Coramy/Extensions/CodeArticleClient.py | 85 -- product/Coramy/Extensions/CodeEan13Client.py | 85 -- product/Coramy/Extensions/CodeModeleClient.py | 85 -- product/Coramy/Extensions/ColorisClient.py | 110 -- .../Coramy/Extensions/ConstructAndSendMail.py | 135 -- product/Coramy/Extensions/DelAttr.py | 4 - product/Coramy/Extensions/ExportEdiAuchan.py | 76 - .../Coramy/Extensions/ImportEdiFileList.py | 140 -- product/Coramy/Extensions/ImportEdiFiles.py | 147 -- .../Coramy/Extensions/ImportExportSkins.py | 19 - product/Coramy/Extensions/ItemStat.py | 17 - product/Coramy/Extensions/MigrateContent.py | 120 -- product/Coramy/Extensions/PrinterOutput.py | 26 - .../Coramy/Extensions/PrixAchatFournisseur.py | 100 -- product/Coramy/Extensions/PrixConsommateur.py | 85 -- .../Extensions/PrixRevientIndustriel.py | 75 - product/Coramy/Extensions/QuickCosting.py | 13 - product/Coramy/Extensions/TailleClient.py | 87 -- .../Coramy/Extensions/TestBuildInventory.py | 32 - .../Coramy/Extensions/UpdateQuantityUnit.py | 66 - product/Coramy/Extensions/cartesianProduct.py | 1 - product/Coramy/Extensions/deliveryTester.py | 25 - .../Extensions/productionOrderBuilder.py | 45 - product/Coramy/Interface/.cvsignore | 2 - product/Coramy/Interface/__init__.py | 0 product/Coramy/MetoAPI.py | 78 - product/Coramy/Permissions.py | 0 product/Coramy/PropertySheet/.cvsignore | 2 - product/Coramy/PropertySheet/Assortiment.py | 60 - product/Coramy/PropertySheet/Coloris.py | 36 - product/Coramy/PropertySheet/Composant.py | 45 - .../PropertySheet/CoramyDeliveryLine.py | 38 - product/Coramy/PropertySheet/CoramyItem.py | 56 - product/Coramy/PropertySheet/CoramyOrder.py | 72 - .../PropertySheet/CoramyTransformation.py | 47 - .../CoramyTransformedResource.py | 42 - .../PropertySheet/CorrespondanceMesures.py | 49 - .../PropertySheet/CorrespondanceTailles.py | 49 - product/Coramy/PropertySheet/ElementTarif.py | 42 - product/Coramy/PropertySheet/Forme.py | 60 - product/Coramy/PropertySheet/Gamme.py | 39 - .../PropertySheet/GrilleConsommation.py | 38 - .../Coramy/PropertySheet/LigneNomenclature.py | 42 - product/Coramy/PropertySheet/Machine.py | 47 - product/Coramy/PropertySheet/Modele.py | 157 -- product/Coramy/PropertySheet/ModeleMachine.py | 37 - product/Coramy/PropertySheet/Morceau.py | 57 - product/Coramy/PropertySheet/Operation.py | 62 - .../PropertySheet/PresentAuCatalogue.py | 41 - .../Coramy/PropertySheet/SampleOrderLine.py | 67 - product/Coramy/PropertySheet/SamplesOrder.py | 64 - .../PropertySheet/SamplesPackingList.py | 51 - product/Coramy/PropertySheet/Tissu.py | 63 - .../Coramy/PropertySheet/VarianteComposant.py | 39 - product/Coramy/PropertySheet/VarianteGamme.py | 59 - .../Coramy/PropertySheet/VarianteModele.py | 43 - .../PropertySheet/VarianteMorphologique.py | 49 - product/Coramy/PropertySheet/VarianteTissu.py | 40 - .../Coramy/PropertySheet/VariatedReference.py | 46 - product/Coramy/PropertySheet/Vetement.py | 78 - product/Coramy/PropertySheet/__init__.py | 0 product/Coramy/VERSION.txt | 1 - product/Coramy/__init__.py | 56 - product/Coramy/everyday_script | 1 - product/Coramy/help/.cvsignore | 2 - product/Coramy/help/Composant.html | 13 - product/Coramy/help/Forme_Creer.html | 32 - product/Coramy/help/Gamme_Creer.html | 29 - product/Coramy/help/Gamme_ope.html | 43 - product/Coramy/help/Modele.html | 21 - product/Coramy/help/Modele_Creer.html | 31 - product/Coramy/help/Outils.html | 16 - product/Coramy/help/Page1.html | 13 - product/Coramy/help/Sommaire.html | 61 - product/Coramy/help/coramy.css | 74 - product/Coramy/help/images/.cvsignore | 2 - product/Coramy/help/images/ERP5.gif | Bin 25410 -> 0 bytes product/Coramy/help/images/ERP5.jpg | Bin 20598 -> 0 bytes product/Coramy/help/images/Modele_cf1.jpg | Bin 36697 -> 0 bytes product/Coramy/help/images/accueil.jpg | Bin 76787 -> 0 bytes product/Coramy/help/images/apache_pb.gif | Bin 2326 -> 0 bytes product/Coramy/help/images/macosxlogo.gif | Bin 2829 -> 0 bytes product/Coramy/help/images/palette.jpg | Bin 17743 -> 0 bytes product/Coramy/help/images/web_share.gif | Bin 16923 -> 0 bytes product/Coramy/help/index.html | 15 - product/Coramy/refresh.txt | 0 product/Coramy/skins/.cvsignore | 2 - .../Organisation_defaultSearchForm.form | 167 --- .../Organisation_getOneLineAddress.py | 24 - .../coramy_crm/Organisation_importFile.py | 171 --- .../coramy_crm/Organisation_importForm.form | 49 - .../skins/coramy_crm/bank_account_view.form | 153 -- .../skins/coramy_crm/chat_address_view.form | 80 -- .../Coramy/skins/coramy_crm/email_view.form | 153 -- .../coramy_crm/geographic_address_view.form | 124 -- .../coramy_crm/organisation_DefaultExport.pt | 1 - .../Coramy/skins/coramy_crm/organisation_cat | 47 - .../skins/coramy_crm/organisation_cat.form | 67 - .../skins/coramy_crm/organisation_edit.py | 31 - .../skins/coramy_crm/organisation_list.form | 68 - .../organisation_listCoordinates.form | 67 - .../skins/coramy_crm/organisation_view.form | 521 ------- .../coramy_crm/organisation_viewDetails.form | 140 -- .../skins/coramy_crm/person_emails.form | 115 -- .../coramy_crm/person_emails_report.dtml | 4 - .../Coramy/skins/coramy_crm/person_exchange | 116 -- .../skins/coramy_crm/person_exchange.form | 133 -- .../Coramy/skins/coramy_crm/person_list.form | 68 - .../skins/coramy_crm/person_list_phone.form | 68 - .../skins/coramy_crm/person_list_sort_on.form | 78 - .../skins/coramy_crm/person_list_ui.form | 84 -- .../skins/coramy_crm/person_report.form | 112 -- .../skins/coramy_crm/person_search.form | 112 -- .../skins/coramy_crm/person_search_phone.zsql | 19 - .../coramy_crm/person_search_phones.form | 84 -- .../Coramy/skins/coramy_crm/person_view.form | 589 -------- .../skins/coramy_crm/person_viewProfile.form | 309 ---- .../skins/coramy_crm/sales_enquire.form | 81 -- .../Coramy/skins/coramy_crm/sales_offer.form | 81 -- .../coramy_crm/sales_opportunity_list.form | 67 - .../coramy_crm/sales_opportunity_view.form | 255 ---- .../Coramy/skins/coramy_crm/sales_reset.form | 81 -- .../skins/coramy_crm/telephone_view.form | 240 ---- .../coramy_custom/Coramy_sendMailToUser.py | 34 - .../Coramy_userLabelPrinterDefinition.py | 30 - .../Coramy_userPrinterDefinition.py | 23 - .../Coramy/skins/coramy_custom/FlatList.py | 13 - .../Inventory_checkConsistency.py | 23 - .../coramy_custom/Inventory_copyDefault.py | 23 - .../coramy_custom/Inventory_updateDefault.py | 18 - .../Item_doWorkflowTransition.py | 39 - .../skins/coramy_custom/Item_resetLocation.py | 12 - .../PackingList_cleanupAssortiment.py | 24 - .../PackingList_searchAssortiment.zsql | 23 - .../PackingList_setTargetStopToTargetStart.py | 11 - .../PdfTemplate_changePdfStylesheet.py | 10 - .../PieceTissu_deleteFromMovement.py | 42 - .../coramy_custom/PieceTissu_exportList.py | 22 - .../PieceTissu_findNegativeQty.py | 26 - .../PieceTissu_findSuspectMovement.py | 69 - .../SalesOrder_updateAssortimentPrice.py | 246 ---- .../SalesOrder_zGetCarnetCommande.zsql | 36 - .../Coramy/skins/coramy_custom/base_edit2.py | 119 -- .../Coramy/skins/coramy_custom/breadcrumb.pt | 54 - .../changeSourceAdministrationList.py | 23 - .../changeSourceAdministrationSQL.zsql | 14 - .../check_production_delivery.py | 36 - product/Coramy/skins/coramy_custom/getInfo.py | 10 - .../coramy_custom/getListboxSearchMethod.py | 11 - .../getOneLineShortDescription.py | 20 - product/Coramy/skins/coramy_custom/goTest.py | 12 - .../launchChangeEipAndCollection.py | 22 - .../launchResetLocationOnLocatedPieceTissu.py | 22 - ...hResetTargetQtyOnItemAggregatedMovement.py | 24 - .../launchSetStopDateONProdDelivery.py | 20 - .../coramy_custom/launchTransferVetement.py | 22 - ...aunchUpdateAssortimentPriceOnSalesOrder.py | 22 - ...hUpdateQuantityOnItemAggregatedMovement.py | 24 - .../skins/coramy_custom/mail_received.py | 59 - .../skins/coramy_custom/manage_after_clone.py | 18 - .../skins/coramy_custom/metadata_edit.form | 302 ---- .../skins/coramy_custom/pay_sheet_view.form | 138 -- .../skins/coramy_custom/payroll_list.form | 64 - .../Coramy/skins/coramy_custom/search.form | 68 - .../skins/coramy_custom/search_category.zsql | 23 - .../skins/coramy_custom/search_relation.form | 67 - .../Coramy/skins/coramy_custom/seb_test.py | 26 - .../skins/coramy_custom/show_request.py | 10 - .../Coramy/skins/coramy_custom/test_form.form | 48 - .../Coramy/skins/coramy_custom/test_jps.py | 31 - .../Coramy/skins/coramy_custom/test_link.py | 19 - .../skins/coramy_custom/test_piece.zsql | 28 - .../Coramy/skins/coramy_custom/test_script.py | 12 - .../skins/coramy_custom/test_script2.py | 16 - .../skins/coramy_custom/testdocument_pdf.pt | 31 - product/Coramy/skins/coramy_custom/testjp.py | 418 ------ product/Coramy/skins/coramy_custom/testrc.py | 41 - product/Coramy/skins/coramy_custom/testseb.py | 11 - product/Coramy/skins/coramy_custom/testyo.py | 31 - .../Coramy/skins/coramy_custom/toto_test.py | 16 - .../skins/coramy_custom/transfer_vetement.py | 61 - .../coramy_custom/updateEipAndCollection.py | 59 - .../updateItemAggregatedMovement.py | 59 - .../updateQuantityOnItemAggregatedMovement.py | 26 - .../skins/coramy_custom/update_this_one.py | 26 - .../zGetConfirmedOrderWithoutDeliveries.zsql | 23 - .../zGetEipChangeObjectlist.zsql | 23 - .../coramy_custom/zGetHouvSalesOrderList.zsql | 17 - .../zGetInSubPieceTissuList.zsql | 20 - .../zGetItemAggregatedMovement.zsql | 23 - .../zGetLocatedPieceTissuList.zsql | 24 - .../coramy_custom/zGetPieceTissuList.zsql | 18 - .../zGetProductionDeliveryList.zsql | 16 - .../skins/coramy_custom/zGetStockCoramy.zsql | 23 - .../zGetTissuMovementWithoutItem.zsql | 27 - .../skins/coramy_custom/zGetVetementList.zsql | 14 - .../skins/coramy_erp5/ActiveProcess_view.form | 112 -- .../coramy_erp5/ActivityTool_postError.py | 10 - .../AppliedRule_cleanOrphanedOrder.py | 49 - .../skins/coramy_erp5/AssignLocalRole.py | 30 - .../skins/coramy_erp5/Base_searchHandler.py | 54 - .../coramy_erp5/DateTime_getFormattedDate.py | 15 - .../DeliveryLine_zGetRelatedQuantity.zsql | 22 - .../skins/coramy_erp5/Delivery_reindexAll.py | 31 - .../Delivery_rescueOrphanedMovement.py | 85 -- .../Delivery_zGetOrphanedMovementList.zsql | 57 - ...ry_zGetOrphanedProductionMovementList.zsql | 54 - .../skins/coramy_erp5/ERP5Site_reindexAll.py | 32 - .../ERP5Site_reindexCurrentMovement.py | 19 - .../skins/coramy_erp5/Folder_createModule.py | 23 - .../coramy_erp5/Folder_workflowAction.form | 103 -- .../LivraisonVente_fixEqualQuantity.py | 24 - .../LivraisonVente_fixNoneQuantity.py | 28 - .../LivraisonVente_searchEqualQuantity.zsql | 18 - .../LivraisonVente_searchNoneQuantity.zsql | 18 - .../Movement_resetTargetQuantity.py | 12 - .../skins/coramy_erp5/Movement_search.zsql | 34 - .../OrderLine_zGetRelatedQuantity.zsql | 22 - .../coramy_erp5/Order_cleanDuplicates.py | 73 - .../Coramy/skins/coramy_erp5/PT_pageBreak.py | 14 - .../skins/coramy_erp5/PT_reset_total_list.py | 17 - .../skins/coramy_erp5/PT_update_total_list.py | 17 - .../coramy_erp5/PortalSimulation_cleanup.py | 36 - .../PortalSimulation_rescueOrphaned.py | 276 ---- .../PortalSimulation_updateInventory.py | 15 - .../PortalSimulation_zGetResourceList.zsql | 16 - .../coramy_erp5/SQLDict_assignMessage.zsql | 25 - .../SQLDict_createMessageTable.zsql | 27 - .../skins/coramy_erp5/SQLDict_delMessage.zsql | 15 - .../skins/coramy_erp5/SQLDict_hasMessage.zsql | 19 - .../coramy_erp5/SQLDict_lockMessage.zsql | 11 - .../coramy_erp5/SQLDict_processMessage.zsql | 15 - .../coramy_erp5/SQLDict_readMessage.zsql | 20 - .../coramy_erp5/SQLDict_readMessageList.zsql | 25 - .../coramy_erp5/SQLDict_readUidList.zsql | 19 - .../coramy_erp5/SQLDict_setPriority.zsql | 19 - .../coramy_erp5/SQLDict_unlockMessage.zsql | 11 - .../coramy_erp5/SQLDict_writeMessage.zsql | 22 - .../coramy_erp5/SQLQueue_assignMessage.zsql | 21 - .../SQLQueue_createMessageTable.zsql | 25 - .../coramy_erp5/SQLQueue_delMessage.zsql | 14 - .../coramy_erp5/SQLQueue_hasMessage.zsql | 19 - .../coramy_erp5/SQLQueue_processMessage.zsql | 14 - .../coramy_erp5/SQLQueue_readMessage.zsql | 17 - .../coramy_erp5/SQLQueue_readMessageList.zsql | 21 - .../coramy_erp5/SQLQueue_setPriority.zsql | 18 - .../coramy_erp5/SQLQueue_writeMessage.zsql | 21 - ...imulationTool_zGetSortedInventoryList.zsql | 19 - .../coramy_erp5/Variated_getColorisList.py | 31 - .../coramy_erp5/Variated_getTailleClient.py | 20 - .../Variated_getTailleClientDict.py | 34 - .../coramy_erp5/Variated_getTailleList.py | 35 - .../coramy_erp5/Variated_getTaillesList.py | 27 - product/Coramy/skins/coramy_erp5/asPDF.py | 34 - .../assign_gestionaire_designe_roles.py | 31 - .../base_folder_workflow_action.form | 118 -- ...ase_folder_workflow_action_start_date.form | 128 -- ...se_folder_workflow_action_start_date2.form | 128 -- .../coramy_erp5/base_workflow_action.form | 89 -- .../base_workflow_action_comment.form | 89 -- .../coramy_erp5/content_viewMetadata.form | 94 -- ...ase_folder_workflow_action_start_date.form | 128 -- .../coramy_erp5/create_relation_dialog.form | 55 - .../skins/coramy_erp5/document_view.form | 54 - .../Coramy/skins/coramy_erp5/domain_view.form | 112 -- .../Coramy/skins/coramy_erp5/file_view.form | 144 -- .../skins/coramy_erp5/folder_contents.form | 67 - .../skins/coramy_erp5/folder_delete_view.form | 67 - .../skins/coramy_erp5/folder_sort_on.form | 78 - .../skins/coramy_erp5/folder_view2.form | 67 - .../folder_workflow_status_modify.py | 78 - .../folder_workflow_status_modify_test.py | 80 -- .../skins/coramy_erp5/form_DefaultRender.pt | 19 - product/Coramy/skins/coramy_erp5/getIntId.py | 15 - .../skins/coramy_erp5/identify_category.py | 19 - .../skins/coramy_erp5/image_large_view.form | 60 - .../Coramy/skins/coramy_erp5/image_view.form | 177 --- .../skins/coramy_erp5/new_ean13_code.py | 41 - .../skins/coramy_erp5/object_action_list.py | 30 - .../skins/coramy_erp5/search_related.zsql | 17 - .../skins/coramy_erp5/sort_object_list.py | 27 - .../Delivery_zSearchResource.zsql | 65 - .../Organisation_zDefaultSearch.zsql | 36 - .../coramy_list_method/PieceTisse_zTest3.zsql | 27 - .../PieceTissu_searchConsumedList.zsql | 29 - .../PieceTissu_searchRemainingList.zsql | 18 - .../coramy_list_method/PieceTissu_test5.zsql | 33 - .../PieceTissu_zGetAvailableItemList.zsql | 91 -- .../PieceTissu_zGetAvailableItemList_OLD.zsql | 78 - .../coramy_list_method/PieceTissu_zTest4.zsql | 28 - .../PieceTissu_zTestAvailableItemList.zsql | 52 - .../PieceTissu_zTestAvailableItemList2.zsql | 49 - ...rchaseOrder_zGetOrderableResourceList.zsql | 56 - .../Resource_zGetAggregateList.zsql | 29 - .../SalesOrder_zSearchByClientGroup.zsql | 51 - ...SalesPackingList_zSearchByClientGroup.zsql | 55 - .../PackingOrder_inventoryView.form | 128 -- .../PackingOrder_list.form | 57 - .../PackingOrder_view.form | 741 ---------- .../ProductionOrderLine_getResourceAccord.py | 21 - ...ductionOrderLine_getResourceInfosClient.py | 21 - .../ProductionOrderLine_getResourceState.py | 18 - ...r_aggregatedImmaterialConsumptionView.form | 140 -- ...der_aggregatedMaterialConsumptionView.form | 140 -- .../ProductionOrder_buildDeliveryList.py | 42 - .../ProductionOrder_buildOrderList.py | 51 - .../ProductionOrder_expand.py | 35 - ...roductionOrder_getDeliveryCellPrintList.py | 103 -- .../ProductionOrder_getTotalDuration.py | 15 - .../ProductionOrder_inventoryView.form | 140 -- .../ProductionOrder_zGetTotalDuration.zsql | 38 - ...ckingList_getProductionOrderDescription.py | 15 - .../production_order_line_price_view.form | 321 ----- .../production_order_line_quantity_view.form | 321 ----- .../production_order_line_view.form | 528 ------- .../production_order_list.form | 63 - .../production_order_print.pt | 161 --- .../production_order_view.form | 853 ----------- ...oduction_packing_list_aggregated_view.form | 647 --------- .../production_packing_list_list.form | 63 - .../production_packing_list_print.pt | 137 -- .../production_packing_list_view.form | 680 --------- .../production_report_aggregated_view.form | 613 -------- .../production_report_list.form | 63 - .../production_report_view.form | 705 --------- .../ActivityTool_activateAssetPriceUpdate.py | 60 - .../ERP5Site_futureCoramyInventoryView.form | 140 -- .../skins/coramy_mrp/ERP5Site_getAssetList.py | 62 - .../ERP5Site_getCoramyFutureInventoryList.py | 10 - .../ERP5Site_getGroupFutureInventoryList.py | 10 - .../coramy_mrp/ERP5Site_transferOfProperty.py | 112 -- ...RP5Site_zGetCoramyFutureInventoryList.zsql | 32 - .../InventoryLine_matrixItemList.py | 41 - .../coramy_mrp/InventoryLine_zGetTotal.zsql | 16 - .../coramy_mrp/InventoryMP_fastAddLine.py | 63 - .../coramy_mrp/InventoryMP_fastInputForm.form | 84 -- .../coramy_mrp/InventoryPF_fastAddLine.py | 56 - .../coramy_mrp/InventoryPF_fastInputForm.form | 55 - ...Inventory_inventoriateLocatedPieceTissu.py | 39 - .../Inventory_launchTissuInventoryBuilder.py | 22 - .../skins/coramy_mrp/Inventory_lookupPrice.py | 10 - .../Inventory_tissuInventoryBuilder.py | 63 - .../skins/coramy_mrp/MovementMP_fastInput.py | 63 - .../coramy_mrp/MovementMP_fastInputForm.form | 84 -- .../skins/coramy_mrp/MovementPF_fastInput.py | 56 - .../coramy_mrp/MovementPF_fastInputForm.form | 55 - .../skins/coramy_mrp/Movement_list.form | 62 - .../skins/coramy_mrp/PieceTissu_fastInput.py | 117 -- .../PieceTissu_fastInputFieldRender.py | 19 - .../coramy_mrp/PieceTissu_fastInputForm.form | 56 - .../coramy_mrp/PieceTissu_fastInputList.py | 15 - .../PieceTissu_fastInputLocation.py | 42 - .../PieceTissu_fastInputLocationForm.form | 55 - .../coramy_mrp/PieceTissu_fastInputRetour.py | 111 -- .../PieceTissu_fastInputRetourForm.form | 55 - .../skins/coramy_mrp/PieceTissu_importFile.py | 86 -- .../coramy_mrp/PieceTissu_importForm.form | 49 - .../PieceTissu_movementListView.form | 345 ----- .../coramy_mrp/PieceTissu_printMetoLabel.py | 52 - ...argetQuantityOnUnaggregatedMovementList.py | 15 - .../PieceTissu_searchByResource.form | 170 --- ...PieceTissu_updateResourceAfterInventory.py | 33 - ...issu_zGetAggregateRelatedMovementList.zsql | 24 - .../PieceTissu_zGetInventorized.zsql | 21 - ...ssu_zGetUnaggregatedTissuMovementList.zsql | 23 - ...ortalSimulation_activateRequirementList.py | 48 - .../PortalSimulation_buildRequirementOrder.py | 95 -- .../PortalSimulation_fixDeliveryRule.py | 37 - .../PortalSimulation_updateAssetPrice.py | 25 - ...ctionOrder_getAggregatedConsumptionList.py | 14 - ..._getAggregatedImmaterialConsumptionList.py | 15 - ...er_getAggregatedMaterialConsumptionList.py | 17 - ...der_getAggregatedMaterialProductionList.py | 12 - ...Order_getAggregatedMaterialSourcingList.py | 12 - .../ProductionOrder_getConsumptionList.py | 14 - ...ductionOrder_getMaterialConsumptionList.py | 12 - ...Order_getMaterialProductionMovementList.py | 12 - ...onOrder_getMaterialSourcingMovementList.py | 12 - ...etAggregatedImmaterialConsumptionList.zsql | 50 - ...zGetAggregatedMaterialConsumptionList.zsql | 54 - ..._zGetAggregatedMaterialProductionList.zsql | 46 - ...er_zGetAggregatedMaterialSourcingList.zsql | 49 - .../ProductionOrder_zGetConsumptionList.zsql | 52 - ...tionOrder_zGetConsumptionMovementList.zsql | 24 - ...onOrder_zGetImmaterialConsumptionList.zsql | 42 - ...tionOrder_zGetMaterialConsumptionList.zsql | 52 - ...er_zGetMaterialProductionMovementList.zsql | 24 - ...rder_zGetMaterialSourcingMovementList.zsql | 28 - .../Resource_getChartCurrentInventoryList.py | 13 - .../Resource_getChartFutureHistoryList.py | 57 - .../Resource_getChartInventoryList.py | 12 - .../Resource_getCurrentInventoryList.py | 11 - .../Resource_getFutureGlobalInventory.py | 11 - .../Resource_getFutureHistoryList.py | 45 - .../Resource_getFutureInventoryList.py | 11 - .../Resource_getInventoryHistoryChart.py | 65 - .../Resource_getInventoryHistoryList.py | 51 - .../coramy_mrp/Resource_getInventoryList.py | 10 - .../Resource_zGetChartInventoryList.zsql | 35 - .../coramy_mrp/Resource_zGetInventory.zsql | 75 - .../Resource_zGetInventoryList.zsql | 90 -- .../Resource_zGetInventoryMovementList.zsql | 32 - .../Resource_zGetMovementHistoryList.zsql | 90 -- .../Resource_zGetStockMPInventoryList.zsql | 94 -- .../Resource_zGetStockPFInventoryList.zsql | 102 -- .../SimulationTool_activateRequirementList.py | 59 - .../SimulationTool_buildRequirementOrder.py | 122 -- ...lationTool_getCoramyFutureInventoryList.py | 10 - ...ulationTool_getGroupFutureInventoryList.py | 10 - .../SimulationTool_updateInventory.py | 15 - ...ionTool_zGetCoramyFutureInventoryList.zsql | 41 - .../SimulationTool_zGetResourceList.zsql | 21 - .../coramy_mrp/ZeroStock_buildOrderList.py | 61 - .../skins/coramy_mrp/inventory_MP_list.form | 62 - .../skins/coramy_mrp/inventory_MP_view.form | 344 ----- .../skins/coramy_mrp/inventory_PF_list.form | 62 - .../skins/coramy_mrp/inventory_PF_view.form | 344 ----- .../coramy_mrp/inventory_aggregated_view.form | 230 --- .../skins/coramy_mrp/inventory_cell_view.form | 271 ---- .../coramy_mrp/inventory_line_price_view.form | 321 ----- .../inventory_line_quantity_view.form | 321 ----- .../skins/coramy_mrp/inventory_line_view.form | 356 ----- .../skins/coramy_mrp/inventory_view.form | 315 ---- .../skins/coramy_mrp/inventory_view2.form | 315 ---- .../coramy_mrp/inventory_view_details.form | 284 ---- .../skins/coramy_mrp/item_tissu_list.form | 63 - .../skins/coramy_mrp/item_tissu_view.form | 453 ------ .../skins/coramy_mrp/movement_MP_list.form | 63 - .../skins/coramy_mrp/movement_MP_view.form | 402 ------ .../skins/coramy_mrp/movement_PF_list.form | 62 - .../skins/coramy_mrp/movement_PF_view.form | 402 ------ .../coramy_mrp/movement_aggregated_view.form | 230 --- ...vement_line_consumption_quantity_view.form | 347 ----- .../coramy_mrp/movement_line_price_view.form | 347 ----- ...ovement_line_production_quantity_view.form | 347 ----- .../skins/coramy_mrp/movement_line_view.form | 381 ----- .../skins/coramy_pdm/CreateVarianteModele.py | 46 - .../coramy_pdm/Forme_categorySearchForm.form | 292 ---- .../coramy_pdm/Forme_categorySearchSql.zsql | 135 -- .../skins/coramy_pdm/Forme_thumbnailList.pt | 30 - .../Resource_futureHistoryView.form | 100 -- .../Resource_futureInventoryView.form | 140 -- .../Resource_getCartesianVariationList.py | 27 - .../Resource_getSupplierItemList.py | 23 - .../coramy_pdm/Resource_inventoryView.form | 166 --- .../Resource_movementHistoryView.form | 114 -- .../Resource_sqlResourceSupplierSearch.zsql | 27 - .../Resource_sqlSupplierSearch.zsql | 25 - .../coramy_pdm/Tissu_categorySearchForm.form | 338 ----- .../coramy_pdm/Tissu_categorySearchSql.zsql | 176 --- ...ransformation_getAllTransformedResource.py | 22 - ...nsformedComponent_getCorrespondanceList.py | 59 - .../Vetement_categorySearchForm.form | 272 ---- .../Vetement_categorySearchSql.zsql | 114 -- .../coramy_pdm/Vetement_thumbnailList.pt | 30 - .../Vetement_zGetRelatedModeleList.zsql | 17 - .../assorted_resource_quantity_view.form | 329 ----- .../coramy_pdm/assorted_resource_view.form | 233 --- .../skins/coramy_pdm/assortiment_list.form | 62 - .../coramy_pdm/assortiment_list_export.py | 26 - .../coramy_pdm/assortiment_price_view.form | 475 ------- .../assortiment_variated_reference_view.form | 211 --- .../skins/coramy_pdm/assortiment_view.form | 377 ----- .../coramy_pdm/bareme_mesures_dessins_list.py | 55 - .../coramy_pdm/bareme_mesures_mesures_list.py | 72 - .../bareme_mesures_morphologie_print.pt | 120 -- ...bareme_mesures_morphologie_tailles_list.py | 29 - .../skins/coramy_pdm/bareme_mesures_print.pt | 120 -- .../coramy_pdm/bareme_mesures_tailles_list.py | 28 - .../coramy_pdm/composant_history_view.pt | 79 -- .../skins/coramy_pdm/composant_list.form | 62 - .../coramy_pdm/composant_list_sort_on.form | 50 - .../skins/coramy_pdm/composant_list_ui.form | 28 - .../skins/coramy_pdm/composant_search.form | 112 -- .../skins/coramy_pdm/composant_view.form | 637 --------- .../composant_workflow_valider_composant.form | 81 -- .../skins/coramy_pdm/correspondance_list.form | 62 - .../correspondance_mesures_client_view.form | 293 ---- .../correspondance_mesures_view.form | 234 --- .../correspondance_tailles_client_view.form | 293 ---- .../correspondance_tailles_view.form | 182 --- .../coramy_pdm/dessin_technique_view.form | 140 -- .../coramy_pdm/element_tarif_list_create.py | 29 - .../skins/coramy_pdm/element_tarif_view.form | 463 ------ .../skins/coramy_pdm/etiquettes_collection.py | 37 - .../etiquettes_collection_planches.py | 43 - .../etiquettes_collection_unitaires.py | 43 - .../Coramy/skins/coramy_pdm/forme_list.form | 62 - .../skins/coramy_pdm/forme_list_sort_on.form | 50 - .../skins/coramy_pdm/forme_list_ui.form | 28 - .../coramy_pdm/forme_mise_au_point_view.form | 102 -- .../Coramy/skins/coramy_pdm/forme_search.form | 84 -- .../Coramy/skins/coramy_pdm/forme_vet.form | 80 -- .../Coramy/skins/coramy_pdm/forme_view.form | 378 ----- .../forme_workflow_lancer_prototype.form | 81 -- ..._workflow_rectifier_dossier_technique.form | 81 -- .../forme_workflow_rectifier_forme.form | 81 -- .../forme_workflow_soumettre_modelisme.form | 81 -- ...me_workflow_valider_dossier_technique.form | 81 -- .../forme_workflow_valider_forme.form | 81 -- .../Coramy/skins/coramy_pdm/gamme_list.form | 62 - .../skins/coramy_pdm/gamme_list_sort_on.form | 50 - .../skins/coramy_pdm/gamme_list_ui.form | 28 - .../coramy_pdm/gamme_sql_tissu_search.zsql | 18 - .../skins/coramy_pdm/gamme_tissu_search.form | 84 -- .../coramy_pdm/gamme_tissu_search_list.form | 62 - .../Coramy/skins/coramy_pdm/gamme_view.form | 199 --- .../getModeleAggregatedModeOperatoire.py | 23 - .../getModeleAggregatedNomenclature.py | 23 - .../skins/coramy_pdm/getModelisteDesigne.py | 11 - .../grille_consommation_quantity_view.form | 131 -- .../coramy_pdm/grille_consommation_update.py | 50 - .../grille_consommation_update_form.form | 51 - .../coramy_pdm/grille_consommation_view.form | 117 -- .../skins/coramy_pdm/modele2transformation.py | 32 - .../modele2transformation_access.py | 10 - .../modele2transformation_details.py | 10 - .../coramy_pdm/modele2transformation_print.py | 10 - .../Coramy/skins/coramy_pdm/modele_catalog.pt | 99 -- .../coramy_pdm/modele_default_search.form | 266 ---- .../modele_default_search_list.form | 62 - .../skins/coramy_pdm/modele_dessins_list.py | 32 - .../skins/coramy_pdm/modele_history_view.pt | 78 - .../coramy_pdm/modele_id_search_list.form | 62 - .../Coramy/skins/coramy_pdm/modele_list.form | 62 - .../Coramy/skins/coramy_pdm/modele_list2.form | 63 - .../skins/coramy_pdm/modele_list_export.py | 27 - .../modele_list_set_gencod_coramy.py | 16 - .../modele_list_set_gencod_houvenaegel.py | 16 - .../skins/coramy_pdm/modele_list_sort_on.form | 50 - .../skins/coramy_pdm/modele_list_ui.form | 28 - .../coramy_pdm/modele_list_update_gencod.py | 18 - .../coramy_pdm/modele_mise_au_point_view.form | 166 --- .../coramy_pdm/modele_pri_matrix_item_list.py | 20 - .../skins/coramy_pdm/modele_pri_view.form | 261 ---- .../skins/coramy_pdm/modele_price_view.form | 570 -------- .../Coramy/skins/coramy_pdm/modele_print.pt | 253 ---- .../skins/coramy_pdm/modele_print_list.py | 25 - .../skins/coramy_pdm/modele_search.form | 140 -- .../skins/coramy_pdm/modele_search2.form | 84 -- .../skins/coramy_pdm/modele_search_id.form | 56 - .../coramy_pdm/modele_search_id_list.form | 62 - .../coramy_pdm/modele_search_origine.form | 57 - .../modele_search_origine_list.form | 62 - .../coramy_pdm/modele_set_gencod_coramy.py | 20 - .../modele_set_gencod_houvenaegel.py | 20 - .../coramy_pdm/modele_show_local_roles.py | 40 - .../coramy_pdm/modele_sql_default_search.zsql | 107 -- ...dele_sql_search_destination_reference.zsql | 14 - .../coramy_pdm/modele_sql_search_id.zsql | 14 - .../coramy_pdm/modele_sql_search_origine.zsql | 17 - .../skins/coramy_pdm/modele_transformation.py | 25 - .../skins/coramy_pdm/modele_update_price.py | 30 - .../modele_variante_morphologique_view.form | 86 -- .../modele_variated_reference_view.form | 211 --- .../Coramy/skins/coramy_pdm/modele_view.form | 697 --------- .../modele_workflow_abandonner_modele.form | 81 -- ...dele_workflow_confirmer_accord_client.form | 81 -- .../modele_workflow_correction.form | 81 -- .../modele_workflow_designer_gestionaire.form | 109 -- .../modele_workflow_designer_modeliste.form | 109 -- ...kflow_industrialiser_modele_brouillon.form | 81 -- ...flow_industrialiser_modele_collection.form | 81 -- .../modele_workflow_lancer_etude.form | 81 -- .../modele_workflow_lancer_prototype.form | 81 -- .../modele_workflow_proposer_collection.form | 81 -- .../modele_workflow_rectifier_modele.form | 81 -- .../modele_workflow_refuser_brouillon.form | 81 -- ...modele_workflow_revendiquer_propriete.form | 81 -- ...rkflow_solutionner_probleme_modelisme.form | 81 -- .../modele_workflow_soumettre_modelisme.form | 81 -- ...workflow_soumettre_probleme_modelisme.form | 81 -- ...dele_workflow_valider_dabord_finition.form | 81 -- .../modele_workflow_valider_dabord_gamme.form | 81 -- ...ele_workflow_valider_dabord_gradation.form | 81 -- ..._workflow_valider_dabord_nomenclature.form | 81 -- ...ele_workflow_valider_ensuite_finition.form | 81 -- ...modele_workflow_valider_ensuite_gamme.form | 81 -- ...le_workflow_valider_ensuite_gradation.form | 81 -- ...workflow_valider_ensuite_nomenclature.form | 81 -- .../modele_workflow_valider_infos_client.form | 81 -- .../modele_workflow_valider_modele.form | 81 -- ...ele_workflow_valider_modele_reconduit.form | 81 -- .../modele_workflow_valider_prix.form | 81 -- ...odele_workflow_valider_prix_reconduit.form | 81 -- .../Coramy/skins/coramy_pdm/modeles_apply.py | 50 - .../skins/coramy_pdm/modeles_apply_form.form | 61 - .../skins/coramy_pdm/modeles_print_list.py | 31 - .../coramy_pdm/modeles_print_list_form.form | 61 - .../Coramy/skins/coramy_pdm/morceau_view.form | 231 --- .../skins/coramy_pdm/operation_view.form | 324 ----- .../coramy_pdm/resource_variation_view.form | 82 -- .../Coramy/skins/coramy_pdm/setEan13Modele.py | 22 - .../skins/coramy_pdm/sql_id_search.zsql | 12 - .../Coramy/skins/coramy_pdm/tissu_list.form | 62 - .../skins/coramy_pdm/tissu_list_export.py | 31 - .../skins/coramy_pdm/tissu_list_sort_on.form | 50 - .../skins/coramy_pdm/tissu_list_ui.form | 28 - .../Coramy/skins/coramy_pdm/tissu_search.form | 112 -- .../skins/coramy_pdm/tissu_variante_view.pt | 56 - .../Coramy/skins/coramy_pdm/tissu_view.form | 649 --------- .../transformation_aggregated_view.form | 140 -- .../transformation_assorted_view.form | 505 ------- .../transformation_consommation_update.py | 47 - ...ansformation_consommation_update_form.form | 77 - .../transformation_correspondances_print.pt | 138 -- .../transformation_expanded_view.pt | 182 --- .../transformation_expanded_view2.pt | 167 --- .../transformation_expanded_view_form.form | 109 -- .../transformation_getAggregatedList.py | 76 - .../transformation_history_view2.pt | 79 -- .../transformation_identity_update.py | 39 - .../skins/coramy_pdm/transformation_list.form | 62 - ...nsformation_operation_aggregated_view.form | 140 -- .../transformation_operation_view.form | 505 ------- .../transformation_operation_view_old.form | 476 ------- .../skins/coramy_pdm/transformation_print.pt | 127 -- .../coramy_pdm/transformation_print_form.form | 109 -- .../coramy_pdm/transformation_speed_test.py | 28 - .../coramy_pdm/transformation_sql_search.zsql | 17 - .../skins/coramy_pdm/transformation_view.form | 505 ------- ...ation_workflow_valider_transformation.form | 81 -- .../transformed_resource_operation_view.form | 400 ------ .../transformed_resource_quantity_view.form | 165 --- .../transformed_resource_variation_view.form | 266 ---- .../coramy_pdm/transformed_resource_view.form | 429 ------ .../coramy_pdm/variante_composant_view.form | 348 ----- .../skins/coramy_pdm/variante_gamme_view.form | 127 -- .../coramy_pdm/variante_modele_view.form | 188 --- .../variante_morphologique_view.form | 156 -- .../skins/coramy_pdm/variante_tissu_view.form | 278 ---- .../coramy_pdm/variated_property_view.form | 357 ----- .../variated_reference_matrix_item_list.py | 41 - .../coramy_pdm/variated_reference_view.form | 355 ----- .../variated_references_set_gencod_coramy.py | 67 - .../Coramy/skins/coramy_pdm/verif_modele.py | 50 - .../vetement_bareme_mesures_view.form | 290 ---- .../skins/coramy_pdm/vetement_list.form | 67 - .../vetement_mesures_auto_selection.py | 30 - .../vetement_mise_au_point_view.form | 102 -- .../vetement_related_modele_view.form | 309 ---- .../coramy_pdm/vetement_search_list.form | 67 - .../skins/coramy_pdm/vetement_view.form | 408 ------ .../vetement_workflow_annuler_etude.form | 81 -- .../vetement_workflow_etudier_gradation.form | 81 -- ...vetement_workflow_lancer_gamme_taille.form | 81 -- .../vetement_workflow_lancer_prototype.form | 81 -- ..._workflow_rectifier_dossier_technique.form | 81 -- ...vetement_workflow_rectifier_gradation.form | 81 -- .../vetement_workflow_rectifier_vetement.form | 81 -- ...nt_workflow_valider_dossier_technique.form | 81 -- ...etement_workflow_valider_gamme_taille.form | 81 -- .../vetement_workflow_valider_prototype.form | 81 -- .../coramy_pdm/zGetTissuSupplierList.zsql | 17 - .../coramy_trade/ContainerLine_zGetTotal.zsql | 21 - .../skins/coramy_trade/Container_fastInput.py | 112 -- .../coramy_trade/Container_fastInputForm.form | 222 --- .../coramy_trade/Container_oneClicInput.py | 121 -- .../Container_oneClicInputForm.form | 218 --- .../Container_printExtandLabel.py | 174 --- .../coramy_trade/Container_printLabel.py | 19 - .../coramy_trade/Container_printMetoLabel.py | 85 -- .../coramy_trade/Container_sendExtandEdi.py | 99 -- .../Container_zGetCellList.org.zsql | 41 - .../coramy_trade/Container_zGetCellList.zsql | 43 - .../coramy_trade/Container_zGetTotal.zsql | 39 - ...DeliveryCell_getContainedTargetQuantity.py | 29 - ...iveryCell_zGetContainedTargetQuantity.zsql | 30 - .../DeliveryCell_zGetItemList.zsql | 25 - .../coramy_trade/DeliveryLine_asCellRange.py | 25 - .../DeliveryLine_getCorrespondanceDict.py | 28 - .../DeliveryLine_getTargetQuantityList.py | 65 - .../coramy_trade/DeliveryLine_zGetTotal.zsql | 21 - .../DeliveryTest_selectionAssignLocalRoles.py | 28 - .../Delivery_exportContainerList.py | 51 - .../Delivery_futureInventoryView.form | 140 -- .../Delivery_getFutureInventoryList.py | 11 - .../coramy_trade/Delivery_getInventoryList.py | 12 - .../coramy_trade/Delivery_inventoryView.form | 140 -- .../Delivery_searchByResource.form | 170 --- .../Delivery_splitDeferTransitionForm.form | 149 -- .../coramy_trade/Delivery_zGetCellList.zsql | 28 - .../Delivery_zGetInventoryList.zsql | 38 - .../Delivery_zGetNeededCellList.zsql | 30 - .../coramy_trade/Delivery_zGetTotal.zsql | 29 - .../coramy_trade/InvoiceLine_priceView.form | 347 ----- .../InvoiceLine_quantityView.form | 321 ----- .../skins/coramy_trade/InvoiceLine_view.form | 384 ----- .../skins/coramy_trade/Invoice_print.pdf | 98 -- .../coramy_trade/Invoice_zGetDescription.py | 39 - .../skins/coramy_trade/Invoice_zGetDueDate.py | 49 - .../Invoice_zGetEscompteDescription.py | 25 - .../coramy_trade/Invoice_zGetPaymentTime.py | 30 - .../Invoice_zGetSourceSectionDescription.py | 31 - .../skins/coramy_trade/Invoice_zGetTotal.zsql | 13 - .../coramy_trade/Invoice_zGetTotalNetPrice.py | 23 - .../coramy_trade/Invoice_zGetTotalVat.py | 21 - .../coramy_trade/Movement_lookupPrice.py | 15 - .../skins/coramy_trade/Movement_zList.zsql | 52 - ...vement_zSetDestinationTotalAssetPrice.zsql | 20 - .../Movement_zSetSourceTotalAssetPrice.zsql | 20 - .../skins/coramy_trade/Order_heavyControl.py | 52 - .../skins/coramy_trade/Order_lightControl.py | 67 - .../coramy_trade/Order_updateLocalRoles.py | 33 - .../PackingList_getDistinctContainerList.py | 45 - .../PackingList_getTotalGrossWeight.py | 17 - .../skins/coramy_trade/PlanTransportExtand.py | 111 -- .../PurchaseOrder_reportList.form | 58 - .../coramy_trade/SaleInvoice_dateSearch.form | 51 - .../coramy_trade/SaleInvoice_exportSage.py | 248 ---- ...SaleInvoice_exportSageCodeComptableList.py | 98 -- .../SaleInvoice_exportSageList.py | 32 - .../coramy_trade/SaleInvoice_printPdf.py | 25 - .../coramy_trade/SaleInvoice_printPdfList.py | 24 - .../SaleInvoice_printPdfListForm.form | 146 -- .../SaleInvoice_updateTransaction.py | 65 - .../coramy_trade/SalesOrder_confirmList.py | 77 - .../SalesOrder_confirmListForm.form | 80 -- .../coramy_trade/SalesOrder_countEdiSales.py | 31 - .../coramy_trade/SalesOrder_importEdi.py | 289 ---- .../SalesOrder_importEdiAuchan.py | 145 -- .../SalesOrder_importEdiCarrefour.py | 112 -- .../SalesOrder_importEdiFileList.py | 22 - .../SalesOrder_importEdiForm.form | 209 --- .../coramy_trade/SalesOrder_orderList.py | 70 - .../coramy_trade/SalesOrder_reportByClient.py | 38 - .../SalesOrder_reportByClientForm.form | 47 - .../SalesOrder_reportByResource.py | 29 - .../SalesOrder_reportByResourceForm.form | 47 - .../SalesOrder_searchByClientGroup.form | 136 -- .../SalesOrder_zReportByClient.zsql | 36 - .../SalesOrder_zReportByResource.zsql | 34 - ...PackingList_buildRemiseTransporteurDict.py | 27 - .../SalesPackingList_exportEdi.py | 176 --- .../SalesPackingList_exportEdiList.py | 32 - ...alesPackingList_oneContainerAutoPacking.py | 128 -- ...ckingList_oneContainerAutoPackingForm.form | 130 -- ...PackingList_oneContainerAutoPackingList.py | 20 - ...ist_oneContainerAutoPackingSelectScript.py | 22 - .../SalesPackingList_printForm.form | 49 - .../SalesPackingList_searchByClientGroup.form | 136 -- .../coramy_trade/bls_echantillon_print.pt | 205 --- .../coramy_trade/condition_achat_list.form | 62 - .../condition_achat_profil_view.form | 409 ------ .../condition_achat_sql_search.zsql | 43 - .../coramy_trade/condition_achat_view.form | 493 ------- .../coramy_trade/condition_paiement_view.form | 289 ---- .../coramy_trade/condition_vente_list.form | 62 - .../condition_vente_profil_view.form | 409 ------ .../condition_vente_sql_search.zsql | 61 - .../coramy_trade/condition_vente_view.form | 493 ------- .../container_aggregated_view.form | 317 ----- .../container_line_target_quantity_view.form | 347 ----- .../coramy_trade/container_line_view.form | 305 ---- .../skins/coramy_trade/container_list.form | 62 - .../skins/coramy_trade/container_view.form | 398 ------ .../coramy_trade/copy_of_echantillon_print.pt | 210 --- .../copy_of_sales_invoice_list_view.form | 457 ------ .../skins/coramy_trade/currency_list.form | 80 -- .../skins/coramy_trade/currency_view.form | 96 -- .../coramy_trade/default_pdf_template.pt | 815 ----------- .../coramy_trade/default_pdf_template_save.pt | 525 ------- .../coramy_trade/delivery_cell_view.form | 221 --- .../delivery_line_quantity_view.form | 386 ----- .../coramy_trade/delivery_line_view.form | 247 ---- .../echantillon_modeliste_sql_worklist.zsql | 30 - .../echantillon_modeliste_worklist.pt | 97 -- .../coramy_trade/echantillon_page_count.py | 17 - .../coramy_trade/echantillon_page_list.py | 50 - .../skins/coramy_trade/echantillon_print.pt | 191 --- .../skins/coramy_trade/echantillon_print2.pt | 188 --- .../skins/coramy_trade/echantillon_print3.pt | 210 --- .../skins/coramy_trade/echantillon_test.py | 16 - .../filtered_sample_order_lines.py | 33 - .../find_delivery_lines_sql_order_list.zsql | 28 - .../find_order_lines_sql_order_list.zsql | 23 - .../skins/coramy_trade/first_list_item_add.py | 10 - .../Coramy/skins/coramy_trade/gallop_print.pt | 97 -- .../coramy_trade/getDeliveryCellPrintList.py | 89 -- .../getDeliveryCellResourceSourceTitle.py | 25 - .../skins/coramy_trade/getOrderLineClient.py | 16 - .../getOrderLineModeleCollection.py | 16 - .../getOrderLineModeleLocalRoles.py | 16 - .../coramy_trade/getOrderLineModeleOrigine.py | 16 - .../coramy_trade/getOrderLineModeleState.py | 16 - .../coramy_trade/getOrderLineStopDate.py | 16 - .../getOrderLineTransformationState.py | 17 - .../getOrderPrettyTotalQuantity.py | 17 - .../getPurchaseDeliveryCellSourceReference.py | 33 - .../coramy_trade/invoice_transaction_print.pt | 182 --- .../item_by_ean13_code_sql_search.zsql | 17 - .../item_by_title_sql_search.zsql | 16 - .../coramy_trade/lookup_delivery_price.py | 10 - .../skins/coramy_trade/lookup_order_price.py | 10 - .../Coramy/skins/coramy_trade/noir_print.pt | 213 --- .../order_confirm_workflow_action.form | 88 -- .../coramy_trade/order_create_packing_list.py | 41 - .../skins/coramy_trade/order_history_view.pt | 79 -- .../order_line_matrix_item_list.py | 38 - .../coramy_trade/order_line_price_view.form | 321 ----- .../order_line_quantity_view.form | 321 ----- .../coramy_trade/order_line_sort_on.form | 50 - .../skins/coramy_trade/order_line_view.form | 528 ------- .../coramy_trade/order_list_sort_on.form | 50 - .../skins/coramy_trade/order_list_ui.form | 28 - .../skins/coramy_trade/order_search.form | 112 -- .../coramy_trade/order_sql_totalizer.zsql | 29 - .../order_workflow_valider_composant.form | 81 -- .../skins/coramy_trade/ordered_lines.py | 22 - .../packing_list_line_price_view.form | 347 ----- .../packing_list_line_quantity_view.form | 347 ----- ...acking_list_line_target_quantity_view.form | 347 ----- .../coramy_trade/packing_list_line_view.form | 356 ----- .../Coramy/skins/coramy_trade/prix_print.pt | 110 -- .../purchase_order_apply_condition.py | 175 --- .../purchase_order_apply_condition_handler.py | 12 - .../coramy_trade/purchase_order_list.form | 63 - .../coramy_trade/purchase_order_print.pt | 205 --- .../coramy_trade/purchase_order_view.form | 822 ----------- ...purchase_packing_list_aggregated_view.form | 613 -------- .../purchase_packing_list_list.form | 63 - .../purchase_packing_list_view.form | 738 ---------- .../skins/coramy_trade/remise_view.form | 232 --- .../sale_invoice_transaction_view.form | 630 -------- .../coramy_trade/sales_invoice_list.form | 62 - .../coramy_trade/sales_invoice_list_view.form | 524 ------- .../skins/coramy_trade/sales_invoice_print.pt | 112 -- .../coramy_trade/sales_invoice_view.form | 577 -------- .../sales_order_apply_condition.py | 191 --- .../skins/coramy_trade/sales_order_list.form | 63 - .../skins/coramy_trade/sales_order_view.form | 967 ------------- .../sales_packing_list_aggregated_view.form | 739 ---------- ...sales_packing_list_container_list_print.pt | 210 --- .../sales_packing_list_container_view.form | 685 --------- .../coramy_trade/sales_packing_list_list.form | 63 - .../coramy_trade/sales_packing_list_print.pt | 200 --- ..._packing_list_print_remise_transporteur.pt | 130 -- .../sales_packing_list_secure_print.py | 19 - .../coramy_trade/sales_packing_list_view.form | 747 ---------- .../sample_delivery_count_samples.py | 17 - .../sample_etiquette_BLS_print.py | 42 - .../coramy_trade/sample_etiquette_print.py | 41 - .../coramy_trade/sample_order_control.pt | 158 --- .../sample_order_count_samples.py | 17 - .../skins/coramy_trade/sample_order_export.py | 45 - .../sample_order_line_compute_price.py | 33 - .../sample_order_line_copy_price.py | 88 -- .../coramy_trade/sample_order_line_list.form | 62 - .../sample_order_line_modele_state.py | 17 - .../sample_order_line_search.zsql | 13 - .../sample_order_line_theme_sort.py | 35 - .../coramy_trade/sample_order_line_view.form | 745 ---------- .../sample_order_lines_to_prepare.pt | 84 -- .../skins/coramy_trade/sample_order_list.form | 62 - .../sample_order_modele_search.form | 56 - .../sample_order_modele_search_list.form | 62 - .../skins/coramy_trade/sample_order_print.pt | 133 -- .../sample_order_sql_modele_search.zsql | 17 - .../skins/coramy_trade/sample_order_view.form | 617 -------- .../skins/coramy_trade/sample_price2.py | 34 - .../skins/coramy_trade/samples_delivered.zsql | 30 - .../samples_delivery_sql_order_id_search.zsql | 17 - ...es_delivery_workflow_annuler_reliquat.form | 81 -- ...ples_delivery_workflow_creer_reliquat.form | 81 -- ..._delivery_workflow_expedier_livraison.form | 81 -- ...livery_workflow_rectifier_preparation.form | 81 -- ...delivery_workflow_valider_preparation.form | 81 -- .../samples_order_create_packing_list.py | 64 - .../samples_order_element_tarif_create.py | 26 - .../samples_order_selection_to_list.py | 20 - .../skins/coramy_trade/samples_order_suivi.pt | 99 -- ...les_order_workflow_preparer_livraison.form | 81 -- ..._workflow_preparer_nouvelle_livraison.form | 81 -- ...mples_order_workflow_valider_commande.form | 81 -- .../skins/coramy_trade/samples_ordered.zsql | 29 - .../samples_ordered_delivered.zsql | 37 - .../samples_packing_list_list.form | 62 - .../samples_packing_list_modele_search.form | 56 - ...mples_packing_list_modele_search_list.form | 62 - .../samples_packing_list_print.pt | 134 -- ...amples_packing_list_sql_modele_search.zsql | 17 - .../samples_packing_list_view.form | 383 ----- .../skins/coramy_trade/samples_to_produce.py | 45 - .../skins/coramy_trade/speed_order_input.py | 70 - .../coramy_trade/speed_order_input_form.form | 190 --- .../trade_condition_discount_view.form | 86 -- .../trade_condition_payment_view.form | 220 --- product/Coramy/tests/.cvsignore | 3 - product/Coramy/tests/__init__.py | 5 - product/Coramy/tests/coramy_catalog.zexp | Bin 130783 -> 0 bytes product/Coramy/tests/coramy_delivery.zexp | Bin 1401676 -> 0 bytes product/Coramy/tests/coramy_order.zexp | Bin 856202 -> 0 bytes product/Coramy/tests/framework.py | 112 -- product/Coramy/tests/run_test_example.sh | 10 - product/Coramy/tests/runalltests.py | 29 - product/Coramy/tests/testCoramyCMFActivity.py | 353 ----- product/Coramy/tests/testCoramyFusion.py | 586 -------- product/Coramy/tests/testCoramyOrder.py | 1261 ----------------- 954 files changed, 102040 deletions(-) delete mode 100755 product/Coramy/.cvsignore delete mode 100755 product/Coramy/Constraint/.cvsignore delete mode 100755 product/Coramy/Constraint/__init__.py delete mode 100755 product/Coramy/Document/.cvsignore delete mode 100755 product/Coramy/Document/AssortedResource.py delete mode 100755 product/Coramy/Document/Assortiment.py delete mode 100755 product/Coramy/Document/Coloris.py delete mode 100755 product/Coramy/Document/Composant.py delete mode 100755 product/Coramy/Document/Container.py delete mode 100755 product/Coramy/Document/ContainerLine.py delete mode 100755 product/Coramy/Document/CorrespondanceMesures.py delete mode 100755 product/Coramy/Document/CorrespondanceTailles.py delete mode 100755 product/Coramy/Document/DeliveryLine.py delete mode 100755 product/Coramy/Document/Discount.py delete mode 100755 product/Coramy/Document/ElementTarif.py delete mode 100755 product/Coramy/Document/Forme.py delete mode 100755 product/Coramy/Document/Gamme.py delete mode 100755 product/Coramy/Document/GrilleConsommation.py delete mode 100755 product/Coramy/Document/Inventory.py delete mode 100755 product/Coramy/Document/InventoryLine.py delete mode 100755 product/Coramy/Document/Invoice.py delete mode 100755 product/Coramy/Document/Item.py delete mode 100755 product/Coramy/Document/Machine.py delete mode 100755 product/Coramy/Document/Modele.py delete mode 100755 product/Coramy/Document/ModeleMachine.py delete mode 100755 product/Coramy/Document/Morceau.py delete mode 100755 product/Coramy/Document/Nomenclature.py delete mode 100755 product/Coramy/Document/Operation.py delete mode 100755 product/Coramy/Document/OptionMachine.py delete mode 100755 product/Coramy/Document/Order.py delete mode 100755 product/Coramy/Document/OrderLine.py delete mode 100755 product/Coramy/Document/PackingList.py delete mode 100755 product/Coramy/Document/PaymentCondition.py delete mode 100755 product/Coramy/Document/ProductionOrder.py delete mode 100755 product/Coramy/Document/ProductionReport.py delete mode 100755 product/Coramy/Document/ProductionReportCell.py delete mode 100755 product/Coramy/Document/ProductionReportLine.py delete mode 100755 product/Coramy/Document/SampleOrderLine.py delete mode 100755 product/Coramy/Document/SamplesOrder.py delete mode 100755 product/Coramy/Document/SamplesPackingList.py delete mode 100755 product/Coramy/Document/SetMappedValue.py delete mode 100755 product/Coramy/Document/Supply.py delete mode 100755 product/Coramy/Document/SupplyLine.py delete mode 100755 product/Coramy/Document/Tissu.py delete mode 100755 product/Coramy/Document/TradeCondition.py delete mode 100755 product/Coramy/Document/Transformation.py delete mode 100755 product/Coramy/Document/TransformedResource.py delete mode 100755 product/Coramy/Document/VarianteComposant.py delete mode 100755 product/Coramy/Document/VarianteGamme.py delete mode 100755 product/Coramy/Document/VarianteModele.py delete mode 100755 product/Coramy/Document/VarianteMorphologique.py delete mode 100755 product/Coramy/Document/VarianteTissu.py delete mode 100755 product/Coramy/Document/VariatedReference.py delete mode 100755 product/Coramy/Document/Vetement.py delete mode 100755 product/Coramy/Document/__init__.py delete mode 100755 product/Coramy/Extensions/BuildInventory.py delete mode 100755 product/Coramy/Extensions/CodeArticleClient.py delete mode 100755 product/Coramy/Extensions/CodeEan13Client.py delete mode 100755 product/Coramy/Extensions/CodeModeleClient.py delete mode 100755 product/Coramy/Extensions/ColorisClient.py delete mode 100755 product/Coramy/Extensions/ConstructAndSendMail.py delete mode 100755 product/Coramy/Extensions/DelAttr.py delete mode 100755 product/Coramy/Extensions/ExportEdiAuchan.py delete mode 100755 product/Coramy/Extensions/ImportEdiFileList.py delete mode 100755 product/Coramy/Extensions/ImportEdiFiles.py delete mode 100755 product/Coramy/Extensions/ImportExportSkins.py delete mode 100755 product/Coramy/Extensions/ItemStat.py delete mode 100755 product/Coramy/Extensions/MigrateContent.py delete mode 100755 product/Coramy/Extensions/PrinterOutput.py delete mode 100755 product/Coramy/Extensions/PrixAchatFournisseur.py delete mode 100755 product/Coramy/Extensions/PrixConsommateur.py delete mode 100755 product/Coramy/Extensions/PrixRevientIndustriel.py delete mode 100755 product/Coramy/Extensions/QuickCosting.py delete mode 100755 product/Coramy/Extensions/TailleClient.py delete mode 100755 product/Coramy/Extensions/TestBuildInventory.py delete mode 100755 product/Coramy/Extensions/UpdateQuantityUnit.py delete mode 100755 product/Coramy/Extensions/cartesianProduct.py delete mode 100755 product/Coramy/Extensions/deliveryTester.py delete mode 100755 product/Coramy/Extensions/productionOrderBuilder.py delete mode 100755 product/Coramy/Interface/.cvsignore delete mode 100755 product/Coramy/Interface/__init__.py delete mode 100755 product/Coramy/MetoAPI.py delete mode 100755 product/Coramy/Permissions.py delete mode 100755 product/Coramy/PropertySheet/.cvsignore delete mode 100755 product/Coramy/PropertySheet/Assortiment.py delete mode 100755 product/Coramy/PropertySheet/Coloris.py delete mode 100755 product/Coramy/PropertySheet/Composant.py delete mode 100755 product/Coramy/PropertySheet/CoramyDeliveryLine.py delete mode 100755 product/Coramy/PropertySheet/CoramyItem.py delete mode 100755 product/Coramy/PropertySheet/CoramyOrder.py delete mode 100755 product/Coramy/PropertySheet/CoramyTransformation.py delete mode 100755 product/Coramy/PropertySheet/CoramyTransformedResource.py delete mode 100755 product/Coramy/PropertySheet/CorrespondanceMesures.py delete mode 100755 product/Coramy/PropertySheet/CorrespondanceTailles.py delete mode 100755 product/Coramy/PropertySheet/ElementTarif.py delete mode 100755 product/Coramy/PropertySheet/Forme.py delete mode 100755 product/Coramy/PropertySheet/Gamme.py delete mode 100755 product/Coramy/PropertySheet/GrilleConsommation.py delete mode 100755 product/Coramy/PropertySheet/LigneNomenclature.py delete mode 100755 product/Coramy/PropertySheet/Machine.py delete mode 100755 product/Coramy/PropertySheet/Modele.py delete mode 100755 product/Coramy/PropertySheet/ModeleMachine.py delete mode 100755 product/Coramy/PropertySheet/Morceau.py delete mode 100755 product/Coramy/PropertySheet/Operation.py delete mode 100755 product/Coramy/PropertySheet/PresentAuCatalogue.py delete mode 100755 product/Coramy/PropertySheet/SampleOrderLine.py delete mode 100755 product/Coramy/PropertySheet/SamplesOrder.py delete mode 100755 product/Coramy/PropertySheet/SamplesPackingList.py delete mode 100755 product/Coramy/PropertySheet/Tissu.py delete mode 100755 product/Coramy/PropertySheet/VarianteComposant.py delete mode 100755 product/Coramy/PropertySheet/VarianteGamme.py delete mode 100755 product/Coramy/PropertySheet/VarianteModele.py delete mode 100755 product/Coramy/PropertySheet/VarianteMorphologique.py delete mode 100755 product/Coramy/PropertySheet/VarianteTissu.py delete mode 100755 product/Coramy/PropertySheet/VariatedReference.py delete mode 100755 product/Coramy/PropertySheet/Vetement.py delete mode 100755 product/Coramy/PropertySheet/__init__.py delete mode 100755 product/Coramy/VERSION.txt delete mode 100755 product/Coramy/__init__.py delete mode 100755 product/Coramy/everyday_script delete mode 100755 product/Coramy/help/.cvsignore delete mode 100755 product/Coramy/help/Composant.html delete mode 100755 product/Coramy/help/Forme_Creer.html delete mode 100755 product/Coramy/help/Gamme_Creer.html delete mode 100755 product/Coramy/help/Gamme_ope.html delete mode 100755 product/Coramy/help/Modele.html delete mode 100755 product/Coramy/help/Modele_Creer.html delete mode 100755 product/Coramy/help/Outils.html delete mode 100755 product/Coramy/help/Page1.html delete mode 100755 product/Coramy/help/Sommaire.html delete mode 100755 product/Coramy/help/coramy.css delete mode 100755 product/Coramy/help/images/.cvsignore delete mode 100755 product/Coramy/help/images/ERP5.gif delete mode 100755 product/Coramy/help/images/ERP5.jpg delete mode 100755 product/Coramy/help/images/Modele_cf1.jpg delete mode 100755 product/Coramy/help/images/accueil.jpg delete mode 100755 product/Coramy/help/images/apache_pb.gif delete mode 100755 product/Coramy/help/images/macosxlogo.gif delete mode 100755 product/Coramy/help/images/palette.jpg delete mode 100755 product/Coramy/help/images/web_share.gif delete mode 100755 product/Coramy/help/index.html delete mode 100755 product/Coramy/refresh.txt delete mode 100755 product/Coramy/skins/.cvsignore delete mode 100755 product/Coramy/skins/coramy_crm/Organisation_defaultSearchForm.form delete mode 100755 product/Coramy/skins/coramy_crm/Organisation_getOneLineAddress.py delete mode 100755 product/Coramy/skins/coramy_crm/Organisation_importFile.py delete mode 100755 product/Coramy/skins/coramy_crm/Organisation_importForm.form delete mode 100755 product/Coramy/skins/coramy_crm/bank_account_view.form delete mode 100755 product/Coramy/skins/coramy_crm/chat_address_view.form delete mode 100755 product/Coramy/skins/coramy_crm/email_view.form delete mode 100755 product/Coramy/skins/coramy_crm/geographic_address_view.form delete mode 100755 product/Coramy/skins/coramy_crm/organisation_DefaultExport.pt delete mode 100755 product/Coramy/skins/coramy_crm/organisation_cat delete mode 100755 product/Coramy/skins/coramy_crm/organisation_cat.form delete mode 100755 product/Coramy/skins/coramy_crm/organisation_edit.py delete mode 100755 product/Coramy/skins/coramy_crm/organisation_list.form delete mode 100755 product/Coramy/skins/coramy_crm/organisation_listCoordinates.form delete mode 100755 product/Coramy/skins/coramy_crm/organisation_view.form delete mode 100755 product/Coramy/skins/coramy_crm/organisation_viewDetails.form delete mode 100755 product/Coramy/skins/coramy_crm/person_emails.form delete mode 100755 product/Coramy/skins/coramy_crm/person_emails_report.dtml delete mode 100755 product/Coramy/skins/coramy_crm/person_exchange delete mode 100755 product/Coramy/skins/coramy_crm/person_exchange.form delete mode 100755 product/Coramy/skins/coramy_crm/person_list.form delete mode 100755 product/Coramy/skins/coramy_crm/person_list_phone.form delete mode 100755 product/Coramy/skins/coramy_crm/person_list_sort_on.form delete mode 100755 product/Coramy/skins/coramy_crm/person_list_ui.form delete mode 100755 product/Coramy/skins/coramy_crm/person_report.form delete mode 100755 product/Coramy/skins/coramy_crm/person_search.form delete mode 100755 product/Coramy/skins/coramy_crm/person_search_phone.zsql delete mode 100755 product/Coramy/skins/coramy_crm/person_search_phones.form delete mode 100755 product/Coramy/skins/coramy_crm/person_view.form delete mode 100755 product/Coramy/skins/coramy_crm/person_viewProfile.form delete mode 100755 product/Coramy/skins/coramy_crm/sales_enquire.form delete mode 100755 product/Coramy/skins/coramy_crm/sales_offer.form delete mode 100755 product/Coramy/skins/coramy_crm/sales_opportunity_list.form delete mode 100755 product/Coramy/skins/coramy_crm/sales_opportunity_view.form delete mode 100755 product/Coramy/skins/coramy_crm/sales_reset.form delete mode 100755 product/Coramy/skins/coramy_crm/telephone_view.form delete mode 100755 product/Coramy/skins/coramy_custom/Coramy_sendMailToUser.py delete mode 100755 product/Coramy/skins/coramy_custom/Coramy_userLabelPrinterDefinition.py delete mode 100755 product/Coramy/skins/coramy_custom/Coramy_userPrinterDefinition.py delete mode 100755 product/Coramy/skins/coramy_custom/FlatList.py delete mode 100755 product/Coramy/skins/coramy_custom/Inventory_checkConsistency.py delete mode 100755 product/Coramy/skins/coramy_custom/Inventory_copyDefault.py delete mode 100755 product/Coramy/skins/coramy_custom/Inventory_updateDefault.py delete mode 100755 product/Coramy/skins/coramy_custom/Item_doWorkflowTransition.py delete mode 100755 product/Coramy/skins/coramy_custom/Item_resetLocation.py delete mode 100755 product/Coramy/skins/coramy_custom/PackingList_cleanupAssortiment.py delete mode 100755 product/Coramy/skins/coramy_custom/PackingList_searchAssortiment.zsql delete mode 100755 product/Coramy/skins/coramy_custom/PackingList_setTargetStopToTargetStart.py delete mode 100755 product/Coramy/skins/coramy_custom/PdfTemplate_changePdfStylesheet.py delete mode 100755 product/Coramy/skins/coramy_custom/PieceTissu_deleteFromMovement.py delete mode 100755 product/Coramy/skins/coramy_custom/PieceTissu_exportList.py delete mode 100755 product/Coramy/skins/coramy_custom/PieceTissu_findNegativeQty.py delete mode 100755 product/Coramy/skins/coramy_custom/PieceTissu_findSuspectMovement.py delete mode 100755 product/Coramy/skins/coramy_custom/SalesOrder_updateAssortimentPrice.py delete mode 100755 product/Coramy/skins/coramy_custom/SalesOrder_zGetCarnetCommande.zsql delete mode 100755 product/Coramy/skins/coramy_custom/base_edit2.py delete mode 100755 product/Coramy/skins/coramy_custom/breadcrumb.pt delete mode 100755 product/Coramy/skins/coramy_custom/changeSourceAdministrationList.py delete mode 100755 product/Coramy/skins/coramy_custom/changeSourceAdministrationSQL.zsql delete mode 100755 product/Coramy/skins/coramy_custom/check_production_delivery.py delete mode 100755 product/Coramy/skins/coramy_custom/getInfo.py delete mode 100755 product/Coramy/skins/coramy_custom/getListboxSearchMethod.py delete mode 100755 product/Coramy/skins/coramy_custom/getOneLineShortDescription.py delete mode 100755 product/Coramy/skins/coramy_custom/goTest.py delete mode 100755 product/Coramy/skins/coramy_custom/launchChangeEipAndCollection.py delete mode 100755 product/Coramy/skins/coramy_custom/launchResetLocationOnLocatedPieceTissu.py delete mode 100755 product/Coramy/skins/coramy_custom/launchResetTargetQtyOnItemAggregatedMovement.py delete mode 100755 product/Coramy/skins/coramy_custom/launchSetStopDateONProdDelivery.py delete mode 100755 product/Coramy/skins/coramy_custom/launchTransferVetement.py delete mode 100755 product/Coramy/skins/coramy_custom/launchUpdateAssortimentPriceOnSalesOrder.py delete mode 100755 product/Coramy/skins/coramy_custom/launchUpdateQuantityOnItemAggregatedMovement.py delete mode 100755 product/Coramy/skins/coramy_custom/mail_received.py delete mode 100755 product/Coramy/skins/coramy_custom/manage_after_clone.py delete mode 100755 product/Coramy/skins/coramy_custom/metadata_edit.form delete mode 100755 product/Coramy/skins/coramy_custom/pay_sheet_view.form delete mode 100755 product/Coramy/skins/coramy_custom/payroll_list.form delete mode 100755 product/Coramy/skins/coramy_custom/search.form delete mode 100755 product/Coramy/skins/coramy_custom/search_category.zsql delete mode 100755 product/Coramy/skins/coramy_custom/search_relation.form delete mode 100755 product/Coramy/skins/coramy_custom/seb_test.py delete mode 100755 product/Coramy/skins/coramy_custom/show_request.py delete mode 100755 product/Coramy/skins/coramy_custom/test_form.form delete mode 100755 product/Coramy/skins/coramy_custom/test_jps.py delete mode 100755 product/Coramy/skins/coramy_custom/test_link.py delete mode 100755 product/Coramy/skins/coramy_custom/test_piece.zsql delete mode 100755 product/Coramy/skins/coramy_custom/test_script.py delete mode 100755 product/Coramy/skins/coramy_custom/test_script2.py delete mode 100755 product/Coramy/skins/coramy_custom/testdocument_pdf.pt delete mode 100755 product/Coramy/skins/coramy_custom/testjp.py delete mode 100755 product/Coramy/skins/coramy_custom/testrc.py delete mode 100755 product/Coramy/skins/coramy_custom/testseb.py delete mode 100755 product/Coramy/skins/coramy_custom/testyo.py delete mode 100755 product/Coramy/skins/coramy_custom/toto_test.py delete mode 100755 product/Coramy/skins/coramy_custom/transfer_vetement.py delete mode 100755 product/Coramy/skins/coramy_custom/updateEipAndCollection.py delete mode 100755 product/Coramy/skins/coramy_custom/updateItemAggregatedMovement.py delete mode 100755 product/Coramy/skins/coramy_custom/updateQuantityOnItemAggregatedMovement.py delete mode 100755 product/Coramy/skins/coramy_custom/update_this_one.py delete mode 100755 product/Coramy/skins/coramy_custom/zGetConfirmedOrderWithoutDeliveries.zsql delete mode 100755 product/Coramy/skins/coramy_custom/zGetEipChangeObjectlist.zsql delete mode 100755 product/Coramy/skins/coramy_custom/zGetHouvSalesOrderList.zsql delete mode 100755 product/Coramy/skins/coramy_custom/zGetInSubPieceTissuList.zsql delete mode 100755 product/Coramy/skins/coramy_custom/zGetItemAggregatedMovement.zsql delete mode 100755 product/Coramy/skins/coramy_custom/zGetLocatedPieceTissuList.zsql delete mode 100755 product/Coramy/skins/coramy_custom/zGetPieceTissuList.zsql delete mode 100755 product/Coramy/skins/coramy_custom/zGetProductionDeliveryList.zsql delete mode 100755 product/Coramy/skins/coramy_custom/zGetStockCoramy.zsql delete mode 100755 product/Coramy/skins/coramy_custom/zGetTissuMovementWithoutItem.zsql delete mode 100755 product/Coramy/skins/coramy_custom/zGetVetementList.zsql delete mode 100755 product/Coramy/skins/coramy_erp5/ActiveProcess_view.form delete mode 100755 product/Coramy/skins/coramy_erp5/ActivityTool_postError.py delete mode 100755 product/Coramy/skins/coramy_erp5/AppliedRule_cleanOrphanedOrder.py delete mode 100755 product/Coramy/skins/coramy_erp5/AssignLocalRole.py delete mode 100755 product/Coramy/skins/coramy_erp5/Base_searchHandler.py delete mode 100755 product/Coramy/skins/coramy_erp5/DateTime_getFormattedDate.py delete mode 100755 product/Coramy/skins/coramy_erp5/DeliveryLine_zGetRelatedQuantity.zsql delete mode 100755 product/Coramy/skins/coramy_erp5/Delivery_reindexAll.py delete mode 100755 product/Coramy/skins/coramy_erp5/Delivery_rescueOrphanedMovement.py delete mode 100755 product/Coramy/skins/coramy_erp5/Delivery_zGetOrphanedMovementList.zsql delete mode 100755 product/Coramy/skins/coramy_erp5/Delivery_zGetOrphanedProductionMovementList.zsql delete mode 100755 product/Coramy/skins/coramy_erp5/ERP5Site_reindexAll.py delete mode 100755 product/Coramy/skins/coramy_erp5/ERP5Site_reindexCurrentMovement.py delete mode 100755 product/Coramy/skins/coramy_erp5/Folder_createModule.py delete mode 100755 product/Coramy/skins/coramy_erp5/Folder_workflowAction.form delete mode 100755 product/Coramy/skins/coramy_erp5/LivraisonVente_fixEqualQuantity.py delete mode 100755 product/Coramy/skins/coramy_erp5/LivraisonVente_fixNoneQuantity.py delete mode 100755 product/Coramy/skins/coramy_erp5/LivraisonVente_searchEqualQuantity.zsql delete mode 100755 product/Coramy/skins/coramy_erp5/LivraisonVente_searchNoneQuantity.zsql delete mode 100755 product/Coramy/skins/coramy_erp5/Movement_resetTargetQuantity.py delete mode 100755 product/Coramy/skins/coramy_erp5/Movement_search.zsql delete mode 100755 product/Coramy/skins/coramy_erp5/OrderLine_zGetRelatedQuantity.zsql delete mode 100755 product/Coramy/skins/coramy_erp5/Order_cleanDuplicates.py delete mode 100755 product/Coramy/skins/coramy_erp5/PT_pageBreak.py delete mode 100755 product/Coramy/skins/coramy_erp5/PT_reset_total_list.py delete mode 100755 product/Coramy/skins/coramy_erp5/PT_update_total_list.py delete mode 100755 product/Coramy/skins/coramy_erp5/PortalSimulation_cleanup.py delete mode 100755 product/Coramy/skins/coramy_erp5/PortalSimulation_rescueOrphaned.py delete mode 100755 product/Coramy/skins/coramy_erp5/PortalSimulation_updateInventory.py delete mode 100755 product/Coramy/skins/coramy_erp5/PortalSimulation_zGetResourceList.zsql delete mode 100755 product/Coramy/skins/coramy_erp5/SQLDict_assignMessage.zsql delete mode 100755 product/Coramy/skins/coramy_erp5/SQLDict_createMessageTable.zsql delete mode 100755 product/Coramy/skins/coramy_erp5/SQLDict_delMessage.zsql delete mode 100755 product/Coramy/skins/coramy_erp5/SQLDict_hasMessage.zsql delete mode 100755 product/Coramy/skins/coramy_erp5/SQLDict_lockMessage.zsql delete mode 100755 product/Coramy/skins/coramy_erp5/SQLDict_processMessage.zsql delete mode 100755 product/Coramy/skins/coramy_erp5/SQLDict_readMessage.zsql delete mode 100755 product/Coramy/skins/coramy_erp5/SQLDict_readMessageList.zsql delete mode 100755 product/Coramy/skins/coramy_erp5/SQLDict_readUidList.zsql delete mode 100755 product/Coramy/skins/coramy_erp5/SQLDict_setPriority.zsql delete mode 100755 product/Coramy/skins/coramy_erp5/SQLDict_unlockMessage.zsql delete mode 100755 product/Coramy/skins/coramy_erp5/SQLDict_writeMessage.zsql delete mode 100755 product/Coramy/skins/coramy_erp5/SQLQueue_assignMessage.zsql delete mode 100755 product/Coramy/skins/coramy_erp5/SQLQueue_createMessageTable.zsql delete mode 100755 product/Coramy/skins/coramy_erp5/SQLQueue_delMessage.zsql delete mode 100755 product/Coramy/skins/coramy_erp5/SQLQueue_hasMessage.zsql delete mode 100755 product/Coramy/skins/coramy_erp5/SQLQueue_processMessage.zsql delete mode 100755 product/Coramy/skins/coramy_erp5/SQLQueue_readMessage.zsql delete mode 100755 product/Coramy/skins/coramy_erp5/SQLQueue_readMessageList.zsql delete mode 100755 product/Coramy/skins/coramy_erp5/SQLQueue_setPriority.zsql delete mode 100755 product/Coramy/skins/coramy_erp5/SQLQueue_writeMessage.zsql delete mode 100755 product/Coramy/skins/coramy_erp5/SimulationTool_zGetSortedInventoryList.zsql delete mode 100755 product/Coramy/skins/coramy_erp5/Variated_getColorisList.py delete mode 100755 product/Coramy/skins/coramy_erp5/Variated_getTailleClient.py delete mode 100755 product/Coramy/skins/coramy_erp5/Variated_getTailleClientDict.py delete mode 100755 product/Coramy/skins/coramy_erp5/Variated_getTailleList.py delete mode 100755 product/Coramy/skins/coramy_erp5/Variated_getTaillesList.py delete mode 100755 product/Coramy/skins/coramy_erp5/asPDF.py delete mode 100755 product/Coramy/skins/coramy_erp5/assign_gestionaire_designe_roles.py delete mode 100755 product/Coramy/skins/coramy_erp5/base_folder_workflow_action.form delete mode 100755 product/Coramy/skins/coramy_erp5/base_folder_workflow_action_start_date.form delete mode 100755 product/Coramy/skins/coramy_erp5/base_folder_workflow_action_start_date2.form delete mode 100755 product/Coramy/skins/coramy_erp5/base_workflow_action.form delete mode 100755 product/Coramy/skins/coramy_erp5/base_workflow_action_comment.form delete mode 100755 product/Coramy/skins/coramy_erp5/content_viewMetadata.form delete mode 100755 product/Coramy/skins/coramy_erp5/copy_of_base_folder_workflow_action_start_date.form delete mode 100755 product/Coramy/skins/coramy_erp5/create_relation_dialog.form delete mode 100755 product/Coramy/skins/coramy_erp5/document_view.form delete mode 100755 product/Coramy/skins/coramy_erp5/domain_view.form delete mode 100755 product/Coramy/skins/coramy_erp5/file_view.form delete mode 100755 product/Coramy/skins/coramy_erp5/folder_contents.form delete mode 100755 product/Coramy/skins/coramy_erp5/folder_delete_view.form delete mode 100755 product/Coramy/skins/coramy_erp5/folder_sort_on.form delete mode 100755 product/Coramy/skins/coramy_erp5/folder_view2.form delete mode 100755 product/Coramy/skins/coramy_erp5/folder_workflow_status_modify.py delete mode 100755 product/Coramy/skins/coramy_erp5/folder_workflow_status_modify_test.py delete mode 100755 product/Coramy/skins/coramy_erp5/form_DefaultRender.pt delete mode 100755 product/Coramy/skins/coramy_erp5/getIntId.py delete mode 100755 product/Coramy/skins/coramy_erp5/identify_category.py delete mode 100755 product/Coramy/skins/coramy_erp5/image_large_view.form delete mode 100755 product/Coramy/skins/coramy_erp5/image_view.form delete mode 100755 product/Coramy/skins/coramy_erp5/new_ean13_code.py delete mode 100755 product/Coramy/skins/coramy_erp5/object_action_list.py delete mode 100755 product/Coramy/skins/coramy_erp5/search_related.zsql delete mode 100755 product/Coramy/skins/coramy_erp5/sort_object_list.py delete mode 100755 product/Coramy/skins/coramy_list_method/Delivery_zSearchResource.zsql delete mode 100755 product/Coramy/skins/coramy_list_method/Organisation_zDefaultSearch.zsql delete mode 100755 product/Coramy/skins/coramy_list_method/PieceTisse_zTest3.zsql delete mode 100755 product/Coramy/skins/coramy_list_method/PieceTissu_searchConsumedList.zsql delete mode 100755 product/Coramy/skins/coramy_list_method/PieceTissu_searchRemainingList.zsql delete mode 100755 product/Coramy/skins/coramy_list_method/PieceTissu_test5.zsql delete mode 100755 product/Coramy/skins/coramy_list_method/PieceTissu_zGetAvailableItemList.zsql delete mode 100755 product/Coramy/skins/coramy_list_method/PieceTissu_zGetAvailableItemList_OLD.zsql delete mode 100755 product/Coramy/skins/coramy_list_method/PieceTissu_zTest4.zsql delete mode 100755 product/Coramy/skins/coramy_list_method/PieceTissu_zTestAvailableItemList.zsql delete mode 100755 product/Coramy/skins/coramy_list_method/PieceTissu_zTestAvailableItemList2.zsql delete mode 100755 product/Coramy/skins/coramy_list_method/PurchaseOrder_zGetOrderableResourceList.zsql delete mode 100755 product/Coramy/skins/coramy_list_method/Resource_zGetAggregateList.zsql delete mode 100755 product/Coramy/skins/coramy_list_method/SalesOrder_zSearchByClientGroup.zsql delete mode 100755 product/Coramy/skins/coramy_list_method/SalesPackingList_zSearchByClientGroup.zsql delete mode 100755 product/Coramy/skins/coramy_manufacturing/PackingOrder_inventoryView.form delete mode 100755 product/Coramy/skins/coramy_manufacturing/PackingOrder_list.form delete mode 100755 product/Coramy/skins/coramy_manufacturing/PackingOrder_view.form delete mode 100755 product/Coramy/skins/coramy_manufacturing/ProductionOrderLine_getResourceAccord.py delete mode 100755 product/Coramy/skins/coramy_manufacturing/ProductionOrderLine_getResourceInfosClient.py delete mode 100755 product/Coramy/skins/coramy_manufacturing/ProductionOrderLine_getResourceState.py delete mode 100755 product/Coramy/skins/coramy_manufacturing/ProductionOrder_aggregatedImmaterialConsumptionView.form delete mode 100755 product/Coramy/skins/coramy_manufacturing/ProductionOrder_aggregatedMaterialConsumptionView.form delete mode 100755 product/Coramy/skins/coramy_manufacturing/ProductionOrder_buildDeliveryList.py delete mode 100755 product/Coramy/skins/coramy_manufacturing/ProductionOrder_buildOrderList.py delete mode 100755 product/Coramy/skins/coramy_manufacturing/ProductionOrder_expand.py delete mode 100755 product/Coramy/skins/coramy_manufacturing/ProductionOrder_getDeliveryCellPrintList.py delete mode 100755 product/Coramy/skins/coramy_manufacturing/ProductionOrder_getTotalDuration.py delete mode 100755 product/Coramy/skins/coramy_manufacturing/ProductionOrder_inventoryView.form delete mode 100755 product/Coramy/skins/coramy_manufacturing/ProductionOrder_zGetTotalDuration.zsql delete mode 100755 product/Coramy/skins/coramy_manufacturing/ProductionPackingList_getProductionOrderDescription.py delete mode 100755 product/Coramy/skins/coramy_manufacturing/production_order_line_price_view.form delete mode 100755 product/Coramy/skins/coramy_manufacturing/production_order_line_quantity_view.form delete mode 100755 product/Coramy/skins/coramy_manufacturing/production_order_line_view.form delete mode 100755 product/Coramy/skins/coramy_manufacturing/production_order_list.form delete mode 100755 product/Coramy/skins/coramy_manufacturing/production_order_print.pt delete mode 100755 product/Coramy/skins/coramy_manufacturing/production_order_view.form delete mode 100755 product/Coramy/skins/coramy_manufacturing/production_packing_list_aggregated_view.form delete mode 100755 product/Coramy/skins/coramy_manufacturing/production_packing_list_list.form delete mode 100755 product/Coramy/skins/coramy_manufacturing/production_packing_list_print.pt delete mode 100755 product/Coramy/skins/coramy_manufacturing/production_packing_list_view.form delete mode 100755 product/Coramy/skins/coramy_manufacturing/production_report_aggregated_view.form delete mode 100755 product/Coramy/skins/coramy_manufacturing/production_report_list.form delete mode 100755 product/Coramy/skins/coramy_manufacturing/production_report_view.form delete mode 100755 product/Coramy/skins/coramy_mrp/ActivityTool_activateAssetPriceUpdate.py delete mode 100755 product/Coramy/skins/coramy_mrp/ERP5Site_futureCoramyInventoryView.form delete mode 100755 product/Coramy/skins/coramy_mrp/ERP5Site_getAssetList.py delete mode 100755 product/Coramy/skins/coramy_mrp/ERP5Site_getCoramyFutureInventoryList.py delete mode 100755 product/Coramy/skins/coramy_mrp/ERP5Site_getGroupFutureInventoryList.py delete mode 100755 product/Coramy/skins/coramy_mrp/ERP5Site_transferOfProperty.py delete mode 100755 product/Coramy/skins/coramy_mrp/ERP5Site_zGetCoramyFutureInventoryList.zsql delete mode 100755 product/Coramy/skins/coramy_mrp/InventoryLine_matrixItemList.py delete mode 100755 product/Coramy/skins/coramy_mrp/InventoryLine_zGetTotal.zsql delete mode 100755 product/Coramy/skins/coramy_mrp/InventoryMP_fastAddLine.py delete mode 100755 product/Coramy/skins/coramy_mrp/InventoryMP_fastInputForm.form delete mode 100755 product/Coramy/skins/coramy_mrp/InventoryPF_fastAddLine.py delete mode 100755 product/Coramy/skins/coramy_mrp/InventoryPF_fastInputForm.form delete mode 100755 product/Coramy/skins/coramy_mrp/Inventory_inventoriateLocatedPieceTissu.py delete mode 100755 product/Coramy/skins/coramy_mrp/Inventory_launchTissuInventoryBuilder.py delete mode 100755 product/Coramy/skins/coramy_mrp/Inventory_lookupPrice.py delete mode 100755 product/Coramy/skins/coramy_mrp/Inventory_tissuInventoryBuilder.py delete mode 100755 product/Coramy/skins/coramy_mrp/MovementMP_fastInput.py delete mode 100755 product/Coramy/skins/coramy_mrp/MovementMP_fastInputForm.form delete mode 100755 product/Coramy/skins/coramy_mrp/MovementPF_fastInput.py delete mode 100755 product/Coramy/skins/coramy_mrp/MovementPF_fastInputForm.form delete mode 100755 product/Coramy/skins/coramy_mrp/Movement_list.form delete mode 100755 product/Coramy/skins/coramy_mrp/PieceTissu_fastInput.py delete mode 100755 product/Coramy/skins/coramy_mrp/PieceTissu_fastInputFieldRender.py delete mode 100755 product/Coramy/skins/coramy_mrp/PieceTissu_fastInputForm.form delete mode 100755 product/Coramy/skins/coramy_mrp/PieceTissu_fastInputList.py delete mode 100755 product/Coramy/skins/coramy_mrp/PieceTissu_fastInputLocation.py delete mode 100755 product/Coramy/skins/coramy_mrp/PieceTissu_fastInputLocationForm.form delete mode 100755 product/Coramy/skins/coramy_mrp/PieceTissu_fastInputRetour.py delete mode 100755 product/Coramy/skins/coramy_mrp/PieceTissu_fastInputRetourForm.form delete mode 100755 product/Coramy/skins/coramy_mrp/PieceTissu_importFile.py delete mode 100755 product/Coramy/skins/coramy_mrp/PieceTissu_importForm.form delete mode 100755 product/Coramy/skins/coramy_mrp/PieceTissu_movementListView.form delete mode 100755 product/Coramy/skins/coramy_mrp/PieceTissu_printMetoLabel.py delete mode 100755 product/Coramy/skins/coramy_mrp/PieceTissu_resetTargetQuantityOnUnaggregatedMovementList.py delete mode 100755 product/Coramy/skins/coramy_mrp/PieceTissu_searchByResource.form delete mode 100755 product/Coramy/skins/coramy_mrp/PieceTissu_updateResourceAfterInventory.py delete mode 100755 product/Coramy/skins/coramy_mrp/PieceTissu_zGetAggregateRelatedMovementList.zsql delete mode 100755 product/Coramy/skins/coramy_mrp/PieceTissu_zGetInventorized.zsql delete mode 100755 product/Coramy/skins/coramy_mrp/PieceTissu_zGetUnaggregatedTissuMovementList.zsql delete mode 100755 product/Coramy/skins/coramy_mrp/PortalSimulation_activateRequirementList.py delete mode 100755 product/Coramy/skins/coramy_mrp/PortalSimulation_buildRequirementOrder.py delete mode 100755 product/Coramy/skins/coramy_mrp/PortalSimulation_fixDeliveryRule.py delete mode 100755 product/Coramy/skins/coramy_mrp/PortalSimulation_updateAssetPrice.py delete mode 100755 product/Coramy/skins/coramy_mrp/ProductionOrder_getAggregatedConsumptionList.py delete mode 100755 product/Coramy/skins/coramy_mrp/ProductionOrder_getAggregatedImmaterialConsumptionList.py delete mode 100755 product/Coramy/skins/coramy_mrp/ProductionOrder_getAggregatedMaterialConsumptionList.py delete mode 100755 product/Coramy/skins/coramy_mrp/ProductionOrder_getAggregatedMaterialProductionList.py delete mode 100755 product/Coramy/skins/coramy_mrp/ProductionOrder_getAggregatedMaterialSourcingList.py delete mode 100755 product/Coramy/skins/coramy_mrp/ProductionOrder_getConsumptionList.py delete mode 100755 product/Coramy/skins/coramy_mrp/ProductionOrder_getMaterialConsumptionList.py delete mode 100755 product/Coramy/skins/coramy_mrp/ProductionOrder_getMaterialProductionMovementList.py delete mode 100755 product/Coramy/skins/coramy_mrp/ProductionOrder_getMaterialSourcingMovementList.py delete mode 100755 product/Coramy/skins/coramy_mrp/ProductionOrder_zGetAggregatedImmaterialConsumptionList.zsql delete mode 100755 product/Coramy/skins/coramy_mrp/ProductionOrder_zGetAggregatedMaterialConsumptionList.zsql delete mode 100755 product/Coramy/skins/coramy_mrp/ProductionOrder_zGetAggregatedMaterialProductionList.zsql delete mode 100755 product/Coramy/skins/coramy_mrp/ProductionOrder_zGetAggregatedMaterialSourcingList.zsql delete mode 100755 product/Coramy/skins/coramy_mrp/ProductionOrder_zGetConsumptionList.zsql delete mode 100755 product/Coramy/skins/coramy_mrp/ProductionOrder_zGetConsumptionMovementList.zsql delete mode 100755 product/Coramy/skins/coramy_mrp/ProductionOrder_zGetImmaterialConsumptionList.zsql delete mode 100755 product/Coramy/skins/coramy_mrp/ProductionOrder_zGetMaterialConsumptionList.zsql delete mode 100755 product/Coramy/skins/coramy_mrp/ProductionOrder_zGetMaterialProductionMovementList.zsql delete mode 100755 product/Coramy/skins/coramy_mrp/ProductionOrder_zGetMaterialSourcingMovementList.zsql delete mode 100755 product/Coramy/skins/coramy_mrp/Resource_getChartCurrentInventoryList.py delete mode 100755 product/Coramy/skins/coramy_mrp/Resource_getChartFutureHistoryList.py delete mode 100755 product/Coramy/skins/coramy_mrp/Resource_getChartInventoryList.py delete mode 100755 product/Coramy/skins/coramy_mrp/Resource_getCurrentInventoryList.py delete mode 100755 product/Coramy/skins/coramy_mrp/Resource_getFutureGlobalInventory.py delete mode 100755 product/Coramy/skins/coramy_mrp/Resource_getFutureHistoryList.py delete mode 100755 product/Coramy/skins/coramy_mrp/Resource_getFutureInventoryList.py delete mode 100755 product/Coramy/skins/coramy_mrp/Resource_getInventoryHistoryChart.py delete mode 100755 product/Coramy/skins/coramy_mrp/Resource_getInventoryHistoryList.py delete mode 100755 product/Coramy/skins/coramy_mrp/Resource_getInventoryList.py delete mode 100755 product/Coramy/skins/coramy_mrp/Resource_zGetChartInventoryList.zsql delete mode 100755 product/Coramy/skins/coramy_mrp/Resource_zGetInventory.zsql delete mode 100755 product/Coramy/skins/coramy_mrp/Resource_zGetInventoryList.zsql delete mode 100755 product/Coramy/skins/coramy_mrp/Resource_zGetInventoryMovementList.zsql delete mode 100755 product/Coramy/skins/coramy_mrp/Resource_zGetMovementHistoryList.zsql delete mode 100755 product/Coramy/skins/coramy_mrp/Resource_zGetStockMPInventoryList.zsql delete mode 100755 product/Coramy/skins/coramy_mrp/Resource_zGetStockPFInventoryList.zsql delete mode 100755 product/Coramy/skins/coramy_mrp/SimulationTool_activateRequirementList.py delete mode 100755 product/Coramy/skins/coramy_mrp/SimulationTool_buildRequirementOrder.py delete mode 100755 product/Coramy/skins/coramy_mrp/SimulationTool_getCoramyFutureInventoryList.py delete mode 100755 product/Coramy/skins/coramy_mrp/SimulationTool_getGroupFutureInventoryList.py delete mode 100755 product/Coramy/skins/coramy_mrp/SimulationTool_updateInventory.py delete mode 100755 product/Coramy/skins/coramy_mrp/SimulationTool_zGetCoramyFutureInventoryList.zsql delete mode 100755 product/Coramy/skins/coramy_mrp/SimulationTool_zGetResourceList.zsql delete mode 100755 product/Coramy/skins/coramy_mrp/ZeroStock_buildOrderList.py delete mode 100755 product/Coramy/skins/coramy_mrp/inventory_MP_list.form delete mode 100755 product/Coramy/skins/coramy_mrp/inventory_MP_view.form delete mode 100755 product/Coramy/skins/coramy_mrp/inventory_PF_list.form delete mode 100755 product/Coramy/skins/coramy_mrp/inventory_PF_view.form delete mode 100755 product/Coramy/skins/coramy_mrp/inventory_aggregated_view.form delete mode 100755 product/Coramy/skins/coramy_mrp/inventory_cell_view.form delete mode 100755 product/Coramy/skins/coramy_mrp/inventory_line_price_view.form delete mode 100755 product/Coramy/skins/coramy_mrp/inventory_line_quantity_view.form delete mode 100755 product/Coramy/skins/coramy_mrp/inventory_line_view.form delete mode 100755 product/Coramy/skins/coramy_mrp/inventory_view.form delete mode 100755 product/Coramy/skins/coramy_mrp/inventory_view2.form delete mode 100755 product/Coramy/skins/coramy_mrp/inventory_view_details.form delete mode 100755 product/Coramy/skins/coramy_mrp/item_tissu_list.form delete mode 100755 product/Coramy/skins/coramy_mrp/item_tissu_view.form delete mode 100755 product/Coramy/skins/coramy_mrp/movement_MP_list.form delete mode 100755 product/Coramy/skins/coramy_mrp/movement_MP_view.form delete mode 100755 product/Coramy/skins/coramy_mrp/movement_PF_list.form delete mode 100755 product/Coramy/skins/coramy_mrp/movement_PF_view.form delete mode 100755 product/Coramy/skins/coramy_mrp/movement_aggregated_view.form delete mode 100755 product/Coramy/skins/coramy_mrp/movement_line_consumption_quantity_view.form delete mode 100755 product/Coramy/skins/coramy_mrp/movement_line_price_view.form delete mode 100755 product/Coramy/skins/coramy_mrp/movement_line_production_quantity_view.form delete mode 100755 product/Coramy/skins/coramy_mrp/movement_line_view.form delete mode 100755 product/Coramy/skins/coramy_pdm/CreateVarianteModele.py delete mode 100755 product/Coramy/skins/coramy_pdm/Forme_categorySearchForm.form delete mode 100755 product/Coramy/skins/coramy_pdm/Forme_categorySearchSql.zsql delete mode 100755 product/Coramy/skins/coramy_pdm/Forme_thumbnailList.pt delete mode 100755 product/Coramy/skins/coramy_pdm/Resource_futureHistoryView.form delete mode 100755 product/Coramy/skins/coramy_pdm/Resource_futureInventoryView.form delete mode 100755 product/Coramy/skins/coramy_pdm/Resource_getCartesianVariationList.py delete mode 100755 product/Coramy/skins/coramy_pdm/Resource_getSupplierItemList.py delete mode 100755 product/Coramy/skins/coramy_pdm/Resource_inventoryView.form delete mode 100755 product/Coramy/skins/coramy_pdm/Resource_movementHistoryView.form delete mode 100755 product/Coramy/skins/coramy_pdm/Resource_sqlResourceSupplierSearch.zsql delete mode 100755 product/Coramy/skins/coramy_pdm/Resource_sqlSupplierSearch.zsql delete mode 100755 product/Coramy/skins/coramy_pdm/Tissu_categorySearchForm.form delete mode 100755 product/Coramy/skins/coramy_pdm/Tissu_categorySearchSql.zsql delete mode 100755 product/Coramy/skins/coramy_pdm/Transformation_getAllTransformedResource.py delete mode 100755 product/Coramy/skins/coramy_pdm/TransformedComponent_getCorrespondanceList.py delete mode 100755 product/Coramy/skins/coramy_pdm/Vetement_categorySearchForm.form delete mode 100755 product/Coramy/skins/coramy_pdm/Vetement_categorySearchSql.zsql delete mode 100755 product/Coramy/skins/coramy_pdm/Vetement_thumbnailList.pt delete mode 100755 product/Coramy/skins/coramy_pdm/Vetement_zGetRelatedModeleList.zsql delete mode 100755 product/Coramy/skins/coramy_pdm/assorted_resource_quantity_view.form delete mode 100755 product/Coramy/skins/coramy_pdm/assorted_resource_view.form delete mode 100755 product/Coramy/skins/coramy_pdm/assortiment_list.form delete mode 100755 product/Coramy/skins/coramy_pdm/assortiment_list_export.py delete mode 100755 product/Coramy/skins/coramy_pdm/assortiment_price_view.form delete mode 100755 product/Coramy/skins/coramy_pdm/assortiment_variated_reference_view.form delete mode 100755 product/Coramy/skins/coramy_pdm/assortiment_view.form delete mode 100755 product/Coramy/skins/coramy_pdm/bareme_mesures_dessins_list.py delete mode 100755 product/Coramy/skins/coramy_pdm/bareme_mesures_mesures_list.py delete mode 100755 product/Coramy/skins/coramy_pdm/bareme_mesures_morphologie_print.pt delete mode 100755 product/Coramy/skins/coramy_pdm/bareme_mesures_morphologie_tailles_list.py delete mode 100755 product/Coramy/skins/coramy_pdm/bareme_mesures_print.pt delete mode 100755 product/Coramy/skins/coramy_pdm/bareme_mesures_tailles_list.py delete mode 100755 product/Coramy/skins/coramy_pdm/composant_history_view.pt delete mode 100755 product/Coramy/skins/coramy_pdm/composant_list.form delete mode 100755 product/Coramy/skins/coramy_pdm/composant_list_sort_on.form delete mode 100755 product/Coramy/skins/coramy_pdm/composant_list_ui.form delete mode 100755 product/Coramy/skins/coramy_pdm/composant_search.form delete mode 100755 product/Coramy/skins/coramy_pdm/composant_view.form delete mode 100755 product/Coramy/skins/coramy_pdm/composant_workflow_valider_composant.form delete mode 100755 product/Coramy/skins/coramy_pdm/correspondance_list.form delete mode 100755 product/Coramy/skins/coramy_pdm/correspondance_mesures_client_view.form delete mode 100755 product/Coramy/skins/coramy_pdm/correspondance_mesures_view.form delete mode 100755 product/Coramy/skins/coramy_pdm/correspondance_tailles_client_view.form delete mode 100755 product/Coramy/skins/coramy_pdm/correspondance_tailles_view.form delete mode 100755 product/Coramy/skins/coramy_pdm/dessin_technique_view.form delete mode 100755 product/Coramy/skins/coramy_pdm/element_tarif_list_create.py delete mode 100755 product/Coramy/skins/coramy_pdm/element_tarif_view.form delete mode 100755 product/Coramy/skins/coramy_pdm/etiquettes_collection.py delete mode 100755 product/Coramy/skins/coramy_pdm/etiquettes_collection_planches.py delete mode 100755 product/Coramy/skins/coramy_pdm/etiquettes_collection_unitaires.py delete mode 100755 product/Coramy/skins/coramy_pdm/forme_list.form delete mode 100755 product/Coramy/skins/coramy_pdm/forme_list_sort_on.form delete mode 100755 product/Coramy/skins/coramy_pdm/forme_list_ui.form delete mode 100755 product/Coramy/skins/coramy_pdm/forme_mise_au_point_view.form delete mode 100755 product/Coramy/skins/coramy_pdm/forme_search.form delete mode 100755 product/Coramy/skins/coramy_pdm/forme_vet.form delete mode 100755 product/Coramy/skins/coramy_pdm/forme_view.form delete mode 100755 product/Coramy/skins/coramy_pdm/forme_workflow_lancer_prototype.form delete mode 100755 product/Coramy/skins/coramy_pdm/forme_workflow_rectifier_dossier_technique.form delete mode 100755 product/Coramy/skins/coramy_pdm/forme_workflow_rectifier_forme.form delete mode 100755 product/Coramy/skins/coramy_pdm/forme_workflow_soumettre_modelisme.form delete mode 100755 product/Coramy/skins/coramy_pdm/forme_workflow_valider_dossier_technique.form delete mode 100755 product/Coramy/skins/coramy_pdm/forme_workflow_valider_forme.form delete mode 100755 product/Coramy/skins/coramy_pdm/gamme_list.form delete mode 100755 product/Coramy/skins/coramy_pdm/gamme_list_sort_on.form delete mode 100755 product/Coramy/skins/coramy_pdm/gamme_list_ui.form delete mode 100755 product/Coramy/skins/coramy_pdm/gamme_sql_tissu_search.zsql delete mode 100755 product/Coramy/skins/coramy_pdm/gamme_tissu_search.form delete mode 100755 product/Coramy/skins/coramy_pdm/gamme_tissu_search_list.form delete mode 100755 product/Coramy/skins/coramy_pdm/gamme_view.form delete mode 100755 product/Coramy/skins/coramy_pdm/getModeleAggregatedModeOperatoire.py delete mode 100755 product/Coramy/skins/coramy_pdm/getModeleAggregatedNomenclature.py delete mode 100755 product/Coramy/skins/coramy_pdm/getModelisteDesigne.py delete mode 100755 product/Coramy/skins/coramy_pdm/grille_consommation_quantity_view.form delete mode 100755 product/Coramy/skins/coramy_pdm/grille_consommation_update.py delete mode 100755 product/Coramy/skins/coramy_pdm/grille_consommation_update_form.form delete mode 100755 product/Coramy/skins/coramy_pdm/grille_consommation_view.form delete mode 100755 product/Coramy/skins/coramy_pdm/modele2transformation.py delete mode 100755 product/Coramy/skins/coramy_pdm/modele2transformation_access.py delete mode 100755 product/Coramy/skins/coramy_pdm/modele2transformation_details.py delete mode 100755 product/Coramy/skins/coramy_pdm/modele2transformation_print.py delete mode 100755 product/Coramy/skins/coramy_pdm/modele_catalog.pt delete mode 100755 product/Coramy/skins/coramy_pdm/modele_default_search.form delete mode 100755 product/Coramy/skins/coramy_pdm/modele_default_search_list.form delete mode 100755 product/Coramy/skins/coramy_pdm/modele_dessins_list.py delete mode 100755 product/Coramy/skins/coramy_pdm/modele_history_view.pt delete mode 100755 product/Coramy/skins/coramy_pdm/modele_id_search_list.form delete mode 100755 product/Coramy/skins/coramy_pdm/modele_list.form delete mode 100755 product/Coramy/skins/coramy_pdm/modele_list2.form delete mode 100755 product/Coramy/skins/coramy_pdm/modele_list_export.py delete mode 100755 product/Coramy/skins/coramy_pdm/modele_list_set_gencod_coramy.py delete mode 100755 product/Coramy/skins/coramy_pdm/modele_list_set_gencod_houvenaegel.py delete mode 100755 product/Coramy/skins/coramy_pdm/modele_list_sort_on.form delete mode 100755 product/Coramy/skins/coramy_pdm/modele_list_ui.form delete mode 100755 product/Coramy/skins/coramy_pdm/modele_list_update_gencod.py delete mode 100755 product/Coramy/skins/coramy_pdm/modele_mise_au_point_view.form delete mode 100755 product/Coramy/skins/coramy_pdm/modele_pri_matrix_item_list.py delete mode 100755 product/Coramy/skins/coramy_pdm/modele_pri_view.form delete mode 100755 product/Coramy/skins/coramy_pdm/modele_price_view.form delete mode 100755 product/Coramy/skins/coramy_pdm/modele_print.pt delete mode 100755 product/Coramy/skins/coramy_pdm/modele_print_list.py delete mode 100755 product/Coramy/skins/coramy_pdm/modele_search.form delete mode 100755 product/Coramy/skins/coramy_pdm/modele_search2.form delete mode 100755 product/Coramy/skins/coramy_pdm/modele_search_id.form delete mode 100755 product/Coramy/skins/coramy_pdm/modele_search_id_list.form delete mode 100755 product/Coramy/skins/coramy_pdm/modele_search_origine.form delete mode 100755 product/Coramy/skins/coramy_pdm/modele_search_origine_list.form delete mode 100755 product/Coramy/skins/coramy_pdm/modele_set_gencod_coramy.py delete mode 100755 product/Coramy/skins/coramy_pdm/modele_set_gencod_houvenaegel.py delete mode 100755 product/Coramy/skins/coramy_pdm/modele_show_local_roles.py delete mode 100755 product/Coramy/skins/coramy_pdm/modele_sql_default_search.zsql delete mode 100755 product/Coramy/skins/coramy_pdm/modele_sql_search_destination_reference.zsql delete mode 100755 product/Coramy/skins/coramy_pdm/modele_sql_search_id.zsql delete mode 100755 product/Coramy/skins/coramy_pdm/modele_sql_search_origine.zsql delete mode 100755 product/Coramy/skins/coramy_pdm/modele_transformation.py delete mode 100755 product/Coramy/skins/coramy_pdm/modele_update_price.py delete mode 100755 product/Coramy/skins/coramy_pdm/modele_variante_morphologique_view.form delete mode 100755 product/Coramy/skins/coramy_pdm/modele_variated_reference_view.form delete mode 100755 product/Coramy/skins/coramy_pdm/modele_view.form delete mode 100755 product/Coramy/skins/coramy_pdm/modele_workflow_abandonner_modele.form delete mode 100755 product/Coramy/skins/coramy_pdm/modele_workflow_confirmer_accord_client.form delete mode 100755 product/Coramy/skins/coramy_pdm/modele_workflow_correction.form delete mode 100755 product/Coramy/skins/coramy_pdm/modele_workflow_designer_gestionaire.form delete mode 100755 product/Coramy/skins/coramy_pdm/modele_workflow_designer_modeliste.form delete mode 100755 product/Coramy/skins/coramy_pdm/modele_workflow_industrialiser_modele_brouillon.form delete mode 100755 product/Coramy/skins/coramy_pdm/modele_workflow_industrialiser_modele_collection.form delete mode 100755 product/Coramy/skins/coramy_pdm/modele_workflow_lancer_etude.form delete mode 100755 product/Coramy/skins/coramy_pdm/modele_workflow_lancer_prototype.form delete mode 100755 product/Coramy/skins/coramy_pdm/modele_workflow_proposer_collection.form delete mode 100755 product/Coramy/skins/coramy_pdm/modele_workflow_rectifier_modele.form delete mode 100755 product/Coramy/skins/coramy_pdm/modele_workflow_refuser_brouillon.form delete mode 100755 product/Coramy/skins/coramy_pdm/modele_workflow_revendiquer_propriete.form delete mode 100755 product/Coramy/skins/coramy_pdm/modele_workflow_solutionner_probleme_modelisme.form delete mode 100755 product/Coramy/skins/coramy_pdm/modele_workflow_soumettre_modelisme.form delete mode 100755 product/Coramy/skins/coramy_pdm/modele_workflow_soumettre_probleme_modelisme.form delete mode 100755 product/Coramy/skins/coramy_pdm/modele_workflow_valider_dabord_finition.form delete mode 100755 product/Coramy/skins/coramy_pdm/modele_workflow_valider_dabord_gamme.form delete mode 100755 product/Coramy/skins/coramy_pdm/modele_workflow_valider_dabord_gradation.form delete mode 100755 product/Coramy/skins/coramy_pdm/modele_workflow_valider_dabord_nomenclature.form delete mode 100755 product/Coramy/skins/coramy_pdm/modele_workflow_valider_ensuite_finition.form delete mode 100755 product/Coramy/skins/coramy_pdm/modele_workflow_valider_ensuite_gamme.form delete mode 100755 product/Coramy/skins/coramy_pdm/modele_workflow_valider_ensuite_gradation.form delete mode 100755 product/Coramy/skins/coramy_pdm/modele_workflow_valider_ensuite_nomenclature.form delete mode 100755 product/Coramy/skins/coramy_pdm/modele_workflow_valider_infos_client.form delete mode 100755 product/Coramy/skins/coramy_pdm/modele_workflow_valider_modele.form delete mode 100755 product/Coramy/skins/coramy_pdm/modele_workflow_valider_modele_reconduit.form delete mode 100755 product/Coramy/skins/coramy_pdm/modele_workflow_valider_prix.form delete mode 100755 product/Coramy/skins/coramy_pdm/modele_workflow_valider_prix_reconduit.form delete mode 100755 product/Coramy/skins/coramy_pdm/modeles_apply.py delete mode 100755 product/Coramy/skins/coramy_pdm/modeles_apply_form.form delete mode 100755 product/Coramy/skins/coramy_pdm/modeles_print_list.py delete mode 100755 product/Coramy/skins/coramy_pdm/modeles_print_list_form.form delete mode 100755 product/Coramy/skins/coramy_pdm/morceau_view.form delete mode 100755 product/Coramy/skins/coramy_pdm/operation_view.form delete mode 100755 product/Coramy/skins/coramy_pdm/resource_variation_view.form delete mode 100755 product/Coramy/skins/coramy_pdm/setEan13Modele.py delete mode 100755 product/Coramy/skins/coramy_pdm/sql_id_search.zsql delete mode 100755 product/Coramy/skins/coramy_pdm/tissu_list.form delete mode 100755 product/Coramy/skins/coramy_pdm/tissu_list_export.py delete mode 100755 product/Coramy/skins/coramy_pdm/tissu_list_sort_on.form delete mode 100755 product/Coramy/skins/coramy_pdm/tissu_list_ui.form delete mode 100755 product/Coramy/skins/coramy_pdm/tissu_search.form delete mode 100755 product/Coramy/skins/coramy_pdm/tissu_variante_view.pt delete mode 100755 product/Coramy/skins/coramy_pdm/tissu_view.form delete mode 100755 product/Coramy/skins/coramy_pdm/transformation_aggregated_view.form delete mode 100755 product/Coramy/skins/coramy_pdm/transformation_assorted_view.form delete mode 100755 product/Coramy/skins/coramy_pdm/transformation_consommation_update.py delete mode 100755 product/Coramy/skins/coramy_pdm/transformation_consommation_update_form.form delete mode 100755 product/Coramy/skins/coramy_pdm/transformation_correspondances_print.pt delete mode 100755 product/Coramy/skins/coramy_pdm/transformation_expanded_view.pt delete mode 100755 product/Coramy/skins/coramy_pdm/transformation_expanded_view2.pt delete mode 100755 product/Coramy/skins/coramy_pdm/transformation_expanded_view_form.form delete mode 100755 product/Coramy/skins/coramy_pdm/transformation_getAggregatedList.py delete mode 100755 product/Coramy/skins/coramy_pdm/transformation_history_view2.pt delete mode 100755 product/Coramy/skins/coramy_pdm/transformation_identity_update.py delete mode 100755 product/Coramy/skins/coramy_pdm/transformation_list.form delete mode 100755 product/Coramy/skins/coramy_pdm/transformation_operation_aggregated_view.form delete mode 100755 product/Coramy/skins/coramy_pdm/transformation_operation_view.form delete mode 100755 product/Coramy/skins/coramy_pdm/transformation_operation_view_old.form delete mode 100755 product/Coramy/skins/coramy_pdm/transformation_print.pt delete mode 100755 product/Coramy/skins/coramy_pdm/transformation_print_form.form delete mode 100755 product/Coramy/skins/coramy_pdm/transformation_speed_test.py delete mode 100755 product/Coramy/skins/coramy_pdm/transformation_sql_search.zsql delete mode 100755 product/Coramy/skins/coramy_pdm/transformation_view.form delete mode 100755 product/Coramy/skins/coramy_pdm/transformation_workflow_valider_transformation.form delete mode 100755 product/Coramy/skins/coramy_pdm/transformed_resource_operation_view.form delete mode 100755 product/Coramy/skins/coramy_pdm/transformed_resource_quantity_view.form delete mode 100755 product/Coramy/skins/coramy_pdm/transformed_resource_variation_view.form delete mode 100755 product/Coramy/skins/coramy_pdm/transformed_resource_view.form delete mode 100755 product/Coramy/skins/coramy_pdm/variante_composant_view.form delete mode 100755 product/Coramy/skins/coramy_pdm/variante_gamme_view.form delete mode 100755 product/Coramy/skins/coramy_pdm/variante_modele_view.form delete mode 100755 product/Coramy/skins/coramy_pdm/variante_morphologique_view.form delete mode 100755 product/Coramy/skins/coramy_pdm/variante_tissu_view.form delete mode 100755 product/Coramy/skins/coramy_pdm/variated_property_view.form delete mode 100755 product/Coramy/skins/coramy_pdm/variated_reference_matrix_item_list.py delete mode 100755 product/Coramy/skins/coramy_pdm/variated_reference_view.form delete mode 100755 product/Coramy/skins/coramy_pdm/variated_references_set_gencod_coramy.py delete mode 100755 product/Coramy/skins/coramy_pdm/verif_modele.py delete mode 100755 product/Coramy/skins/coramy_pdm/vetement_bareme_mesures_view.form delete mode 100755 product/Coramy/skins/coramy_pdm/vetement_list.form delete mode 100755 product/Coramy/skins/coramy_pdm/vetement_mesures_auto_selection.py delete mode 100755 product/Coramy/skins/coramy_pdm/vetement_mise_au_point_view.form delete mode 100755 product/Coramy/skins/coramy_pdm/vetement_related_modele_view.form delete mode 100755 product/Coramy/skins/coramy_pdm/vetement_search_list.form delete mode 100755 product/Coramy/skins/coramy_pdm/vetement_view.form delete mode 100755 product/Coramy/skins/coramy_pdm/vetement_workflow_annuler_etude.form delete mode 100755 product/Coramy/skins/coramy_pdm/vetement_workflow_etudier_gradation.form delete mode 100755 product/Coramy/skins/coramy_pdm/vetement_workflow_lancer_gamme_taille.form delete mode 100755 product/Coramy/skins/coramy_pdm/vetement_workflow_lancer_prototype.form delete mode 100755 product/Coramy/skins/coramy_pdm/vetement_workflow_rectifier_dossier_technique.form delete mode 100755 product/Coramy/skins/coramy_pdm/vetement_workflow_rectifier_gradation.form delete mode 100755 product/Coramy/skins/coramy_pdm/vetement_workflow_rectifier_vetement.form delete mode 100755 product/Coramy/skins/coramy_pdm/vetement_workflow_valider_dossier_technique.form delete mode 100755 product/Coramy/skins/coramy_pdm/vetement_workflow_valider_gamme_taille.form delete mode 100755 product/Coramy/skins/coramy_pdm/vetement_workflow_valider_prototype.form delete mode 100755 product/Coramy/skins/coramy_pdm/zGetTissuSupplierList.zsql delete mode 100755 product/Coramy/skins/coramy_trade/ContainerLine_zGetTotal.zsql delete mode 100755 product/Coramy/skins/coramy_trade/Container_fastInput.py delete mode 100755 product/Coramy/skins/coramy_trade/Container_fastInputForm.form delete mode 100755 product/Coramy/skins/coramy_trade/Container_oneClicInput.py delete mode 100755 product/Coramy/skins/coramy_trade/Container_oneClicInputForm.form delete mode 100755 product/Coramy/skins/coramy_trade/Container_printExtandLabel.py delete mode 100755 product/Coramy/skins/coramy_trade/Container_printLabel.py delete mode 100755 product/Coramy/skins/coramy_trade/Container_printMetoLabel.py delete mode 100755 product/Coramy/skins/coramy_trade/Container_sendExtandEdi.py delete mode 100755 product/Coramy/skins/coramy_trade/Container_zGetCellList.org.zsql delete mode 100755 product/Coramy/skins/coramy_trade/Container_zGetCellList.zsql delete mode 100755 product/Coramy/skins/coramy_trade/Container_zGetTotal.zsql delete mode 100755 product/Coramy/skins/coramy_trade/DeliveryCell_getContainedTargetQuantity.py delete mode 100755 product/Coramy/skins/coramy_trade/DeliveryCell_zGetContainedTargetQuantity.zsql delete mode 100755 product/Coramy/skins/coramy_trade/DeliveryCell_zGetItemList.zsql delete mode 100755 product/Coramy/skins/coramy_trade/DeliveryLine_asCellRange.py delete mode 100755 product/Coramy/skins/coramy_trade/DeliveryLine_getCorrespondanceDict.py delete mode 100755 product/Coramy/skins/coramy_trade/DeliveryLine_getTargetQuantityList.py delete mode 100755 product/Coramy/skins/coramy_trade/DeliveryLine_zGetTotal.zsql delete mode 100755 product/Coramy/skins/coramy_trade/DeliveryTest_selectionAssignLocalRoles.py delete mode 100755 product/Coramy/skins/coramy_trade/Delivery_exportContainerList.py delete mode 100755 product/Coramy/skins/coramy_trade/Delivery_futureInventoryView.form delete mode 100755 product/Coramy/skins/coramy_trade/Delivery_getFutureInventoryList.py delete mode 100755 product/Coramy/skins/coramy_trade/Delivery_getInventoryList.py delete mode 100755 product/Coramy/skins/coramy_trade/Delivery_inventoryView.form delete mode 100755 product/Coramy/skins/coramy_trade/Delivery_searchByResource.form delete mode 100755 product/Coramy/skins/coramy_trade/Delivery_splitDeferTransitionForm.form delete mode 100755 product/Coramy/skins/coramy_trade/Delivery_zGetCellList.zsql delete mode 100755 product/Coramy/skins/coramy_trade/Delivery_zGetInventoryList.zsql delete mode 100755 product/Coramy/skins/coramy_trade/Delivery_zGetNeededCellList.zsql delete mode 100755 product/Coramy/skins/coramy_trade/Delivery_zGetTotal.zsql delete mode 100755 product/Coramy/skins/coramy_trade/InvoiceLine_priceView.form delete mode 100755 product/Coramy/skins/coramy_trade/InvoiceLine_quantityView.form delete mode 100755 product/Coramy/skins/coramy_trade/InvoiceLine_view.form delete mode 100755 product/Coramy/skins/coramy_trade/Invoice_print.pdf delete mode 100755 product/Coramy/skins/coramy_trade/Invoice_zGetDescription.py delete mode 100755 product/Coramy/skins/coramy_trade/Invoice_zGetDueDate.py delete mode 100755 product/Coramy/skins/coramy_trade/Invoice_zGetEscompteDescription.py delete mode 100755 product/Coramy/skins/coramy_trade/Invoice_zGetPaymentTime.py delete mode 100755 product/Coramy/skins/coramy_trade/Invoice_zGetSourceSectionDescription.py delete mode 100755 product/Coramy/skins/coramy_trade/Invoice_zGetTotal.zsql delete mode 100755 product/Coramy/skins/coramy_trade/Invoice_zGetTotalNetPrice.py delete mode 100755 product/Coramy/skins/coramy_trade/Invoice_zGetTotalVat.py delete mode 100755 product/Coramy/skins/coramy_trade/Movement_lookupPrice.py delete mode 100755 product/Coramy/skins/coramy_trade/Movement_zList.zsql delete mode 100755 product/Coramy/skins/coramy_trade/Movement_zSetDestinationTotalAssetPrice.zsql delete mode 100755 product/Coramy/skins/coramy_trade/Movement_zSetSourceTotalAssetPrice.zsql delete mode 100755 product/Coramy/skins/coramy_trade/Order_heavyControl.py delete mode 100755 product/Coramy/skins/coramy_trade/Order_lightControl.py delete mode 100755 product/Coramy/skins/coramy_trade/Order_updateLocalRoles.py delete mode 100755 product/Coramy/skins/coramy_trade/PackingList_getDistinctContainerList.py delete mode 100755 product/Coramy/skins/coramy_trade/PackingList_getTotalGrossWeight.py delete mode 100755 product/Coramy/skins/coramy_trade/PlanTransportExtand.py delete mode 100755 product/Coramy/skins/coramy_trade/PurchaseOrder_reportList.form delete mode 100755 product/Coramy/skins/coramy_trade/SaleInvoice_dateSearch.form delete mode 100755 product/Coramy/skins/coramy_trade/SaleInvoice_exportSage.py delete mode 100755 product/Coramy/skins/coramy_trade/SaleInvoice_exportSageCodeComptableList.py delete mode 100755 product/Coramy/skins/coramy_trade/SaleInvoice_exportSageList.py delete mode 100755 product/Coramy/skins/coramy_trade/SaleInvoice_printPdf.py delete mode 100755 product/Coramy/skins/coramy_trade/SaleInvoice_printPdfList.py delete mode 100755 product/Coramy/skins/coramy_trade/SaleInvoice_printPdfListForm.form delete mode 100755 product/Coramy/skins/coramy_trade/SaleInvoice_updateTransaction.py delete mode 100755 product/Coramy/skins/coramy_trade/SalesOrder_confirmList.py delete mode 100755 product/Coramy/skins/coramy_trade/SalesOrder_confirmListForm.form delete mode 100755 product/Coramy/skins/coramy_trade/SalesOrder_countEdiSales.py delete mode 100755 product/Coramy/skins/coramy_trade/SalesOrder_importEdi.py delete mode 100755 product/Coramy/skins/coramy_trade/SalesOrder_importEdiAuchan.py delete mode 100755 product/Coramy/skins/coramy_trade/SalesOrder_importEdiCarrefour.py delete mode 100755 product/Coramy/skins/coramy_trade/SalesOrder_importEdiFileList.py delete mode 100755 product/Coramy/skins/coramy_trade/SalesOrder_importEdiForm.form delete mode 100755 product/Coramy/skins/coramy_trade/SalesOrder_orderList.py delete mode 100755 product/Coramy/skins/coramy_trade/SalesOrder_reportByClient.py delete mode 100755 product/Coramy/skins/coramy_trade/SalesOrder_reportByClientForm.form delete mode 100755 product/Coramy/skins/coramy_trade/SalesOrder_reportByResource.py delete mode 100755 product/Coramy/skins/coramy_trade/SalesOrder_reportByResourceForm.form delete mode 100755 product/Coramy/skins/coramy_trade/SalesOrder_searchByClientGroup.form delete mode 100755 product/Coramy/skins/coramy_trade/SalesOrder_zReportByClient.zsql delete mode 100755 product/Coramy/skins/coramy_trade/SalesOrder_zReportByResource.zsql delete mode 100755 product/Coramy/skins/coramy_trade/SalesPackingList_buildRemiseTransporteurDict.py delete mode 100755 product/Coramy/skins/coramy_trade/SalesPackingList_exportEdi.py delete mode 100755 product/Coramy/skins/coramy_trade/SalesPackingList_exportEdiList.py delete mode 100755 product/Coramy/skins/coramy_trade/SalesPackingList_oneContainerAutoPacking.py delete mode 100755 product/Coramy/skins/coramy_trade/SalesPackingList_oneContainerAutoPackingForm.form delete mode 100755 product/Coramy/skins/coramy_trade/SalesPackingList_oneContainerAutoPackingList.py delete mode 100755 product/Coramy/skins/coramy_trade/SalesPackingList_oneContainerAutoPackingSelectScript.py delete mode 100755 product/Coramy/skins/coramy_trade/SalesPackingList_printForm.form delete mode 100755 product/Coramy/skins/coramy_trade/SalesPackingList_searchByClientGroup.form delete mode 100755 product/Coramy/skins/coramy_trade/bls_echantillon_print.pt delete mode 100755 product/Coramy/skins/coramy_trade/condition_achat_list.form delete mode 100755 product/Coramy/skins/coramy_trade/condition_achat_profil_view.form delete mode 100755 product/Coramy/skins/coramy_trade/condition_achat_sql_search.zsql delete mode 100755 product/Coramy/skins/coramy_trade/condition_achat_view.form delete mode 100755 product/Coramy/skins/coramy_trade/condition_paiement_view.form delete mode 100755 product/Coramy/skins/coramy_trade/condition_vente_list.form delete mode 100755 product/Coramy/skins/coramy_trade/condition_vente_profil_view.form delete mode 100755 product/Coramy/skins/coramy_trade/condition_vente_sql_search.zsql delete mode 100755 product/Coramy/skins/coramy_trade/condition_vente_view.form delete mode 100755 product/Coramy/skins/coramy_trade/container_aggregated_view.form delete mode 100755 product/Coramy/skins/coramy_trade/container_line_target_quantity_view.form delete mode 100755 product/Coramy/skins/coramy_trade/container_line_view.form delete mode 100755 product/Coramy/skins/coramy_trade/container_list.form delete mode 100755 product/Coramy/skins/coramy_trade/container_view.form delete mode 100755 product/Coramy/skins/coramy_trade/copy_of_echantillon_print.pt delete mode 100755 product/Coramy/skins/coramy_trade/copy_of_sales_invoice_list_view.form delete mode 100755 product/Coramy/skins/coramy_trade/currency_list.form delete mode 100755 product/Coramy/skins/coramy_trade/currency_view.form delete mode 100755 product/Coramy/skins/coramy_trade/default_pdf_template.pt delete mode 100755 product/Coramy/skins/coramy_trade/default_pdf_template_save.pt delete mode 100755 product/Coramy/skins/coramy_trade/delivery_cell_view.form delete mode 100755 product/Coramy/skins/coramy_trade/delivery_line_quantity_view.form delete mode 100755 product/Coramy/skins/coramy_trade/delivery_line_view.form delete mode 100755 product/Coramy/skins/coramy_trade/echantillon_modeliste_sql_worklist.zsql delete mode 100755 product/Coramy/skins/coramy_trade/echantillon_modeliste_worklist.pt delete mode 100755 product/Coramy/skins/coramy_trade/echantillon_page_count.py delete mode 100755 product/Coramy/skins/coramy_trade/echantillon_page_list.py delete mode 100755 product/Coramy/skins/coramy_trade/echantillon_print.pt delete mode 100755 product/Coramy/skins/coramy_trade/echantillon_print2.pt delete mode 100755 product/Coramy/skins/coramy_trade/echantillon_print3.pt delete mode 100755 product/Coramy/skins/coramy_trade/echantillon_test.py delete mode 100755 product/Coramy/skins/coramy_trade/filtered_sample_order_lines.py delete mode 100755 product/Coramy/skins/coramy_trade/find_delivery_lines_sql_order_list.zsql delete mode 100755 product/Coramy/skins/coramy_trade/find_order_lines_sql_order_list.zsql delete mode 100755 product/Coramy/skins/coramy_trade/first_list_item_add.py delete mode 100755 product/Coramy/skins/coramy_trade/gallop_print.pt delete mode 100755 product/Coramy/skins/coramy_trade/getDeliveryCellPrintList.py delete mode 100755 product/Coramy/skins/coramy_trade/getDeliveryCellResourceSourceTitle.py delete mode 100755 product/Coramy/skins/coramy_trade/getOrderLineClient.py delete mode 100755 product/Coramy/skins/coramy_trade/getOrderLineModeleCollection.py delete mode 100755 product/Coramy/skins/coramy_trade/getOrderLineModeleLocalRoles.py delete mode 100755 product/Coramy/skins/coramy_trade/getOrderLineModeleOrigine.py delete mode 100755 product/Coramy/skins/coramy_trade/getOrderLineModeleState.py delete mode 100755 product/Coramy/skins/coramy_trade/getOrderLineStopDate.py delete mode 100755 product/Coramy/skins/coramy_trade/getOrderLineTransformationState.py delete mode 100755 product/Coramy/skins/coramy_trade/getOrderPrettyTotalQuantity.py delete mode 100755 product/Coramy/skins/coramy_trade/getPurchaseDeliveryCellSourceReference.py delete mode 100755 product/Coramy/skins/coramy_trade/invoice_transaction_print.pt delete mode 100755 product/Coramy/skins/coramy_trade/item_by_ean13_code_sql_search.zsql delete mode 100755 product/Coramy/skins/coramy_trade/item_by_title_sql_search.zsql delete mode 100755 product/Coramy/skins/coramy_trade/lookup_delivery_price.py delete mode 100755 product/Coramy/skins/coramy_trade/lookup_order_price.py delete mode 100755 product/Coramy/skins/coramy_trade/noir_print.pt delete mode 100755 product/Coramy/skins/coramy_trade/order_confirm_workflow_action.form delete mode 100755 product/Coramy/skins/coramy_trade/order_create_packing_list.py delete mode 100755 product/Coramy/skins/coramy_trade/order_history_view.pt delete mode 100755 product/Coramy/skins/coramy_trade/order_line_matrix_item_list.py delete mode 100755 product/Coramy/skins/coramy_trade/order_line_price_view.form delete mode 100755 product/Coramy/skins/coramy_trade/order_line_quantity_view.form delete mode 100755 product/Coramy/skins/coramy_trade/order_line_sort_on.form delete mode 100755 product/Coramy/skins/coramy_trade/order_line_view.form delete mode 100755 product/Coramy/skins/coramy_trade/order_list_sort_on.form delete mode 100755 product/Coramy/skins/coramy_trade/order_list_ui.form delete mode 100755 product/Coramy/skins/coramy_trade/order_search.form delete mode 100755 product/Coramy/skins/coramy_trade/order_sql_totalizer.zsql delete mode 100755 product/Coramy/skins/coramy_trade/order_workflow_valider_composant.form delete mode 100755 product/Coramy/skins/coramy_trade/ordered_lines.py delete mode 100755 product/Coramy/skins/coramy_trade/packing_list_line_price_view.form delete mode 100755 product/Coramy/skins/coramy_trade/packing_list_line_quantity_view.form delete mode 100755 product/Coramy/skins/coramy_trade/packing_list_line_target_quantity_view.form delete mode 100755 product/Coramy/skins/coramy_trade/packing_list_line_view.form delete mode 100755 product/Coramy/skins/coramy_trade/prix_print.pt delete mode 100755 product/Coramy/skins/coramy_trade/purchase_order_apply_condition.py delete mode 100755 product/Coramy/skins/coramy_trade/purchase_order_apply_condition_handler.py delete mode 100755 product/Coramy/skins/coramy_trade/purchase_order_list.form delete mode 100755 product/Coramy/skins/coramy_trade/purchase_order_print.pt delete mode 100755 product/Coramy/skins/coramy_trade/purchase_order_view.form delete mode 100755 product/Coramy/skins/coramy_trade/purchase_packing_list_aggregated_view.form delete mode 100755 product/Coramy/skins/coramy_trade/purchase_packing_list_list.form delete mode 100755 product/Coramy/skins/coramy_trade/purchase_packing_list_view.form delete mode 100755 product/Coramy/skins/coramy_trade/remise_view.form delete mode 100755 product/Coramy/skins/coramy_trade/sale_invoice_transaction_view.form delete mode 100755 product/Coramy/skins/coramy_trade/sales_invoice_list.form delete mode 100755 product/Coramy/skins/coramy_trade/sales_invoice_list_view.form delete mode 100755 product/Coramy/skins/coramy_trade/sales_invoice_print.pt delete mode 100755 product/Coramy/skins/coramy_trade/sales_invoice_view.form delete mode 100755 product/Coramy/skins/coramy_trade/sales_order_apply_condition.py delete mode 100755 product/Coramy/skins/coramy_trade/sales_order_list.form delete mode 100755 product/Coramy/skins/coramy_trade/sales_order_view.form delete mode 100755 product/Coramy/skins/coramy_trade/sales_packing_list_aggregated_view.form delete mode 100755 product/Coramy/skins/coramy_trade/sales_packing_list_container_list_print.pt delete mode 100755 product/Coramy/skins/coramy_trade/sales_packing_list_container_view.form delete mode 100755 product/Coramy/skins/coramy_trade/sales_packing_list_list.form delete mode 100755 product/Coramy/skins/coramy_trade/sales_packing_list_print.pt delete mode 100755 product/Coramy/skins/coramy_trade/sales_packing_list_print_remise_transporteur.pt delete mode 100755 product/Coramy/skins/coramy_trade/sales_packing_list_secure_print.py delete mode 100755 product/Coramy/skins/coramy_trade/sales_packing_list_view.form delete mode 100755 product/Coramy/skins/coramy_trade/sample_delivery_count_samples.py delete mode 100755 product/Coramy/skins/coramy_trade/sample_etiquette_BLS_print.py delete mode 100755 product/Coramy/skins/coramy_trade/sample_etiquette_print.py delete mode 100755 product/Coramy/skins/coramy_trade/sample_order_control.pt delete mode 100755 product/Coramy/skins/coramy_trade/sample_order_count_samples.py delete mode 100755 product/Coramy/skins/coramy_trade/sample_order_export.py delete mode 100755 product/Coramy/skins/coramy_trade/sample_order_line_compute_price.py delete mode 100755 product/Coramy/skins/coramy_trade/sample_order_line_copy_price.py delete mode 100755 product/Coramy/skins/coramy_trade/sample_order_line_list.form delete mode 100755 product/Coramy/skins/coramy_trade/sample_order_line_modele_state.py delete mode 100755 product/Coramy/skins/coramy_trade/sample_order_line_search.zsql delete mode 100755 product/Coramy/skins/coramy_trade/sample_order_line_theme_sort.py delete mode 100755 product/Coramy/skins/coramy_trade/sample_order_line_view.form delete mode 100755 product/Coramy/skins/coramy_trade/sample_order_lines_to_prepare.pt delete mode 100755 product/Coramy/skins/coramy_trade/sample_order_list.form delete mode 100755 product/Coramy/skins/coramy_trade/sample_order_modele_search.form delete mode 100755 product/Coramy/skins/coramy_trade/sample_order_modele_search_list.form delete mode 100755 product/Coramy/skins/coramy_trade/sample_order_print.pt delete mode 100755 product/Coramy/skins/coramy_trade/sample_order_sql_modele_search.zsql delete mode 100755 product/Coramy/skins/coramy_trade/sample_order_view.form delete mode 100755 product/Coramy/skins/coramy_trade/sample_price2.py delete mode 100755 product/Coramy/skins/coramy_trade/samples_delivered.zsql delete mode 100755 product/Coramy/skins/coramy_trade/samples_delivery_sql_order_id_search.zsql delete mode 100755 product/Coramy/skins/coramy_trade/samples_delivery_workflow_annuler_reliquat.form delete mode 100755 product/Coramy/skins/coramy_trade/samples_delivery_workflow_creer_reliquat.form delete mode 100755 product/Coramy/skins/coramy_trade/samples_delivery_workflow_expedier_livraison.form delete mode 100755 product/Coramy/skins/coramy_trade/samples_delivery_workflow_rectifier_preparation.form delete mode 100755 product/Coramy/skins/coramy_trade/samples_delivery_workflow_valider_preparation.form delete mode 100755 product/Coramy/skins/coramy_trade/samples_order_create_packing_list.py delete mode 100755 product/Coramy/skins/coramy_trade/samples_order_element_tarif_create.py delete mode 100755 product/Coramy/skins/coramy_trade/samples_order_selection_to_list.py delete mode 100755 product/Coramy/skins/coramy_trade/samples_order_suivi.pt delete mode 100755 product/Coramy/skins/coramy_trade/samples_order_workflow_preparer_livraison.form delete mode 100755 product/Coramy/skins/coramy_trade/samples_order_workflow_preparer_nouvelle_livraison.form delete mode 100755 product/Coramy/skins/coramy_trade/samples_order_workflow_valider_commande.form delete mode 100755 product/Coramy/skins/coramy_trade/samples_ordered.zsql delete mode 100755 product/Coramy/skins/coramy_trade/samples_ordered_delivered.zsql delete mode 100755 product/Coramy/skins/coramy_trade/samples_packing_list_list.form delete mode 100755 product/Coramy/skins/coramy_trade/samples_packing_list_modele_search.form delete mode 100755 product/Coramy/skins/coramy_trade/samples_packing_list_modele_search_list.form delete mode 100755 product/Coramy/skins/coramy_trade/samples_packing_list_print.pt delete mode 100755 product/Coramy/skins/coramy_trade/samples_packing_list_sql_modele_search.zsql delete mode 100755 product/Coramy/skins/coramy_trade/samples_packing_list_view.form delete mode 100755 product/Coramy/skins/coramy_trade/samples_to_produce.py delete mode 100755 product/Coramy/skins/coramy_trade/speed_order_input.py delete mode 100755 product/Coramy/skins/coramy_trade/speed_order_input_form.form delete mode 100755 product/Coramy/skins/coramy_trade/trade_condition_discount_view.form delete mode 100755 product/Coramy/skins/coramy_trade/trade_condition_payment_view.form delete mode 100755 product/Coramy/tests/.cvsignore delete mode 100755 product/Coramy/tests/__init__.py delete mode 100755 product/Coramy/tests/coramy_catalog.zexp delete mode 100755 product/Coramy/tests/coramy_delivery.zexp delete mode 100755 product/Coramy/tests/coramy_order.zexp delete mode 100755 product/Coramy/tests/framework.py delete mode 100755 product/Coramy/tests/run_test_example.sh delete mode 100755 product/Coramy/tests/runalltests.py delete mode 100755 product/Coramy/tests/testCoramyCMFActivity.py delete mode 100755 product/Coramy/tests/testCoramyFusion.py delete mode 100755 product/Coramy/tests/testCoramyOrder.py diff --git a/product/Coramy/.cvsignore b/product/Coramy/.cvsignore deleted file mode 100755 index d0743b7da6..0000000000 --- a/product/Coramy/.cvsignore +++ /dev/null @@ -1,2 +0,0 @@ -.AppleDouble -*.pyc diff --git a/product/Coramy/Constraint/.cvsignore b/product/Coramy/Constraint/.cvsignore deleted file mode 100755 index d0743b7da6..0000000000 --- a/product/Coramy/Constraint/.cvsignore +++ /dev/null @@ -1,2 +0,0 @@ -.AppleDouble -*.pyc diff --git a/product/Coramy/Constraint/__init__.py b/product/Coramy/Constraint/__init__.py deleted file mode 100755 index e69de29bb2..0000000000 diff --git a/product/Coramy/Document/.cvsignore b/product/Coramy/Document/.cvsignore deleted file mode 100755 index d0743b7da6..0000000000 --- a/product/Coramy/Document/.cvsignore +++ /dev/null @@ -1,2 +0,0 @@ -.AppleDouble -*.pyc diff --git a/product/Coramy/Document/AssortedResource.py b/product/Coramy/Document/AssortedResource.py deleted file mode 100755 index 8d0689bce5..0000000000 --- a/product/Coramy/Document/AssortedResource.py +++ /dev/null @@ -1,106 +0,0 @@ -############################################################################## -# -# Copyright (c) 2004 Nexedi SARL and Contributors. All Rights Reserved. -# Yoshinori Okuji <yo@nexedi.com> -# -# WARNING: This program as such is intended to be used by professional -# programmers who take the whole responsability of assessing all potential -# consequences resulting from its eventual inadequacies and bugs -# End users who are looking for a ready-to-use solution with commercial -# garantees and support are strongly adviced to contract a Free Software -# Service Company -# -# This program is Free Software; you can redistribute it and/or -# modify it under the terms of the GNU General Public License -# as published by the Free Software Foundation; either version 2 -# of the License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -# -############################################################################## - -from Globals import InitializeClass -from AccessControl import ClassSecurityInfo - -from Products.ERP5.Document.AssortedResource import AssortedResource as ERP5AssortedResource -from Products.ERP5Type import Permissions, PropertySheet, Constraint, Interface - -class AssortedResource(ERP5AssortedResource): - """ - AssortedResource defines which - resource is being transformed - - - quantity - - Maybe defined by mapped values inside the assorted resource - - """ - - meta_type = 'CORAMY Assorted Resource' - portal_type = 'Assorted Resource' - add_permission = Permissions.AddPortalContent - isPortalContent = 1 - isRADContent = 1 - - # Declarative security - security = ClassSecurityInfo() - security.declareObjectProtected(Permissions.View) - - # Declarative properties - property_sheets = ( PropertySheet.Base - , PropertySheet.SimpleItem - , PropertySheet.CategoryCore - , PropertySheet.Amount - , PropertySheet.TransformedResource - ) - - # Factory Type Information - factory_type_information = \ - { 'id' : portal_type - , 'meta_type' : meta_type - , 'description' : """\ -A bank account number holds a collection of numbers -and codes (ex. SWIFT, RIB, etc.) which may be used to -identify a bank account.""" - , 'icon' : 'assorted_resource_icon.gif' - , 'product' : 'ERP5' - , 'factory' : 'addAssortedResource' - , 'immediate_view' : 'assorted_resource_view' - , 'actions' : - ( { 'id' : 'view' - , 'name' : 'View' - , 'category' : 'object_view' - , 'action' : 'assorted_resource_view' - , 'permissions' : ( - Permissions.View, ) - } - , { 'id' : 'print' - , 'name' : 'Print' - , 'category' : 'object_print' - , 'action' : 'assorted_resource_print' - , 'permissions' : ( - Permissions.View, ) - } - , { 'id' : 'metadata' - , 'name' : 'Metadata' - , 'category' : 'object_view' - , 'action' : 'metadata_edit' - , 'permissions' : ( - Permissions.View, ) - } - , { 'id' : 'translate' - , 'name' : 'Translate' - , 'category' : 'object_action' - , 'action' : 'translation_template_view' - , 'permissions' : ( - Permissions.TranslateContent, ) - } - ) - } diff --git a/product/Coramy/Document/Assortiment.py b/product/Coramy/Document/Assortiment.py deleted file mode 100755 index dc32c648f7..0000000000 --- a/product/Coramy/Document/Assortiment.py +++ /dev/null @@ -1,168 +0,0 @@ -############################################################################## -# -# Copyright (c) 2002 Nexedi SARL and Contributors. All Rights Reserved. -# Jean-Paul Smets-Solanes <jp@nexedi.com> -# -# WARNING: This program as such is intended to be used by professional -# programmers who take the whole responsability of assessing all potential -# consequences resulting from its eventual inadequacies and bugs -# End users who are looking for a ready-to-use solution with commercial -# garantees and support are strongly adviced to contract a Free Software -# Service Company -# -# This program is Free Software; you can redistribute it and/or -# modify it under the terms of the GNU General Public License -# as published by the Free Software Foundation; either version 2 -# of the License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -# -############################################################################## - -from AccessControl import ClassSecurityInfo - -from Products.ERP5.Document.Resource import Resource -from Products.ERP5Type import Permissions, PropertySheet, Constraint, Interface -from Products.ERP5Type.Base import Base -from Products.ERP5Type.XMLMatrix import XMLMatrix - - -from zLOG import LOG - -class Assortiment(Resource, XMLMatrix): - """ - un assortiment.. - """ - - meta_type = 'CORAMY Assortiment' - portal_type = 'Assortiment' - add_permission = Permissions.AddPortalContent - isPortalContent = 1 - isRADContent = 1 - - # Declarative security - security = ClassSecurityInfo() - security.declareObjectProtected(Permissions.View) - - # Declarative properties - property_sheets = ( PropertySheet.Base - , PropertySheet.XMLObject - , PropertySheet.CategoryCore - , PropertySheet.DublinCore - , PropertySheet.Price - , PropertySheet.Resource - , PropertySheet.Reference - , PropertySheet.Assortiment - ) - - # Hard Wired Variation List - # XXX - may be incompatible with future versions of ERP5 - variation_base_category_list = ('coloris', 'taille') - - # Factory Type Information - factory_type_information = \ - { 'id' : portal_type - , 'meta_type' : meta_type - , 'description' : """\ -un modele...""" - , 'icon' : 'modele_icon.gif' - , 'product' : 'Coramy' - , 'factory' : 'addAssortiment' - , 'immediate_view' : 'assortiment_view' - , 'allow_discussion' : 1 - , 'allowed_content_types': ('Variante Modele', - ) - , 'filter_content_types' : 1 - , 'global_allow' : 1 - , 'actions' : - ( { 'id' : 'view' - , 'name' : 'View' - , 'category' : 'object_view' - , 'action' : 'assortiment_view' - , 'permissions' : ( - Permissions.View, ) - } - , { 'id' : 'list' - , 'name' : 'Object Contents' - , 'category' : 'object_action' - , 'action' : 'folder_contents' - , 'permissions' : ( - Permissions.View, ) - } - , { 'id' : 'print' - , 'name' : 'Print' - , 'category' : 'object_print' - , 'action' : 'assortiment_print' - , 'permissions' : ( - Permissions.View, ) - } - , { 'id' : 'metadata' - , 'name' : 'Metadata' - , 'category' : 'object_edit' - , 'action' : 'metadata_edit' - , 'permissions' : ( - Permissions.View, ) - } - , { 'id' : 'translate' - , 'name' : 'Translate' - , 'category' : 'object_action' - , 'action' : 'translation_template_view' - , 'permissions' : ( - Permissions.TranslateContent, ) - } - ) - } - - def _setTitle(self, value): - """ - Here we see that we must define an notion - of priority in the way fields are updated - """ - if value != self.getTitle(): - self.title = value - - security.declareProtected(Permissions.View, 'getTitle') - def getTitle(self): - """ - Returns the title if it exists or a combination of - first name and last name - """ - if self.title == '': - return self.getId() - else: - return self.title - Title = getTitle - - security.declareProtected(Permissions.ModifyPortalContent, 'setTitle') - def setTitle(self, value): - """ - Updates the title if necessary - """ - self._setTitle(value) - self.reindexObject() - - - security.declareProtected(Permissions.View, 'getDefaultQuantityUnit') - def getDefaultQuantityUnit(self): - # Requires for Assorted Resource XXX temp patch until getAggregated methods use real classes instead of dicts - # and access props/cats through accessors - return "Unite" - - security.declareProtected(Permissions.View, 'getQuantityUnit') - def getQuantityUnit(self): - # Requires for Assorted Resource XXX temp patch until getAggregated methods use real classes instead of dicts - # and access props/cats through accessors - return "Unite" - - security.declareProtected(Permissions.View, 'getQuantityUnitList') - def getQuantityUnitList(self): - # Requires for Assorted Resource XXX temp patch until getAggregated methods use real classes instead of dicts - # and access props/cats through accessors - return ["Unite"] diff --git a/product/Coramy/Document/Coloris.py b/product/Coramy/Document/Coloris.py deleted file mode 100755 index 9b9154433e..0000000000 --- a/product/Coramy/Document/Coloris.py +++ /dev/null @@ -1,107 +0,0 @@ -############################################################################## -# -# Copyright (c) 2002 Nexedi SARL and Contributors. All Rights Reserved. -# Jean-Paul Smets-Solanes <jp@nexedi.com> -# -# WARNING: This program as such is intended to be used by professional -# programmers who take the whole responsability of assessing all potential -# consequences resulting from its eventual inadequacies and bugs -# End users who are looking for a ready-to-use solution with commercial -# garantees and support are strongly adviced to contract a Free Software -# Service Company -# -# This program is Free Software; you can redistribute it and/or -# modify it under the terms of the GNU General Public License -# as published by the Free Software Foundation; either version 2 -# of the License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -# -############################################################################## - -from AccessControl import ClassSecurityInfo - -from Products.ERP5Type import Permissions, PropertySheet, Constraint, Interface -from Products.ERP5Type.XMLObject import XMLObject -from Products.ERP5.Document.Image import Image - -class Coloris(Image, XMLObject): - """ - une variante coloris.. - """ - - meta_type = 'CORAMY Coloris' - portal_type = 'Coloris' - add_permission = Permissions.AddPortalContent - isPortalContent = 1 - isRADContent = 1 - - # Declarative security - security = ClassSecurityInfo() - security.declareObjectProtected(Permissions.View) - - # Declarative properties - property_sheets = ( PropertySheet.Base - , PropertySheet.XMLObject - , PropertySheet.CategoryCore - , PropertySheet.DublinCore - , PropertySheet.Coloris - ) - - # Factory Type Information - factory_type_information = \ - { 'id' : portal_type - , 'meta_type' : meta_type - , 'description' : """\ -un coloris...""" - , 'icon' : 'coloris_icon.gif' - , 'product' : 'ERP5' - , 'factory' : 'addColoris' - , 'immediate_view' : 'coloris_view' - , 'actions' : - ( { 'id' : 'view' - , 'name' : 'View' - , 'category' : 'object_view' - , 'action' : 'coloris_view' - , 'permissions' : ( - Permissions.View, ) - } - , { 'id' : 'print' - , 'name' : 'Print' - , 'category' : 'object_print' - , 'action' : 'image_print' - , 'permissions' : ( - Permissions.View, ) - } - , { 'id' : 'metadata' - , 'name' : 'Metadata' - , 'category' : 'object_view' - , 'action' : 'metadata_edit' - , 'permissions' : ( - Permissions.View, ) - } - , { 'id' : 'download' - , 'name' : 'Download' - , 'category' : 'object_action' - , 'action' : 'download' - , 'permissions' : ( - Permissions.View, ) - } - , { 'id' : 'translate' - , 'name' : 'Translate' - , 'category' : 'object_action' - , 'action' : 'translation_template_view' - , 'permissions' : ( - Permissions.TranslateContent, ) - } - ) - } - - diff --git a/product/Coramy/Document/Composant.py b/product/Coramy/Document/Composant.py deleted file mode 100755 index 89cfb5196a..0000000000 --- a/product/Coramy/Document/Composant.py +++ /dev/null @@ -1,158 +0,0 @@ -############################################################################## -# -# Copyright (c) 2002 Nexedi SARL and Contributors. All Rights Reserved. -# Jean-Paul Smets-Solanes <jp@nexedi.com> -# -# WARNING: This program as such is intended to be used by professional -# programmers who take the whole responsability of assessing all potential -# consequences resulting from its eventual inadequacies and bugs -# End users who are looking for a ready-to-use solution with commercial -# garantees and support are strongly adviced to contract a Free Software -# Service Company -# -# This program is Free Software; you can redistribute it and/or -# modify it under the terms of the GNU General Public License -# as published by the Free Software Foundation; either version 2 -# of the License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -# -############################################################################## - -from Globals import InitializeClass, PersistentMapping -from AccessControl import ClassSecurityInfo - -from Products.ERP5Type import Permissions, PropertySheet, Constraint, Interface -from Products.ERP5.Document.Resource import Resource - -class Composant(Resource): - """ - Un composant Coramy.... - """ - - meta_type = 'CORAMY Composant' - portal_type = 'Composant' - add_permission = Permissions.AddPortalContent - isPortalContent = 1 - isRADContent = 1 - - # Declarative security - security = ClassSecurityInfo() - security.declareObjectProtected(Permissions.View) - - # Declarative properties - property_sheets = ( PropertySheet.Base - , PropertySheet.XMLObject - , PropertySheet.CategoryCore - , PropertySheet.DublinCore - , PropertySheet.Price - , PropertySheet.Resource - , PropertySheet.Reference - , PropertySheet.Composant - ) - - # Hard Wired Variation List - # XXX - may be incompatible with future versions of ERP5 - variation_base_category_list = ('variante', ) - - # Factory Type Information - factory_type_information = \ - { 'id' : portal_type - , 'meta_type' : meta_type - , 'description' : """\ -Un tissu est une resource variantable en couleur.""" - , 'icon' : 'composant_icon.gif' - , 'product' : 'Coramy' - , 'factory' : 'addComposant' - , 'immediate_view' : 'composant_view' - , 'allow_discussion' : 1 - , 'allowed_content_types': ('Variante Composant', - ) - , 'filter_content_types' : 1 - , 'global_allow' : 1 - , 'actions' : - ( { 'id' : 'view' - , 'name' : 'View' - , 'category' : 'object_view' - , 'action' : 'composant_view' - , 'permissions' : ( - Permissions.View, ) - } - , { 'id' : 'list' - , 'name' : 'Object Contents' - , 'category' : 'object_action' - , 'action' : 'folder_contents' - , 'permissions' : ( - Permissions.View, ) - } - , { 'id' : 'print' - , 'name' : 'Print' - , 'category' : 'object_print' - , 'action' : 'object_print' - , 'permissions' : ( - Permissions.View, ) - } - , { 'id' : 'metadata' - , 'name' : 'Metadata' - , 'category' : 'object_view' - , 'action' : 'metadata_edit' - , 'permissions' : ( - Permissions.View, ) - } - , { 'id' : 'translate' - , 'name' : 'Translate' - , 'category' : 'object_action' - , 'action' : 'translation_template_view' - , 'permissions' : ( - Permissions.TranslateContent, ) - } - ) - } - - def _setTitle(self, value): - """ - Here we see that we must define an notion - of priority in the way fields are updated - """ - if value != self.getTitle(): - self.title = value - - security.declareProtected(Permissions.View, 'getTitle') - def getTitle(self): - """ - Returns the title if it exists or a combination of - first name and last name - """ - if self.title == '': - return self.getId() - else: - return self.title - Title = getTitle - - security.declareProtected(Permissions.ModifyPortalContent, 'setTitle') - def setTitle(self, value): - """ - Updates the title if necessary - """ - self._setTitle(value) - self.reindexObject() - - # Unit conversion - security.declareProtected(Permissions.AccessContentsInformation, 'convertQuantity') - def convertQuantity(self, quantity, from_unit, to_unit): - quantity = float(quantity) - if from_unit == 'Longueur/Metre' and to_unit == 'Unite/Cone': - return quantity / self.getLengthQuantity() - elif from_unit == 'Unite/Cone' and to_unit == 'Longueur/Metre': - return quantity * self.getLengthQuantity() - else: - return quantity - - diff --git a/product/Coramy/Document/Container.py b/product/Coramy/Document/Container.py deleted file mode 100755 index 51458b4d04..0000000000 --- a/product/Coramy/Document/Container.py +++ /dev/null @@ -1,138 +0,0 @@ -############################################################################## -# -# Copyright (c) 2002 Nexedi SARL and Contributors. All Rights Reserved. -# Jean-Paul Smets-Solanes <jp@nexedi.com> -# -# WARNING: This program as such is intended to be used by professional -# programmers who take the whole responsability of assessing all potential -# consequences resulting from its eventual inadequacies and bugs -# End users who are looking for a ready-to-use solution with commercial -# garantees and support are strongly adviced to contract a Free Software -# Service Company -# -# This program is Free Software; you can redistribute it and/or -# modify it under the terms of the GNU General Public License -# as published by the Free Software Foundation; either version 2 -# of the License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -# -############################################################################## - -from Globals import InitializeClass, PersistentMapping -from AccessControl import ClassSecurityInfo - -from Products.CMFCore.WorkflowCore import WorkflowAction -from Products.ERP5Type import Permissions, PropertySheet, Constraint, Interface -from Products.ERP5Type.XMLMatrix import XMLMatrix -from Products.ERP5.Document.Container import Container as ERP5Container - -from zLOG import LOG - -class Container(ERP5Container): - """ - Container is equivalent to a movement with qty 1.0 and resource = to the kind of packaging - Container may point to item (ex. Container serial No or Parcel Serial No if tracing required) - Container may eventually usa optional property sheet to store parcel No information (we use - Item property sheet for that). Some acquisition may be required... - - Container Line / Container Cell is used to store quantities (never accounted) - Container Line / Countainer Cell may point to Item - """ - - meta_type = 'CORAMY Container' - portal_type = 'Container' - add_permission = Permissions.AddPortalContent - isPortalContent = 1 - isRADContent = 1 - - # Declarative security - security = ClassSecurityInfo() - security.declareObjectProtected(Permissions.View) - - # Declarative interfaces - __implements__ = ( Interface.Variated, ) - - # Declarative properties - property_sheets = ( PropertySheet.Base - , PropertySheet.XMLObject - , PropertySheet.CategoryCore - , PropertySheet.Amount - , PropertySheet.Task - , PropertySheet.Arrow - , PropertySheet.Movement - , PropertySheet.Price - , PropertySheet.VariationRange - , PropertySheet.ItemAggregation - , PropertySheet.Item - , PropertySheet.Container - , PropertySheet.SortIndex - ) - - # Factory Type Information - factory_type_information = \ - { 'id' : portal_type - , 'meta_type' : meta_type - , 'description' : """\ -Un container (colis, caisse,...).""" - , 'icon' : 'container_icon.gif' - , 'product' : 'Coramy' - , 'factory' : 'addContainer' - , 'immediate_view' : 'container_view' - , 'allow_discussion' : 1 - , 'allowed_content_types': ('Container','Container Line', - ) - , 'filter_content_types' : 1 - , 'global_allow' : 1 - , 'actions' : - ( { 'id' : 'view' - , 'name' : 'View' - , 'category' : 'object_view' - , 'action' : 'container_view' - , 'permissions' : ( - Permissions.View, ) - } - , { 'id' : 'list' - , 'name' : 'Object Contents' - , 'category' : 'object_action' - , 'action' : 'folder_contents' - , 'permissions' : ( - Permissions.View, ) - } - , { 'id' : 'print' - , 'name' : 'Print' - , 'category' : 'object_print' - , 'action' : 'container_print' - , 'permissions' : ( - Permissions.View, ) - } - , { 'id' : 'metadata' - , 'name' : 'Metadata' - , 'category' : 'object_view' - , 'action' : 'metadata_edit' - , 'permissions' : ( - Permissions.View, ) - } - , { 'id' : 'translate' - , 'name' : 'Translate' - , 'category' : 'object_action' - , 'action' : 'translation_template_view' - , 'permissions' : ( - Permissions.TranslateContent, ) - } - ) - } - security.declareProtected(Permissions.AccessContentsInformation, 'getTargetTotalQuantity') - def getTargetTotalQuantity(self): - """ - Returns the quantity if no cell or the total quantity if cells - """ - aggregate = self.Container_zGetTotal()[0] - return aggregate.target_total_quantity diff --git a/product/Coramy/Document/ContainerLine.py b/product/Coramy/Document/ContainerLine.py deleted file mode 100755 index dd82153e94..0000000000 --- a/product/Coramy/Document/ContainerLine.py +++ /dev/null @@ -1,122 +0,0 @@ -############################################################################## -# -# Copyright (c) 2002 Nexedi SARL and Contributors. All Rights Reserved. -# Jean-Paul Smets-Solanes <jp@nexedi.com> -# -# WARNING: This program as such is intended to be used by professional -# programmers who take the whole responsability of assessing all potential -# consequences resulting from its eventual inadequacies and bugs -# End users who are looking for a ready-to-use solution with commercial -# garantees and support are strongly adviced to contract a Free Software -# Service Company -# -# This program is Free Software; you can redistribute it and/or -# modify it under the terms of the GNU General Public License -# as published by the Free Software Foundation; either version 2 -# of the License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -# -############################################################################## - -from Globals import InitializeClass, PersistentMapping -from AccessControl import ClassSecurityInfo - -from Products.CMFCore.WorkflowCore import WorkflowAction -from Products.ERP5Type import Permissions, PropertySheet, Constraint, Interface - -from Products.ERP5.Document.ContainerLine import ContainerLine as ERP5ContainerLine - -from zLOG import LOG - -class ContainerLine(ERP5ContainerLine): - """ - A ContainerLine... - """ - - meta_type = 'CORAMY Container Line' - portal_type = 'Container Line' - add_permission = Permissions.AddPortalContent - isPortalContent = 1 - isRADContent = 1 - - # Declarative security - security = ClassSecurityInfo() - security.declareObjectProtected(Permissions.View) - - # Declarative interfaces - __implements__ = ( Interface.Variated, ) - - # Declarative properties - property_sheets = ( PropertySheet.Base - , PropertySheet.XMLObject - , PropertySheet.CategoryCore - , PropertySheet.Amount - , PropertySheet.Task - , PropertySheet.Arrow - , PropertySheet.Movement - , PropertySheet.Price - , PropertySheet.VariationRange - , PropertySheet.ItemAggregation - ) - - # Factory Type Information - factory_type_information = \ - { 'id' : portal_type - , 'meta_type' : meta_type - , 'description' : """\ -Une ligne de container.""" - , 'icon' : 'container_line_icon.gif' - , 'product' : 'Coramy' - , 'factory' : 'addContainerLine' - , 'immediate_view' : 'container_line_view' - , 'allow_discussion' : 1 - , 'allowed_content_types': ('Container Cell', - ) - , 'filter_content_types' : 1 - , 'global_allow' : 1 - , 'actions' : - ( { 'id' : 'view' - , 'name' : 'View' - , 'category' : 'object_view' - , 'action' : 'container_line_view' - , 'permissions' : ( - Permissions.View, ) - } - , { 'id' : 'list' - , 'name' : 'Object Contents' - , 'category' : 'object_action' - , 'action' : 'folder_contents' - , 'permissions' : ( - Permissions.View, ) - } - , { 'id' : 'print' - , 'name' : 'Print' - , 'category' : 'object_print' - , 'action' : 'container_line_print' - , 'permissions' : ( - Permissions.View, ) - } - , { 'id' : 'metadata' - , 'name' : 'Metadata' - , 'category' : 'object_view' - , 'action' : 'metadata_edit' - , 'permissions' : ( - Permissions.View, ) - } - , { 'id' : 'translate' - , 'name' : 'Translate' - , 'category' : 'object_action' - , 'action' : 'translation_template_view' - , 'permissions' : ( - Permissions.TranslateContent, ) - } - ) - } diff --git a/product/Coramy/Document/CorrespondanceMesures.py b/product/Coramy/Document/CorrespondanceMesures.py deleted file mode 100755 index 64d7c11079..0000000000 --- a/product/Coramy/Document/CorrespondanceMesures.py +++ /dev/null @@ -1,241 +0,0 @@ -############################################################################## -# -# Copyright (c) 2002 Coramy SAS and Contributors. All Rights Reserved. -# Thierry_Faucher <Thierry_Faucher@coramy.com> -# -# WARNING: This program as such is intended to be used by professional -# programmers who take the whole responsability of assessing all potential -# consequences resulting from its eventual inadequacies and bugs -# End users who are looking for a ready-to-use solution with commercial -# garantees and support are strongly adviced to contract a Free Software -# Service Company -# -# This program is Free Software; you can redistribute it and/or -# modify it under the terms of the GNU General Public License -# as published by the Free Software Foundation; either version 2 -# of the License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -# -############################################################################## - -from Globals import InitializeClass, PersistentMapping -from AccessControl import ClassSecurityInfo -from Products.CMFCore.WorkflowCore import WorkflowAction - -from Products.CMFPhoto.CMFPhoto import CMFPhoto - -from Products.ERP5Type import Permissions, PropertySheet, Constraint, Interface -from Products.ERP5Type.XMLObject import XMLObject -from Products.ERP5Type.XMLMatrix import XMLMatrix -from Products.ERP5.Document.Domain import Domain -from Products.ERP5.Document.Image import Image - -from zLOG import LOG - -class CorrespondanceMesures(XMLObject, XMLMatrix, Image): - """ - A matrix which provides default mesure_code and mesure_name - """ - meta_type = 'CORAMY Correspondance Mesures' - portal_type = 'Correspondance Mesures' - add_permission = Permissions.AddPortalContent - isPortalContent = 1 - isRADContent = 1 - - # Declarative security - security = ClassSecurityInfo() - security.declareObjectProtected(Permissions.View) - - # Declarative properties - property_sheets = ( PropertySheet.Base - , PropertySheet.XMLObject - , PropertySheet.CategoryCore - , PropertySheet.DublinCore - , PropertySheet.VariationRange - , PropertySheet.CorrespondanceMesures - ) - - # Factory Type Information - factory_type_information = \ - { 'id' : portal_type - , 'meta_type' : meta_type - , 'description' : """\ -une grille de correspondance de tailles...""" - , 'icon' : 'correspondance_mesures_icon.gif' - , 'product' : 'Coramy' - , 'factory' : 'addCorrespondanceMesures' - , 'immediate_view' : 'correspondance_mesures_view' - , 'allow_discussion' : 1 - , 'allowed_content_types': ('Set Mapped Value', - ) - , 'filter_content_types' : 1 - , 'global_allow' : 1 - , 'actions' : - ( { 'id' : 'view' - , 'name' : 'View' - , 'category' : 'object_view' - , 'action' : 'correspondance_mesures_view' - , 'permissions' : ( - Permissions.View, ) - } - , { 'id' : 'list' - , 'name' : 'Object Contents' - , 'category' : 'object_action' - , 'action' : 'folder_contents' - , 'permissions' : ( - Permissions.View, ) - } - , { 'id' : 'print' - , 'name' : 'Print' - , 'category' : 'object_print' - , 'action' : 'correspondance_mesures_print' - , 'permissions' : ( - Permissions.View, ) - } - , { 'id' : 'metadata' - , 'name' : 'Metadata' - , 'category' : 'object_view' - , 'action' : 'metadata_edit' - , 'permissions' : ( - Permissions.View, ) - } - , { 'id' : 'translate' - , 'name' : 'Translate' - , 'category' : 'object_action' - , 'action' : 'translation_template_view' - , 'permissions' : ( - Permissions.TranslateContent, ) - } - ) - } - - def __init__(self, id, **kw): - Image.__init__(self, id, **kw) - XMLObject.__init__(self, id, **kw) - - # Inheritance - _edit = Image._edit - security.declareProtected( Permissions.ModifyPortalContent, 'edit' ) - edit = WorkflowAction( _edit ) - - security.declareProtected('View', 'index_html') - index_html = Image.index_html - - security.declareProtected('AccessContentsInformation', 'content_type') - content_type = Image.content_type - - def manage_afterClone(self, item): - XMLObject.manage_afterClone(self, item) - CMFPhoto.manage_afterClone(self, item) - - def manage_afterAdd(self, item, container): - XMLObject.manage_afterAdd(self, item, container) - CMFPhoto.manage_afterAdd(self, item, container) - - def manage_beforeDelete(self, item, container): - CMFPhoto.manage_beforeDelete(self, item, container) - - # Main methods - security.declareProtected(Permissions.ModifyPortalContent, '_setMatrixCellRange') - def _setMatrixCellRange(self): - line = self.getCategoryMembershipList('mesure_vetement',base=0) - if len(line) == 0 : - line = [None] - column = self.getCategoryMembershipList('reference_mesure',base=0) - if len(column) == 0 : - column = [None] - self._setCellRange(line, column, base_id='mesure_client') - # Empty cells if no variation - if line == [[None]] and column == [[None]]: - self.delCells(base_id='mesure_client') - # And fix it in case the cells are not renamed (XXX this will be removed in the future) - self._checkConsistency(fixit=1) - - security.declareProtected(Permissions.ModifyPortalContent, 'setMatrixCellRange') - def setMatrixCellRange(self): - """ - Defines the possible variations which taille_client value - variate on and reindex the object - """ - self._setMatrixCellRange() - self.reindexObject() - - security.declareProtected(Permissions.ModifyPortalContent, '_setReferenceMesureList') - def _setReferenceMesureList(self,value): - self._categorySetReferenceMesureList(value) - self._setMatrixCellRange() - - security.declareProtected(Permissions.ModifyPortalContent, '_setMesureVetementList') - def _setMesureVetementList(self,value): - self._categorySetMesureVetementList(value) - self._setMatrixCellRange() - - def _setTitle(self, value): - """ - Here we see that we must define an notion - of priority in the way fields are updated - """ - if value != self.getTitle(): - self.title = value - - security.declareProtected(Permissions.View, 'getTitle') - def getTitle(self): - """ - Returns the title if it exists or a combination of - first name and last name - """ - if self.title == '': - return self.getId() - else: - return self.title - Title = getTitle - - security.declareProtected(Permissions.ModifyPortalContent, 'setTitle') - def setTitle(self, value): - """ - Updates the title if necessary - """ - self._setTitle(value) - self.reindexObject() - - # Inheritance solving - security.declareProtected(Permissions.ModifyPortalContent, 'checkConsistency') - checkConsistency = XMLMatrix.checkConsistency - - security.declarePrivate('_checkConsistency') - def _checkConsistency(self, fixit=0): - """ - Check the constitency of transformation elements - """ - error_list = XMLMatrix._checkConsistency(self, fixit=fixit) - - # First quantity - # We build an attribute equality and look at all cells - constraint = Constraint.AttributeEquality( - domain_base_category_list = ('reference_mesure', 'mesure_vetement',), - predicate_operator = 'SUPERSET_OF', - mapped_value_property_list = ['mesure_client'] ) - for k in self.getCellKeys(base_id = 'mesure_client'): - kw={} - kw['base_id'] = 'mesure_client' - c = self.getCell(*k, **kw) - if c is not None: - predicate_value = [] - for p in k: - if p is not None: predicate_value += [p] - constraint.edit(predicate_value_list = predicate_value) - if fixit: - error_list += constraint.fixConsistency(c) - else: - error_list += constraint.checkConsistency(c) - - return error_list - diff --git a/product/Coramy/Document/CorrespondanceTailles.py b/product/Coramy/Document/CorrespondanceTailles.py deleted file mode 100755 index 8e4813e58e..0000000000 --- a/product/Coramy/Document/CorrespondanceTailles.py +++ /dev/null @@ -1,223 +0,0 @@ -############################################################################## -# -# Copyright (c) 2002 Coramy SAS and Contributors. All Rights Reserved. -# Thierry_Faucher <Thierry_Faucher@coramy.com> -# -# WARNING: This program as such is intended to be used by professional -# programmers who take the whole responsability of assessing all potential -# consequences resulting from its eventual inadequacies and bugs -# End users who are looking for a ready-to-use solution with commercial -# garantees and support are strongly adviced to contract a Free Software -# Service Company -# -# This program is Free Software; you can redistribute it and/or -# modify it under the terms of the GNU General Public License -# as published by the Free Software Foundation; either version 2 -# of the License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -# -############################################################################## - -from Globals import InitializeClass, PersistentMapping -from AccessControl import ClassSecurityInfo - -from Products.ERP5Type import Permissions, PropertySheet, Constraint, Interface -from Products.ERP5Type.XMLObject import XMLObject -from Products.ERP5Type.XMLMatrix import XMLMatrix -from Products.ERP5.Document.Domain import Domain - -from zLOG import LOG - -class CorrespondanceTailles(XMLObject, XMLMatrix): - """ - A matrix which provides taille_client - for a given taille Coramy - """ - - meta_type = 'CORAMY Correspondance Tailles' - portal_type = 'Correspondance Tailles' - add_permission = Permissions.AddPortalContent - isPortalContent = 1 - isRADContent = 1 - - # Declarative security - security = ClassSecurityInfo() - security.declareObjectProtected(Permissions.View) - - # Declarative properties - property_sheets = ( PropertySheet.Base - , PropertySheet.XMLObject - , PropertySheet.CategoryCore - , PropertySheet.DublinCore - , PropertySheet.VariationRange - , PropertySheet.CorrespondanceTailles - ) - - # Factory Type Information - factory_type_information = \ - { 'id' : portal_type - , 'meta_type' : meta_type - , 'description' : """\ -une grille de correspondance de tailles...""" - , 'icon' : 'correspondance_tailles_icon.gif' - , 'product' : 'Coramy' - , 'factory' : 'addCorrespondanceTailles' - , 'immediate_view' : 'correspondance_tailles_view' - , 'allow_discussion' : 1 - , 'allowed_content_types': ('Set Mapped Value', - ) - , 'filter_content_types' : 1 - , 'global_allow' : 1 - , 'actions' : - ( { 'id' : 'view' - , 'name' : 'View' - , 'category' : 'object_view' - , 'action' : 'correspondance_tailles_view' - , 'permissions' : ( - Permissions.View, ) - } - , { 'id' : 'list' - , 'name' : 'Object Contents' - , 'category' : 'object_action' - , 'action' : 'folder_contents' - , 'permissions' : ( - Permissions.View, ) - } - , { 'id' : 'print' - , 'name' : 'Print' - , 'category' : 'object_print' - , 'action' : 'correspondance_tailles_print' - , 'permissions' : ( - Permissions.View, ) - } - , { 'id' : 'metadata' - , 'name' : 'Metadata' - , 'category' : 'object_view' - , 'action' : 'metadata_edit' - , 'permissions' : ( - Permissions.View, ) - } - , { 'id' : 'translate' - , 'name' : 'Translate' - , 'category' : 'object_action' - , 'action' : 'translation_template_view' - , 'permissions' : ( - Permissions.TranslateContent, ) - } - ) - } - - security.declareProtected(Permissions.ModifyPortalContent, '_setMatrixCellRange') - def _setMatrixCellRange(self): - line = self.getCategoryMembershipList('morpho_type',base=0) - if len(line) == 0 : - line = [None] - column = self.getCategoryMembershipList('taille',base=0) - if len(column) == 0 : - column = [None] - self._setCellRange(line, column, base_id='taille_client') - # Empty cells if no variation - if line == [[None]] and column == [[None]]: - self.delCells(base_id='taille_client') - # And fix it in case the cells are not renamed (XXX this will be removed in the future) - self._checkConsistency(fixit=1) - - security.declareProtected(Permissions.ModifyPortalContent, 'setMatrixCellRange') - def setMatrixCellRange(self): - """ - Defines the possible variations which taille_client value - variate on and reindex the object - """ - self._setMatrixCellRange() - self.reindexObject() - - # Methods for matrix UI widgets - security.declareProtected(Permissions.AccessContentsInformation, 'getLineItemList') - def getLineItemList(self): - clist = self.getCategoryMembershipList('morpho_type',base=0) - if len(clist) == 0 : - clist = [None] - result = [] - for c in clist: - result += [(c,c)] - return result - - security.declareProtected(Permissions.ModifyPortalContent, '_setTailleList') - def _setTailleList(self,value): - self._categorySetTailleList(value) - self._setMatrixCellRange() - - security.declareProtected(Permissions.ModifyPortalContent, '_setMorphoTypeList') - def _setMorphoTypeList(self,value): - self._categorySetMorphoTypeList(value) - self._setMatrixCellRange() - - def _setTitle(self, value): - """ - Here we see that we must define an notion - of priority in the way fields are updated - """ - if value != self.getTitle(): - self.title = value - - security.declareProtected(Permissions.View, 'getTitle') - def getTitle(self): - """ - Returns the title if it exists or a combination of - first name and last name - """ - if self.title == '': - return self.getId() - else: - return self.title - Title = getTitle - - security.declareProtected(Permissions.ModifyPortalContent, 'setTitle') - def setTitle(self, value): - """ - Updates the title if necessary - """ - self._setTitle(value) - self.reindexObject() - - # Inheritance solving - security.declareProtected(Permissions.ModifyPortalContent, 'checkConsistency') - checkConsistency = XMLMatrix.checkConsistency - - security.declarePrivate('_checkConsistency') - def _checkConsistency(self, fixit=0): - """ - Check the constitency of transformation elements - """ - error_list = XMLMatrix._checkConsistency(self, fixit=fixit) - - # First quantity - # We build an attribute equality and look at all cells - constraint = Constraint.AttributeEquality( - domain_base_category_list = ('taille', 'morpho_type',), - predicate_operator = 'SUPERSET_OF', - mapped_value_property_list = ['taille_client'] ) - for k in self.getCellKeys(base_id = 'taille_client'): - kw={} - kw['base_id'] = 'taille_client' - c = self.getCell(*k, **kw) - if c is not None: - predicate_value = [] - for p in k: - if p is not None: predicate_value += [p] - constraint.edit(predicate_value_list = predicate_value) - if fixit: - error_list += constraint.fixConsistency(c) - else: - error_list += constraint.checkConsistency(c) - - return error_list - diff --git a/product/Coramy/Document/DeliveryLine.py b/product/Coramy/Document/DeliveryLine.py deleted file mode 100755 index c307e7ff97..0000000000 --- a/product/Coramy/Document/DeliveryLine.py +++ /dev/null @@ -1,119 +0,0 @@ -############################################################################## -# -# Copyright (c) 2002 Nexedi SARL and Contributors. All Rights Reserved. -# Jean-Paul Smets-Solanes <jp@nexedi.com> -# -# WARNING: This program as such is intended to be used by professional -# programmers who take the whole responsability of assessing all potential -# consequences resulting from its eventual inadequacies and bugs -# End users who are looking for a ready-to-use solution with commercial -# garantees and support are strongly adviced to contract a Free Software -# Service Company -# -# This program is Free Software; you can redistribute it and/or -# modify it under the terms of the GNU General Public License -# as published by the Free Software Foundation; either version 2 -# of the License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -# -############################################################################## - -from Globals import InitializeClass, PersistentMapping -from AccessControl import ClassSecurityInfo - -from Products.ERP5.Document.Resource import Resource -from Products.ERP5.Document.DeliveryLine import DeliveryLine as ERP5DeliveryLine -from Products.ERP5Type import Permissions, PropertySheet, Constraint, Interface - -from zLOG import LOG - -class DeliveryLine(ERP5DeliveryLine): - """ - Une ligne de livraison.... - - """ - meta_type = 'CORAMY Delivery Line' - portal_type = 'Delivery Line' - add_permission = Permissions.AddPortalContent - isPortalContent = 1 - isRADContent = 1 - - # Declarative security - security = ClassSecurityInfo() - security.declareObjectProtected(Permissions.View) - - property_sheets = ( PropertySheet.Base - , PropertySheet.XMLObject - , PropertySheet.CategoryCore - , PropertySheet.Amount - , PropertySheet.Task - , PropertySheet.Arrow - , PropertySheet.Movement - , PropertySheet.Price - , PropertySheet.VariationRange - , PropertySheet.CoramyDeliveryLine - ) - - # Factory Type Information - factory_type_information = \ - { 'id' : portal_type - , 'meta_type' : meta_type - , 'description' : """\ -Une ligne tarifaire.""" - , 'icon' : 'order_line_icon.gif' - , 'product' : 'Coramy' - , 'factory' : 'addDeliveryLine' - , 'immediate_view' : 'delivery_line_view' - , 'allow_discussion' : 1 - , 'allowed_content_types': ('', - ) - , 'filter_content_types' : 1 - , 'global_allow' : 1 - , 'actions' : - ( { 'id' : 'view' - , 'name' : 'View' - , 'category' : 'object_view' - , 'action' : 'delivery_line_view' - , 'permissions' : ( - Permissions.View, ) - } - , { 'id' : 'list' - , 'name' : 'Object Contents' - , 'category' : 'object_action' - , 'action' : 'folder_contents' - , 'permissions' : ( - Permissions.View, ) - } - , { 'id' : 'print' - , 'name' : 'Print' - , 'category' : 'object_print' - , 'action' : 'order_line_print' - , 'permissions' : ( - Permissions.View, ) - } - , { 'id' : 'metadata' - , 'name' : 'Metadata' - , 'category' : 'object_view' - , 'action' : 'metadata_edit' - , 'permissions' : ( - Permissions.View, ) - } - , { 'id' : 'translate' - , 'name' : 'Translate' - , 'category' : 'object_action' - , 'action' : 'translation_template_view' - , 'permissions' : ( - Permissions.TranslateContent, ) - } - ) - } - - diff --git a/product/Coramy/Document/Discount.py b/product/Coramy/Document/Discount.py deleted file mode 100755 index 0cebba64c1..0000000000 --- a/product/Coramy/Document/Discount.py +++ /dev/null @@ -1,100 +0,0 @@ -############################################################################## -# -# Copyright (c) 2002 Nexedi SARL and Contributors. All Rights Reserved. -# Jean-Paul Smets-Solanes <jp@nexedi.com> -# -# WARNING: This program as such is intended to be used by professional -# programmers who take the whole responsability of assessing all potential -# consequences resulting from its eventual inadequacies and bugs -# End users who are looking for a ready-to-use solution with commercial -# garantees and support are strongly adviced to contract a Free Software -# Service Company -# -# This program is Free Software; you can redistribute it and/or -# modify it under the terms of the GNU General Public License -# as published by the Free Software Foundation; either version 2 -# of the License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -# -############################################################################## - -from Globals import InitializeClass, PersistentMapping -from AccessControl import ClassSecurityInfo - -from Products.ERP5Type import Permissions, PropertySheet, Constraint, Interface -from Products.ERP5.Document.Discount import Discount as ERP5Discount - -class Discount(ERP5Discount): - """ - Discounts are used in orders, trade condition,... - """ - - meta_type = 'CORAMY Discount' - portal_type = 'Discount' - add_permission = Permissions.AddPortalContent - isPortalContent = 1 - isRADContent = 1 - - # Declarative security - security = ClassSecurityInfo() - security.declareObjectProtected(Permissions.View) - - # Declarative properties - property_sheets = ( PropertySheet.Base - , PropertySheet.XMLObject - , PropertySheet.CategoryCore - , PropertySheet.DublinCore - , PropertySheet.SortIndex - , PropertySheet.Discount - ) - - # Factory Type Information - factory_type_information = \ - { 'id' : portal_type - , 'meta_type' : meta_type - , 'description' : """\ -Discounts are used in orders, trade condition,...""" - , 'icon' : 'discount_icon.gif' - , 'product' : 'Coramy' - , 'factory' : 'addDiscount' - , 'immediate_view' : 'discount_edit' - , 'actions' : - ( { 'id' : 'view' - , 'name' : 'View' - , 'category' : 'object_view' - , 'action' : 'discount_edit' - , 'permissions' : ( - Permissions.View, ) - } - , { 'id' : 'print' - , 'name' : 'Print' - , 'category' : 'object_print' - , 'action' : 'discount_print' - , 'permissions' : ( - Permissions.View, ) - } - , { 'id' : 'metadata' - , 'name' : 'Metadata' - , 'category' : 'object_edit' - , 'action' : 'metadata_edit' - , 'permissions' : ( - Permissions.View, ) - } - , { 'id' : 'translate' - , 'name' : 'Translate' - , 'category' : 'object_action' - , 'action' : 'translation_template_view' - , 'permissions' : ( - Permissions.TranslateContent, ) - } - ) - } - diff --git a/product/Coramy/Document/ElementTarif.py b/product/Coramy/Document/ElementTarif.py deleted file mode 100755 index 853e819e95..0000000000 --- a/product/Coramy/Document/ElementTarif.py +++ /dev/null @@ -1,144 +0,0 @@ -############################################################################## -# -# Copyright (c) 2002 Nexedi SARL and Contributors. All Rights Reserved. -# Jean-Paul Smets-Solanes <jp@nexedi.com> -# -# WARNING: This program as such is intended to be used by professional -# programmers who take the whole responsability of assessing all potential -# consequences resulting from its eventual inadequacies and bugs -# End users who are looking for a ready-to-use solution with commercial -# garantees and support are strongly adviced to contract a Free Software -# Service Company -# -# This program is Free Software; you can redistribute it and/or -# modify it under the terms of the GNU General Public License -# as published by the Free Software Foundation; either version 2 -# of the License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -# -############################################################################## - -from Globals import InitializeClass, PersistentMapping -from AccessControl import ClassSecurityInfo - -from Products.CMFCore.WorkflowCore import WorkflowAction - -from Products.ERP5Type.XMLMatrix import XMLMatrix -from Products.ERP5Type import Permissions, PropertySheet, Constraint, Interface -from Products.ERP5.Document.Resource import Resource -from Products.ERP5.Document.MappedValue import MappedValue as ERP5MappedValue - -class ElementTarif(ERP5MappedValue, XMLMatrix): - """ - Un element de tarif est un prix pour un ensemble de conditions d'application... - """ - - meta_type = 'CORAMY Element Tarif' - portal_type = 'Element Tarif' - add_permission = Permissions.AddPortalContent - isPortalContent = 1 - isRADContent = 1 - - # Declarative security - security = ClassSecurityInfo() - security.declareObjectProtected(Permissions.View) - - # Declarative properties - property_sheets = ( PropertySheet.Base - , PropertySheet.XMLObject - , PropertySheet.CategoryCore - , PropertySheet.Price - , PropertySheet.Arrow - , PropertySheet.ElementTarif - ) - - # Factory Type Information - factory_type_information = \ - { 'id' : portal_type - , 'meta_type' : meta_type - , 'description' : """\ -Une ligne tarifaire.""" - , 'icon' : 'element_tarif_icon.gif' - , 'product' : 'Coramy' - , 'factory' : 'addElementTarif' - , 'immediate_view' : 'element_tarif_view' - , 'allow_discussion' : 1 - , 'allowed_content_types': ('', - ) - , 'filter_content_types' : 1 - , 'global_allow' : 1 - , 'actions' : - ( { 'id' : 'view' - , 'name' : 'View' - , 'category' : 'object_view' - , 'action' : 'element_tarif_view' - , 'permissions' : ( - Permissions.View, ) - } - , { 'id' : 'list' - , 'name' : 'Object Contents' - , 'category' : 'object_action' - , 'action' : 'folder_contents' - , 'permissions' : ( - Permissions.View, ) - } - , { 'id' : 'print' - , 'name' : 'Print' - , 'category' : 'object_print' - , 'action' : 'object_print' - , 'permissions' : ( - Permissions.View, ) - } - , { 'id' : 'metadata' - , 'name' : 'Metadata' - , 'category' : 'object_view' - , 'action' : 'metadata_edit' - , 'permissions' : ( - Permissions.View, ) - } - , { 'id' : 'translate' - , 'name' : 'Translate' - , 'category' : 'object_action' - , 'action' : 'translation_template_view' - , 'permissions' : ( - Permissions.TranslateContent, ) - } - ) - } - - security.declareProtected(Permissions.ModifyPortalContent, '_setQuantityRangeList') - def _setQuantityRangeList(self, category_list): - """ - Defines the possible base categories which Quantity value (Q) - variate on - """ - self._setCategoryMembership('quantity_range', category_list, base=0) - self._setCellRange((None,), category_list, base_id = 'destination_base_price') - - security.declareProtected(Permissions.ModifyPortalContent, 'setQuantityRangeList') - def setQuantityRangeList(self, category_list): - self._setQuantityRangeList(category_list) - self.reindexObject() - - - security.declarePrivate( '_edit' ) - def _edit(self, **kw): - """ - Solve here some constraints - """ - ERP5MappedValue._edit(self, **kw) - self.setPredicateValueList(self.getCategoryMembershipList(('taille','coloris'), base=1)) - - security.declareProtected( Permissions.ModifyPortalContent, 'edit' ) - edit = WorkflowAction( _edit ) - - - diff --git a/product/Coramy/Document/Forme.py b/product/Coramy/Document/Forme.py deleted file mode 100755 index b10e9ac613..0000000000 --- a/product/Coramy/Document/Forme.py +++ /dev/null @@ -1,184 +0,0 @@ -############################################################################## -# -# Copyright (c) 2002 Nexedi SARL and Contributors. All Rights Reserved. -# Jean-Paul Smets-Solanes <jp@nexedi.com> -# -# WARNING: This program as such is intended to be used by professional -# programmers who take the whole responsability of assessing all potential -# consequences resulting from its eventual inadequacies and bugs -# End users who are looking for a ready-to-use solution with commercial -# garantees and support are strongly adviced to contract a Free Software -# Service Company -# -# This program is Free Software; you can redistribute it and/or -# modify it under the terms of the GNU General Public License -# as published by the Free Software Foundation; either version 2 -# of the License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -# -############################################################################## - -from AccessControl import ClassSecurityInfo - -from Products.ERP5.Document.Resource import Resource -from Products.ERP5Type import Permissions, PropertySheet, Constraint, Interface -from Products.CMFCore.WorkflowCore import WorkflowMethod - -class Forme(Resource): - """ - un modele.. - """ - - meta_type = 'CORAMY Forme' - portal_type = 'Forme' - add_permission = Permissions.AddPortalContent - isPortalContent = 1 - isRADContent = 1 - - # Declarative security - security = ClassSecurityInfo() - security.declareObjectProtected(Permissions.View) - - # Declarative properties - property_sheets = ( PropertySheet.Base - , PropertySheet.XMLObject - , PropertySheet.CategoryCore - , PropertySheet.DublinCore - , PropertySheet.Forme - , PropertySheet.PresentAuCatalogue - ) - - # Hard Wired Variation List - # XXX - may be incompatible with future versions of ERP5 - variation_base_category_list = ('taille',) - - # Factory Type Information - factory_type_information = \ - { 'id' : portal_type - , 'meta_type' : meta_type - , 'description' : """\ -un modele...""" - , 'icon' : 'modele_icon.gif' - , 'product' : 'Coramy' - , 'factory' : 'addForme' - , 'immediate_view' : 'forme_view' - , 'allow_discussion' : 1 - , 'allowed_content_types': ('Dessin Technique','Vetement', - ) - , 'filter_content_types' : 1 - , 'global_allow' : 1 - , 'actions' : - ( { 'id' : 'view' - , 'name' : 'View' - , 'category' : 'object_view' - , 'action' : 'forme_view' - , 'permissions' : ( - Permissions.View, ) - } - , { 'id' : 'list' - , 'name' : 'Object Contents' - , 'category' : 'object_action' - , 'action' : 'folder_contents' - , 'permissions' : ( - Permissions.View, ) - } - , { 'id' : 'print' - , 'name' : 'Print' - , 'category' : 'object_print' - , 'action' : 'modele_print' - , 'permissions' : ( - Permissions.View, ) - } - , { 'id' : 'metadata' - , 'name' : 'Metadata' - , 'category' : 'object_view' - , 'action' : 'metadata_edit' - , 'permissions' : ( - Permissions.View, ) - } - , { 'id' : 'translate' - , 'name' : 'Translate' - , 'category' : 'object_action' - , 'action' : 'translation_template_view' - , 'permissions' : ( - Permissions.TranslateContent, ) - } - ) - } - - def _setTitle(self, value): - """ - Here we see that we must define an notion - of priority in the way fields are updated - """ - if value != self.getTitle(): - self.title = value - - security.declareProtected(Permissions.View, 'getTitle') - def getTitle(self): - """ - Returns the title if it exists or a combination of - first name and last name - """ - if self.title == '': - return self.getId() - else: - return self.title - Title = getTitle - - security.declareProtected(Permissions.ModifyPortalContent, 'setTitle') - def setTitle(self, value): - """ - Updates the title if necessary - """ - self._setTitle(value) - self.reindexObject() - - def _StateBrouillon2Etude(self): - """ - This method is called by modele_worflow - to update forme workflow - """ - return 'toto' - - security.declarePublic( 'StateBrouillon2Etude' ) - StateBrouillon2Etude = WorkflowMethod(_StateBrouillon2Etude,id='auto_soumettre_modelisme') - - def _StateEtude2Prototype(self): - """ - This method is called by modele_worflow - to update forme workflow - """ - return 'toto' - - security.declarePublic( 'StateEtude2Prototype' ) - StateEtude2Prototype = WorkflowMethod(_StateEtude2Prototype,id='auto_lancer_prototype') - - def _StateEtude2FormeOk(self): - """ - This method is called by modele_worflow - to update forme workflow - """ - return 'toto' - - security.declarePublic( 'StateEtude2FormeOk' ) - StateEtude2FormeOk = WorkflowMethod(_StateEtude2FormeOk,id='auto_valider_forme') - - def _StateFormeOk2Valide(self): - """ - This method is called by modele_worflow - to update forme workflow - """ - return 'toto' - - security.declarePublic( 'StateFormeOk2Valide' ) - StateFormeOk2Valide = WorkflowMethod(_StateFormeOk2Valide,id='auto_valider_documentation') - diff --git a/product/Coramy/Document/Gamme.py b/product/Coramy/Document/Gamme.py deleted file mode 100755 index 6bc706fd3b..0000000000 --- a/product/Coramy/Document/Gamme.py +++ /dev/null @@ -1,141 +0,0 @@ -############################################################################## -# -# Copyright (c) 2002 Coramy SAS and Contributors. All Rights Reserved. -# Thierry_Faucher <Thierry_Faucher@coramy.com> -# -# WARNING: This program as such is intended to be used by professional -# programmers who take the whole responsability of assessing all potential -# consequences resulting from its eventual inadequacies and bugs -# End users who are looking for a ready-to-use solution with commercial -# garantees and support are strongly adviced to contract a Free Software -# Service Company -# -# This program is Free Software; you can redistribute it and/or -# modify it under the terms of the GNU General Public License -# as published by the Free Software Foundation; either version 2 -# of the License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -# -############################################################################## - -from AccessControl import ClassSecurityInfo - -from Products.ERP5.Document.Resource import Resource -from Products.ERP5Type import Permissions, PropertySheet, Constraint, Interface - -class Gamme(Resource): - """ - une gamme.. - """ - - meta_type = 'CORAMY Gamme' - portal_type = 'Gamme' - add_permission = Permissions.AddPortalContent - isPortalContent = 1 - isRADContent = 1 - - # Declarative security - security = ClassSecurityInfo() - security.declareObjectProtected(Permissions.View) - - # Declarative properties - property_sheets = ( PropertySheet.Base - , PropertySheet.XMLObject - , PropertySheet.CategoryCore - , PropertySheet.DublinCore - , PropertySheet.Gamme - ) - - # Hard Wired Variation List - variation_base_category_list = ('coloris',) - - # Factory Type Information - factory_type_information = \ - { 'id' : portal_type - , 'meta_type' : meta_type - , 'description' : """\ -une gamme...""" - , 'icon' : 'gamme_icon.gif' - , 'product' : 'Coramy' - , 'factory' : 'addGamme' - , 'immediate_view' : 'gamme_view' - , 'allow_discussion' : 1 - , 'allowed_content_types': ('Variante Gamme', - ) - , 'filter_content_types' : 1 - , 'global_allow' : 1 - , 'actions' : - ( { 'id' : 'view' - , 'name' : 'View' - , 'category' : 'object_view' - , 'action' : 'gamme_view' - , 'permissions' : ( - Permissions.View, ) - } - , { 'id' : 'list' - , 'name' : 'Object Contents' - , 'category' : 'object_action' - , 'action' : 'folder_contents' - , 'permissions' : ( - Permissions.View, ) - } - , { 'id' : 'print' - , 'name' : 'Print' - , 'category' : 'object_print' - , 'action' : 'gamme_print' - , 'permissions' : ( - Permissions.View, ) - } - , { 'id' : 'metadata' - , 'name' : 'Metadata' - , 'category' : 'object_edit' - , 'action' : 'metadata_edit' - , 'permissions' : ( - Permissions.View, ) - } - , { 'id' : 'translate' - , 'name' : 'Translate' - , 'category' : 'object_action' - , 'action' : 'translation_template_view' - , 'permissions' : ( - Permissions.TranslateContent, ) - } - ) - } - - def _setTitle(self, value): - """ - Here we see that we must define an notion - of priority in the way fields are updated - """ - if value != self.getTitle(): - self.title = value - - security.declareProtected(Permissions.View, 'getTitle') - def getTitle(self): - """ - Returns the title if it exists or a combination of - first name and last name - """ - if self.title == '': - return self.getId() - else: - return self.title - Title = getTitle - - security.declareProtected(Permissions.ModifyPortalContent, 'setTitle') - def setTitle(self, value): - """ - Updates the title if necessary - """ - self._setTitle(value) - self.reindexObject() - diff --git a/product/Coramy/Document/GrilleConsommation.py b/product/Coramy/Document/GrilleConsommation.py deleted file mode 100755 index 25bf4c3abe..0000000000 --- a/product/Coramy/Document/GrilleConsommation.py +++ /dev/null @@ -1,155 +0,0 @@ -############################################################################## -# -# Copyright (c) 2002 Coramy SAS and Contributors. All Rights Reserved. -# Thierry_Faucher <Thierry_Faucher@coramy.com> -# -# WARNING: This program as such is intended to be used by professional -# programmers who take the whole responsability of assessing all potential -# consequences resulting from its eventual inadequacies and bugs -# End users who are looking for a ready-to-use solution with commercial -# garantees and support are strongly adviced to contract a Free Software -# Service Company -# -# This program is Free Software; you can redistribute it and/or -# modify it under the terms of the GNU General Public License -# as published by the Free Software Foundation; either version 2 -# of the License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -# -############################################################################## - -from Globals import InitializeClass, PersistentMapping -from AccessControl import ClassSecurityInfo - -from Products.ERP5Type import Permissions, PropertySheet, Constraint, Interface -from Products.ERP5Type.XMLObject import XMLObject -from Products.ERP5Type.XMLMatrix import XMLMatrix -from Products.ERP5.Document.Domain import Domain - -from zLOG import LOG - -class GrilleConsommation(XMLObject, XMLMatrix): - """ - A matrix which provides default quantities - for a given quantity - """ - - meta_type = 'CORAMY Grille Consommation' - portal_type = 'Grille Consommation' - add_permission = Permissions.AddPortalContent - isPortalContent = 1 - isRADContent = 1 - - # Declarative security - security = ClassSecurityInfo() - security.declareObjectProtected(Permissions.View) - - # Declarative properties - property_sheets = ( PropertySheet.Base - , PropertySheet.XMLObject - , PropertySheet.CategoryCore - , PropertySheet.DublinCore - , PropertySheet.VariationRange - , PropertySheet.GrilleConsommation - ) - - # Factory Type Information - factory_type_information = \ - { 'id' : portal_type - , 'meta_type' : meta_type - , 'description' : """\ -une gamme...""" - , 'icon' : 'grille_consommation_icon.gif' - , 'product' : 'Coramy' - , 'factory' : 'addGrilleConsommation' - , 'immediate_view' : 'grille_consommation_view' - , 'allow_discussion' : 1 - , 'allowed_content_types': ('Variante Gamme', - ) - , 'filter_content_types' : 1 - , 'global_allow' : 1 - , 'actions' : - ( { 'id' : 'view' - , 'name' : 'View' - , 'category' : 'object_view' - , 'action' : 'grille_consommation_view' - , 'permissions' : ( - Permissions.View, ) - } - , { 'id' : 'list' - , 'name' : 'Object Contents' - , 'category' : 'object_action' - , 'action' : 'folder_contents' - , 'permissions' : ( - Permissions.View, ) - } - , { 'id' : 'print' - , 'name' : 'Print' - , 'category' : 'object_print' - , 'action' : 'grille_consommation_print' - , 'permissions' : ( - Permissions.View, ) - } - , { 'id' : 'metadata' - , 'name' : 'Metadata' - , 'category' : 'object_view' - , 'action' : 'metadata_edit' - , 'permissions' : ( - Permissions.View, ) - } - , { 'id' : 'translate' - , 'name' : 'Translate' - , 'category' : 'object_action' - , 'action' : 'translation_template_view' - , 'permissions' : ( - Permissions.TranslateContent, ) - } - ) - } - - security.declareProtected(Permissions.ModifyPortalContent, '_setTailleList') - def _setTailleList(self, value): - if type(value) is type('a'): value = [value] - self._setCellRange(value, value, base_id='quantity') - self._categorySetTaille(value) - - def _setTitle(self, value): - """ - Here we see that we must define an notion - of priority in the way fields are updated - """ - if value != self.getTitle(): - self.title = value - - security.declareProtected(Permissions.View, 'getTitle') - def getTitle(self): - """ - Returns the title if it exists or a combination of - first name and last name - """ - if self.title == '': - return self.getId() - else: - return self.title - Title = getTitle - - security.declareProtected(Permissions.ModifyPortalContent, 'setTitle') - def setTitle(self, value): - """ - Updates the title if necessary - """ - self._setTitle(value) - self.reindexObject() - - # Inheritance solving - security.declareProtected(Permissions.ModifyPortalContent, 'checkConsistency') - checkConsistency = XMLMatrix.checkConsistency - diff --git a/product/Coramy/Document/Inventory.py b/product/Coramy/Document/Inventory.py deleted file mode 100755 index f5550b8eca..0000000000 --- a/product/Coramy/Document/Inventory.py +++ /dev/null @@ -1,113 +0,0 @@ -############################################################################## -# -# Copyright (c) 2002 Nexedi SARL and Contributors. All Rights Reserved. -# Jean-Paul Smets-Solanes <jp@nexedi.com> -# -# WARNING: This program as such is intended to be used by professional -# programmers who take the whole responsability of assessing all potential -# consequences resulting from its eventual inadequacies and bugs -# End users who are looking for a ready-to-use solution with commercial -# garantees and support are strongly adviced to contract a Free Software -# Service Company -# -# This program is Free Software; you can redistribute it and/or -# modify it under the terms of the GNU General Public License -# as published by the Free Software Foundation; either version 2 -# of the License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -# -############################################################################## - -from Globals import InitializeClass, PersistentMapping -from Products.CMFCore.utils import getToolByName -from Products.CMFCore.WorkflowCore import WorkflowMethod -from AccessControl import ClassSecurityInfo -from Products.ERP5Type import Permissions, PropertySheet, Constraint -from Products.ERP5.Document.Inventory import Inventory as ERP5Inventory - -class Inventory(ERP5Inventory): - # CMF Type Definition - meta_type = 'CORAMY Inventory' - portal_type = 'Inventory' - isPortalContent = 1 - isRADContent = 1 - - # Declarative security - security = ClassSecurityInfo() - security.declareObjectProtected(Permissions.View) - - # Default Properties - property_sheets = ( PropertySheet.Base - , PropertySheet.XMLObject - , PropertySheet.CategoryCore - , PropertySheet.DublinCore - , PropertySheet.Task - , PropertySheet.Arrow - , PropertySheet.Movement - , PropertySheet.Delivery - , PropertySheet.Path - , PropertySheet.FlowCapacity - ) - - # CMF Factory Type Information - factory_type_information = \ - { 'id' : portal_type - , 'meta_type' : meta_type - , 'description' : """\ -une liste de mouvements d'inventaire...""" - , 'icon' : 'inventory_icon.gif' - , 'product' : 'ERP5' - , 'factory' : 'addInventory' - , 'immediate_view' : 'inventory_view' - , 'allow_discussion' : 1 - , 'allowed_content_types': ('Inventory Line', - ) - , 'filter_content_types' : 1 - , 'global_allow' : 1 - , 'actions' : - ( { 'id' : 'view' - , 'name' : 'View' - , 'category' : 'object_view' - , 'action' : 'inventory_view' - , 'permissions' : ( - Permissions.View, ) - } - , { 'id' : 'list' - , 'name' : 'Object Contents' - , 'category' : 'object_action' - , 'action' : 'folder_contents' - , 'permissions' : ( - Permissions.View, ) - } - , { 'id' : 'print' - , 'name' : 'Print' - , 'category' : 'object_print' - , 'action' : 'inventory_print' - , 'permissions' : ( - Permissions.View, ) - } - , { 'id' : 'metadata' - , 'name' : 'Metadata' - , 'category' : 'object_view' - , 'action' : 'metadata_view' - , 'permissions' : ( - Permissions.View, ) - } - , { 'id' : 'translate' - , 'name' : 'Translate' - , 'category' : 'object_action' - , 'action' : 'translation_template_view' - , 'permissions' : ( - Permissions.TranslateContent, ) - } - ) - } - diff --git a/product/Coramy/Document/InventoryLine.py b/product/Coramy/Document/InventoryLine.py deleted file mode 100755 index 66a7df0c8f..0000000000 --- a/product/Coramy/Document/InventoryLine.py +++ /dev/null @@ -1,121 +0,0 @@ -############################################################################## -# -# Copyright (c) 2002 Nexedi SARL and Contributors. All Rights Reserved. -# Jean-Paul Smets-Solanes <jp@nexedi.com> -# -# WARNING: This program as such is intended to be used by professional -# programmers who take the whole responsability of assessing all potential -# consequences resulting from its eventual inadequacies and bugs -# End users who are looking for a ready-to-use solution with commercial -# garantees and support are strongly adviced to contract a Free Software -# Service Company -# -# This program is Free Software; you can redistribute it and/or -# modify it under the terms of the GNU General Public License -# as published by the Free Software Foundation; either version 2 -# of the License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -# -############################################################################## - -from Globals import InitializeClass, PersistentMapping -from AccessControl import ClassSecurityInfo - -from Products.CMFCore.WorkflowCore import WorkflowAction -from Products.ERP5Type import Permissions, PropertySheet, Constraint, Interface -from Products.ERP5.Document.InventoryLine import InventoryLine as ERP5InventoryLine - -class InventoryLine(ERP5InventoryLine): - """ - An InventoryLine object allows to implement lines in - Inventories - - """ - - meta_type = 'CORAMY Inventory Line' - portal_type = 'Inventory Line' - add_permission = Permissions.AddPortalContent - isPortalContent = 1 - isRADContent = 1 - - # Declarative security - security = ClassSecurityInfo() - security.declareObjectProtected(Permissions.View) - - # Declarative interfaces - __implements__ = ( Interface.Variated, ) - - # Declarative properties - property_sheets = ( PropertySheet.Base - , PropertySheet.XMLObject - , PropertySheet.CategoryCore - , PropertySheet.Amount - , PropertySheet.Inventory - , PropertySheet.Task - , PropertySheet.Arrow - , PropertySheet.Movement - , PropertySheet.VariationRange - ) - - # Factory Type Information - factory_type_information = \ - { 'id' : portal_type - , 'meta_type' : meta_type - , 'description' : """\ -Une ligne tarifaire.""" - , 'icon' : 'inventory_line_icon.gif' - , 'product' : 'ERP5' - , 'factory' : 'addInventoryLine' - , 'immediate_view' : 'inventory_line_view' - , 'allow_discussion' : 1 - , 'allowed_content_types': ('', - ) - , 'filter_content_types' : 1 - , 'global_allow' : 1 - , 'actions' : - ( { 'id' : 'view' - , 'name' : 'View' - , 'category' : 'object_view' - , 'action' : 'inventory_line_view' - , 'permissions' : ( - Permissions.View, ) - } - , { 'id' : 'list' - , 'name' : 'Object Contents' - , 'category' : 'object_action' - , 'action' : 'folder_contents' - , 'permissions' : ( - Permissions.View, ) - } - , { 'id' : 'print' - , 'name' : 'Print' - , 'category' : 'object_print' - , 'action' : 'inventory_line_print' - , 'permissions' : ( - Permissions.View, ) - } - , { 'id' : 'metadata' - , 'name' : 'Metadata' - , 'category' : 'object_view' - , 'action' : 'metadata_view' - , 'permissions' : ( - Permissions.View, ) - } - , { 'id' : 'translate' - , 'name' : 'Translate' - , 'category' : 'object_action' - , 'action' : 'translation_template_view' - , 'permissions' : ( - Permissions.TranslateContent, ) - } - ) - } - diff --git a/product/Coramy/Document/Invoice.py b/product/Coramy/Document/Invoice.py deleted file mode 100755 index f9c684033d..0000000000 --- a/product/Coramy/Document/Invoice.py +++ /dev/null @@ -1,131 +0,0 @@ -############################################################################## -# -# Copyright (c) 2002 Nexedi SARL and Contributors. All Rights Reserved. -# Jean-Paul Smets-Solanes <jp@nexedi.com> -# -# WARNING: This program as such is intended to be used by professional -# programmers who take the whole responsability of assessing all potential -# consequences resulting from its eventual inadequacies and bugs -# End users who are looking for a ready-to-use solution with commercial -# garantees and support are strongly adviced to contract a Free Software -# Service Company -# -# This program is Free Software; you can redistribute it and/or -# modify it under the terms of the GNU General Public License -# as published by the Free Software Foundation; either version 2 -# of the License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -# -############################################################################## - -from Globals import InitializeClass, PersistentMapping -from AccessControl import ClassSecurityInfo - -from Products.ERP5.Document.Resource import Resource -from Products.ERP5.Document.Invoice import Invoice as ERP5Invoice -from Products.ERP5Type import Permissions, PropertySheet, Constraint, Interface - -from zLOG import LOG - -class Invoice(ERP5Invoice): - """ - Une livraison d'echantillons.... - - """ - meta_type = 'CORAMY Invoice' - portal_type = 'Invoice' - add_permission = Permissions.AddPortalContent - isPortalContent = 1 - isRADContent = 1 - - # Declarative security - security = ClassSecurityInfo() - security.declareObjectProtected(Permissions.View) - - # Declarative properties - property_sheets = ( PropertySheet.Base - , PropertySheet.XMLObject - , PropertySheet.CategoryCore - , PropertySheet.DublinCore - , PropertySheet.Delivery - , PropertySheet.Task - , PropertySheet.Arrow - , PropertySheet.Movement - , PropertySheet.Amount - , PropertySheet.Reference - , PropertySheet.TradeCondition - , PropertySheet.PaymentCondition - , PropertySheet.Comment - ) - - # Factory Type Information - factory_type_information = \ - { 'id' : portal_type - , 'meta_type' : meta_type - , 'description' : """\ -une commande...""" - , 'icon' : 'order_icon.gif' - , 'product' : 'Coramy' - , 'factory' : 'addInvoice' - , 'immediate_view' : 'invoice_view' - , 'allow_discussion' : 1 - , 'allowed_content_types': ('Movement', 'Sample Order Line', - ) - , 'filter_content_types' : 1 - , 'global_allow' : 1 - , 'actions' : - ( { 'id' : 'view' - , 'name' : 'View' - , 'category' : 'object_view' - , 'action' : 'invoice_view' - , 'permissions' : ( - Permissions.View, ) - } - , { 'id' : 'list' - , 'name' : 'Object Contents' - , 'category' : 'object_action' - , 'action' : 'folder_contents' - , 'permissions' : ( - Permissions.View, ) - } - , { 'id' : 'print' - , 'name' : 'Print' - , 'category' : 'object_print' - , 'action' : 'invoice_print' - , 'permissions' : ( - Permissions.View, ) - } - , { 'id' : 'metadata' - , 'name' : 'Metadata' - , 'category' : 'object_view' - , 'action' : 'metadata_edit' - , 'permissions' : ( - Permissions.View, ) - } - , { 'id' : 'translate' - , 'name' : 'Translate' - , 'category' : 'object_action' - , 'action' : 'translation_template_view' - , 'permissions' : ( - Permissions.TranslateContent, ) - } - ) - } - - security.declareProtected(Permissions.AccessContentsInformation, 'getSimulationState') - def getSimulationState(self, id_only=1): - """ - Returns the current state in simulation - """ - portal_workflow = getToolByName(self, 'portal_workflow') - wf = portal_workflow.getWorkflowById('sale_invoice_transaction_workflow') - return wf._getWorkflowStateOf(self, id_only=id_only ) - diff --git a/product/Coramy/Document/Item.py b/product/Coramy/Document/Item.py deleted file mode 100755 index e15c08c7f8..0000000000 --- a/product/Coramy/Document/Item.py +++ /dev/null @@ -1,178 +0,0 @@ -############################################################################## -# -# Copyright (c) 2002 Nexedi SARL and Contributors. All Rights Reserved. -# Jean-Paul Smets-Solanes <jp@nexedi.com> -# -# WARNING: This program as such is intended to be used by professional -# programmers who take the whole responsability of assessing all potential -# consequences resulting from its eventual inadequacies and bugs -# End users who are looking for a ready-to-use solution with commercial -# garantees and support are strongly adviced to contract a Free Software -# Service Company -# -# This program is Free Software; you can redistribute it and/or -# modify it under the terms of the GNU General Public License -# as published by the Free Software Foundation; either version 2 -# of the License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -# -############################################################################## - -from Globals import InitializeClass, PersistentMapping -from AccessControl import ClassSecurityInfo - -from Products.ERP5.Document.Resource import Resource -from Products.ERP5.Document.Item import Item as ERP5Item -from Products.ERP5Type import Permissions, PropertySheet, Constraint, Interface - -from zLOG import LOG - -class Item(ERP5Item): - """ - Un item.... - """ - - meta_type = 'CORAMY Item' - portal_type = 'Item' - add_permission = Permissions.AddPortalContent - isPortalContent = 1 - isRADContent = 1 - - # Declarative security - security = ClassSecurityInfo() - security.declareObjectProtected(Permissions.View) - - # Declarative properties - property_sheets = ( PropertySheet.Base - , PropertySheet.XMLObject - , PropertySheet.CategoryCore - , PropertySheet.DublinCore - , PropertySheet.Price - , PropertySheet.Resource - , PropertySheet.Reference - , PropertySheet.Item - , PropertySheet.Amount - , PropertySheet.CoramyItem - , PropertySheet.Comment - ) - - # Factory Type Information - factory_type_information = \ - { 'id' : portal_type - , 'meta_type' : meta_type - , 'description' : """\ -Un item sert a assurer la tracabilite des choses dans ERP5.""" - , 'icon' : 'item_icon.gif' - , 'product' : 'Coramy' - , 'factory' : 'addItem' - , 'immediate_view' : 'item_view' - , 'allow_discussion' : 1 - , 'allowed_content_types': ('Item', - ) - , 'filter_content_types' : 1 - , 'global_allow' : 1 - , 'actions' : - ( { 'id' : 'view' - , 'name' : 'View' - , 'category' : 'object_view' - , 'action' : 'item_view' - , 'permissions' : ( - Permissions.View, ) - } - , { 'id' : 'list' - , 'name' : 'Object Contents' - , 'category' : 'object_action' - , 'action' : 'folder_contents' - , 'permissions' : ( - Permissions.View, ) - } - , { 'id' : 'print' - , 'name' : 'Print' - , 'category' : 'object_print' - , 'action' : 'item_print' - , 'permissions' : ( - Permissions.View, ) - } - , { 'id' : 'metadata' - , 'name' : 'Metadata' - , 'category' : 'object_view' - , 'action' : 'metadata_edit' - , 'permissions' : ( - Permissions.View, ) - } - , { 'id' : 'translate' - , 'name' : 'Translate' - , 'category' : 'object_action' - , 'action' : 'translation_template_view' - , 'permissions' : ( - Permissions.TranslateContent, ) - } - ) - } - - def _setTitle(self, value): - """ - Here we see that we must define an notion - of priority in the way fields are updated - """ - if value != self.getTitle(): - self.title = value - - security.declareProtected(Permissions.View, 'getTitle') - def getTitle(self): - """ - Returns the title if it exists or a combination of - first name and last name - """ - if self.title == '': - return self.getId() - else: - return self.title - Title = getTitle - - security.declareProtected(Permissions.ModifyPortalContent, 'setTitle') - def setTitle(self, value): - """ - Updates the title if necessary - """ - self._setTitle(value) - self.reindexObject() - - security.declareProtected(Permissions.ModifyPortalContent, 'getRemainingQuantity') - def getRemainingQuantity(self): - """ - Computes the quantity of an item minus quantity of all sub_items - """ - sub_item_list = self.contentValues(filter={'portal_type':'Piece Tissu'}) - sub_quantity = 0 - for sub_item in sub_item_list : - sub_quantity += sub_item.getQuantity() - return self.getQuantity() - sub_quantity - - security.declareProtected(Permissions.ModifyPortalContent, 'getLastLocationTitle') - def getLastLocationTitle(self): - """ - Returns the last location of this item or empty string - """ - related_movement_list = self.PieceTissu_zGetAggregateRelatedMovementList() - if len(related_movement_list) > 0 : - last_movement = related_movement_list[0] - quantity = last_movement.quantity - inventory = last_movement.inventory - if inventory is not None : - last_location_title = last_movement.destination_title - elif quantity >= 0 : - last_location_title = last_movement.destination_title - else : - last_location_title = '' - return last_location_title - else : - return '' diff --git a/product/Coramy/Document/Machine.py b/product/Coramy/Document/Machine.py deleted file mode 100755 index 2d13d7bbf1..0000000000 --- a/product/Coramy/Document/Machine.py +++ /dev/null @@ -1,83 +0,0 @@ -############################################################################## -# -# Copyright (c) 2002 Nexedi SARL and Contributors. All Rights Reserved. -# Jean-Paul Smets-Solanes <jp@nexedi.com> -# -# WARNING: This program as such is intended to be used by professional -# programmers who take the whole responsability of assessing all potential -# consequences resulting from its eventual inadequacies and bugs -# End users who are looking for a ready-to-use solution with commercial -# garantees and support are strongly adviced to contract a Free Software -# Service Company -# -# This program is Free Software; you can redistribute it and/or -# modify it under the terms of the GNU General Public License -# as published by the Free Software Foundation; either version 2 -# of the License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -# -############################################################################## - -from Products.Coramy.Document.Item import Item -from Products.ERP5Type import Permissions, PropertySheet, Constraint, Interface -from AccessControl import ClassSecurityInfo - -class Machine(Item): - """ - une machine.. - """ - - meta_type = 'CORAMY Machine' - portal_type = 'Machine' - add_permission = Permissions.AddPortalContent - isPortalContent = 1 - isRADContent = 1 - - # Declarative security - security = ClassSecurityInfo() - security.declareObjectProtected(Permissions.View) - - # Declarative properties - property_sheets = ( PropertySheet.Base - , PropertySheet.CategoryCore - , PropertySheet.DublinCore - , PropertySheet.Resource - , PropertySheet.Amount - , PropertySheet.ModeleMachine - , PropertySheet.Reference - , PropertySheet.Machine - ) - - # Factory Type Information - factory_type_information = \ - { 'id' : portal_type - , 'meta_type' : meta_type - , 'description' : """\ -un modele...""" - , 'icon' : 'machine_icon.gif' - , 'product' : 'Coramy' - , 'factory' : 'addMachine' - , 'immediate_view' : 'machine_view' - , 'allow_discussion' : 1 - , 'allowed_content_types': ('Machine', - ) - , 'filter_content_types' : 1 - , 'global_allow' : 1 - , 'actions' : - ( { 'id' : 'view' - , 'name' : 'View' - , 'category' : 'object_view' - , 'action' : 'machine_view' - , 'permissions' : ( - Permissions.View, ) - }, - ) - } diff --git a/product/Coramy/Document/Modele.py b/product/Coramy/Document/Modele.py deleted file mode 100755 index 39d2c7da16..0000000000 --- a/product/Coramy/Document/Modele.py +++ /dev/null @@ -1,181 +0,0 @@ -############################################################################## -# -# Copyright (c) 2002 Nexedi SARL and Contributors. All Rights Reserved. -# Jean-Paul Smets-Solanes <jp@nexedi.com> -# -# WARNING: This program as such is intended to be used by professional -# programmers who take the whole responsability of assessing all potential -# consequences resulting from its eventual inadequacies and bugs -# End users who are looking for a ready-to-use solution with commercial -# garantees and support are strongly adviced to contract a Free Software -# Service Company -# -# This program is Free Software; you can redistribute it and/or -# modify it under the terms of the GNU General Public License -# as published by the Free Software Foundation; either version 2 -# of the License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -# -############################################################################## - -from AccessControl import ClassSecurityInfo - -from Products.ERP5.Document.Resource import Resource -from Products.ERP5Type import Permissions, PropertySheet, Constraint, Interface -from Products.ERP5Type.Base import Base -from Products.ERP5Type.XMLMatrix import XMLMatrix - - -from zLOG import LOG - -class Modele(Resource, XMLMatrix): - """ - un modele.. - """ - - meta_type = 'CORAMY Modele' - portal_type = 'Modele' - add_permission = Permissions.AddPortalContent - isPortalContent = 1 - isRADContent = 1 - - # Declarative security - security = ClassSecurityInfo() - security.declareObjectProtected(Permissions.View) - - # Declarative properties - property_sheets = ( PropertySheet.Base - , PropertySheet.XMLObject - , PropertySheet.CategoryCore - , PropertySheet.DublinCore - , PropertySheet.Price - , PropertySheet.Resource - , PropertySheet.Reference - , PropertySheet.Modele - ) - - # Hard Wired Variation List - # XXX - may be incompatible with future versions of ERP5 - variation_base_category_list = ('transformation_state', 'coloris', 'taille', 'morphologie',) - - # Factory Type Information - factory_type_information = \ - { 'id' : portal_type - , 'meta_type' : meta_type - , 'description' : """\ -un modele...""" - , 'icon' : 'modele_icon.gif' - , 'product' : 'Coramy' - , 'factory' : 'addModele' - , 'immediate_view' : 'modele_view' - , 'allow_discussion' : 1 - , 'allowed_content_types': ('Variante Modele', - ) - , 'filter_content_types' : 1 - , 'global_allow' : 1 - , 'actions' : - ( { 'id' : 'view' - , 'name' : 'View' - , 'category' : 'object_view' - , 'action' : 'modele_view' - , 'permissions' : ( - Permissions.View, ) - } - , { 'id' : 'list' - , 'name' : 'Object Contents' - , 'category' : 'object_action' - , 'action' : 'folder_contents' - , 'permissions' : ( - Permissions.View, ) - } - , { 'id' : 'print' - , 'name' : 'Print' - , 'category' : 'object_print' - , 'action' : 'modele_print' - , 'permissions' : ( - Permissions.View, ) - } - , { 'id' : 'metadata' - , 'name' : 'Metadata' - , 'category' : 'object_edit' - , 'action' : 'metadata_edit' - , 'permissions' : ( - Permissions.View, ) - } - , { 'id' : 'translate' - , 'name' : 'Translate' - , 'category' : 'object_action' - , 'action' : 'translation_template_view' - , 'permissions' : ( - Permissions.TranslateContent, ) - } - ) - } - - def __init__(self, id, **kw): - """ - Special init method with hard wired category - """ - Resource.__init__(self, id, **kw) - # DOES NOT WORK self._setCategoryMembership('transformation_state', ('coupe', 'fini',)) - - def _setTitle(self, value): - """ - Here we see that we must define an notion - of priority in the way fields are updated - """ - if value != self.getTitle(): - self.title = value - - security.declareProtected(Permissions.View, 'getTitle') - def getTitle(self): - """ - Returns the title if it exists or a combination of - first name and last name - """ - if self.title == '': - return self.getId() - else: - return self.title - Title = getTitle - - security.declareProtected(Permissions.ModifyPortalContent, 'setTitle') - def setTitle(self, value): - """ - Updates the title if necessary - """ - self._setTitle(value) - self.reindexObject() - - security.declareProtected( Permissions.ModifyPortalContent, 'newCellContent' ) - def newCellContent(self, id): - """ - This method can be overriden - """ - self.invokeFactory(type_name="Set Mapped Value",id=id) - return self.get(id) - - # Industrial prices - def _getIndustrialPrice(self, context): - """ - return PRI for Modèle - """ - for pri in self.contentValues(filter={'portal_type': 'Set Mapped Value'}): - if 'pri' in pri.getMappedValuePropertyList(): - if pri.test(context): - return pri.getProperty('pri') - return None - - def _updateIndustrialPrice(self, context): - #pass - self.modele_compute_pri(batch_mode=1) - - diff --git a/product/Coramy/Document/ModeleMachine.py b/product/Coramy/Document/ModeleMachine.py deleted file mode 100755 index 928004e424..0000000000 --- a/product/Coramy/Document/ModeleMachine.py +++ /dev/null @@ -1,91 +0,0 @@ -############################################################################## -# -# Copyright (c) 2002 Nexedi SARL and Contributors. All Rights Reserved. -# Jean-Paul Smets-Solanes <jp@nexedi.com> -# -# WARNING: This program as such is intended to be used by professional -# programmers who take the whole responsability of assessing all potential -# consequences resulting from its eventual inadequacies and bugs -# End users who are looking for a ready-to-use solution with commercial -# garantees and support are strongly adviced to contract a Free Software -# Service Company -# -# This program is Free Software; you can redistribute it and/or -# modify it under the terms of the GNU General Public License -# as published by the Free Software Foundation; either version 2 -# of the License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -# -############################################################################## - -from AccessControl import ClassSecurityInfo - -from Products.ERP5.Document.Resource import Resource -from Products.ERP5Type import Permissions, PropertySheet, Constraint, Interface -from Products.ERP5Type.Document.Folder import Folder - - -from zLOG import LOG - -class ModeleMachine(Resource, Folder): - """ - un modele de machine.. - """ - - meta_type = 'CORAMY Modele Machine' - portal_type = 'Modele Machine' - add_permission = Permissions.AddPortalContent - isPortalContent = 1 - isRADContent = 1 - - # Declarative security - security = ClassSecurityInfo() - security.declareObjectProtected(Permissions.View) - - # Declarative properties - property_sheets = ( PropertySheet.Base - , PropertySheet.CategoryCore - , PropertySheet.DublinCore - , PropertySheet.Resource - , PropertySheet.ModeleMachine - , PropertySheet.Reference - - ) - - # Hard Wired Variation List - # XXX - may be incompatible with future versions of ERP5 - variation_base_category_list = ('option_machine',) - - # Factory Type Information - factory_type_information = \ - { 'id' : portal_type - , 'meta_type' : meta_type - , 'description' : """\ -un modele...""" - , 'icon' : 'modele_machine_icon.gif' - , 'product' : 'Coramy' - , 'factory' : 'addModeleMachine' - , 'immediate_view' : 'modele_machine_view' - , 'allow_discussion' : 1 - , 'allowed_content_types': ('Option Machine', - ) - , 'filter_content_types' : 1 - , 'global_allow' : 1 - , 'actions' : - ( { 'id' : 'view' - , 'name' : 'View' - , 'category' : 'object_view' - , 'action' : 'modele_machine_view' - , 'permissions' : ( - Permissions.View, ) - }, - ) - } diff --git a/product/Coramy/Document/Morceau.py b/product/Coramy/Document/Morceau.py deleted file mode 100755 index f36154ed45..0000000000 --- a/product/Coramy/Document/Morceau.py +++ /dev/null @@ -1,140 +0,0 @@ -############################################################################## -# -# Copyright (c) 2002 Coramy SAS and Contributors. All Rights Reserved. -# Thierry_Faucher <Thierry_Faucher@coramy.com> -# -# WARNING: This program as such is intended to be used by professional -# programmers who take the whole responsability of assessing all potential -# consequences resulting from its eventual inadequacies and bugs -# End users who are looking for a ready-to-use solution with commercial -# garantees and support are strongly adviced to contract a Free Software -# Service Company -# -# This program is Free Software; you can redistribute it and/or -# modify it under the terms of the GNU General Public License -# as published by the Free Software Foundation; either version 2 -# of the License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -# -############################################################################## - -from Globals import InitializeClass, PersistentMapping -from AccessControl import ClassSecurityInfo - -from Products.ERP5Type import Permissions, PropertySheet, Constraint, Interface -from Products.ERP5Type.XMLObject import XMLObject - -class Morceau(XMLObject): - """ - un morceau.. - """ - - meta_type = 'CORAMY Morceau' - portal_type = 'Morceau' - add_permission = Permissions.AddPortalContent - isPortalContent = 1 - isRADContent = 1 - - # Declarative security - security = ClassSecurityInfo() - security.declareObjectProtected(Permissions.View) - - # Declarative properties - property_sheets = ( PropertySheet.Base - , PropertySheet.XMLObject - , PropertySheet.CategoryCore - , PropertySheet.DublinCore - , PropertySheet.Morceau - ) - - # Factory Type Information - factory_type_information = \ - { 'id' : portal_type - , 'meta_type' : meta_type - , 'description' : """\ -un morceau...""" - , 'icon' : 'morceau_icon.gif' - , 'product' : 'Coramy' - , 'factory' : 'addMorceau' - , 'immediate_view' : 'morceau_view' - , 'allow_discussion' : 1 - , 'allowed_content_types': ('Topic', - ) - , 'filter_content_types' : 1 - , 'global_allow' : 1 - , 'actions' : - ( { 'id' : 'view' - , 'name' : 'View' - , 'category' : 'object_view' - , 'action' : 'morceau_view' - , 'permissions' : ( - Permissions.View, ) - } - , { 'id' : 'list' - , 'name' : 'Object Contents' - , 'category' : 'object_action' - , 'action' : 'folder_contents' - , 'permissions' : ( - Permissions.View, ) - } - , { 'id' : 'print' - , 'name' : 'Print' - , 'category' : 'object_print' - , 'action' : 'object_print' - , 'permissions' : ( - Permissions.View, ) - } - , { 'id' : 'metadata' - , 'name' : 'Metadata' - , 'category' : 'object_edit' - , 'action' : 'metadata_edit' - , 'permissions' : ( - Permissions.View, ) - } - , { 'id' : 'translate' - , 'name' : 'Translate' - , 'category' : 'object_action' - , 'action' : 'translation_template_view' - , 'permissions' : ( - Permissions.TranslateContent, ) - } - ) - } - - def _setTitle(self, value): - """ - Here we see that we must define an notion - of priority in the way fields are updated - """ - if value != self.getTitle(): - self.title = value - - security.declareProtected(Permissions.View, 'getTitle') - def getTitle(self): - """ - Returns the title if it exists or a combination of - first name and last name - """ - if self.title == '': - return self.getId() - else: - return self.title - Title = getTitle - - security.declareProtected(Permissions.ModifyPortalContent, 'setTitle') - def setTitle(self, value): - """ - Updates the title if necessary - """ - self._setTitle(value) - self.reindexObject() - - diff --git a/product/Coramy/Document/Nomenclature.py b/product/Coramy/Document/Nomenclature.py deleted file mode 100755 index 20a32fecae..0000000000 --- a/product/Coramy/Document/Nomenclature.py +++ /dev/null @@ -1,124 +0,0 @@ -############################################################################## -# -# Copyright (c) 2002 Nexedi SARL and Contributors. All Rights Reserved. -# Jean-Paul Smets-Solanes <jp@nexedi.com> -# -# WARNING: This program as such is intended to be used by professional -# programmers who take the whole responsability of assessing all potential -# consequences resulting from its eventual inadequacies and bugs -# End users who are looking for a ready-to-use solution with commercial -# garantees and support are strongly adviced to contract a Free Software -# Service Company -# -# This program is Free Software; you can redistribute it and/or -# modify it under the terms of the GNU General Public License -# as published by the Free Software Foundation; either version 2 -# of the License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -# -############################################################################## - -from Globals import InitializeClass, PersistentMapping -from AccessControl import ClassSecurityInfo - -from Products.ERP5.Document.Resource import Resource -from Products.ERP5.Document.Transformation import Transformation -from Products.ERP5Type import PropertySheet, Permissions, Constraint, Interface - -class Nomenclature(Transformation): - """ - Une nomenclature.... - - - No nom - Titre - Correspondance taill checkbox - Corrsp. coloris checkbox - Variante par déau - Quté par défaut - Efficience - """ - - meta_type = 'CORAMY Nomenclature' - portal_type = 'Nomenclature' - add_permission = Permissions.AddPortalContent - isPortalContent = 1 - isRADContent = 1 - - # Declarative security - security = ClassSecurityInfo() - security.declareObjectProtected(Permissions.View) - - # Declarative properties - property_sheets = ( PropertySheet.Base - , PropertySheet.XMLObject - , PropertySheet.CategoryCore - , PropertySheet.DublinCore - , PropertySheet.Price - , PropertySheet.Resource - , PropertySheet.Tissu - ) - - # Factory Type Information - factory_type_information = \ - { 'id' : portal_type - , 'meta_type' : meta_type - , 'description' : """\ -Un tissu est une resource variantable en couleur.""" - , 'icon' : 'tissu_icon.gif' - , 'product' : 'Coramy' - , 'factory' : 'addNomenclature' - , 'immediate_view' : 'nomenclature_view' - , 'allow_discussion' : 1 - , 'allowed_content_types': ('Variante Tissu', - ) - , 'filter_content_types' : 1 - , 'global_allow' : 1 - , 'actions' : - ( { 'id' : 'view' - , 'name' : 'View' - , 'category' : 'object_view' - , 'action' : 'tissu_view' - , 'permissions' : ( - Permissions.View, ) - } - , { 'id' : 'list' - , 'name' : 'Object Contents' - , 'category' : 'object_action' - , 'action' : 'folder_contents' - , 'permissions' : ( - Permissions.View, ) - } - , { 'id' : 'print' - , 'name' : 'Print' - , 'category' : 'object_print' - , 'action' : 'tissu_print' - , 'permissions' : ( - Permissions.View, ) - } - , { 'id' : 'metadata' - , 'name' : 'Metadata' - , 'category' : 'object_view' - , 'action' : 'metadata_edit' - , 'permissions' : ( - Permissions.View, ) - } - , { 'id' : 'translate' - , 'name' : 'Translate' - , 'category' : 'object_action' - , 'action' : 'translation_template_view' - , 'permissions' : ( - Permissions.TranslateContent, ) - } - ) - } - - diff --git a/product/Coramy/Document/Operation.py b/product/Coramy/Document/Operation.py deleted file mode 100755 index 2432cd8251..0000000000 --- a/product/Coramy/Document/Operation.py +++ /dev/null @@ -1,157 +0,0 @@ -############################################################################## -# -# Copyright (c) 2002 Nexedi SARL and Contributors. All Rights Reserved. -# Jean-Paul Smets-Solanes <jp@nexedi.com> -# -# WARNING: This program as such is intended to be used by professional -# programmers who take the whole responsability of assessing all potential -# consequences resulting from its eventual inadequacies and bugs -# End users who are looking for a ready-to-use solution with commercial -# garantees and support are strongly adviced to contract a Free Software -# Service Company -# -# This program is Free Software; you can redistribute it and/or -# modify it under the terms of the GNU General Public License -# as published by the Free Software Foundation; either version 2 -# of the License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -# -############################################################################## - -from AccessControl import ClassSecurityInfo - -from Products.ERP5.Document.Resource import Resource -from Products.ERP5Type import Permissions, PropertySheet, Constraint, Interface -from Products.ERP5Type.Base import Base -from Products.ERP5Type.XMLMatrix import XMLMatrix - - -from zLOG import LOG - -class Operation(Resource, XMLMatrix): - """ - une Operation.. - """ - - meta_type = 'CORAMY Operation' - portal_type = 'Operation' - add_permission = Permissions.AddPortalContent - isPortalContent = 1 - isRADContent = 1 - - # Declarative security - security = ClassSecurityInfo() - security.declareObjectProtected(Permissions.View) - - # Declarative properties - property_sheets = ( PropertySheet.Base - , PropertySheet.XMLObject - , PropertySheet.CategoryCore - , PropertySheet.DublinCore - , PropertySheet.Price - , PropertySheet.Resource - , PropertySheet.Operation - ) - - # Hard Wired Variation List - - - # Factory Type Information - factory_type_information = \ - { 'id' : portal_type - , 'meta_type' : meta_type - , 'description' : """\ -une Operation...""" - , 'icon' : 'modele_icon.gif' - , 'product' : 'Coramy' - , 'factory' : 'addModele' - , 'immediate_view' : 'modele_view' - , 'allow_discussion' : 1 - , 'allowed_content_types': ('Variante Operation', - ) - , 'filter_content_types' : 1 - , 'global_allow' : 1 - , 'actions' : - ( { 'id' : 'view' - , 'name' : 'View' - , 'category' : 'object_view' - , 'action' : 'operation_view' - , 'permissions' : ( - Permissions.View, ) - } - , { 'id' : 'list' - , 'name' : 'Object Contents' - , 'category' : 'object_action' - , 'action' : 'folder_contents' - , 'permissions' : ( - Permissions.View, ) - } - , { 'id' : 'print' - , 'name' : 'Print' - , 'category' : 'object_print' - , 'action' : 'operation_print' - , 'permissions' : ( - Permissions.View, ) - } - , { 'id' : 'metadata' - , 'name' : 'Metadata' - , 'category' : 'object_edit' - , 'action' : 'metadata_edit' - , 'permissions' : ( - Permissions.View, ) - } - , { 'id' : 'translate' - , 'name' : 'Translate' - , 'category' : 'object_action' - , 'action' : 'translation_template_view' - , 'permissions' : ( - Permissions.TranslateContent, ) - } - ) - } - - def __init__(self, id, **kw): - """ - Special init method with hard wired category - """ - Resource.__init__(self, id, **kw) - # DOES NOT WORK self._setCategoryMembership('transformation_state', ('coupe', 'fini',)) - - def _setTitle(self, value): - """ - Here we see that we must define an notion - of priority in the way fields are updated - """ - if value != self.getTitle(): - self.title = value - - security.declareProtected(Permissions.View, 'getTitle') - def getTitle(self): - """ - Returns the title if it exists or a combination of - first name and last name - """ - if self.title == '': - return self.getId() - else: - return self.title - Title = getTitle - - security.declareProtected(Permissions.ModifyPortalContent, 'setTitle') - def setTitle(self, value): - """ - Updates the title if necessary - """ - self._setTitle(value) - self.reindexObject() - - - diff --git a/product/Coramy/Document/OptionMachine.py b/product/Coramy/Document/OptionMachine.py deleted file mode 100755 index 84fe529bf3..0000000000 --- a/product/Coramy/Document/OptionMachine.py +++ /dev/null @@ -1,75 +0,0 @@ -############################################################################## -# -# Copyright (c) 2002 Coramy SAS and Contributors. All Rights Reserved. -# Thierry_Faucher <Thierry_Faucher@coramy.com> -# -# WARNING: This program as such is intended to be used by professional -# programmers who take the whole responsability of assessing all potential -# consequences resulting from its eventual inadequacies and bugs -# End users who are looking for a ready-to-use solution with commercial -# garantees and support are strongly adviced to contract a Free Software -# Service Company -# -# This program is Free Software; you can redistribute it and/or -# modify it under the terms of the GNU General Public License -# as published by the Free Software Foundation; either version 2 -# of the License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -# -############################################################################## - -from AccessControl import ClassSecurityInfo -from Products.ERP5.Document.Variation import Variation -from Products.ERP5Type import Permissions, PropertySheet, Constraint, Interface - -class OptionMachine(Variation): - """ - une variante de machine.. - """ - - meta_type = 'CORAMY Option Machine' - portal_type = 'Option Machine' - add_permission = Permissions.AddPortalContent - isPortalContent = 1 - isRADContent = 1 - - # Declarative security - security = ClassSecurityInfo() - security.declareObjectProtected(Permissions.View) - - # Declarative properties - property_sheets = ( PropertySheet.Base - , PropertySheet.XMLObject - , PropertySheet.CategoryCore - , PropertySheet.DublinCore - ) - - - # Factory Type Information - factory_type_information = \ - { 'id' : portal_type - , 'meta_type' : meta_type - , 'description' : """\ -une variante de machine...""" - , 'icon' : 'option_machine_icon.gif' - , 'product' : 'Coramy' - , 'factory' : 'addOptionMachine' - , 'immediate_view' : 'option_machine_view' - , 'actions' : - ( { 'id' : 'view' - , 'name' : 'View' - , 'category' : 'object_view' - , 'action' : 'option_machine_view' - , 'permissions' : ( - Permissions.View, ) - }, - ) - } diff --git a/product/Coramy/Document/Order.py b/product/Coramy/Document/Order.py deleted file mode 100755 index 2a05e0c19f..0000000000 --- a/product/Coramy/Document/Order.py +++ /dev/null @@ -1,119 +0,0 @@ -############################################################################## -# -# Copyright (c) 2002 Nexedi SARL and Contributors. All Rights Reserved. -# Jean-Paul Smets-Solanes <jp@nexedi.com> -# -# WARNING: This program as such is intended to be used by professional -# programmers who take the whole responsability of assessing all potential -# consequences resulting from its eventual inadequacies and bugs -# End users who are looking for a ready-to-use solution with commercial -# garantees and support are strongly adviced to contract a Free Software -# Service Company -# -# This program is Free Software; you can redistribute it and/or -# modify it under the terms of the GNU General Public License -# as published by the Free Software Foundation; either version 2 -# of the License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -# -############################################################################## - -from Globals import InitializeClass, PersistentMapping -from AccessControl import ClassSecurityInfo -from Products.CMFCore.WorkflowCore import WorkflowMethod -from Products.ERP5.Document.Order import Order as ERP5Order -from Products.ERP5Type import Permissions, PropertySheet, Constraint, Interface - -from zLOG import LOG - -class Order(ERP5Order): - """ - Une commande.... - - """ - - meta_type = 'CORAMY Order' - portal_type = 'Order' - add_permission = Permissions.AddPortalContent - isPortalContent = 1 - isRADContent = 1 - - # Declarative security - security = ClassSecurityInfo() - security.declareObjectProtected(Permissions.View) - - # Declarative properties - property_sheets = ( PropertySheet.Base - , PropertySheet.XMLObject - , PropertySheet.CategoryCore - , PropertySheet.DublinCore - , PropertySheet.Task - , PropertySheet.Arrow - , PropertySheet.TradeCondition - , PropertySheet.PaymentCondition - , PropertySheet.Comment - , PropertySheet.Reference - , PropertySheet.CoramyOrder - ) - - # Factory Type Information - factory_type_information = \ - { 'id' : portal_type - , 'meta_type' : meta_type - , 'description' : """\ -une commande...""" - , 'icon' : 'order_icon.gif' - , 'product' : 'Coramy' - , 'factory' : 'addOrder' - , 'immediate_view' : 'order_view' - , 'allow_discussion' : 1 - , 'allowed_content_types': ('Movement', 'Order Line', - ) - , 'filter_content_types' : 1 - , 'global_allow' : 1 - , 'actions' : - ( { 'id' : 'view' - , 'name' : 'View' - , 'category' : 'object_view' - , 'action' : 'order_view' - , 'permissions' : ( - Permissions.View, ) - } - , { 'id' : 'list' - , 'name' : 'Object Contents' - , 'category' : 'object_action' - , 'action' : 'folder_contents' - , 'permissions' : ( - Permissions.View, ) - } - , { 'id' : 'print' - , 'name' : 'Print' - , 'category' : 'object_print' - , 'action' : 'order_print' - , 'permissions' : ( - Permissions.View, ) - } - , { 'id' : 'metadata' - , 'name' : 'Metadata' - , 'category' : 'object_view' - , 'action' : 'metadata_edit' - , 'permissions' : ( - Permissions.View, ) - } - , { 'id' : 'translate' - , 'name' : 'Translate' - , 'category' : 'object_action' - , 'action' : 'translation_template_view' - , 'permissions' : ( - Permissions.TranslateContent, ) - } - ) - } diff --git a/product/Coramy/Document/OrderLine.py b/product/Coramy/Document/OrderLine.py deleted file mode 100755 index ffc1ebadfd..0000000000 --- a/product/Coramy/Document/OrderLine.py +++ /dev/null @@ -1,138 +0,0 @@ -############################################################################## -# -# Copyright (c) 2002 Nexedi SARL and Contributors. All Rights Reserved. -# Jean-Paul Smets-Solanes <jp@nexedi.com> -# -# WARNING: This program as such is intended to be used by professional -# programmers who take the whole responsability of assessing all potential -# consequences resulting from its eventual inadequacies and bugs -# End users who are looking for a ready-to-use solution with commercial -# garantees and support are strongly adviced to contract a Free Software -# Service Company -# -# This program is Free Software; you can redistribute it and/or -# modify it under the terms of the GNU General Public License -# as published by the Free Software Foundation; either version 2 -# of the License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -# -############################################################################## - -from Globals import InitializeClass, PersistentMapping -from AccessControl import ClassSecurityInfo - -from Products.CMFCore.WorkflowCore import WorkflowAction - -from Products.ERP5.Document.Movement import Movement -from Products.ERP5.Document.OrderLine import OrderLine as ERP5OrderLine -from Products.ERP5Type import Permissions, PropertySheet, Constraint, Interface - -class OrderLine(ERP5OrderLine): - """ - Une ligne de commande définit également un prix - Un element de tarif est un prix pour un ensemble de conditions d'application... - """ - - meta_type = 'CORAMY Order Line' - portal_type = 'Order Line' - add_permission = Permissions.AddPortalContent - isPortalContent = 1 - isRADContent = 1 - - # Declarative security - security = ClassSecurityInfo() - security.declareObjectProtected(Permissions.View) - - # Declarative properties - property_sheets = ( PropertySheet.Base - , PropertySheet.XMLObject - , PropertySheet.CategoryCore - , PropertySheet.Amount - , PropertySheet.Task - , PropertySheet.Arrow - , PropertySheet.Movement - , PropertySheet.VariationRange - , PropertySheet.Price - ) - _properties = ( - # XXXX there is a name conflict here - # because of the use of reference as a key - # we rename it here to destination_reference - { 'id' : 'destination_reference', - 'description' : 'The references of the resource for default destinations', - 'type' : 'string', - 'mode' : 'w' }, - ) - - # Factory Type Information - factory_type_information = \ - { 'id' : portal_type - , 'meta_type' : meta_type - , 'description' : """\ -Une ligne tarifaire.""" - , 'icon' : 'order_line_icon.gif' - , 'product' : 'Coramy' - , 'factory' : 'addOrderLine' - , 'immediate_view' : 'order_line_view' - , 'allow_discussion' : 1 - , 'allowed_content_types': ('', - ) - , 'filter_content_types' : 1 - , 'global_allow' : 1 - , 'actions' : - ( { 'id' : 'view' - , 'name' : 'View' - , 'category' : 'object_view' - , 'action' : 'order_line_view' - , 'permissions' : ( - Permissions.View, ) - } - , { 'id' : 'list' - , 'name' : 'Object Contents' - , 'category' : 'object_action' - , 'action' : 'folder_contents' - , 'permissions' : ( - Permissions.View, ) - } - , { 'id' : 'print' - , 'name' : 'Print' - , 'category' : 'object_print' - , 'action' : 'order_line_print' - , 'permissions' : ( - Permissions.View, ) - } - , { 'id' : 'metadata' - , 'name' : 'Metadata' - , 'category' : 'object_view' - , 'action' : 'metadata_edit' - , 'permissions' : ( - Permissions.View, ) - } - , { 'id' : 'translate' - , 'name' : 'Translate' - , 'category' : 'object_action' - , 'action' : 'translation_template_view' - , 'permissions' : ( - Permissions.TranslateContent, ) - } - ) - } - - security.declareProtected(Permissions.AccessContentsInformation, 'getVariationBaseCategoryList') - def getVariationBaseCategoryList(self): - """ - Temp fix - """ - # Temp fix until upgrade of Variated XXX - # XXX - may be incompatible with future versions of ERP5 - if self.variation_base_category_list is None: - return [] - return list(self.variation_base_category_list) diff --git a/product/Coramy/Document/PackingList.py b/product/Coramy/Document/PackingList.py deleted file mode 100755 index 28492752fd..0000000000 --- a/product/Coramy/Document/PackingList.py +++ /dev/null @@ -1,112 +0,0 @@ -############################################################################## -# -# Copyright (c) 2002 Nexedi SARL and Contributors. All Rights Reserved. -# Jean-Paul Smets-Solanes <jp@nexedi.com> -# -# WARNING: This program as such is intended to be used by professional -# programmers who take the whole responsability of assessing all potential -# consequences resulting from its eventual inadequacies and bugs -# End users who are looking for a ready-to-use solution with commercial -# garantees and support are strongly adviced to contract a Free Software -# Service Company -# -# This program is Free Software; you can redistribute it and/or -# modify it under the terms of the GNU General Public License -# as published by the Free Software Foundation; either version 2 -# of the License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -# -############################################################################## - -from Globals import InitializeClass, PersistentMapping -from AccessControl import ClassSecurityInfo -from Products.CMFCore.WorkflowCore import WorkflowMethod -from Products.ERP5Type import Permissions, PropertySheet, Constraint, Interface -from Products.ERP5.Document.PackingList import PackingList as ERP5PackingList - -class PackingList(ERP5PackingList): - # CMF Type Definition - meta_type = 'CORAMY Packing List' - portal_type = 'Packing List' - add_permission = Permissions.AddPortalContent - isPortalContent = 1 - isRADContent = 1 - - # Declarative security - security = ClassSecurityInfo() - security.declareObjectProtected(Permissions.View) - - # Default Properties - property_sheets = ( PropertySheet.Base - , PropertySheet.XMLObject - , PropertySheet.CategoryCore - , PropertySheet.DublinCore - , PropertySheet.Task - , PropertySheet.Arrow - , PropertySheet.Movement - , PropertySheet.Delivery - , PropertySheet.Reference - , PropertySheet.Comment - ) - - # CMF Factory Type Information - factory_type_information = \ - { 'id' : portal_type - , 'meta_type' : meta_type - , 'description' : """\ -A packing list...""" - , 'icon' : 'packing_list_icon.gif' - , 'product' : 'Coramy' - , 'factory' : 'addPackingList' - , 'immediate_view' : 'packing_list_view' - , 'allow_discussion' : 1 - , 'allowed_content_types': ('Movement','Delivery Line', 'Container', 'Item' - ) - , 'filter_content_types' : 1 - , 'global_allow' : 1 - , 'actions' : - ( { 'id' : 'view' - , 'name' : 'View' - , 'category' : 'object_view' - , 'action' : 'packing_list_view' - , 'permissions' : ( - Permissions.View, ) - } - , { 'id' : 'list' - , 'name' : 'Object Contents' - , 'category' : 'object_action' - , 'action' : 'folder_contents' - , 'permissions' : ( - Permissions.View, ) - } - , { 'id' : 'print' - , 'name' : 'Print' - , 'category' : 'object_print' - , 'action' : 'packing_list_print' - , 'permissions' : ( - Permissions.View, ) - } - , { 'id' : 'metadata' - , 'name' : 'Metadata' - , 'category' : 'object_view' - , 'action' : 'metadata_edit' - , 'permissions' : ( - Permissions.View, ) - } - , { 'id' : 'translate' - , 'name' : 'Translate' - , 'category' : 'object_action' - , 'action' : 'translation_template_view' - , 'permissions' : ( - Permissions.TranslateContent, ) - } - ) - } diff --git a/product/Coramy/Document/PaymentCondition.py b/product/Coramy/Document/PaymentCondition.py deleted file mode 100755 index 5c7f970bea..0000000000 --- a/product/Coramy/Document/PaymentCondition.py +++ /dev/null @@ -1,99 +0,0 @@ -############################################################################## -# -# Copyright (c) 2002 Nexedi SARL and Contributors. All Rights Reserved. -# Jean-Paul Smets-Solanes <jp@nexedi.com> -# -# WARNING: This program as such is intended to be used by professional -# programmers who take the whole responsability of assessing all potential -# consequences resulting from its eventual inadequacies and bugs -# End users who are looking for a ready-to-use solution with commercial -# garantees and support are strongly adviced to contract a Free Software -# Service Company -# -# This program is Free Software; you can redistribute it and/or -# modify it under the terms of the GNU General Public License -# as published by the Free Software Foundation; either version 2 -# of the License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -# -############################################################################## - -from Globals import InitializeClass, PersistentMapping -from AccessControl import ClassSecurityInfo - -from Products.ERP5Type import Permissions, PropertySheet, Constraint, Interface -from Products.ERP5.Document.PaymentCondition import PaymentCondition as ERP5PaymentCondition - -class PaymentCondition(ERP5PaymentCondition): - """ - Payment Conditions are used to define all the parameters of a payment - """ - - meta_type = 'CORAMY Payment Condition' - portal_type = 'Payment Condition' - add_permission = Permissions.AddPortalContent - isPortalContent = 1 - isRADContent = 1 - - # Declarative security - security = ClassSecurityInfo() - security.declareObjectProtected(Permissions.View) - - # Declarative properties - property_sheets = ( PropertySheet.Base - , PropertySheet.XMLObject - , PropertySheet.CategoryCore - , PropertySheet.DublinCore - , PropertySheet.PaymentCondition - ) - - # Factory Type Information - factory_type_information = \ - { 'id' : portal_type - , 'meta_type' : meta_type - , 'description' : """\ -Payment Conditions are used to define all the parameters of a payment.""" - , 'icon' : 'payment_condition_icon.gif' - , 'product' : 'Coramy' - , 'factory' : 'addPaymentCondition' - , 'immediate_view' : 'payment_condition_edit' - , 'actions' : - ( { 'id' : 'view' - , 'name' : 'View' - , 'category' : 'object_view' - , 'action' : 'payment_condition_edit' - , 'permissions' : ( - Permissions.View, ) - } - , { 'id' : 'print' - , 'name' : 'Print' - , 'category' : 'object_print' - , 'action' : 'payment_condition_print' - , 'permissions' : ( - Permissions.View, ) - } - , { 'id' : 'metadata' - , 'name' : 'Metadata' - , 'category' : 'object_edit' - , 'action' : 'metadata_edit' - , 'permissions' : ( - Permissions.View, ) - } - , { 'id' : 'translate' - , 'name' : 'Translate' - , 'category' : 'object_action' - , 'action' : 'translation_template_view' - , 'permissions' : ( - Permissions.TranslateContent, ) - } - ) - } - diff --git a/product/Coramy/Document/ProductionOrder.py b/product/Coramy/Document/ProductionOrder.py deleted file mode 100755 index ca1247ba7d..0000000000 --- a/product/Coramy/Document/ProductionOrder.py +++ /dev/null @@ -1,132 +0,0 @@ -############################################################################## -# -# Copyright (c) 2002 Nexedi SARL and Contributors. All Rights Reserved. -# Jean-Paul Smets-Solanes <jp@nexedi.com> -# -# WARNING: This program as such is intended to be used by professional -# programmers who take the whole responsability of assessing all potential -# consequences resulting from its eventual inadequacies and bugs -# End users who are looking for a ready-to-use solution with commercial -# garantees and support are strongly adviced to contract a Free Software -# Service Company -# -# This program is Free Software; you can redistribute it and/or -# modify it under the terms of the GNU General Public License -# as published by the Free Software Foundation; either version 2 -# of the License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -# -############################################################################## - -from Globals import InitializeClass, PersistentMapping -from AccessControl import ClassSecurityInfo -from Products.CMFCore.WorkflowCore import WorkflowMethod -from Products.ERP5.Document.Resource import Resource -from Products.ERP5.Document.Order import Order as ERP5Order -from Products.ERP5Type import Permissions, PropertySheet, Constraint, Interface -from Products.ERP5.ERP5Globals import movement_type_list, default_section_category -from Products.CMFCore.WorkflowCore import WorkflowMethod - -from zLOG import LOG - -class ProductionOrder(ERP5Order): - """ - Un ordre de fabrication.... - - """ - - meta_type = 'CORAMY Production Order' - portal_type = 'Production Order' - add_permission = Permissions.AddPortalContent - isPortalContent = 1 - isRADContent = 1 - - # Declarative security - security = ClassSecurityInfo() - security.declareObjectProtected(Permissions.View) - - # Declarative properties - property_sheets = ( PropertySheet.Base - , PropertySheet.XMLObject - , PropertySheet.CategoryCore - , PropertySheet.DublinCore - , PropertySheet.Task - , PropertySheet.Arrow - , PropertySheet.TradeCondition - , PropertySheet.PaymentCondition - , PropertySheet.Comment - , PropertySheet.Reference - , PropertySheet.CoramyOrder - ) - - # Factory Type Information - factory_type_information = \ - { 'id' : portal_type - , 'meta_type' : meta_type - , 'description' : """\ -un ordre de fabrication...""" - , 'icon' : 'production_order_icon.gif' - , 'product' : 'Coramy' - , 'factory' : 'addProductionOrder' - , 'immediate_view' : 'production_order_view' - , 'allow_discussion' : 1 - , 'allowed_content_types': ('Movement', 'Production Order Line', - ) - , 'filter_content_types' : 1 - , 'global_allow' : 1 - , 'actions' : - ( { 'id' : 'view' - , 'name' : 'View' - , 'category' : 'object_view' - , 'action' : 'production_order_view' - , 'permissions' : ( - Permissions.View, ) - } - , { 'id' : 'list' - , 'name' : 'Object Contents' - , 'category' : 'object_action' - , 'action' : 'folder_contents' - , 'permissions' : ( - Permissions.View, ) - } - , { 'id' : 'print' - , 'name' : 'Print' - , 'category' : 'object_print' - , 'action' : 'production_order_print' - , 'permissions' : ( - Permissions.View, ) - } - , { 'id' : 'metadata' - , 'name' : 'Metadata' - , 'category' : 'object_view' - , 'action' : 'metadata_edit' - , 'permissions' : ( - Permissions.View, ) - } - , { 'id' : 'translate' - , 'name' : 'Translate' - , 'category' : 'object_action' - , 'action' : 'translation_template_view' - , 'permissions' : ( - Permissions.TranslateContent, ) - } - ) - } - - security.declareProtected(Permissions.AccessContentsInformation, 'getFutureInventoryList') - def getFutureInventoryList(self, section = None, node = None, - node_category=None, section_category=default_section_category, simulation_state=None, - ignore_variation=0, **kw): - """ - Returns list of future inventory grouped by section or site - """ - return self.getInventoryList(at_date=None, section=section, node=self.getDestination(), - node_category=node_category, section_category=section_category, **kw) diff --git a/product/Coramy/Document/ProductionReport.py b/product/Coramy/Document/ProductionReport.py deleted file mode 100755 index 6552b006ef..0000000000 --- a/product/Coramy/Document/ProductionReport.py +++ /dev/null @@ -1,118 +0,0 @@ -############################################################################## -# -# Copyright (c) 2002 Nexedi SARL and Contributors. All Rights Reserved. -# Jean-Paul Smets-Solanes <jp@nexedi.com> -# -# WARNING: This program as such is intended to be used by professional -# programmers who take the whole responsability of assessing all potential -# consequences resulting from its eventual inadequacies and bugs -# End users who are looking for a ready-to-use solution with commercial -# garantees and support are strongly adviced to contract a Free Software -# Service Company -# -# This program is Free Software; you can redistribute it and/or -# modify it under the terms of the GNU General Public License -# as published by the Free Software Foundation; either version 2 -# of the License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -# -############################################################################## - -from Globals import InitializeClass, PersistentMapping -from AccessControl import ClassSecurityInfo -from Products.CMFCore.WorkflowCore import WorkflowMethod -from Products.ERP5Type import Permissions, PropertySheet, Constraint, Interface -from Products.ERP5.Document.ProductionReport import ProductionReport as \ - ERP5ProductionReport - -class ProductionReport(ERP5ProductionReport): - """ - A Transaction object allows to add - elementary accounting transactions in the general ledger - """ - - # CMF Type Definition - meta_type = 'CORAMY Production Report' - portal_type = 'Production Report' - add_permission = Permissions.AddPortalContent - isPortalContent = 1 - isRADContent = 1 - - # Declarative security - security = ClassSecurityInfo() - security.declareObjectProtected(Permissions.View) - - # Default Properties - property_sheets = ( PropertySheet.Base - , PropertySheet.XMLObject - , PropertySheet.CategoryCore - , PropertySheet.DublinCore - , PropertySheet.Task - , PropertySheet.Arrow - , PropertySheet.Movement - , PropertySheet.Delivery - , PropertySheet.Reference - , PropertySheet.Comment - ) - - # CMF Factory Type Information - factory_type_information = \ - { 'id' : portal_type - , 'meta_type' : meta_type - , 'description' : """\ -An order...""" - , 'icon' : 'transaction_icon.gif' - , 'product' : 'ERP5' - , 'factory' : 'addProductionReport' - , 'immediate_view' : 'production_report_view' - , 'allow_discussion' : 1 - , 'allowed_content_types': ('Movement', - ) - , 'filter_content_types' : 1 - , 'global_allow' : 1 - , 'actions' : - ( { 'id' : 'view' - , 'name' : 'View' - , 'category' : 'object_view' - , 'action' : 'production_report_view' - , 'permissions' : ( - Permissions.View, ) - } - , { 'id' : 'list' - , 'name' : 'Object Contents' - , 'category' : 'object_action' - , 'action' : 'folder_contents' - , 'permissions' : ( - Permissions.View, ) - } - , { 'id' : 'print' - , 'name' : 'Print' - , 'category' : 'object_print' - , 'action' : 'transaction_print' - , 'permissions' : ( - Permissions.View, ) - } - , { 'id' : 'metadata' - , 'name' : 'Metadata' - , 'category' : 'object_view' - , 'action' : 'metadata_edit' - , 'permissions' : ( - Permissions.View, ) - } - , { 'id' : 'translate' - , 'name' : 'Translate' - , 'category' : 'object_action' - , 'action' : 'translation_template_view' - , 'permissions' : ( - Permissions.TranslateContent, ) - } - ) - } diff --git a/product/Coramy/Document/ProductionReportCell.py b/product/Coramy/Document/ProductionReportCell.py deleted file mode 100755 index 401d249a48..0000000000 --- a/product/Coramy/Document/ProductionReportCell.py +++ /dev/null @@ -1,124 +0,0 @@ -############################################################################## -# -# Copyright (c) 2002 Nexedi SARL and Contributors. All Rights Reserved. -# Jean-Paul Smets-Solanes <jp@nexedi.com> -# -# WARNING: This program as such is intended to be used by professional -# programmers who take the whole responsability of assessing all potential -# consequences resulting from its eventual inadequacies and bugs -# End users who are looking for a ready-to-use solution with commercial -# garantees and support are strongly adviced to contract a Free Software -# Service Company -# -# This program is Free Software; you can redistribute it and/or -# modify it under the terms of the GNU General Public License -# as published by the Free Software Foundation; either version 2 -# of the License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -# -############################################################################## - -from Globals import InitializeClass, PersistentMapping -from AccessControl import ClassSecurityInfo - -from Products.CMFCore.WorkflowCore import WorkflowAction -from Products.ERP5Type import Permissions, PropertySheet, Constraint, Interface - -from Products.ERP5.Document.ProductionReportCell import ProductionReportCell as \ - ERP5ProductionReportCell - -class ProductionReportCell(ERP5ProductionReportCell): - """ - A DeliveryCell allows to define specific quantities - for each variation of a resource in a delivery line. - """ - - meta_type = 'CORAMY Production Report Cell' - portal_type = 'Production Report Cell' - add_permission = Permissions.AddPortalContent - isPortalContent = 1 - isRADContent = 1 - isMovement = 1 - - # Declarative security - security = ClassSecurityInfo() - security.declareObjectProtected(Permissions.View) - - # Declarative interfaces - __implements__ = ( Interface.Variated, ) - - # Declarative properties - property_sheets = ( PropertySheet.Base - , PropertySheet.CategoryCore - , PropertySheet.Amount - , PropertySheet.Task - , PropertySheet.Movement - , PropertySheet.Price - , PropertySheet.Predicate - , PropertySheet.Domain - , PropertySheet.MappedValue - , PropertySheet.ItemAggregation - ) - - # Factory Type Information - factory_type_information = \ - { 'id' : portal_type - , 'meta_type' : meta_type - , 'description' : """\ -Une ligne tarifaire.""" - , 'icon' : 'order_line_icon.gif' - , 'product' : 'ERP5' - , 'factory' : 'addProductionReportCell' - , 'immediate_view' : 'production_report_cell_view' - , 'allow_discussion' : 1 - , 'allowed_content_types': ('', - ) - , 'filter_content_types' : 1 - , 'global_allow' : 1 - , 'actions' : - ( { 'id' : 'view' - , 'name' : 'View' - , 'category' : 'object_view' - , 'action' : 'production_report_cell_view' - , 'permissions' : ( - Permissions.View, ) - } - , { 'id' : 'list' - , 'name' : 'Object Contents' - , 'category' : 'object_action' - , 'action' : 'folder_contents' - , 'permissions' : ( - Permissions.View, ) - } - , { 'id' : 'print' - , 'name' : 'Print' - , 'category' : 'object_print' - , 'action' : 'production_report_cell_print' - , 'permissions' : ( - Permissions.View, ) - } - , { 'id' : 'metadata' - , 'name' : 'Metadata' - , 'category' : 'object_view' - , 'action' : 'metadata_edit' - , 'permissions' : ( - Permissions.View, ) - } - , { 'id' : 'translate' - , 'name' : 'Translate' - , 'category' : 'object_action' - , 'action' : 'translation_template_view' - , 'permissions' : ( - Permissions.TranslateContent, ) - } - ) - } - diff --git a/product/Coramy/Document/ProductionReportLine.py b/product/Coramy/Document/ProductionReportLine.py deleted file mode 100755 index e497869806..0000000000 --- a/product/Coramy/Document/ProductionReportLine.py +++ /dev/null @@ -1,118 +0,0 @@ -############################################################################## -# -# Copyright (c) 2002 Nexedi SARL and Contributors. All Rights Reserved. -# Jean-Paul Smets-Solanes <jp@nexedi.com> -# -# WARNING: This program as such is intended to be used by professional -# programmers who take the whole responsability of assessing all potential -# consequences resulting from its eventual inadequacies and bugs -# End users who are looking for a ready-to-use solution with commercial -# garantees and support are strongly adviced to contract a Free Software -# Service Company -# -# This program is Free Software; you can redistribute it and/or -# modify it under the terms of the GNU General Public License -# as published by the Free Software Foundation; either version 2 -# of the License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -# -############################################################################## - -from Globals import InitializeClass, PersistentMapping -from AccessControl import ClassSecurityInfo - -from Products.CMFCore.WorkflowCore import WorkflowAction -from Products.ERP5Type import Permissions, PropertySheet, Constraint, Interface -from Products.ERP5.Document.ProductionReportLine import ProductionReportLine as \ - ERP5ProductionReportLine - -class ProductionReportLine(ERP5ProductionReportLine): - """ - Production Report Lines allow ... - """ - - meta_type = 'CORAMY Production Report Line' - portal_type = 'Production Report Line' - add_permission = Permissions.AddPortalContent - isPortalContent = 1 - isRADContent = 1 - - # Declarative security - security = ClassSecurityInfo() - security.declareObjectProtected(Permissions.View) - - # Declarative properties - property_sheets = ( PropertySheet.Base - , PropertySheet.SimpleItem - , PropertySheet.CategoryCore - , PropertySheet.Amount - , PropertySheet.Task - , PropertySheet.Arrow - ) - - # Declarative interfaces - __implements__ = ( ) - - # Factory Type Information - factory_type_information = \ - { 'id' : portal_type - , 'meta_type' : meta_type - , 'description' : """\ -Une ligne tarifaire.""" - , 'icon' : 'production_report_line_icon.gif' - , 'product' : 'ERP5' - , 'factory' : 'addProductionReportLine' - , 'immediate_view' : 'production_report_line_view' - , 'allow_discussion' : 1 - , 'allowed_content_types': ('', - ) - , 'filter_content_types' : 1 - , 'global_allow' : 1 - , 'actions' : - ( { 'id' : 'view' - , 'name' : 'View' - , 'category' : 'object_view' - , 'action' : 'production_report_line_view' - , 'permissions' : ( - Permissions.View, ) - } - , { 'id' : 'list' - , 'name' : 'Object Contents' - , 'category' : 'object_action' - , 'action' : 'folder_contents' - , 'permissions' : ( - Permissions.View, ) - } - , { 'id' : 'print' - , 'name' : 'Print' - , 'category' : 'object_print' - , 'action' : 'acccounting_transaction_line_print' - , 'permissions' : ( - Permissions.View, ) - } - , { 'id' : 'metadata' - , 'name' : 'Metadata' - , 'category' : 'object_view' - , 'action' : 'metadata_edit' - , 'permissions' : ( - Permissions.View, ) - } - , { 'id' : 'translate' - , 'name' : 'Translate' - , 'category' : 'object_action' - , 'action' : 'translation_template_view' - , 'permissions' : ( - Permissions.TranslateContent, ) - } - ) - } - - diff --git a/product/Coramy/Document/SampleOrderLine.py b/product/Coramy/Document/SampleOrderLine.py deleted file mode 100755 index 68111dcb97..0000000000 --- a/product/Coramy/Document/SampleOrderLine.py +++ /dev/null @@ -1,123 +0,0 @@ -############################################################################## -# -# Copyright (c) 2002 Nexedi SARL and Contributors. All Rights Reserved. -# Jean-Paul Smets-Solanes <jp@nexedi.com> -# -# WARNING: This program as such is intended to be used by professional -# programmers who take the whole responsability of assessing all potential -# consequences resulting from its eventual inadequacies and bugs -# End users who are looking for a ready-to-use solution with commercial -# garantees and support are strongly adviced to contract a Free Software -# Service Company -# -# This program is Free Software; you can redistribute it and/or -# modify it under the terms of the GNU General Public License -# as published by the Free Software Foundation; either version 2 -# of the License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -# -############################################################################## - -from Globals import InitializeClass, PersistentMapping -from AccessControl import ClassSecurityInfo - -from Products.CMFCore.WorkflowCore import WorkflowAction - -from Products.ERP5.Document.OrderLine import OrderLine -from Products.ERP5Type import Permissions, PropertySheet, Constraint, Interface - -from Products.Coramy.Document.ElementTarif import ElementTarif - -class SampleOrderLine(OrderLine, ElementTarif): - """ - Une ligne de commande définit également un prix - Un element de tarif est un prix pour un ensemble de conditions d'application... - """ - - meta_type = 'CORAMY Sample Order Line' - portal_type = 'Sample Order Line' - add_permission = Permissions.AddPortalContent - isPortalContent = 1 - isRADContent = 1 - - # Declarative security - security = ClassSecurityInfo() - security.declareObjectProtected(Permissions.View) - - # Declarative properties - property_sheets = ( PropertySheet.Base - , PropertySheet.XMLObject - , PropertySheet.CategoryCore - , PropertySheet.Amount - , PropertySheet.Task - , PropertySheet.Arrow - , PropertySheet.Movement - , PropertySheet.Price - , PropertySheet.ElementTarif - , PropertySheet.VariationRange - , PropertySheet.SampleOrderLine - ) - - # Factory Type Information - factory_type_information = \ - { 'id' : portal_type - , 'meta_type' : meta_type - , 'description' : """\ -Une ligne tarifaire.""" - , 'icon' : 'order_line_icon.gif' - , 'product' : 'Coramy' - , 'factory' : 'addSampleOrderLine' - , 'immediate_view' : 'sample_order_line_view' - , 'allow_discussion' : 1 - , 'allowed_content_types': ('', - ) - , 'filter_content_types' : 1 - , 'global_allow' : 1 - , 'actions' : - ( { 'id' : 'view' - , 'name' : 'View' - , 'category' : 'object_view' - , 'action' : 'sample_order_line_view' - , 'permissions' : ( - Permissions.View, ) - } - , { 'id' : 'list' - , 'name' : 'Object Contents' - , 'category' : 'object_action' - , 'action' : 'folder_contents' - , 'permissions' : ( - Permissions.View, ) - } - , { 'id' : 'print' - , 'name' : 'Print' - , 'category' : 'object_print' - , 'action' : 'order_line_print' - , 'permissions' : ( - Permissions.View, ) - } - , { 'id' : 'metadata' - , 'name' : 'Metadata' - , 'category' : 'object_view' - , 'action' : 'metadata_edit' - , 'permissions' : ( - Permissions.View, ) - } - , { 'id' : 'translate' - , 'name' : 'Translate' - , 'category' : 'object_action' - , 'action' : 'translation_template_view' - , 'permissions' : ( - Permissions.TranslateContent, ) - } - ) - } - - diff --git a/product/Coramy/Document/SamplesOrder.py b/product/Coramy/Document/SamplesOrder.py deleted file mode 100755 index 43577253f3..0000000000 --- a/product/Coramy/Document/SamplesOrder.py +++ /dev/null @@ -1,129 +0,0 @@ -############################################################################## -# -# Copyright (c) 2002 Nexedi SARL and Contributors. All Rights Reserved. -# Jean-Paul Smets-Solanes <jp@nexedi.com> -# -# WARNING: This program as such is intended to be used by professional -# programmers who take the whole responsability of assessing all potential -# consequences resulting from its eventual inadequacies and bugs -# End users who are looking for a ready-to-use solution with commercial -# garantees and support are strongly adviced to contract a Free Software -# Service Company -# -# This program is Free Software; you can redistribute it and/or -# modify it under the terms of the GNU General Public License -# as published by the Free Software Foundation; either version 2 -# of the License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -# -############################################################################## - -from Globals import InitializeClass, PersistentMapping -from AccessControl import ClassSecurityInfo - -from Products.ERP5.Document.Resource import Resource -from Products.ERP5.Document.Order import Order as ERP5Order -from Products.ERP5Type import Permissions, PropertySheet, Constraint, Interface - -from Products.CMFCore.WorkflowCore import WorkflowMethod - -from zLOG import LOG - -class SamplesOrder(ERP5Order): - """ - Une commande d'echantillons.... - - """ - - meta_type = 'CORAMY Samples Order' - portal_type = 'Samples Order' - add_permission = Permissions.AddPortalContent - isPortalContent = 1 - isRADContent = 1 - - # Declarative security - security = ClassSecurityInfo() - security.declareObjectProtected(Permissions.View) - - # Declarative properties - property_sheets = ( PropertySheet.Base - , PropertySheet.XMLObject - , PropertySheet.CategoryCore - , PropertySheet.DublinCore - , PropertySheet.Task - , PropertySheet.Arrow - , PropertySheet.SamplesOrder - ) - - # Factory Type Information - factory_type_information = \ - { 'id' : portal_type - , 'meta_type' : meta_type - , 'description' : """\ -une commande...""" - , 'icon' : 'order_icon.gif' - , 'product' : 'Coramy' - , 'factory' : 'addSamplesOrder' - , 'immediate_view' : 'order_view' - , 'allow_discussion' : 1 - , 'allowed_content_types': ('Movement', 'Sample Order Line', - ) - , 'filter_content_types' : 1 - , 'global_allow' : 1 - , 'actions' : - ( { 'id' : 'view' - , 'name' : 'View' - , 'category' : 'object_view' - , 'action' : 'order_view' - , 'permissions' : ( - Permissions.View, ) - } - , { 'id' : 'list' - , 'name' : 'Object Contents' - , 'category' : 'object_action' - , 'action' : 'folder_contents' - , 'permissions' : ( - Permissions.View, ) - } - , { 'id' : 'print' - , 'name' : 'Print' - , 'category' : 'object_print' - , 'action' : 'order_print' - , 'permissions' : ( - Permissions.View, ) - } - , { 'id' : 'metadata' - , 'name' : 'Metadata' - , 'category' : 'object_view' - , 'action' : 'metadata_edit' - , 'permissions' : ( - Permissions.View, ) - } - , { 'id' : 'translate' - , 'name' : 'Translate' - , 'category' : 'object_action' - , 'action' : 'translation_template_view' - , 'permissions' : ( - Permissions.TranslateContent, ) - } - ) - } - - def _StateActive2Traitee(self): - """ - This method is called by samples_delivery_worflow - to update samples_order workflow - """ - return 'toto' - - security.declarePublic( 'StateActive2Traitee' ) - StateActive2Traitee = WorkflowMethod(_StateActive2Traitee,id='auto_clore_commande') - diff --git a/product/Coramy/Document/SamplesPackingList.py b/product/Coramy/Document/SamplesPackingList.py deleted file mode 100755 index f9189ab653..0000000000 --- a/product/Coramy/Document/SamplesPackingList.py +++ /dev/null @@ -1,125 +0,0 @@ -############################################################################## -# -# Copyright (c) 2002 Nexedi SARL and Contributors. All Rights Reserved. -# Jean-Paul Smets-Solanes <jp@nexedi.com> -# -# WARNING: This program as such is intended to be used by professional -# programmers who take the whole responsability of assessing all potential -# consequences resulting from its eventual inadequacies and bugs -# End users who are looking for a ready-to-use solution with commercial -# garantees and support are strongly adviced to contract a Free Software -# Service Company -# -# This program is Free Software; you can redistribute it and/or -# modify it under the terms of the GNU General Public License -# as published by the Free Software Foundation; either version 2 -# of the License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -# -############################################################################## - -from Globals import InitializeClass, PersistentMapping -from AccessControl import ClassSecurityInfo - -from Products.ERP5.Document.Resource import Resource -from Products.ERP5.Document.PackingList import PackingList as ERP5PackingList -from Products.ERP5Type import Permissions, PropertySheet, Constraint, Interface - -from zLOG import LOG - -class SamplesPackingList(ERP5PackingList): - """ - Une livraison d'echantillons.... - - """ - meta_type = 'CORAMY Samples Packing List' - portal_type = 'Samples Packing List' - add_permission = Permissions.AddPortalContent - isPortalContent = 1 - isRADContent = 1 - - # Declarative security - security = ClassSecurityInfo() - security.declareObjectProtected(Permissions.View) - - # Declarative properties - property_sheets = ( PropertySheet.Base - , PropertySheet.XMLObject - , PropertySheet.CategoryCore - , PropertySheet.DublinCore - , PropertySheet.Task - , PropertySheet.Arrow - , PropertySheet.Movement - , PropertySheet.Delivery - , PropertySheet.SamplesPackingList - ) - - # Factory Type Information - factory_type_information = \ - { 'id' : portal_type - , 'meta_type' : meta_type - , 'description' : """\ -une commande...""" - , 'icon' : 'order_icon.gif' - , 'product' : 'Coramy' - , 'factory' : 'addSamplesPackingList' - , 'immediate_view' : 'samples_packing_list_view' - , 'allow_discussion' : 1 - , 'allowed_content_types': ('Movement', 'Delivery Line', - ) - , 'filter_content_types' : 1 - , 'global_allow' : 1 - , 'actions' : - ( { 'id' : 'view' - , 'name' : 'View' - , 'category' : 'object_view' - , 'action' : 'samples_packing_list_view' - , 'permissions' : ( - Permissions.View, ) - } - , { 'id' : 'list' - , 'name' : 'Object Contents' - , 'category' : 'object_action' - , 'action' : 'folder_contents' - , 'permissions' : ( - Permissions.View, ) - } - , { 'id' : 'print' - , 'name' : 'Print' - , 'category' : 'object_print' - , 'action' : 'samples_packing_list_print' - , 'permissions' : ( - Permissions.View, ) - } - , { 'id' : 'metadata' - , 'name' : 'Metadata' - , 'category' : 'object_view' - , 'action' : 'metadata_edit' - , 'permissions' : ( - Permissions.View, ) - } - , { 'id' : 'translate' - , 'name' : 'Translate' - , 'category' : 'object_action' - , 'action' : 'translation_template_view' - , 'permissions' : ( - Permissions.TranslateContent, ) - } - ) - } - - - security.declareProtected(Permissions.AccessContentsInformation, 'isAccountable') - def isAccountable(self): - """ - Coramy does not want to manage stock for samples - """ - return 0 diff --git a/product/Coramy/Document/SetMappedValue.py b/product/Coramy/Document/SetMappedValue.py deleted file mode 100755 index 2bb90307a6..0000000000 --- a/product/Coramy/Document/SetMappedValue.py +++ /dev/null @@ -1,157 +0,0 @@ -############################################################################## -# -# Copyright (c) 2002 Nexedi SARL and Contributors. All Rights Reserved. -# Jean-Paul Smets-Solanes <jp@nexedi.com> -# -# WARNING: This program as such is intended to be used by professional -# programmers who take the whole responsability of assessing all potential -# consequences resulting from its eventual inadequacies and bugs -# End users who are looking for a ready-to-use solution with commercial -# garantees and support are strongly adviced to contract a Free Software -# Service Company -# -# This program is Free Software; you can redistribute it and/or -# modify it under the terms of the GNU General Public License -# as published by the Free Software Foundation; either version 2 -# of the License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -# -############################################################################## - -from Globals import InitializeClass -from AccessControl import ClassSecurityInfo - -from Products.ERP5Type import Permissions, PropertySheet, Constraint, Interface -from Products.ERP5.Document.SetMappedValue import SetMappedValue as ERP5SetMappedValue - -from zLOG import LOG - -class SetMappedValue(ERP5SetMappedValue): - """ - A SetMappedValue allows to associate a value to a domain - just like a MappedValue but uses a Set predicate instead of - a PredicateGroup - - It implements apparel specific methods - """ - meta_type = 'CORAMY Set Mapped Value' - portal_type = 'Set Mapped Value' - add_permission = Permissions.AddPortalContent - isPortalContent = 1 - isRADContent = 1 - - # Declarative security - security = ClassSecurityInfo() - security.declareObjectProtected(Permissions.View) - - # Declarative interfaces - __implements__ = ( Interface.Predicate ) - - - # Declarative properties - property_sheets = ( PropertySheet.Base - , PropertySheet.SimpleItem - , PropertySheet.CategoryCore - , PropertySheet.Predicate - , PropertySheet.Domain - , PropertySheet.Price - , PropertySheet.MappedValue - ) # We must add price for backwards compatibility (price was r - # defined in ERP5 Set Mapped Value - - # Factory Type Information - factory_type_information = \ - { 'id' : portal_type - , 'meta_type' : meta_type - , 'description' : """\ -A bank account number holds a collection of numbers -and codes (ex. SWIFT, RIB, etc.) which may be used to -identify a bank account.""" - , 'icon' : 'transformed_resource_icon.gif' - , 'product' : 'Coramy' - , 'factory' : 'addSetMappedValue' - , 'immediate_view' : 'mapped_value_view' - , 'actions' : - ( { 'id' : 'view' - , 'name' : 'View' - , 'category' : 'object_view' - , 'action' : 'mapped_value_view' - , 'permissions' : ( - Permissions.View, ) - } - , { 'id' : 'print' - , 'name' : 'Print' - , 'category' : 'object_print' - , 'action' : 'mapped_value_print' - , 'permissions' : ( - Permissions.View, ) - } - , { 'id' : 'metadata' - , 'name' : 'Metadata' - , 'category' : 'object_view' - , 'action' : 'metadata_view' - , 'permissions' : ( - Permissions.View, ) - } - , { 'id' : 'translate' - , 'name' : 'Translate' - , 'category' : 'object_action' - , 'action' : 'translation_template_view' - , 'permissions' : ( - Permissions.TranslateContent, ) - } - ) - } - - def test(self, context): - """ - A Predicate can be tested on a given context - Includes id equivalence for certain categories (only - the trailer id is taken into account) - """ - result = 1 - for c in self.getPredicateValueList(): - base_category = c.split('/')[0] - if base_category in ('coloris', 'morphologie', 'variante'): - # Classes of equivalences - category_id = c.split('/')[-1] - for context_category in context._getCategoryMembershipList(base_category, base=1): - #result = result and (context_category.find(category_id) >= 0) - result = result and (context_category.split('/')[-1] == category_id) - else: - result = result and self.portal_categories.isMemberOf(context, c) - #LOG("Test set membership",0, str((c, result))) - return result - - def asPythonExpression(self): - """ - A Predicate can be rendered as a python expression. This - is the preferred approach within Zope. - - XXX BAD - """ - return "self.portal_categories.isMemberOf(context, '%s')" % self.getCategoryName() - - def asSqlExpression(self): - """ - A Predicate can be rendered as an sql expression. This - can be useful to create reporting trees based on the - ZSQLCatalog - - XXX BAD - """ - sql_text = '(category_uid = %s AND base_category_uid = %s)' % (self.uid, self.getBaseCategory().uid) - # Now useless since we precompute the mapping - #for o in self.objectValues(): - # sql_text += ' OR %s' % o.asSqlExpression() - return sql_text - - diff --git a/product/Coramy/Document/Supply.py b/product/Coramy/Document/Supply.py deleted file mode 100755 index 976134d6a5..0000000000 --- a/product/Coramy/Document/Supply.py +++ /dev/null @@ -1,114 +0,0 @@ -############################################################################## -# -# Copyright (c) 2002 Nexedi SARL and Contributors. All Rights Reserved. -# Jean-Paul Smets-Solanes <jp@nexedi.com> -# -# WARNING: This program as such is intended to be used by professional -# programmers who take the whole responsability of assessing all potential -# consequences resulting from its eventual inadequacies and bugs -# End users who are looking for a ready-to-use solution with commercial -# garantees and support are strongly adviced to contract a Free Software -# Service Company -# -# This program is Free Software; you can redistribute it and/or -# modify it under the terms of the GNU General Public License -# as published by the Free Software Foundation; either version 2 -# of the License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -# -############################################################################## - -from Globals import InitializeClass, PersistentMapping -from Products.CMFCore.utils import getToolByName -from Products.CMFCore.WorkflowCore import WorkflowMethod -from AccessControl import ClassSecurityInfo -from Products.ERP5Type import Permissions, PropertySheet, Constraint, Interface -from Products.ERP5Type.XMLObject import XMLObject -from Products.ERP5.Document.Supply import Supply as ERP5Supply - -class Supply(ERP5Supply): - # CMF Type Definition - meta_type = 'Coramy Supply' - portal_type = 'Supply' - isPortalContent = 1 - isRADContent = 1 - - # Declarative security - security = ClassSecurityInfo() - security.declareObjectProtected(Permissions.View) - - # Default Properties - property_sheets = ( PropertySheet.Base - , PropertySheet.XMLObject - , PropertySheet.CategoryCore - , PropertySheet.DublinCore - , PropertySheet.Task - , PropertySheet.Arrow - , PropertySheet.Movement - , PropertySheet.Delivery - , PropertySheet.Path - , PropertySheet.FlowCapacity - ) - - # CMF Factory Type Information - factory_type_information = \ - { 'id' : portal_type - , 'meta_type' : meta_type - , 'description' : """\ -une liste de mouvements...""" - , 'icon' : 'supply_icon.gif' - , 'product' : 'Coramy' - , 'factory' : 'addSupply' - , 'immediate_view' : 'supply_view' - , 'allow_discussion' : 1 - , 'allowed_content_types': ('Movement', - ) - , 'filter_content_types' : 1 - , 'global_allow' : 1 - , 'actions' : - ( { 'id' : 'view' - , 'name' : 'View' - , 'category' : 'object_view' - , 'action' : 'supply_view' - , 'permissions' : ( - Permissions.View, ) - } - , { 'id' : 'list' - , 'name' : 'Object Contents' - , 'category' : 'object_action' - , 'action' : 'folder_contents' - , 'permissions' : ( - Permissions.View, ) - } - , { 'id' : 'print' - , 'name' : 'Print' - , 'category' : 'object_print' - , 'action' : 'supply_print' - , 'permissions' : ( - Permissions.View, ) - } - , { 'id' : 'metadata' - , 'name' : 'Metadata' - , 'category' : 'object_view' - , 'action' : 'metadata_edit' - , 'permissions' : ( - Permissions.View, ) - } - , { 'id' : 'translate' - , 'name' : 'Translate' - , 'category' : 'object_action' - , 'action' : 'translation_template_view' - , 'permissions' : ( - Permissions.TranslateContent, ) - } - ) - } - diff --git a/product/Coramy/Document/SupplyLine.py b/product/Coramy/Document/SupplyLine.py deleted file mode 100755 index 7887685952..0000000000 --- a/product/Coramy/Document/SupplyLine.py +++ /dev/null @@ -1,130 +0,0 @@ -############################################################################## -# -# Copyright (c) 2002 Nexedi SARL and Contributors. All Rights Reserved. -# Jean-Paul Smets-Solanes <jp@nexedi.com> -# -# WARNING: This program as such is intended to be used by professional -# programmers who take the whole responsability of assessing all potential -# consequences resulting from its eventual inadequacies and bugs -# End users who are looking for a ready-to-use solution with commercial -# garantees and support are strongly adviced to contract a Free Software -# Service Company -# -# This program is Free Software; you can redistribute it and/or -# modify it under the terms of the GNU General Public License -# as published by the Free Software Foundation; either version 2 -# of the License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -# -############################################################################## - -from Globals import InitializeClass, PersistentMapping -from AccessControl import ClassSecurityInfo - -from Products.CMFCore.WorkflowCore import WorkflowAction -from Products.ERP5Type import Permissions, PropertySheet, Constraint, Interface -from Products.ERP5Type.XMLMatrix import XMLMatrix - -from Products.ERP5.Document.DeliveryLine import DeliveryLine -from Products.ERP5.Document.Movement import Movement -from Products.ERP5.Document.Path import Path -from Products.ERP5.Document.SupplyLine import SupplyLine as ERP5SupplyLine -from zLOG import LOG - -class SupplyLine(ERP5SupplyLine): - """ - A DeliveryLine object allows to implement lines in - Deliveries (packing list, order, invoice, etc.) - - It may include a price (for insurance, for customs, for invoices, - for orders) - """ - - meta_type = 'Coramy Supply Line' - portal_type = 'Supply Line' - add_permission = Permissions.AddPortalContent - isPortalContent = 1 - isRADContent = 1 - - # Declarative security - security = ClassSecurityInfo() - security.declareObjectProtected(Permissions.View) - - # Declarative interfaces - __implements__ = ( Interface.Variated, ) - - # Declarative properties - property_sheets = ( PropertySheet.Base - , PropertySheet.XMLObject - , PropertySheet.CategoryCore - , PropertySheet.Amount - , PropertySheet.Task - , PropertySheet.Arrow - , PropertySheet.Movement - , PropertySheet.Price - , PropertySheet.VariationRange - , PropertySheet.Path - , PropertySheet.FlowCapacity - ) - - # Factory Type Information - factory_type_information = \ - { 'id' : portal_type - , 'meta_type' : meta_type - , 'description' : """\ -Une ligne tarifaire.""" - , 'icon' : 'order_line_icon.gif' - , 'product' : 'Coramy' - , 'factory' : 'addSupplyLine' - , 'immediate_view' : 'supply_line_view' - , 'allow_discussion' : 1 - , 'allowed_content_types': ('', - ) - , 'filter_content_types' : 1 - , 'global_allow' : 1 - , 'actions' : - ( { 'id' : 'view' - , 'name' : 'View' - , 'category' : 'object_view' - , 'action' : 'supply_line_view' - , 'permissions' : ( - Permissions.View, ) - } - , { 'id' : 'list' - , 'name' : 'Object Contents' - , 'category' : 'object_action' - , 'action' : 'folder_contents' - , 'permissions' : ( - Permissions.View, ) - } - , { 'id' : 'print' - , 'name' : 'Print' - , 'category' : 'object_print' - , 'action' : 'order_line_print' - , 'permissions' : ( - Permissions.View, ) - } - , { 'id' : 'metadata' - , 'name' : 'Metadata' - , 'category' : 'object_view' - , 'action' : 'metadata_edit' - , 'permissions' : ( - Permissions.View, ) - } - , { 'id' : 'translate' - , 'name' : 'Translate' - , 'category' : 'object_action' - , 'action' : 'translation_template_view' - , 'permissions' : ( - Permissions.TranslateContent, ) - } - ) - } diff --git a/product/Coramy/Document/Tissu.py b/product/Coramy/Document/Tissu.py deleted file mode 100755 index a145966218..0000000000 --- a/product/Coramy/Document/Tissu.py +++ /dev/null @@ -1,163 +0,0 @@ -############################################################################## -# -# Copyright (c) 2002 Nexedi SARL and Contributors. All Rights Reserved. -# Jean-Paul Smets-Solanes <jp@nexedi.com> -# -# WARNING: This program as such is intended to be used by professional -# programmers who take the whole responsability of assessing all potential -# consequences resulting from its eventual inadequacies and bugs -# End users who are looking for a ready-to-use solution with commercial -# garantees and support are strongly adviced to contract a Free Software -# Service Company -# -# This program is Free Software; you can redistribute it and/or -# modify it under the terms of the GNU General Public License -# as published by the Free Software Foundation; either version 2 -# of the License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -# -############################################################################## - -from AccessControl import ClassSecurityInfo - -from Products.ERP5.Document.Resource import Resource -from Products.ERP5Type import Permissions, PropertySheet, Constraint, Interface -from Products.ERP5Type.Utils import rejectIn - -class Tissu(Resource): - """ - Un tissu Coramy.... - """ - - meta_type = 'CORAMY Tissu' - portal_type = 'Tissu' - add_permission = Permissions.AddPortalContent - isPortalContent = 1 - isRADContent = 1 - - # Declarative security - security = ClassSecurityInfo() - security.declareObjectProtected(Permissions.View) - - # Declarative properties - property_sheets = ( PropertySheet.Base - , PropertySheet.XMLObject - , PropertySheet.CategoryCore - , PropertySheet.DublinCore - , PropertySheet.Price - , PropertySheet.Resource - , PropertySheet.Reference - , PropertySheet.Tissu - ) - - # Hard Wired Variation List - # XXX - may be incompatible with future versions of ERP5 - variation_base_category_list = ('coloris', ) - - # Factory Type Information - factory_type_information = \ - { 'id' : portal_type - , 'meta_type' : meta_type - , 'description' : """\ -Un tissu est une resource variantable en couleur.""" - , 'icon' : 'tissu_icon.gif' - , 'product' : 'Coramy' - , 'factory' : 'addTissu' - , 'immediate_view' : 'tissu_view' - , 'allow_discussion' : 1 - , 'allowed_content_types': ('Variante Tissu', - ) - , 'filter_content_types' : 1 - , 'global_allow' : 1 - , 'actions' : - ( { 'id' : 'view' - , 'name' : 'View' - , 'category' : 'object_view' - , 'action' : 'tissu_view' - , 'permissions' : ( - Permissions.View, ) - } - , { 'id' : 'list' - , 'name' : 'Object Contents' - , 'category' : 'object_action' - , 'action' : 'folder_contents' - , 'permissions' : ( - Permissions.View, ) - } - , { 'id' : 'print' - , 'name' : 'Print' - , 'category' : 'object_print' - , 'action' : 'tissu_print' - , 'permissions' : ( - Permissions.View, ) - } - , { 'id' : 'metadata' - , 'name' : 'Metadata' - , 'category' : 'object_view' - , 'action' : 'metadata_edit' - , 'permissions' : ( - Permissions.View, ) - } - , { 'id' : 'translate' - , 'name' : 'Translate' - , 'category' : 'object_action' - , 'action' : 'translation_template_view' - , 'permissions' : ( - Permissions.TranslateContent, ) - } - ) - } - - def _setTitle(self, value): - """ - Here we see that we must define an notion - of priority in the way fields are updated - """ - if value != self.getTitle(): - self.title = value - - security.declareProtected(Permissions.View, 'getTitle') - def getTitle(self): - """ - Returns the title if it exists or a combination of - first name and last name - """ - if self.title == '': - return self.getId() - else: - return self.title - Title = getTitle - - security.declareProtected(Permissions.ModifyPortalContent, 'setTitle') - def setTitle(self, value): - """ - Updates the title if necessary - """ - self._setTitle(value) - self.reindexObject() - - # Unit conversion - security.declareProtected(Permissions.AccessContentsInformation, 'convertQuantity') - def convertQuantity(self, quantity, from_unit, to_unit): - if from_unit == 'Surface/Centimetre_carre' and to_unit == 'Longueur/Metre': - return quantity / 100.0 / float(self.getLaizeUtile()) - else: - return quantity - - - # Unit list - security.declareProtected(Permissions.AccessContentsInformation, 'getQuantityUnitList') - def getQuantityUnitList(self): - my_default_quantity = self.getCategoryDefaultMembership('quantity_unit') - return [my_default_quantity] + rejectIn( ['Surface/Centimetre_carre', 'Longueur/Metre'], - [my_default_quantity]) - - diff --git a/product/Coramy/Document/TradeCondition.py b/product/Coramy/Document/TradeCondition.py deleted file mode 100755 index 3d454b5c8c..0000000000 --- a/product/Coramy/Document/TradeCondition.py +++ /dev/null @@ -1,140 +0,0 @@ -############################################################################## -# -# Copyright (c) 2002 Nexedi SARL and Contributors. All Rights Reserved. -# Jean-Paul Smets-Solanes <jp@nexedi.com> -# -# WARNING: This program as such is intended to be used by professional -# programmers who take the whole responsability of assessing all potential -# consequences resulting from its eventual inadequacies and bugs -# End users who are looking for a ready-to-use solution with commercial -# garantees and support are strongly adviced to contract a Free Software -# Service Company -# -# This program is Free Software; you can redistribute it and/or -# modify it under the terms of the GNU General Public License -# as published by the Free Software Foundation; either version 2 -# of the License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -# -############################################################################## - -from Globals import InitializeClass, PersistentMapping -from AccessControl import ClassSecurityInfo - -from Products.ERP5Type import Permissions, PropertySheet, Constraint, Interface -from Products.ERP5.Document.TradeCondition import TradeCondition as ERP5TradeCondition - -class TradeCondition(ERP5TradeCondition): - """ - Trade Conditions are used to store the conditions (payment, logistic,...) - which should be applied (and used in the orders) when two companies make - business together - """ - - meta_type = 'CORAMY Trade Condition' - portal_type = 'Trade Condition' - add_permission = Permissions.AddPortalContent - isPortalContent = 1 - isRADContent = 1 - - # Declarative security - security = ClassSecurityInfo() - security.declareObjectProtected(Permissions.View) - - # Declarative properties - property_sheets = ( PropertySheet.Base - , PropertySheet.XMLObject - , PropertySheet.CategoryCore - , PropertySheet.DublinCore - , PropertySheet.Arrow - , PropertySheet.TradeCondition - , PropertySheet.PaymentCondition - , PropertySheet.Comment - - , PropertySheet.Task - , PropertySheet.Movement - , PropertySheet.Delivery - , PropertySheet.Path - , PropertySheet.FlowCapacity - ) - - - # Factory Type Information - factory_type_information = \ - { 'id' : portal_type - , 'meta_type' : meta_type - , 'description' : """\ -Trade Conditions are used to store the conditions (payment, logistic,...) -which should be applied (and used in the orders) when two companies make -business together.""" - , 'icon' : 'trade_condition_icon.gif' - , 'product' : 'ERP5' - , 'factory' : 'addTradeCondition' - , 'immediate_view' : 'trade_condition_edit' - , 'actions' : - ( { 'id' : 'view' - , 'name' : 'View' - , 'category' : 'object_view' - , 'action' : 'trade_condition_edit' - , 'permissions' : ( - Permissions.View, ) - } - , { 'id' : 'print' - , 'name' : 'Print' - , 'category' : 'object_print' - , 'action' : 'trade_condition_print' - , 'permissions' : ( - Permissions.View, ) - } - , { 'id' : 'metadata' - , 'name' : 'Metadata' - , 'category' : 'object_edit' - , 'action' : 'metadata_edit' - , 'permissions' : ( - Permissions.View, ) - } - , { 'id' : 'translate' - , 'name' : 'Translate' - , 'category' : 'object_action' - , 'action' : 'translation_template_view' - , 'permissions' : ( - Permissions.TranslateContent, ) - } - ) - } - - def _setTitle(self, value): - """ - Here we see that we must define an notion - of priority in the way fields are updated - """ - if value != self.getTitle(): - self.title = value - - security.declareProtected(Permissions.View, 'getTitle') - def getTitle(self): - """ - Returns the title if it exists or a combination of - first name and last name - """ - if self.title == '': - return self.getId() - else: - return self.title - Title = getTitle - - security.declareProtected(Permissions.ModifyPortalContent, 'setTitle') - def setTitle(self, value): - """ - Updates the title if necessary - """ - self._setTitle(value) - self.reindexObject() \ No newline at end of file diff --git a/product/Coramy/Document/Transformation.py b/product/Coramy/Document/Transformation.py deleted file mode 100755 index b7439bf323..0000000000 --- a/product/Coramy/Document/Transformation.py +++ /dev/null @@ -1,175 +0,0 @@ -############################################################################## -# -# Copyright (c) 2002 Nexedi SARL and Contributors. All Rights Reserved. -# Jean-Paul Smets-Solanes <jp@nexedi.com> -# -# WARNING: This program as such is intended to be used by professional -# programmers who take the whole responsability of assessing all potential -# consequences resulting from its eventual inadequacies and bugs -# End users who are looking for a ready-to-use solution with commercial -# garantees and support are strongly adviced to contract a Free Software -# Service Company -# -# This program is Free Software; you can redistribute it and/or -# modify it under the terms of the GNU General Public License -# as published by the Free Software Foundation; either version 2 -# of the License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -# -############################################################################## - -from Globals import InitializeClass, PersistentMapping -from AccessControl import ClassSecurityInfo - -from Products.ERP5.Document.Resource import Resource -from Products.ERP5.Document.Transformation import Transformation as ERP5Transformation -from Products.ERP5Type import Permissions, PropertySheet, Constraint, Interface - -from zLOG import LOG - -class Transformation(ERP5Transformation): - """ - Une nomenclature.... - - - No nom - Titre - Correspondance taill checkbox - Corrsp. coloris checkbox - Variante par déau - Quté par défaut - Efficience - """ - - meta_type = 'CORAMY Transformation' - portal_type = 'Transformation' - add_permission = Permissions.AddPortalContent - isPortalContent = 1 - isRADContent = 1 - - # Declarative security - security = ClassSecurityInfo() - security.declareObjectProtected(Permissions.View) - - # Declarative properties - property_sheets = ( PropertySheet.Base - , PropertySheet.XMLObject - , PropertySheet.CategoryCore - , PropertySheet.DublinCore - , PropertySheet.VariationRange - , PropertySheet.Domain - , PropertySheet.Transformation - , PropertySheet.CoramyTransformation - ) - - # Factory Type Information - factory_type_information = \ - { 'id' : portal_type - , 'meta_type' : meta_type - , 'description' : """\ -Un tissu est une resource variantable en couleur.""" - , 'icon' : 'tissu_icon.gif' - , 'product' : 'Coramy' - , 'factory' : 'addTransformation' - , 'immediate_view' : 'transformation_view' - , 'allow_discussion' : 1 - , 'allowed_content_types': ('Variante Tissu', - ) - , 'filter_content_types' : 1 - , 'global_allow' : 1 - , 'actions' : - ( { 'id' : 'view' - , 'name' : 'View' - , 'category' : 'object_view' - , 'action' : 'transformation_view' - , 'permissions' : ( - Permissions.View, ) - } - , { 'id' : 'list' - , 'name' : 'Object Contents' - , 'category' : 'object_action' - , 'action' : 'folder_contents' - , 'permissions' : ( - Permissions.View, ) - } - , { 'id' : 'print' - , 'name' : 'Print' - , 'category' : 'object_print' - , 'action' : 'transformation_print' - , 'permissions' : ( - Permissions.View, ) - } - , { 'id' : 'metadata' - , 'name' : 'Metadata' - , 'category' : 'object_view' - , 'action' : 'metadata_edit' - , 'permissions' : ( - Permissions.View, ) - } - , { 'id' : 'translate' - , 'name' : 'Translate' - , 'category' : 'object_action' - , 'action' : 'translation_template_view' - , 'permissions' : ( - Permissions.TranslateContent, ) - } - ) - } - - def _setTitle(self, value): - """ - Here we see that we must define an notion - of priority in the way fields are updated - """ - if value != self.getTitle(): - self.title = value - - security.declareProtected(Permissions.View, 'getTitle') - def getTitle(self): - """ - Returns the title if it exists or a combination of - first name and last name - """ - if self.title == '': - return self.getId() - else: - return self.title - Title = getTitle - - security.declareProtected(Permissions.ModifyPortalContent, 'setTitle') - def setTitle(self, value): - """ - Updates the title if necessary - """ - self._setTitle(value) - self.reindexObject() - - security.declareProtected(Permissions.AccessContentsInformation, 'getAggregatedAmountList') - def getAggregatedAmountList(self, context=None, REQUEST=None, **kw): - """ - Updates the title if necessary - - We must update this to use context XXX - """ - amount_list , grand_total_base_price, grand_total_source_base_price,\ - grand_total_duration, \ - grand_total_variated_base_price, grand_total_variated_source_base_price =\ - ERP5Transformation.getAggregatedAmountList(self, context=context, REQUEST=REQUEST, **kw) - grand_total_duration_france = 0.0 - for amount_item in amount_list: - # Test is this is a kind of coupe resource - #LOG("Amount", 0, str(amount_item['resource'].id)) - if amount_item['resource'].isMemberOf('operation/coupe'): - grand_total_duration_france += amount_item['duration'] - return amount_list , grand_total_base_price, grand_total_source_base_price, grand_total_duration, grand_total_duration_france, grand_total_variated_base_price, grand_total_variated_source_base_price - - - diff --git a/product/Coramy/Document/TransformedResource.py b/product/Coramy/Document/TransformedResource.py deleted file mode 100755 index f3bab0036a..0000000000 --- a/product/Coramy/Document/TransformedResource.py +++ /dev/null @@ -1,137 +0,0 @@ -############################################################################## -# -# Copyright (c) 2002 Nexedi SARL and Contributors. All Rights Reserved. -# Jean-Paul Smets-Solanes <jp@nexedi.com> -# -# WARNING: This program as such is intended to be used by professional -# programmers who take the whole responsability of assessing all potential -# consequences resulting from its eventual inadequacies and bugs -# End users who are looking for a ready-to-use solution with commercial -# garantees and support are strongly adviced to contract a Free Software -# Service Company -# -# This program is Free Software; you can redistribute it and/or -# modify it under the terms of the GNU General Public License -# as published by the Free Software Foundation; either version 2 -# of the License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -# -############################################################################## - -from Globals import InitializeClass -from AccessControl import ClassSecurityInfo - -from Products.ERP5Type import Permissions, PropertySheet, Constraint, Interface -from Products.ERP5.Document.TransformedResource import TransformedResource as ERP5TransformedResource - -class TransformedResource(ERP5TransformedResource): - """ - TransformedResource defines which - resource is being transformed - - - variation - - quantity - - Maybe defined by mapped values inside the transformed resource - - """ - - meta_type = 'CORAMY Transformed Resource' - portal_type = 'Transformed Resource' - add_permission = Permissions.AddPortalContent - isPortalContent = 1 - isRADContent = 1 - - # Declarative security - security = ClassSecurityInfo() - security.declareObjectProtected(Permissions.View) - - # Declarative properties - property_sheets = ( PropertySheet.Base - , PropertySheet.SimpleItem - , PropertySheet.CategoryCore - , PropertySheet.Amount - , PropertySheet.TransformedResource - , PropertySheet.CoramyTransformedResource - ) - - # Factory Type Information - factory_type_information = \ - { 'id' : portal_type - , 'meta_type' : meta_type - , 'description' : """\ -A bank account number holds a collection of numbers -and codes (ex. SWIFT, RIB, etc.) which may be used to -identify a bank account.""" - , 'icon' : 'transformed_resource_icon.gif' - , 'product' : 'ERP5' - , 'factory' : 'addTransformedResource' - , 'immediate_view' : 'transformed_resource_view' - , 'actions' : - ( { 'id' : 'view' - , 'name' : 'View' - , 'category' : 'object_view' - , 'action' : 'transformed_resource_view' - , 'permissions' : ( - Permissions.View, ) - } - , { 'id' : 'print' - , 'name' : 'Print' - , 'category' : 'object_print' - , 'action' : 'transformed_resource_print' - , 'permissions' : ( - Permissions.View, ) - } - , { 'id' : 'metadata' - , 'name' : 'Metadata' - , 'category' : 'object_view' - , 'action' : 'metadata_edit' - , 'permissions' : ( - Permissions.View, ) - } - , { 'id' : 'translate' - , 'name' : 'Translate' - , 'category' : 'object_action' - , 'action' : 'translation_template_view' - , 'permissions' : ( - Permissions.TranslateContent, ) - } - ) - } - - def _setTitle(self, value): - """ - Here we see that we must define an notion - of priority in the way fields are updated - """ - if value != self.getTitle(): - self.title = value - - security.declareProtected(Permissions.View, 'getTitle') - def getTitle(self): - """ - Returns the title if it exists or a combination of - first name and last name - """ - if self.title == '': - return self.getId() - else: - return self.title - Title = getTitle - - security.declareProtected(Permissions.ModifyPortalContent, 'setTitle') - def setTitle(self, value): - """ - Updates the title if necessary - """ - self._setTitle(value) - self.reindexObject() - diff --git a/product/Coramy/Document/VarianteComposant.py b/product/Coramy/Document/VarianteComposant.py deleted file mode 100755 index aa06ad6c52..0000000000 --- a/product/Coramy/Document/VarianteComposant.py +++ /dev/null @@ -1,138 +0,0 @@ -############################################################################## -# -# Copyright (c) 2002 Nexedi SARL and Contributors. All Rights Reserved. -# Jean-Paul Smets-Solanes <jp@nexedi.com> -# -# WARNING: This program as such is intended to be used by professional -# programmers who take the whole responsability of assessing all potential -# consequences resulting from its eventual inadequacies and bugs -# End users who are looking for a ready-to-use solution with commercial -# garantees and support are strongly adviced to contract a Free Software -# Service Company -# -# This program is Free Software; you can redistribute it and/or -# modify it under the terms of the GNU General Public License -# as published by the Free Software Foundation; either version 2 -# of the License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -# -############################################################################## - -from Globals import InitializeClass, PersistentMapping -from AccessControl import ClassSecurityInfo - -from Products.ERP5.Document.Variation import Variation -from Products.ERP5.Document.Image import Image - -from Products.ERP5Type import Permissions, PropertySheet, Constraint, Interface - -class VarianteComposant(Image, Variation): - """ - Une variante composant Coramy.... - """ - - meta_type = 'CORAMY Variante Composant' - portal_type = 'Variante Composant' - add_permission = Permissions.AddPortalContent - isPortalContent = 1 - isRADContent = 1 - - # Declarative security - security = ClassSecurityInfo() - security.declareObjectProtected(Permissions.View) - - # Declarative properties - property_sheets = ( PropertySheet.Base - , PropertySheet.CategoryCore - , PropertySheet.DublinCore - , PropertySheet.Resource - , PropertySheet.Reference - , PropertySheet.Price - , PropertySheet.Variation - , PropertySheet.VarianteComposant - ) - - # Hard Wired Variation List - # XXX - may be incompatible with future versions of ERP5 - variation_base_category_list = ('variante', ) - - # Factory Type Information - factory_type_information = \ - { 'id' : portal_type - , 'meta_type' : meta_type - , 'description' : """\ -Une variante de tissu est une image d'un tissu particulier qui -définit la couleur et les motifs de cette variante.""" - , 'icon' : 'variante_composant_icon.gif' - , 'product' : 'Coramy' - , 'factory' : 'addVarianteComposant' - , 'immediate_view' : 'variante_composant_view' - , 'actions' : - ( { 'id' : 'view' - , 'name' : 'View' - , 'category' : 'object_view' - , 'action' : 'variante_composant_view' - , 'permissions' : ( - Permissions.View, ) - } - , { 'id' : 'print' - , 'name' : 'Print' - , 'category' : 'object_print' - , 'action' : 'variante_composant_print' - , 'permissions' : ( - Permissions.View, ) - } - , { 'id' : 'metadata' - , 'name' : 'Metadata' - , 'category' : 'object_view' - , 'action' : 'metadata_edit' - , 'permissions' : ( - Permissions.View, ) - } - , { 'id' : 'translate' - , 'name' : 'Translate' - , 'category' : 'object_action' - , 'action' : 'translation_template_view' - , 'permissions' : ( - Permissions.TranslateContent, ) - } - ) - } - - def _setTitle(self, value): - """ - Here we see that we must define an notion - of priority in the way fields are updated - """ - if value != self.getTitle(): - self.title = value - - security.declareProtected(Permissions.View, 'getTitle') - def getTitle(self): - """ - Returns the title if it exists or a combination of - first name and last name - """ - if self.title == '': - return self.getId() - else: - return self.title - Title = getTitle - - security.declareProtected(Permissions.ModifyPortalContent, 'setTitle') - def setTitle(self, value): - """ - Updates the title if necessary - """ - self._setTitle(value) - self.reindexObject() - - diff --git a/product/Coramy/Document/VarianteGamme.py b/product/Coramy/Document/VarianteGamme.py deleted file mode 100755 index 325a8dc368..0000000000 --- a/product/Coramy/Document/VarianteGamme.py +++ /dev/null @@ -1,130 +0,0 @@ -############################################################################## -# -# Copyright (c) 2002 Coramy SAS and Contributors. All Rights Reserved. -# Thierry_Faucher <Thierry_Faucher@coramy.com> -# -# WARNING: This program as such is intended to be used by professional -# programmers who take the whole responsability of assessing all potential -# consequences resulting from its eventual inadequacies and bugs -# End users who are looking for a ready-to-use solution with commercial -# garantees and support are strongly adviced to contract a Free Software -# Service Company -# -# This program is Free Software; you can redistribute it and/or -# modify it under the terms of the GNU General Public License -# as published by the Free Software Foundation; either version 2 -# of the License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -# -############################################################################## - -from AccessControl import ClassSecurityInfo -from Products.ERP5.Document.Variation import Variation -from Products.ERP5Type import Permissions, PropertySheet, Constraint, Interface - -class VarianteGamme(Variation): - """ - une variante de gamme.. - """ - - meta_type = 'CORAMY Variante Gamme' - portal_type = 'Variante Gamme' - add_permission = Permissions.AddPortalContent - isPortalContent = 1 - isRADContent = 1 - - # Declarative security - security = ClassSecurityInfo() - security.declareObjectProtected(Permissions.View) - - # Declarative properties - property_sheets = ( PropertySheet.Base - , PropertySheet.XMLObject - , PropertySheet.CategoryCore - , PropertySheet.DublinCore - , PropertySheet.VarianteGamme - ) - - # Hard Wired Variation List - # XXX - may be incompatible with future versions of ERP5 - variation_base_category_list = ('coloris', ) - - # Factory Type Information - factory_type_information = \ - { 'id' : portal_type - , 'meta_type' : meta_type - , 'description' : """\ -une variante de gamme...""" - , 'icon' : 'variante_gamme_icon.gif' - , 'product' : 'Coramy' - , 'factory' : 'addVarianteGamme' - , 'immediate_view' : 'variante_gamme_view' - , 'actions' : - ( { 'id' : 'view' - , 'name' : 'View' - , 'category' : 'object_view' - , 'action' : 'variante_gamme_view' - , 'permissions' : ( - Permissions.View, ) - } - , { 'id' : 'print' - , 'name' : 'Print' - , 'category' : 'object_print' - , 'action' : 'variante_gamme_print' - , 'permissions' : ( - Permissions.View, ) - } - , { 'id' : 'metadata' - , 'name' : 'Metadata' - , 'category' : 'object_edit' - , 'action' : 'metadata_edit' - , 'permissions' : ( - Permissions.View, ) - } - , { 'id' : 'translate' - , 'name' : 'Translate' - , 'category' : 'object_action' - , 'action' : 'translation_template_view' - , 'permissions' : ( - Permissions.TranslateContent, ) - } - ) - } - - def _setTitle(self, value): - """ - Here we see that we must define an notion - of priority in the way fields are updated - """ - if value != self.getTitle(): - self.title = value - - security.declareProtected(Permissions.View, 'getTitle') - def getTitle(self): - """ - Returns the title if it exists or a combination of - first name and last name - """ - if self.title == '': - return self.getId() - else: - return self.title - Title = getTitle - - security.declareProtected(Permissions.ModifyPortalContent, 'setTitle') - def setTitle(self, value): - """ - Updates the title if necessary - """ - self._setTitle(value) - self.reindexObject() - - diff --git a/product/Coramy/Document/VarianteModele.py b/product/Coramy/Document/VarianteModele.py deleted file mode 100755 index 7f19a6314e..0000000000 --- a/product/Coramy/Document/VarianteModele.py +++ /dev/null @@ -1,141 +0,0 @@ -############################################################################## -# -# Copyright (c) 2002 Nexedi SARL and Contributors. All Rights Reserved. -# Jean-Paul Smets-Solanes <jp@nexedi.com> -# -# WARNING: This program as such is intended to be used by professional -# programmers who take the whole responsability of assessing all potential -# consequences resulting from its eventual inadequacies and bugs -# End users who are looking for a ready-to-use solution with commercial -# garantees and support are strongly adviced to contract a Free Software -# Service Company -# -# This program is Free Software; you can redistribute it and/or -# modify it under the terms of the GNU General Public License -# as published by the Free Software Foundation; either version 2 -# of the License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -# -############################################################################## - -from AccessControl import ClassSecurityInfo - -from Products.ERP5Type import Permissions, PropertySheet, Constraint, Interface -from Products.ERP5.Document.Image import Image -from Products.ERP5.Document.Variation import Variation - - -class VarianteModele(Image, Variation): - """ - une variante coloris d'un modele.. - """ - - meta_type = 'CORAMY Variante Modele' - portal_type = 'Variante Modele' - add_permission = Permissions.AddPortalContent - isPortalContent = 1 - isRADContent = 1 - - # Declarative security - security = ClassSecurityInfo() - security.declareObjectProtected(Permissions.View) - - # Declarative properties - property_sheets = ( PropertySheet.Base - , PropertySheet.XMLObject - , PropertySheet.DublinCore - , PropertySheet.Resource - , PropertySheet.Reference - , PropertySheet.VarianteModele - ) - - # Hard Wired Variation List - # XXX - may be incompatible with future versions of ERP5 - variation_base_category_list = ('coloris', ) - - # Factory Type Information - factory_type_information = \ - { 'id' : portal_type - , 'meta_type' : meta_type - , 'description' : """\ -un coloris...""" - , 'icon' : 'coloris_icon.gif' - , 'product' : 'Coramy' - , 'factory' : 'addVarianteModele' - , 'immediate_view' : 'variante_modele_view' - , 'actions' : - ( { 'id' : 'view' - , 'name' : 'View' - , 'category' : 'object_view' - , 'action' : 'variante_modele_view' - , 'permissions' : ( - Permissions.View, ) - } - , { 'id' : 'print' - , 'name' : 'Print' - , 'category' : 'object_print' - , 'action' : 'image_print' - , 'permissions' : ( - Permissions.View, ) - } - , { 'id' : 'metadata' - , 'name' : 'Metadata' - , 'category' : 'object_view' - , 'action' : 'metadata_edit' - , 'permissions' : ( - Permissions.View, ) - } - , { 'id' : 'download' - , 'name' : 'Download' - , 'category' : 'object_action' - , 'action' : 'download' - , 'permissions' : ( - Permissions.View, ) - } - , { 'id' : 'translate' - , 'name' : 'Translate' - , 'category' : 'object_action' - , 'action' : 'translation_template_view' - , 'permissions' : ( - Permissions.TranslateContent, ) - } - ) - } - - def _setTitle(self, value): - """ - Here we see that we must define an notion - of priority in the way fields are updated - """ - if value != self.getTitle(): - self.title = value - - security.declareProtected(Permissions.View, 'getTitle') - def getTitle(self): - """ - Returns the title if it exists or a combination of - first name and last name - """ - if self.title == '': - return self.getId() - else: - return self.title - Title = getTitle - - security.declareProtected(Permissions.ModifyPortalContent, 'setTitle') - def setTitle(self, value): - """ - Updates the title if necessary - """ - self._setTitle(value) - self.reindexObject() - - diff --git a/product/Coramy/Document/VarianteMorphologique.py b/product/Coramy/Document/VarianteMorphologique.py deleted file mode 100755 index fa5256020e..0000000000 --- a/product/Coramy/Document/VarianteMorphologique.py +++ /dev/null @@ -1,132 +0,0 @@ -############################################################################## -# -# Copyright (c) 2002 Nexedi SARL and Contributors. All Rights Reserved. -# Jean-Paul Smets-Solanes <jp@nexedi.com> -# -# WARNING: This program as such is intended to be used by professional -# programmers who take the whole responsability of assessing all potential -# consequences resulting from its eventual inadequacies and bugs -# End users who are looking for a ready-to-use solution with commercial -# garantees and support are strongly adviced to contract a Free Software -# Service Company -# -# This program is Free Software; you can redistribute it and/or -# modify it under the terms of the GNU General Public License -# as published by the Free Software Foundation; either version 2 -# of the License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -# -############################################################################## - -from AccessControl import ClassSecurityInfo - -from Products.ERP5Type import Permissions, PropertySheet, Constraint, Interface -from Products.ERP5.Document.Variation import Variation - -class VarianteMorphologique(Variation): - """ - Une variante morphologique pour un modele (ex profondeur de bonnet).... - """ - - meta_type = 'CORAMY Variante Morphologique' - portal_type = 'Variante Morphologique' - add_permission = Permissions.AddPortalContent - isPortalContent = 1 - isRADContent = 1 - - # Declarative security - security = ClassSecurityInfo() - security.declareObjectProtected(Permissions.View) - - # Declarative properties - property_sheets = ( PropertySheet.Base - , PropertySheet.CategoryCore - , PropertySheet.DublinCore - , PropertySheet.Resource - , PropertySheet.Price - , PropertySheet.Variation - , PropertySheet.VarianteMorphologique - ) - - # Hard Wired Variation List - # XXX - may be incompatible with future versions of ERP5 - variation_base_category_list = ('morphologie', ) - - # Factory Type Information - factory_type_information = \ - { 'id' : portal_type - , 'meta_type' : meta_type - , 'description' : """\ -Une variante morphologique definit des variantes differente de modele""" - , 'icon' : 'variante_morphologique_icon.gif' - , 'product' : 'Coramy' - , 'factory' : 'addVarianteMorphologique' - , 'immediate_view' : 'variante_morphologique_view' - , 'actions' : - ( { 'id' : 'view' - , 'name' : 'View' - , 'category' : 'object_view' - , 'action' : 'variante_morphologique_view' - , 'permissions' : ( - Permissions.View, ) - } - , { 'id' : 'print' - , 'name' : 'Print' - , 'category' : 'object_print' - , 'action' : 'variante_morphologique_print' - , 'permissions' : ( - Permissions.View, ) - } - , { 'id' : 'metadata' - , 'name' : 'Metadata' - , 'category' : 'object_view' - , 'action' : 'metadata_edit' - , 'permissions' : ( - Permissions.View, ) - } - , { 'id' : 'translate' - , 'name' : 'Translate' - , 'category' : 'object_action' - , 'action' : 'translation_template_view' - , 'permissions' : ( - Permissions.TranslateContent, ) - } - ) - } - - def _setTitle(self, value): - """ - Here we see that we must define an notion - of priority in the way fields are updated - """ - if value != self.getTitle(): - self.title = value - - security.declareProtected(Permissions.View, 'getTitle') - def getTitle(self): - """ - Returns the title if it exists or a combination of - first name and last name - """ - if self.title == '': - return self.getId() - else: - return self.title - Title = getTitle - - security.declareProtected(Permissions.ModifyPortalContent, 'setTitle') - def setTitle(self, value): - """ - Updates the title if necessary - """ - self._setTitle(value) - self.reindexObject() - diff --git a/product/Coramy/Document/VarianteTissu.py b/product/Coramy/Document/VarianteTissu.py deleted file mode 100755 index 0c267f8a4e..0000000000 --- a/product/Coramy/Document/VarianteTissu.py +++ /dev/null @@ -1,136 +0,0 @@ -############################################################################## -# -# Copyright (c) 2002 Nexedi SARL and Contributors. All Rights Reserved. -# Jean-Paul Smets-Solanes <jp@nexedi.com> -# -# WARNING: This program as such is intended to be used by professional -# programmers who take the whole responsability of assessing all potential -# consequences resulting from its eventual inadequacies and bugs -# End users who are looking for a ready-to-use solution with commercial -# garantees and support are strongly adviced to contract a Free Software -# Service Company -# -# This program is Free Software; you can redistribute it and/or -# modify it under the terms of the GNU General Public License -# as published by the Free Software Foundation; either version 2 -# of the License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -# -############################################################################## - -from AccessControl import ClassSecurityInfo - -from Products.ERP5Type import Permissions, PropertySheet, Constraint, Interface -from Products.ERP5.Document.Variation import Variation -from Products.ERP5.Document.Image import Image - -class VarianteTissu(Image, Variation): - """ - Une variante tissu Coramy.... - """ - - meta_type = 'CORAMY Variante Tissu' - portal_type = 'Variante Tissu' - add_permission = Permissions.AddPortalContent - isPortalContent = 1 - isRADContent = 1 - - # Declarative security - security = ClassSecurityInfo() - security.declareObjectProtected(Permissions.View) - - # Declarative properties - property_sheets = ( PropertySheet.Base - , PropertySheet.CategoryCore - , PropertySheet.DublinCore - , PropertySheet.Resource - , PropertySheet.Reference - , PropertySheet.Price - , PropertySheet.Variation - , PropertySheet.VarianteTissu - ) - - # Hard Wired Variation List - # XXX - may be incompatible with future versions of ERP5 - variation_base_category_list = ('coloris', ) - - # Factory Type Information - factory_type_information = \ - { 'id' : portal_type - , 'meta_type' : meta_type - , 'description' : """\ -Une variante de tissu est une image d'un tissu particulier qui -définit la couleur et les motifs de cette variante.""" - , 'icon' : 'variante_tissu_icon.gif' - , 'product' : 'Coramy' - , 'factory' : 'addVarianteTissu' - , 'immediate_view' : 'variante_modele_view' - , 'actions' : - ( { 'id' : 'view' - , 'name' : 'View' - , 'category' : 'object_view' - , 'action' : 'variante_tissu_view' - , 'permissions' : ( - Permissions.View, ) - } - , { 'id' : 'print' - , 'name' : 'Print' - , 'category' : 'object_print' - , 'action' : 'variante_tissu_print' - , 'permissions' : ( - Permissions.View, ) - } - , { 'id' : 'metadata' - , 'name' : 'Metadata' - , 'category' : 'object_view' - , 'action' : 'metadata_edit' - , 'permissions' : ( - Permissions.View, ) - } - , { 'id' : 'translate' - , 'name' : 'Translate' - , 'category' : 'object_action' - , 'action' : 'translation_template_view' - , 'permissions' : ( - Permissions.TranslateContent, ) - } - ) - } - - def _setTitle(self, value): - """ - Here we see that we must define an notion - of priority in the way fields are updated - """ - if value != self.getTitle(): - self.title = value - - security.declareProtected(Permissions.View, 'getTitle') - def getTitle(self): - """ - Returns the title if it exists or a combination of - first name and last name - """ - if self.title == '': - return self.getId() - else: - return self.title - Title = getTitle - - security.declareProtected(Permissions.ModifyPortalContent, 'setTitle') - def setTitle(self, value): - """ - Updates the title if necessary - """ - self._setTitle(value) - self.reindexObject() - - diff --git a/product/Coramy/Document/VariatedReference.py b/product/Coramy/Document/VariatedReference.py deleted file mode 100755 index 54d7a2d303..0000000000 --- a/product/Coramy/Document/VariatedReference.py +++ /dev/null @@ -1,247 +0,0 @@ -############################################################################## -# -# Copyright (c) 2002 Nexedi SARL and Contributors. All Rights Reserved. -# Jean-Paul Smets-Solanes <jp@nexedi.com> -# -# WARNING: This program as such is intended to be used by professional -# programmers who take the whole responsability of assessing all potential -# consequences resulting from its eventual inadequacies and bugs -# End users who are looking for a ready-to-use solution with commercial -# garantees and support are strongly adviced to contract a Free Software -# Service Company -# -# This program is Free Software; you can redistribute it and/or -# modify it under the terms of the GNU General Public License -# as published by the Free Software Foundation; either version 2 -# of the License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -# -############################################################################## - -from Globals import InitializeClass -from AccessControl import ClassSecurityInfo - -from Products.ERP5Type import Permissions, PropertySheet, Constraint, Interface -from Products.ERP5Type.XMLObject import XMLObject -from Products.ERP5Type.XMLMatrix import XMLMatrix -from Products.ERP5Type.Utils import cartesianProduct - -from Products.ERP5.ERP5Globals import resource_type_list - -from zLOG import LOG - -class VariatedReference(XMLObject, XMLMatrix): - """ - VariatedReference defines a reference which - can take multiples values depending of the variations of a resource - - Maybe defined by mapped values inside the resource - """ - - meta_type = 'CORAMY Variated Reference' - portal_type = 'Variated Reference' - add_permission = Permissions.AddPortalContent - isPortalContent = 1 - isRADContent = 1 - - # Declarative security - security = ClassSecurityInfo() - security.declareObjectProtected(Permissions.View) - - # Declarative properties - property_sheets = ( PropertySheet.Base - , PropertySheet.SimpleItem - , PropertySheet.VariatedReference - ) - - # Declarative interfaces - __implements__ = ( Interface.Variated, ) - - # Local property sheet - _properties = ( - { 'id' : 'variation_base_category', - 'storage_id' : 'variation_base_category_list', # Coramy Compatibility - 'description' : "", - 'type' : 'tokens', - 'acquisition_portal_type' : resource_type_list, - 'acquisition_copy_value' : 0, - 'acquisition_mask_value' : 0, - 'acquisition_sync_value' : 0, - 'acquisition_accessor_id' : 'getVariationBaseCategoryList', - 'acquisition_depends' : None, - 'mode' : 'w' }, - ) - - # Factory Type Information - factory_type_information = \ - { 'id' : portal_type - , 'meta_type' : meta_type - , 'description' : """\ -A VariatedReference.""" - , 'icon' : 'variated_reference_icon.gif' - , 'product' : 'Coramy' - , 'factory' : 'addVariatedReference' - , 'immediate_view' : 'variated_reference_view' - , 'actions' : - ( { 'id' : 'view' - , 'name' : 'View' - , 'category' : 'object_view' - , 'action' : 'transformed_resource_view' - , 'permissions' : ( - Permissions.View, ) - } - , { 'id' : 'print' - , 'name' : 'Print' - , 'category' : 'object_print' - , 'action' : 'variated_reference_print' - , 'permissions' : ( - Permissions.View, ) - } - , { 'id' : 'metadata' - , 'name' : 'Metadata' - , 'category' : 'object_view' - , 'action' : 'metadata_edit' - , 'permissions' : ( - Permissions.View, ) - } - , { 'id' : 'translate' - , 'name' : 'Translate' - , 'category' : 'object_action' - , 'action' : 'translation_template_view' - , 'permissions' : ( - Permissions.TranslateContent, ) - } - ) - } - - ### Variation matrix definition - # - security.declareProtected(Permissions.ModifyPortalContent, '_setReferenceVariationBaseCategoryList') - def _setReferenceVariationBaseCategoryList(self, value): - """ - Defines the possible base categories which the reference - variates on - """ - # XXX - may be incompatible with future versions of ERP5 - self.reference_variation_base_category_list = value - kwd = {} - kwd['base_id'] = self.getReferenceType() - kw = [] - resource = self.aq_parent - line_id = 'coloris' - column_id = 'taille' - line = [[None]] - column = [[None]] - - for v in value: - if v == line_id: - line = [resource.getVariationRangeCategoryItemList(base_category_list = line_id, base=0)] - elif v == column_id: - column = [resource.getVariationRangeCategoryItemList(base_category_list = column_id, base=0)] - else: - kw += [resource.getVariationRangeCategoryItemList(base_category_list = v, base=0)] - kw = line + column + kw - self.setCellRange(*kw, **kwd) - # Empty cells if no variation - if line == [[None]] and column == [[None]]: - self.delCells(base_id=self.getReferenceType()) - # And fix it in case the cells are not renamed (XXX this will be removed in the future) - # self._checkConsistency(fixit=1) - - security.declareProtected(Permissions.ModifyPortalContent, 'setReferenceVariationBaseCategoryList') - def setReferenceVariationBaseCategoryList(self, value): - """ - Defines the possible base categories which Quantity value (Q) - variate on and reindex the object - """ - self._setReferenceVariationBaseCategoryList(value) - self.reindexObject() - - # Methods for matrix UI widgets - security.declareProtected(Permissions.AccessContentsInformation, 'getLineItemList') - def getLineItemList(self): - base_category = 'coloris' - if base_category in self.getReferenceVariationBaseCategoryList(): - clist = self.aq_parent.getVariationRangeCategoryItemList(base_category, base=0) - else: - clist = [None] - result = [] - for c in clist: - result += [(c,c)] - return result - - security.declareProtected(Permissions.AccessContentsInformation, 'getColumnItemList') - def getColumnItemList(self): - base_category = 'taille' - if base_category in self.getReferenceVariationBaseCategoryList(): - clist = self.aq_parent.getCategoryMembershipList(base_category, base=1) - else: - clist = [None] - result = [] - for c in clist: - result += [(c,c)] - return result - - security.declareProtected(Permissions.AccessContentsInformation, 'getTabItemList') - def getTabItemList(self): - resource = self.aq_parent - line_id = 'coloris' - column_id = 'taille' - base_category_list = resource.getVariationBaseCategoryList() - base_category = [] - for c in base_category_list: - if not c in (line_id, column_id): - if c in self.getReferenceVariationBaseCategoryList(): - base_category += [resource.getVariationRangeCategoryItemList(c, base=0)] - if len(base_category) > 0: - clist = cartesianProduct(base_category) - result = [] - for c in clist: - result += [(c,c)] - else: - result = [(None,'')] - return result - - security.declareProtected( Permissions.ModifyPortalContent, 'newCell' ) - def newCell(self, *kw, **kwd): - result = XMLMatrix.newCell(self, *kw, **kwd) - result._setPredicateOperator("SUPERSET_OF") - membership_list = [] - for c in kw: - if c is not None: - membership_list += [c] - result._setPredicateValueList(membership_list) - base_id = kwd.get('base_id', 'cell') - result._setDomainBaseCategoryList(self.getReferenceVariationBaseCategoryList()) - return result - - security.declareProtected( Permissions.ModifyPortalContent, 'newCellContent' ) - def newCellContent(self, id): - """ - This method can be overriden - """ - self.invokeFactory(type_name="Set Mapped Value",id=id) - return self.get(id) - - -from Products.Coramy.Document.SetMappedValue import SetMappedValue - -class SetMappedValuePatch(SetMappedValue): - - def getEan13Code(self): - """ - returns ean13 code for Coramy - """ - if hasattr(self, 'code_ean13'): - return self.code_ean13 - return self._baseGetEan13Code() - -SetMappedValue.getEan13Code = SetMappedValuePatch.getEan13Code diff --git a/product/Coramy/Document/Vetement.py b/product/Coramy/Document/Vetement.py deleted file mode 100755 index c374359384..0000000000 --- a/product/Coramy/Document/Vetement.py +++ /dev/null @@ -1,261 +0,0 @@ -############################################################################## -# -# Copyright (c) 2002 Coramy SAS and Contributors. All Rights Reserved. -# Thierry_Faucher <Thierry_Faucher@coramy.com> -# -# WARNING: This program as such is intended to be used by professional -# programmers who take the whole responsability of assessing all potential -# consequences resulting from its eventual inadequacies and bugs -# End users who are looking for a ready-to-use solution with commercial -# garantees and support are strongly adviced to contract a Free Software -# Service Company -# -# This program is Free Software; you can redistribute it and/or -# modify it under the terms of the GNU General Public License -# as published by the Free Software Foundation; either version 2 -# of the License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -# -############################################################################## - -from Globals import InitializeClass, PersistentMapping -from AccessControl import ClassSecurityInfo - -from Products.ERP5Type import Permissions, PropertySheet, Constraint, Interface -from Products.ERP5.Document.Resource import Resource -from Products.CMFCore.WorkflowCore import WorkflowMethod -from Products.ERP5Type.XMLMatrix import XMLMatrix -from Products.ERP5.Document.Domain import Domain - -class Vetement(Resource, XMLMatrix): - """ - un vetement.. - """ - - meta_type = 'CORAMY Vetement' - portal_type = 'Vetement' - add_permission = Permissions.AddPortalContent - isPortalContent = 1 - isRADContent = 1 - - # Declarative security - security = ClassSecurityInfo() - security.declareObjectProtected(Permissions.View) - - # Declarative properties - property_sheets = ( PropertySheet.Base - , PropertySheet.XMLObject - , PropertySheet.CategoryCore - , PropertySheet.DublinCore - , PropertySheet.Vetement - , PropertySheet.PresentAuCatalogue - ) - - # Hard Wired Variation List - # XXX - may be incompatible with future versions of ERP5 - variation_base_category_list = ('taille',) - - # Factory Type Information - factory_type_information = \ - { 'id' : portal_type - , 'meta_type' : meta_type - , 'description' : """\ -un vetement...""" - , 'icon' : 'vetement_icon.gif' - , 'product' : 'Coramy' - , 'factory' : 'addVetement' - , 'immediate_view' : 'vetement_view' - , 'allow_discussion' : 1 - , 'allowed_content_types': ('Morceau', - ) - , 'filter_content_types' : 1 - , 'global_allow' : 1 - , 'actions' : - ( { 'id' : 'view' - , 'name' : 'View' - , 'category' : 'object_view' - , 'action' : 'vetement_view' - , 'permissions' : ( - Permissions.View, ) - } - , { 'id' : 'list' - , 'name' : 'Object Contents' - , 'category' : 'object_action' - , 'action' : 'folder_contents' - , 'permissions' : ( - Permissions.View, ) - } - , { 'id' : 'print' - , 'name' : 'Print' - , 'category' : 'object_print' - , 'action' : 'object_print' - , 'permissions' : ( - Permissions.View, ) - } - , { 'id' : 'metadata' - , 'name' : 'Metadata' - , 'category' : 'object_edit' - , 'action' : 'metadata_edit' - , 'permissions' : ( - Permissions.View, ) - } - , { 'id' : 'translate' - , 'name' : 'Translate' - , 'category' : 'object_action' - , 'action' : 'translation_template_view' - , 'permissions' : ( - Permissions.TranslateContent, ) - } - ) - } - - security.declareProtected( Permissions.ModifyPortalContent, 'newCellContent' ) - def newCellContent(self, id): - """ - This method can be overriden - """ - self.invokeFactory(type_name="Set Mapped Value",id=id) - return self.get(id) - - security.declareProtected(Permissions.ModifyPortalContent, '_setMatrixCellRange') - def _setMatrixCellRange(self): - line = self.getCategoryMembershipList('mesure_vetement',base=0) - if len(line) == 0 : - line = [None] - column = self.getCategoryMembershipList('taille',base=0) - if len(column) == 0 : - column = [None] - self._setCellRange(line, column, base_id='mesure_coramy') - # Empty cells if no variation - if line == [[None]] and column == [[None]]: - self.delCells(base_id='mesure_coramy') - # And fix it in case the cells are not renamed (XXX this will be removed in the future) - self._checkConsistency(fixit=1) - - security.declareProtected(Permissions.ModifyPortalContent, 'setMatrixCellRange') - def setMatrixCellRange(self): - """ - Defines the possible variations which taille_client value - variate on and reindex the object - """ - self._setMatrixCellRange() - self.reindexObject() - - security.declareProtected(Permissions.ModifyPortalContent, '_setTailleList') - def _setTailleList(self,value): - self._categorySetTailleList(value) - self._setMatrixCellRange() - - security.declareProtected(Permissions.ModifyPortalContent, '_setMesureVetementList') - def _setMesureVetementList(self,value): - self._categorySetMesureVetementList(value) - self._setMatrixCellRange() - - def _setTitle(self, value): - """ - Here we see that we must define an notion - of priority in the way fields are updated - """ - if value != self.getTitle(): - self.title = value - - security.declareProtected(Permissions.View, 'getTitle') - def getTitle(self): - """ - Returns the title if it exists or a combination of - first name and last name - """ - if self.title == '': - return self.getId() - else: - return self.title - Title = getTitle - - security.declareProtected(Permissions.ModifyPortalContent, 'setTitle') - def setTitle(self, value): - """ - Updates the title if necessary - """ - self._setTitle(value) - self.reindexObject() - - def _StateEtude2Prototype(self): - """ - This method is called by modele_worflow - to update vetement workflow - """ - return 'toto' - - security.declarePublic( 'StateEtude2Prototype' ) - StateEtude2Prototype = WorkflowMethod(_StateEtude2Prototype,id='auto_lancer_prototype') - - def _StateEtude2BaseOk(self): - """ - This method is called by modele_worflow - to update vetement workflow - """ - return 'toto' - - security.declarePublic( 'StateEtude2BaseOk' ) - StateEtude2BaseOk = WorkflowMethod(_StateEtude2BaseOk,id='auto_valider_base') - - def _StateBaseOk2EtudeGrada(self): - """ - This method is called by modele_worflow - to update vetement workflow - """ - return 'toto' - - security.declarePublic( 'StateBaseOk2EtudeGrada' ) - StateBaseOk2EtudeGrada = WorkflowMethod(_StateBaseOk2EtudeGrada,id='auto_etudier_gradation') - - def _StateEtudeGrada2Valide(self): - """ - This method is called by modele_worflow - to update vetement workflow - """ - return 'toto' - - security.declarePublic( 'StateEtudeGrada2Valide' ) - StateEtudeGrada2Valide = WorkflowMethod(_StateEtudeGrada2Valide,id='auto_valider_gradation') - - # Inheritance solving - security.declareProtected(Permissions.ModifyPortalContent, 'checkConsistency') - checkConsistency = XMLMatrix.checkConsistency - - security.declarePrivate('_checkConsistency') - def _checkConsistency(self, fixit=0): - """ - Check the constitency of transformation elements - """ - error_list = XMLMatrix._checkConsistency(self, fixit=fixit) - - # First quantity - # We build an attribute equality and look at all cells - constraint = Constraint.AttributeEquality( - domain_base_category_list = ('mesure_vetement',), - predicate_operator = 'SUPERSET_OF', - mapped_value_property_list = ['mesure_coramy'] ) - for k in self.getCellKeys(base_id = 'mesure_coramy'): - kw={} - kw['base_id'] = 'mesure_coramy' - c = self.getCell(*k, **kw) - if c is not None: - predicate_value = [] - for p in k: - if p is not None: predicate_value += [p] - constraint.edit(predicate_value_list = predicate_value) - if fixit: - error_list += constraint.fixConsistency(c) - else: - error_list += constraint.checkConsistency(c) - - return error_list diff --git a/product/Coramy/Document/__init__.py b/product/Coramy/Document/__init__.py deleted file mode 100755 index e69de29bb2..0000000000 diff --git a/product/Coramy/Extensions/BuildInventory.py b/product/Coramy/Extensions/BuildInventory.py deleted file mode 100755 index 0de8af7b90..0000000000 --- a/product/Coramy/Extensions/BuildInventory.py +++ /dev/null @@ -1,39 +0,0 @@ -# this script creates an inventory for each supplier -# and places all the resource provided by the supplier in this inventory -from DateTime import DateTime -from zLOG import LOG - -def Inventory_buildInventories(self, start_at=0,REQUEST=None): - """ - build inventories - """ - context=self - - inventory_module = context.inventaire_mp - - my_supplier_item_list = context.Resource_getSupplierItemList() - my_supplier_title_list = map(lambda x:x[0], my_supplier_item_list) - - #for supplier in my_supplier_title_list[int(start_at):min(int(start_at)+20,len(my_supplier_title_list))] : - for supplier in my_supplier_title_list: - # create inventory - new_inventory_id = str(inventory_module.generateNewId()) - my_categories = ['destination/site/Stock_MP/Gravelines','destination_section/group/Coramy'] - context.portal_types.constructContent(type_name = 'Inventory MP', - container = inventory_module, - id = new_inventory_id, - description = supplier, - start_date = DateTime(), - categories = my_categories) - inventory = inventory_module[new_inventory_id] - - # create all inventory lines - #try: - # inventory.InventoryMP_massiveAddLine(product_reference_list=[], supplier_list=[supplier]) - #except: - # LOG('Inventory_buildInventories Error',0,'supplier: %s, ERROR ON id: %s' % (str(supplier),new_inventory_id)) - - LOG('Inventory_buildInventories Ok',0,'New inventory created: %s' % str(new_inventory_id)) - get_transaction().commit() - - diff --git a/product/Coramy/Extensions/CodeArticleClient.py b/product/Coramy/Extensions/CodeArticleClient.py deleted file mode 100755 index f02ca87441..0000000000 --- a/product/Coramy/Extensions/CodeArticleClient.py +++ /dev/null @@ -1,85 +0,0 @@ -############################################################################## -# -# Copyright (c) 2003 Nexedi SARL and Contributors. All Rights Reserved. -# Sebastien Robin <seb@nexedi.com> -# -# WARNING: This program as such is intended to be used by professional -# programmers who take the whole responsability of assessing all potential -# consequences resulting from its eventual inadequacies and bugs -# -# This program as such is not intended to be used by end users. End -# users who are looking for a ready-to-use solution with commercial -# garantees and support are strongly adviced to contract a Free Software -# Service Company -# -# This program is Free Software; you can redistribute it and/or -# modify it under the terms of the Zope Public License (ZPL) Version 2.0 -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. -# -############################################################################## - -code_article_client = {} - -def getCodeArticleClient(self) : - """ - Add as extension Amount_getCodeArticleClient - - self -- an amount (movement, delivery line, etc.) - """ - coloris = self.getColoris() - taille = self.getTaille() - morphologie = self.getMorphologie() - resource = self.getResource() - resource_value = self.getResourceValue() - - if resource_value is None: - return '' - else : - variated_reference_list = resource_value.contentValues(filter={'portal_type':'Variated Reference'}) - # we search a variated_reference wich define 'code_article' - my_variated_reference = None - for variated_reference in variated_reference_list : - if len(variated_reference.getMappedValuePropertyList()) <> 0 : - if variated_reference.getMappedValuePropertyList()[0] == 'code_article' : - my_variated_reference = variated_reference - break - - predicate_value = [] - if my_variated_reference is not None : - base_category_list = my_variated_reference.getVariationBaseCategoryList() - if 'coloris' in base_category_list and coloris : - predicate_value.append('coloris/'+coloris) - if 'taille' in base_category_list and taille : - predicate_value.append('taille/'+taille) - if 'morphologie' in base_category_list and morphologie : - predicate_value.append('morphologie/'+morphologie) - predicate_value.sort() - key = tuple([resource] + predicate_value) - if code_article_client.has_key(key): - return code_article_client[key] # This is an infinite cache - - # Build cache - if my_variated_reference is not None : - mapped_value_list = my_variated_reference.objectValues() - # Fill the cache - for cell in mapped_value_list: - predicate_value = [] - for predicate_value_item in cell.getPredicateValueList(): - if predicate_value_item <> 'value' : - predicate_value.append(predicate_value_item) - predicate_value.sort() - new_key = tuple([resource] + predicate_value) - code_article_client[new_key] = cell.getProperty(key='code_article') - else : - return '' - - if code_article_client.has_key(key): - return code_article_client[key] - - return '' - -def getCodeArticleClientKeyList(): - return str(code_article_client.keys()) diff --git a/product/Coramy/Extensions/CodeEan13Client.py b/product/Coramy/Extensions/CodeEan13Client.py deleted file mode 100755 index 52f05030d8..0000000000 --- a/product/Coramy/Extensions/CodeEan13Client.py +++ /dev/null @@ -1,85 +0,0 @@ -############################################################################## -# -# Copyright (c) 2003 Nexedi SARL and Contributors. All Rights Reserved. -# Sebastien Robin <seb@nexedi.com> -# -# WARNING: This program as such is intended to be used by professional -# programmers who take the whole responsability of assessing all potential -# consequences resulting from its eventual inadequacies and bugs -# -# This program as such is not intended to be used by end users. End -# users who are looking for a ready-to-use solution with commercial -# garantees and support are strongly adviced to contract a Free Software -# Service Company -# -# This program is Free Software; you can redistribute it and/or -# modify it under the terms of the Zope Public License (ZPL) Version 2.0 -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. -# -############################################################################## - -code_ean13_client = {} - -def getCodeEan13Client(self) : - """ - Add as extension Amount_getCodeEan13Client - - self -- an amount (movement, delivery line, etc.) - """ - coloris = self.getColoris() - taille = self.getTaille() - morphologie = self.getMorphologie() - resource = self.getResource() - resource_value = self.getResourceValue() - - if resource_value is None: - return '' - else : - variated_reference_list = resource_value.contentValues(filter={'portal_type':'Variated Reference'}) - # we search a variated_reference wich define 'code_ean13' - my_variated_reference = None - for variated_reference in variated_reference_list : - if len(variated_reference.getMappedValuePropertyList()) <> 0 : - if variated_reference.getMappedValuePropertyList()[0] == 'code_ean13' : - my_variated_reference = variated_reference - break - - predicate_value = [] - if my_variated_reference is not None : - base_category_list = my_variated_reference.getVariationBaseCategoryList() - if 'coloris' in base_category_list and coloris : - predicate_value.append('coloris/'+coloris) - if 'taille' in base_category_list and taille : - predicate_value.append('taille/'+taille) - if 'morphologie' in base_category_list and morphologie : - predicate_value.append('morphologie/'+morphologie) - predicate_value.sort() - key = tuple([resource] + predicate_value) - if code_ean13_client.has_key(key): - return code_ean13_client[key] # This is an infinite cache - - # Build cache - if my_variated_reference is not None : - mapped_value_list = my_variated_reference.objectValues() - # Fill the cache - for cell in mapped_value_list: - predicate_value = [] - for predicate_value_item in cell.getPredicateValueList(): - if predicate_value_item <> 'value' : - predicate_value.append(predicate_value_item) - predicate_value.sort() - new_key = tuple([resource] + predicate_value) - code_ean13_client[new_key] = cell.getProperty(key='code_ean13') - else : - return resource_value.getCodeEan13('') - - if code_ean13_client.has_key(key): - return code_ean13_client[key] - - return '' - -def getCodeEan13ClientKeyList(): - return str(code_ean13_client.keys()) diff --git a/product/Coramy/Extensions/CodeModeleClient.py b/product/Coramy/Extensions/CodeModeleClient.py deleted file mode 100755 index f5e67218e2..0000000000 --- a/product/Coramy/Extensions/CodeModeleClient.py +++ /dev/null @@ -1,85 +0,0 @@ -############################################################################## -# -# Copyright (c) 2003 Nexedi SARL and Contributors. All Rights Reserved. -# Sebastien Robin <seb@nexedi.com> -# -# WARNING: This program as such is intended to be used by professional -# programmers who take the whole responsability of assessing all potential -# consequences resulting from its eventual inadequacies and bugs -# -# This program as such is not intended to be used by end users. End -# users who are looking for a ready-to-use solution with commercial -# garantees and support are strongly adviced to contract a Free Software -# Service Company -# -# This program is Free Software; you can redistribute it and/or -# modify it under the terms of the Zope Public License (ZPL) Version 2.0 -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. -# -############################################################################## - -code_modele_client = {} - -def getCodeModeleClient(self) : - """ - Add as extension Amount_getCodeModeleClient - - self -- an amount (movement, delivery line, etc.) - """ - coloris = self.getColoris() - taille = self.getTaille() - morphologie = self.getMorphologie() - resource = self.getResource() - resource_value = self.getResourceValue() - - if resource_value is None: - return '' - else : - variated_reference_list = resource_value.contentValues(filter={'portal_type':'Variated Reference'}) - # we search a variated_reference wich define 'code_modele' - my_variated_reference = None - for variated_reference in variated_reference_list : - if len(variated_reference.getMappedValuePropertyList()) <> 0 : - if variated_reference.getMappedValuePropertyList()[0] == 'code_modele' : - my_variated_reference = variated_reference - break - - predicate_value = [] - if my_variated_reference is not None : - base_category_list = my_variated_reference.getVariationBaseCategoryList() - if 'coloris' in base_category_list and coloris : - predicate_value.append('coloris/'+coloris) - if 'taille' in base_category_list and taille : - predicate_value.append('taille/'+taille) - if 'morphologie' in base_category_list and morphologie : - predicate_value.append('morphologie/'+morphologie) - predicate_value.sort() - key = tuple([resource] + predicate_value) - if code_modele_client.has_key(key): - return code_modele_client[key] # This is an infinite cache - - # Build cache - if my_variated_reference is not None : - mapped_value_list = my_variated_reference.objectValues() - # Fill the cache - for cell in mapped_value_list: - predicate_value = [] - for predicate_value_item in cell.getPredicateValueList(): - if predicate_value_item <> 'value' : - predicate_value.append(predicate_value_item) - predicate_value.sort() - new_key = tuple([resource] + predicate_value) - code_modele_client[new_key] = cell.getProperty(key='code_modele') - else : - return resource_value.getDestinationReference('') - - if code_modele_client.has_key(key): - return code_modele_client[key] - - return resource_value.getDestinationReference('') - -def getCodeModeleClientKeyList(): - return str(code_modele_client.keys()) diff --git a/product/Coramy/Extensions/ColorisClient.py b/product/Coramy/Extensions/ColorisClient.py deleted file mode 100755 index 6e8ba957b5..0000000000 --- a/product/Coramy/Extensions/ColorisClient.py +++ /dev/null @@ -1,110 +0,0 @@ -############################################################################## -# -# Copyright (c) 2003 Nexedi SARL and Contributors. All Rights Reserved. -# Sebastien Robin <seb@nexedi.com> -# -# WARNING: This program as such is intended to be used by professional -# programmers who take the whole responsability of assessing all potential -# consequences resulting from its eventual inadequacies and bugs -# -# This program as such is not intended to be used by end users. End -# users who are looking for a ready-to-use solution with commercial -# garantees and support are strongly adviced to contract a Free Software -# Service Company -# -# This program is Free Software; you can redistribute it and/or -# modify it under the terms of the Zope Public License (ZPL) Version 2.0 -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. -# -############################################################################## - -coloris_client = {} - -def getColorisClient(self) : - """ - Add as extension Amount_getColorisClient - - self -- an amount (movement, delivery line, etc.) - """ - coloris = self.getColoris() - taille = self.getTaille() - morphologie = self.getMorphologie() - resource = self.getResource() - resource_value = self.getResourceValue() - coloris_value = self.getColorisValue() - - if resource_value is None: - return '' - else : - variated_reference_list = resource_value.contentValues(filter={'portal_type':'Variated Reference'}) - # we search a variated_reference wich define 'code_coloris' - my_variated_reference = None - for variated_reference in variated_reference_list : - if len(variated_reference.getMappedValuePropertyList()) <> 0 : - if variated_reference.getMappedValuePropertyList()[0] == 'code_coloris' : - my_variated_reference = variated_reference - break - - predicate_value = [] - if my_variated_reference is not None : - base_category_list = my_variated_reference.getVariationBaseCategoryList() - if 'coloris' in base_category_list and coloris : - predicate_value.append('coloris/'+coloris) - if 'taille' in base_category_list and taille : - predicate_value.append('taille/'+taille) - if 'morphologie' in base_category_list and morphologie : - predicate_value.append('morphologie/'+morphologie) - predicate_value.sort() - key = tuple([resource] + predicate_value) - if coloris_client.has_key(key): - return coloris_client[key] # This is an infinite cache - - # Build cache - if my_variated_reference is not None : - mapped_value_list = my_variated_reference.objectValues() - # Fill the cache - for cell in mapped_value_list: - predicate_value = [] - for predicate_value_item in cell.getPredicateValueList(): - if predicate_value_item <> 'value' : - predicate_value.append(predicate_value_item) - predicate_value.sort() - new_key = tuple([resource] + predicate_value) - coloris_client[new_key] = cell.getProperty(key='code_coloris') - else : - if coloris_value is not None : - if not coloris_value.getDestinationReference() in (None, '') : - return coloris_value.getDestinationReference('') - else : - if coloris is not None : - return coloris.split('/')[-1] - else : - return '' - else : - if coloris is not None : - return coloris.split('/')[-1] - else : - return '' - - if coloris_client.has_key(key): - return coloris_client[key] - - if coloris_value is not None : - if not coloris_value.getDestinationReference() in (None, '') : - return coloris_value.getDestinationReference('') - else : - if coloris is not None : - return coloris.split('/')[-1] - else : - return '' - else : - if coloris is not None : - return coloris.split('/')[-1] - else : - return '' - -def getColorisClientKeyList(): - return str(coloris_client.keys()) diff --git a/product/Coramy/Extensions/ConstructAndSendMail.py b/product/Coramy/Extensions/ConstructAndSendMail.py deleted file mode 100755 index b6054e8080..0000000000 --- a/product/Coramy/Extensions/ConstructAndSendMail.py +++ /dev/null @@ -1,135 +0,0 @@ -############################################################################## -# -# Copyright (c) 2003 Coramy SAS and Contributors. All Rights Reserved. -# Romain Courteaud <Romain_Courteaud@coramy.com> -# -# WARNING: This program as such is intended to be used by professional -# programmers who take the whole responsability of assessing all potential -# consequences resulting from its eventual inadequacies and bugs -# -# This program as such is not intended to be used by end users. End -# users who are looking for a ready-to-use solution with commercial -# garantees and support are strongly adviced to contract a Free Software -# Service Company -# -# This program is Free Software; you can redistribute it and/or -# modify it under the terms of the Zope Public License (ZPL) Version 2.0 -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. -# -############################################################################## - -#http://www.zopera.org/Members/grival/mailavecpiecejointe/view -# http://www.pythonapocrypha.com/Chapter17/Chapter17.shtml - -import StringIO -import MimeWriter -import base64 -import multifile -import mimetools -import mimetypes - -def sendMail(self, mMsg, mTo, mFrom, mSubj, attachmentList=None ): - - # get the mailhost object - try: - mailhost=getattr(self, self.portal_url.superValues('Mail Host')[0].id) - except: - raise AttributeError, "Cannot find a Mail Host object" - else: - - # XXX can t see the message with sylpheed ... - # no attachment means no mime message - #if attachmentList==None: - # mailhost.send(mMsg,mTo,mFrom,mSubj) - - # construct the mime message - #else: - if 1==1: - # Create multi-part MIME message. - message = StringIO.StringIO() - writer = MimeWriter.MimeWriter(message) - - writer.addheader('From', mFrom) - writer.addheader('To', mTo) - writer.addheader('Subject', mSubj) - writer.addheader('MimeVersion', '1.0') - # Don't forget to flush the headers for Communicator - writer.flushheaders() - # Generate a unique section boundary: - outer_boundary=mimetools.choose_boundary() - - # Start the main message body. Write a brief message - # for non-MIME-capable readers: - dummy_file=writer.startmultipartbody("mixed",outer_boundary) - dummy_file.write("If you can read this, your mailreader\n") - dummy_file.write("can not handle multi-part messages!\n") - #dummy_file.write("This is a multi-part message in MIME format.\n") - - submsg = writer.nextpart() - submsg.addheader("Content-Transfer-Encoding", "7bit") - FirstPartFile=submsg.startbody("text/plain", [("charset","US-ASCII")]) - FirstPartFile.write(mMsg) - - - - if attachmentList!=None: - # attachment: { 'name': , 'content': , 'mime_type': } - for attachment in attachmentList: - - if attachment.has_key('name'): - attachment_name = attachment['name'] - else: - attachment_name = '' - - # try to guess the mime type - if not attachment.has_key('mime_type'): - type, encoding = mimetypes.guess_type( attachment_name ) - - if type != None: - attachment['mime_type'] = type - else: - attachment['mime_type'] = 'application/octet-stream' - - - - - # attach it - submsg = writer.nextpart() - - if attachment['mime_type'] == 'text/plain': - attachment_file = StringIO.StringIO( attachment['content'] ) - - submsg.addheader("Content-Transfer-Encoding", "7bit") - submsg.addheader("Content-Disposition", "attachment;\nfilename="+attachment_name) - submsg.flushheaders() - - f = submsg.startbody(attachment['mime_type'] , [("name", attachment_name)]) - f.write(attachment_file.getvalue()) - - else: - # encode non-plaintext attachment in base64 - attachment_file = StringIO.StringIO( attachment['content'] ) - submsg.addheader("Content-Transfer-Encoding", "base64") - submsg.flushheaders() - - f = submsg.startbody(attachment['mime_type'] , [("name", attachment_name)]) - base64.encode(attachment_file, f) - - # close the writer - writer.lastpart() - - # send mail to user - mailhost.send(message.getvalue(),mTo,mFrom) - - return None - - - - - - - - diff --git a/product/Coramy/Extensions/DelAttr.py b/product/Coramy/Extensions/DelAttr.py deleted file mode 100755 index f06895f8c1..0000000000 --- a/product/Coramy/Extensions/DelAttr.py +++ /dev/null @@ -1,4 +0,0 @@ -def deleteAttribute(self, id=None): - if id is not None: - delattr(self, id) - diff --git a/product/Coramy/Extensions/ExportEdiAuchan.py b/product/Coramy/Extensions/ExportEdiAuchan.py deleted file mode 100755 index 3de74a4b53..0000000000 --- a/product/Coramy/Extensions/ExportEdiAuchan.py +++ /dev/null @@ -1,76 +0,0 @@ -############################################################################## -# -# Copyright (c) 2003 Coramy SAS and Contributors. All Rights Reserved. -# Romain Courteaud <Romain_Courteaud@coramy.com> -# -# WARNING: This program as such is intended to be used by professional -# programmers who take the whole responsability of assessing all potential -# consequences resulting from its eventual inadequacies and bugs -# -# This program as such is not intended to be used by end users. End -# users who are looking for a ready-to-use solution with commercial -# garantees and support are strongly adviced to contract a Free Software -# Service Company -# -# This program is Free Software; you can redistribute it and/or -# modify it under the terms of the Zope Public License (ZPL) Version 2.0 -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. -# -############################################################################## - -import os,string -from os import access,W_OK - -# We first should look to the export folder -base_directory_path = '/mnt/edi' -export_directory_path = os.path.join(base_directory_path, 'Depart') - -def exportEdiAuchanFile(self, user_name=None, ending_mail=0): - import os, string - from os import access,W_OK - - file_name = 'exportEdiAuchan_' + self.getId() + '.env' - file_path = os.path.join(export_directory_path, file_name) - - try: - resultTmp = self.SalesPackingList_exportEdiAuchan( batch_mode=1 ) - except: - self.Coramy_sendMailToUser(user_name=user_name,mSubj="Erreur d exécution, export Edi annulé",mMsg=file_path) - else: - - try: - # open the file - file = open( file_path , 'w') - except: - self.Coramy_sendMailToUser(user_name=user_name,mSubj="Impossible d ouvrir le fichier Edi : contactez Romain",mMsg=file_path) - - try: - # export the file - file.write( resultTmp ) - except: - self.Coramy_sendMailToUser(user_name=user_name,mSubj="Impossible d écrire le fichier Edi : contactez Romain",mMsg=file_path) - - try: - # close - file.close() - except: - self.Coramy_sendMailToUser(user_name=user_name,mSubj="Impossible de fermer le fichier Edi : contactez Romain",mMsg=file_path) - - if ending_mail: - mMsg = '' - self.Coramy_sendMailToUser(user_name=user_name,mSubj="Export de l edi Auchan terminé",mMsg=mMsg) - - -""" -test the directory -""" -def exportEdiAuchanTestDirectory(self ): - import os, string - from os import access,W_OK - - # test the directory - return access(export_directory_path, W_OK) - diff --git a/product/Coramy/Extensions/ImportEdiFileList.py b/product/Coramy/Extensions/ImportEdiFileList.py deleted file mode 100755 index d0537f7840..0000000000 --- a/product/Coramy/Extensions/ImportEdiFileList.py +++ /dev/null @@ -1,140 +0,0 @@ -############################################################################## -# -# Copyright (c) 2003 Coramy SAS and Contributors. All Rights Reserved. -# Romain Courteaud <Romain_Courteaud@coramy.com> -# -# WARNING: This program as such is intended to be used by professional -# programmers who take the whole responsability of assessing all potential -# consequences resulting from its eventual inadequacies and bugs -# -# This program as such is not intended to be used by end users. End -# users who are looking for a ready-to-use solution with commercial -# garantees and support are strongly adviced to contract a Free Software -# Service Company -# -# This program is Free Software; you can redistribute it and/or -# modify it under the terms of the Zope Public License (ZPL) Version 2.0 -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. -# -############################################################################## - -import os, string -from DateTime import DateTime -from ZPublisher.HTTPRequest import FileUpload -from cgi import FieldStorage -from os import access,W_OK - -# We first should look to the import folder -base_directory_path = '/mnt/edi' -import_directory_path = os.path.join(base_directory_path, 'Arrivee') - -#if not os.path.exists(import_directory_path ): -# os.mkdir( import_directory_path ) - - -def importEdiFile(self, file_path=None, delivery_mode=None, incoterm=None, order_type=None, segmentation_strategique=None, travel_duration=None, user_name=None): - import os, string - from DateTime import DateTime - from ZPublisher.HTTPRequest import FileUpload - from cgi import FieldStorage - from os import access,W_OK - - - try: - # open the file - file = open( file_path , 'r') - except: - self.Coramy_sendMailToUser(user_name=user_name,mSubj="Impossible d ouvrir le fichier Edi",mMsg=file_path) - - try: - # create the correct parameter - form=FieldStorage() - form.filename = file_path - form.file = file - import_file = FileUpload(form) - except: - self.Coramy_sendMailToUser(user_name=user_name,mSubj="Impossible de lire le fichier Edi",mMsg=file_path) - - else: - - if access(file_path, W_OK): - try: - - # import the file - resultTmp = self.SalesOrder_importEdi(import_file=import_file, delivery_mode=delivery_mode, incoterm=incoterm, order_type=order_type, segmentation_strategique=segmentation_strategique, travel_duration=travel_duration, batch_mode=1,user_name=user_name) - - except: - self.Coramy_sendMailToUser(user_name=user_name,mSubj="Erreur d execution, import Edi annulé",mMsg=file_path) - else: - # test the result - file.close() - if resultTmp[1] == None: - self.Coramy_sendMailToUser(user_name=user_name,mSubj="Fichier non valide, import Edi annulé",mMsg=file_path) - else: - #self.Coramy_sendMailToUser(user_name=user_name,mSubj="Import réussi",mMsg=resultTmp[0]) - #get_transaction().commit() - os.remove(file_path) - - - else: - file.close() - self.Coramy_sendMailToUser(user_name=user_name,mSubj="Impossible d effacer le fichier Edi, import annulé",mMsg=file_path) - -""" -test the directory and creation of all the messages -""" -def importEdiFileListTestAndStart(self, delivery_mode=None, incoterm=None, order_type=None, segmentation_strategique=None, travel_duration=None, user_name=None ): - import os, string - from DateTime import DateTime - from ZPublisher.HTTPRequest import FileUpload - from cgi import FieldStorage - from os import access,W_OK - - # test the directory - if access(import_directory_path, W_OK): - #self.Coramy_sendMailToUser(user_name=user_name,mSubj="Lancement de l import en masse ",mMsg=import_directory_path) - - files_list = os.listdir(import_directory_path) - - for file_name in files_list: - file_path = os.path.join(import_directory_path, file_name) - - self.activate(activity="SQLQueue", priority=4).SalesOrder_importEdiFile(file_path=file_path, delivery_mode=delivery_mode, incoterm=incoterm, order_type=order_type, segmentation_strategique=segmentation_strategique, travel_duration=travel_duration, user_name=user_name ) - - - else: - self.Coramy_sendMailToUser(user_name=user_name,mSubj="Impossible d ecrire sur le repertoire d import, import annule",mMsg=import_directory_path) - -""" -this allows to import many edi files at the same time -no more used -""" -""" -def importEdiFileList(self, REQUEST,file_path=None, delivery_mode=None, incoterm=None, order_type=None, segmentation_strategique=None, travel_duration=None, batch_mode=0): - - user_name = self.portal_membership.getAuthenticatedMember().getUserName() - # test the directory - # can't be good, because this test is done on TinyLeon, and the message is done on SumicomA - if access(import_directory_path, W_OK): - - files_list = os.listdir(import_directory_path) - - for file_name in files_list: - file_path = os.path.join(import_directory_path, file_name) - - self.activate(activity="SQLQueue").SalesOrder_importEdiFile(file_path=file_path, delivery_mode=delivery_mode, incoterm=incoterm, order_type=order_type, segmentation_strategique=segmentation_strategique, travel_duration=travel_duration, user_name=user_name ) - - redirect_url = '%s?%s' % ( self.absolute_url()+'/'+'view', 'portal_status_message=Import+des+fichiers+EDI+lancé.') - - else: - redirect_url = '%s?%s%s' % ( self.absolute_url()+'/'+'view', "portal_status_message=Annulation:+impossible+d+écrire+sur+le+répertoire+d'import+",import_directory_path) - - - if batch_mode: - return None - else: - REQUEST[ 'RESPONSE' ].redirect( redirect_url ) -""" diff --git a/product/Coramy/Extensions/ImportEdiFiles.py b/product/Coramy/Extensions/ImportEdiFiles.py deleted file mode 100755 index 59002cab0c..0000000000 --- a/product/Coramy/Extensions/ImportEdiFiles.py +++ /dev/null @@ -1,147 +0,0 @@ -############################################################################## -# -# Copyright (c) 2003 Coramy SAS and Contributors. All Rights Reserved. -# Romain Courteaud <Romain_Courteaud@coramy.com> -# -# WARNING: This program as such is intended to be used by professional -# programmers who take the whole responsability of assessing all potential -# consequences resulting from its eventual inadequacies and bugs -# -# This program as such is not intended to be used by end users. End -# users who are looking for a ready-to-use solution with commercial -# garantees and support are strongly adviced to contract a Free Software -# Service Company -# -# This program is Free Software; you can redistribute it and/or -# modify it under the terms of the Zope Public License (ZPL) Version 2.0 -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. -# -############################################################################## - -import os, string -from DateTime import DateTime -from ZPublisher.HTTPRequest import FileUpload -from cgi import FieldStorage -from os import access,W_OK - -# We first should look to the import folder -base_directory_path = '/mnt/edi' -import_directory_path = os.path.join(base_directory_path, 'Arrivee') -log_directory_path = base_directory_path - -if not os.path.exists(import_directory_path ): - os.mkdir( import_directory_path ) -if not os.path.exists(log_directory_path ): - os.mkdir( log_directory_path ) - - -def importEdiFile(object=None, file_path=None, delivery_mode=None, incoterm=None, order_type=None, segmentation_strategique=None, travel_duration=None): - - resultTab = [] - - result = '' - result = result + '\n--------------------------------------------\n' - result = result + file_path + '\n' - result = result + DateTime().strftime("%a, %Y %B %d %H:%M:%S") - - if access(file_path, W_OK): - - # open the file - file = open( file_path , 'r') - - # create the correct parameter - form=FieldStorage() - form.filename = file_path - form.file = file - import_file = FileUpload(form) - - # import the file - resultTmp = object.SalesOrder_importEdi(import_file=import_file, delivery_mode=delivery_mode, incoterm=incoterm, order_type=order_type, segmentation_strategique=segmentation_strategique, travel_duration=travel_duration, batch_mode=1) - - file.close() - - # test the result - #if resultTmp == None: - get_transaction().commit() - if resultTmp[1] == None: - result = result + '\n' + 'Fichier non valide\n' - resultTab += [(0,result,None)] - else: - result = result + '\n' + resultTmp[1] - os.remove(file_path) - #resultTab += [(1,result)] - resultTab += [(1,result,resultTmp[0])] - - - else: - result += '\nPas d acces en ecriture\n' - resultTab += [(0,result,None)] - - - return resultTab - - -""" -this allows to import many edi files by the same time -""" -def importEdiFileList(self, REQUEST,file_path=None, delivery_mode=None, incoterm=None, order_type=None, segmentation_strategique=None, travel_duration=None, batch_mode=0): - - result = '' - result += '############################################################################## \n' - result += 'Tentative d import\n'+ DateTime().strftime("%a, %Y %B %d %H:%M:%S")+'\n' - result += '############################################################################## \n' - - edi_files_number = 0 - uid_list = [] - - # test the log file - if access(log_directory_path, W_OK): - - files_list = os.listdir(import_directory_path) - - - tab = [] - - for file_name in files_list: - file_path = os.path.join(import_directory_path, file_name) - - tab += importEdiFile(object=self, file_path=file_path, delivery_mode=delivery_mode, incoterm=incoterm, order_type=order_type, segmentation_strategique=segmentation_strategique, travel_duration=travel_duration ) - - - - for comment in tab: - if comment[0]: - edi_files_number += 1 - result += comment[1] - if comment[2] != None: - uid_list.append(comment[2]) - - # write the log file - log_path = os.path.join(log_directory_path, 'importEdiERP5.log') # C'est mal XXX - il y a LOG de Zope, le mail ou solution CMFActivity - # Ce n'est pas compatible avec du multi utilisateur - log_file = open(log_path,'a') - log_file.write(result) - """ - log_file.write('UID:\n') - for uid in uid_list: - if uid == None: - log_file.write('None\n') - else: - log_file.write('%i\n' % uid) - """ - log_file.close() - - else: - result += 'Ne peut ecrire le fichier de log\n' - - - if batch_mode: - return result - else: - self.flushActivity(invoke=1) - self.portal_selections.setSelectionToIds('sales_order_selection', uid_list, REQUEST=self.REQUEST) - redirect_url = '%s?%s%i%s' % ( self.absolute_url()+'/'+'view', 'portal_status_message=',edi_files_number ,' Fichiers+EDI+importés.') - REQUEST[ 'RESPONSE' ].redirect( redirect_url ) diff --git a/product/Coramy/Extensions/ImportExportSkins.py b/product/Coramy/Extensions/ImportExportSkins.py deleted file mode 100755 index 75af3df9cf..0000000000 --- a/product/Coramy/Extensions/ImportExportSkins.py +++ /dev/null @@ -1,19 +0,0 @@ -# Import Export - -from Products.ERP5.Extensions.ImportExportSkins import importSkins -from Products.ERP5.Extensions.ImportExportSkins import exportSkins - -fs_skin_ids = ('coramy_custom','coramy_trade', 'coramy_crm', 'coramy_manufacturing', - 'coramy_pdm','coramy_erp5','coramy_list_method','coramy_mrp') -fs_skin_dir = '/var/lib/zope/Products/Coramy/skins' -zodb_skin_ids = ('local_custom','local_trade', 'local_crm', 'local_manufacturing', - 'local_pdm','local_erp5','local_list_method','local_mrp') - -def importCoramySkins(self, REQUEST=None): - return importSkins(self, REQUEST=REQUEST, fs_skin_ids=fs_skin_ids, \ - zodb_skin_ids=zodb_skin_ids, \ - fs_skin_dir=fs_skin_dir) -def exportCoramySkins(self, REQUEST=None): - return exportSkins(self, REQUEST=REQUEST, fs_skin_ids=fs_skin_ids, \ - zodb_skin_ids=zodb_skin_ids, \ - fs_skin_dir=fs_skin_dir) diff --git a/product/Coramy/Extensions/ItemStat.py b/product/Coramy/Extensions/ItemStat.py deleted file mode 100755 index 20446d10da..0000000000 --- a/product/Coramy/Extensions/ItemStat.py +++ /dev/null @@ -1,17 +0,0 @@ -def getAvailableItemStat(self, **kw): - result = self.PieceTissu_zGetAvailableItemList(**kw) - if len(result) > 100: - return "Trop de pièces" - remaining_quantity = 0.0 - for m in result: - o = m.getObject() - if o is not None: - remaining_quantity += o.getRemainingQuantity() - - class r: - pass - - ri = r() - ri.getRemainingQuantity = remaining_quantity - - return [ri] diff --git a/product/Coramy/Extensions/MigrateContent.py b/product/Coramy/Extensions/MigrateContent.py deleted file mode 100755 index ffc350c664..0000000000 --- a/product/Coramy/Extensions/MigrateContent.py +++ /dev/null @@ -1,120 +0,0 @@ -############################################################################## -# -# Base18: a Zope product which provides multilingual services for CMF Default -# documents. -# -# Copyright (c) 2001 Zope Corporation and Contributors. All Rights Reserved. -# Copyright (c) 2002 Nexedi SARL and Contributors. All Rights Reserved. -# Sebastien Robin <seb@nexedi.com> -# -# WARNING: This program as such is intended to be used by professional -# programmers who take the whole responsability of assessing all potential -# consequences resulting from its eventual inadequacies and bugs -# -# This program as such is not intended to be used by end users. End -# users who are looking for a ready-to-use solution with commercial -# garantees and support are strongly adviced to contract a Free Software -# Service Company -# -# This program is Free Software; you can redistribute it and/or -# modify it under the terms of the Zope Public License (ZPL) Version 2.0 -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. -# -############################################################################## - -""" - Converts ERP5 Set Mapped Value to Coramy SetMappedValue. -""" - -# Source -import Products.ERP5.Document.SetMappedValue - -# Destination -import Products.Coramy.Document.SetMappedValue - -# -import re -from zLOG import LOG - -################################################################################## -# This is a set of methods in order to upgrade ERP5 Mapped Value to Coramy's one # -################################################################################## - -def test_before(object): - return 1 - -def test_after(object): - - message = None - # check if aq_base content the attribute 'quantity' is a float - if hasattr(object, 'quantity'): - quantity = object.getQuantity() - if type(quantity) is not type(0.0): - message = 'object is now a %s but XXX quantity is not a float XXX' % object.__class__ - - # if it's a variation, check if there's a definition of color and colory - - if message is None: - message = 'object is now a %s' % object.__class__ - return [(object.getRelativeUrl(), 'upgradeSetMappedValue',102,message)] - -def upgradeSetMappedValue(REQUEST): - """ - Folder needs to be updated in order to take into account - changes of classes and in particular meta_type - """ - #portal_root = getToolByName(self, 'portal_url').getPortalObject() - container = REQUEST.PARENTS[0] - from_class = Products.ERP5.Document.SetMappedValue.SetMappedValue - to_class = Products.Coramy.Document.SetMappedValue.SetMappedValue - return container.upgradeObjectClass(test_before=test_before, from_class=from_class,\ - to_class=to_class, test_after=test_after) - -################################################################################## -# This is a set of methods in order to update default_base_price to base_price # -################################################################################## - -def filter_base_price(object): - object = object.aq_base - #if object.id!='K4011': - # return None - if getattr(object, 'default_base_price', 0.0)!=0.0 and getattr(object, 'base_price',None)==None: - return 1 - elif getattr(object, 'default_additionnal_base_price',0.0)!=0.0 and getattr(object, 'additionnal_base_price',None)==None: - return 1 - else: - return None - -def test_after_base_price(object): - base_object = object.aq_base - message = None - result = [] - if getattr(base_object, 'base_price',0.0)!=0.0: - message = 'object have now an base_price : %s' % str(getattr(base_object,'base_price')) - result += [(object.getRelativeUrl(), 'upgradeDefaultBasePrice',102,message)] - if getattr(base_object, 'additional_price',0.0)!=0.0: - message = 'object have now an additional_price : %s' % \ - str(getattr(base_object,'additional_price')) - result += [(object.getRelativeUrl(), 'upgradeDefaultBasePrice',102,message)] - return result - -def method_base_price(object): - object = object.aq_base - default_base_price = getattr(object, 'default_base_price', 0.0) - if default_base_price != 0.0: - setattr(object, 'base_price', default_base_price) - default_additional_price = getattr(object, 'default_additional_price', 0.0) - if default_additional_price != 0.0: - setattr(object, 'additional_price', default_additional_price) - -def upgradeDefaultBasePrice(REQUEST): - """ - Folder needs to be updated in order to take into account - changes of classes and in particular meta_type - """ - container = REQUEST.PARENTS[0] - return container.updateAll(filter=filter_base_price, method=method_base_price, - test_after=test_after_base_price) diff --git a/product/Coramy/Extensions/PrinterOutput.py b/product/Coramy/Extensions/PrinterOutput.py deleted file mode 100755 index e327746ada..0000000000 --- a/product/Coramy/Extensions/PrinterOutput.py +++ /dev/null @@ -1,26 +0,0 @@ -import sys - -def sendRawToCups(self, printer_name, raw_string, number_copies=1): - """ - Send ouput to printer as raw string - """ - if sys.platform == 'win32': - # No idea what to do at this point - pass - else: - from popen2 import popen2 - import tempfile - tempdir = tempfile.tempdir - tempfile.tempdir = '/tmp' - newraw_path = tempfile.mktemp(suffix='.cups' ) - f = open(newraw_path, 'w') - f.write(raw_string) - f.close() - tempfile.tempdir = tempdir - imgout, imgin = popen2('lp -h 192.1.2.5 -d %s -n %i %s' - % (printer_name, number_copies, newraw_path)) - imgin.write('') - imgin.close() - imgout.read() - imgout.close() - diff --git a/product/Coramy/Extensions/PrixAchatFournisseur.py b/product/Coramy/Extensions/PrixAchatFournisseur.py deleted file mode 100755 index b723363b82..0000000000 --- a/product/Coramy/Extensions/PrixAchatFournisseur.py +++ /dev/null @@ -1,100 +0,0 @@ -############################################################################## -# -# Copyright (c) 2003 Nexedi SARL and Contributors. All Rights Reserved. -# Sebastien Robin <seb@nexedi.com> -# -# WARNING: This program as such is intended to be used by professional -# programmers who take the whole responsability of assessing all potential -# consequences resulting from its eventual inadequacies and bugs -# -# This program as such is not intended to be used by end users. End -# users who are looking for a ready-to-use solution with commercial -# garantees and support are strongly adviced to contract a Free Software -# Service Company -# -# This program is Free Software; you can redistribute it and/or -# modify it under the terms of the Zope Public License (ZPL) Version 2.0 -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. -# -############################################################################## - -source_price_dict = {} - -def getSupplierPrice(self) : - """ - Add as extension Amount_getSupplierPrice - - self -- an amount (movement, delivery line, etc.) - """ - try : - coloris = self.getColoris() - except : - coloris = None - try : - variante = self.getVariante() - except : - variante = None - try : - resource = self.getResource() - resource_value = self.getResourceValue() - except : - resource = None - resource_value = None - - if resource_value is None: - return 0 - else : - # source price is defined on resource or on variation - predicate_value = [] - if resource_value is not None : - base_category_list = resource_value.getVariationBaseCategoryList() - if 'coloris' in base_category_list and coloris : - predicate_value.append('coloris/'+coloris) - if 'variante' in base_category_list and variante : - predicate_value.append('variante/'+variante) - predicate_value.sort() - key = tuple([resource] + predicate_value) - if source_price_dict.has_key(key): - return source_price_dict[key] # This is an infinite cache - - # Build cache - if resource_value is not None : - supplier_price = resource_value.getSourceBasePrice() - variation_list = resource_value.contentValues(filter={'portal_type':['Variante Tissu','Variante Composant']}) - if supplier_price is None : - supplier_price = 0 - root_supplier_price = supplier_price - priced_quantity = resource_value.getPricedQuantity() - if priced_quantity not in (None, 0, 1) : - supplier_price = supplier_price / priced_quantity - new_key = tuple([resource]) - source_price_dict[new_key] = supplier_price - # Fill the cache - for variation in variation_list: - if variation.getSourceBasePrice() not in (None, 0) : - supplier_price = variation.getSourceBasePrice() - else : - supplier_price = root_supplier_price - if variation.getPortalType() == 'Variante Tissu' : - predicate_value = ['coloris/' + variation.getRelativeUrl()] - elif variation.getPortalType() == 'Variante Composant' : - predicate_value = ['variante/' + variation.getRelativeUrl()] - else : - prediacte_value = [] - if priced_quantity not in (None, 0, 1) : - supplier_price = supplier_price / priced_quantity - new_key = tuple([resource] + predicate_value) - source_price_dict[new_key] = supplier_price - else : - return 0 - - if source_price_dict.has_key(key): - return source_price_dict[key] - - return 0 - -def getSupplierPriceKeyList(): - return str(source_price_dict.keys()) diff --git a/product/Coramy/Extensions/PrixConsommateur.py b/product/Coramy/Extensions/PrixConsommateur.py deleted file mode 100755 index 2b2a08e476..0000000000 --- a/product/Coramy/Extensions/PrixConsommateur.py +++ /dev/null @@ -1,85 +0,0 @@ -############################################################################## -# -# Copyright (c) 2003 Nexedi SARL and Contributors. All Rights Reserved. -# Sebastien Robin <seb@nexedi.com> -# -# WARNING: This program as such is intended to be used by professional -# programmers who take the whole responsability of assessing all potential -# consequences resulting from its eventual inadequacies and bugs -# -# This program as such is not intended to be used by end users. End -# users who are looking for a ready-to-use solution with commercial -# garantees and support are strongly adviced to contract a Free Software -# Service Company -# -# This program is Free Software; you can redistribute it and/or -# modify it under the terms of the Zope Public License (ZPL) Version 2.0 -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. -# -############################################################################## - -prix_consommateur = {} - -def getPrixConsommateur(self) : - """ - Add as extension Amount_getPrixConsommateur - - self -- an amount (movement, delivery line, etc.) - """ - coloris = self.getColoris() - taille = self.getTaille() - morphologie = self.getMorphologie() - resource = self.getResource() - resource_value = self.getResourceValue() - - if resource_value is None: - return '0' - else : - variated_reference_list = resource_value.contentValues(filter={'portal_type':'Variated Reference'}) - # we search a variated_reference wich define 'code_ean13' - my_variated_reference = None - for variated_reference in variated_reference_list : - if len(variated_reference.getMappedValuePropertyList()) <> 0 : - if variated_reference.getMappedValuePropertyList()[0] == 'prix_consommateur' : - my_variated_reference = variated_reference - break - - predicate_value = [] - if my_variated_reference is not None : - base_category_list = my_variated_reference.getVariationBaseCategoryList() - if 'coloris' in base_category_list and coloris : - predicate_value.append('coloris/'+coloris) - if 'taille' in base_category_list and taille : - predicate_value.append('taille/'+taille) - if 'morphologie' in base_category_list and morphologie : - predicate_value.append('morphologie/'+morphologie) - predicate_value.sort() - key = tuple([resource] + predicate_value) - if prix_consommateur.has_key(key): - return prix_consommateur[key] # This is an infinite cache - - # Build cache - if my_variated_reference is not None : - mapped_value_list = my_variated_reference.objectValues() - # Fill the cache - for cell in mapped_value_list: - predicate_value = [] - for predicate_value_item in cell.getPredicateValueList(): - if predicate_value_item <> 'value' : - predicate_value.append(predicate_value_item) - predicate_value.sort() - new_key = tuple([resource] + predicate_value) - prix_consommateur[new_key] = cell.getProperty(key='prix_consommateur') - else : - return '0' - - if prix_consommateur.has_key(key): - return prix_consommateur[key] - - return '0' - -def getPrixConsommateurKeyList(): - return str(prix_consommateur.keys()) diff --git a/product/Coramy/Extensions/PrixRevientIndustriel.py b/product/Coramy/Extensions/PrixRevientIndustriel.py deleted file mode 100755 index f4ecae263e..0000000000 --- a/product/Coramy/Extensions/PrixRevientIndustriel.py +++ /dev/null @@ -1,75 +0,0 @@ -############################################################################## -# -# Copyright (c) 2003 Nexedi SARL and Contributors. All Rights Reserved. -# Sebastien Robin <seb@nexedi.com> -# -# WARNING: This program as such is intended to be used by professional -# programmers who take the whole responsability of assessing all potential -# consequences resulting from its eventual inadequacies and bugs -# -# This program as such is not intended to be used by end users. End -# users who are looking for a ready-to-use solution with commercial -# garantees and support are strongly adviced to contract a Free Software -# Service Company -# -# This program is Free Software; you can redistribute it and/or -# modify it under the terms of the Zope Public License (ZPL) Version 2.0 -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. -# -############################################################################## - -pri_dict = {} - -def getPri(self) : - """ - Add as extension Amount_getPri - - self -- an amount (movement, delivery line, etc.) - """ - coloris = self.getColoris() - taille = self.getTaille() - morphologie = self.getMorphologie() - resource = self.getResource() - resource_value = self.getResourceValue() - - if resource_value is None: - return 0 - else : - # pri is defined on each resource - predicate_value = [] - if resource_value is not None : - base_category_list = resource_value.getVariationBaseCategoryList() - if 'coloris' in base_category_list and coloris : - predicate_value.append('coloris/'+coloris) - if 'taille' in base_category_list and taille : - predicate_value.append('taille/'+taille) - predicate_value.sort() - key = tuple([resource] + predicate_value) - if pri_dict.has_key(key): - return pri_dict[key] # This is an infinite cache - - # Build cache - if resource_value is not None : - mapped_value_list = resource_value.contentValues(filter={'portal_type':'Set Mapped Value'}) - # Fill the cache - for cell in mapped_value_list: - predicate_value = [] - for predicate_value_item in cell.getPredicateValueList(): - if predicate_value_item <> 'value' : - predicate_value.append(predicate_value_item) - predicate_value.sort() - new_key = tuple([resource] + predicate_value) - pri_dict[new_key] = cell.getProperty(key='pri') - else : - return 0 - - if pri_dict.has_key(key): - return pri_dict[key] - - return 0 - -def getPriKeyList(): - return str(pri_dict.keys()) diff --git a/product/Coramy/Extensions/QuickCosting.py b/product/Coramy/Extensions/QuickCosting.py deleted file mode 100755 index 859743b89d..0000000000 --- a/product/Coramy/Extensions/QuickCosting.py +++ /dev/null @@ -1,13 +0,0 @@ -def getQuickCostingStat(self, **kw): - result = self.Transformation_quickCostingListBuilder(stat_mode=1,**kw) - total = 0 - for m in result: - total += m.transformed_total_price - - class r: - pass - - ri = r() - ri.transformed_total_price = total - - return [ri] diff --git a/product/Coramy/Extensions/TailleClient.py b/product/Coramy/Extensions/TailleClient.py deleted file mode 100755 index ce989bcb49..0000000000 --- a/product/Coramy/Extensions/TailleClient.py +++ /dev/null @@ -1,87 +0,0 @@ -############################################################################## -# -# Copyright (c) 2003 Nexedi SARL and Contributors. All Rights Reserved. -# Sebastien Robin <seb@nexedi.com> -# -# WARNING: This program as such is intended to be used by professional -# programmers who take the whole responsability of assessing all potential -# consequences resulting from its eventual inadequacies and bugs -# -# This program as such is not intended to be used by end users. End -# users who are looking for a ready-to-use solution with commercial -# garantees and support are strongly adviced to contract a Free Software -# Service Company -# -# This program is Free Software; you can redistribute it and/or -# modify it under the terms of the Zope Public License (ZPL) Version 2.0 -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. -# -############################################################################## - -taille_client = {} - -def getTailleClient(self) : - """ - Add as extension Amount_getTailleClient - - self -- an amount (movement, delivery line, etc.) - """ - coloris = self.getColoris() - taille = self.getTaille() - morphologie = self.getMorphologie() - resource = self.getResource() - resource_value = self.getResourceValue() - try : - morpho_type = self.getMorphologieValue().getMorphoType() - except : - morpho_type = None - - if resource_value is None: - if taille is not None : - return taille.split('/')[-1] - else : - return '' - else : - correspondance_taille = resource_value.getSpecialiseValue(portal_type=['Correspondance Tailles']) - predicate_value = [] - if correspondance_taille is not None: - if len(correspondance_taille.getTailleList())>0 and taille : - predicate_value.append(taille) - if len(correspondance_taille.getMorphoTypeList())>0 and morphologie : - predicate_value.append(morpho_type) - predicate_value.sort() - key = tuple([resource] + predicate_value) - if taille_client.has_key(key): - return taille_client[key] # This is an infinite cache - - # Build cache - if correspondance_taille is not None: - mapped_value_list = correspondance_taille.objectValues() - # Fill the cache - for cell in mapped_value_list: - predicate_value = [] - for predicate_value_item in cell.getPredicateValueList(): - if predicate_value_item <> 'value' : - predicate_value.append(predicate_value_item) - predicate_value.sort() - new_key = tuple([resource] + predicate_value) - taille_client[new_key] = cell.getProperty(key='taille_client') - else : - if taille is not None : - return taille.split('/')[-1] - else : - return '' - - if taille_client.has_key(key): - return taille_client[key] - - if taille is not None : - return taille.split('/')[-1] - else : - return '' - -def getTailleClientKeyList(): - return str(taille_client.keys()) diff --git a/product/Coramy/Extensions/TestBuildInventory.py b/product/Coramy/Extensions/TestBuildInventory.py deleted file mode 100755 index 0045a07977..0000000000 --- a/product/Coramy/Extensions/TestBuildInventory.py +++ /dev/null @@ -1,32 +0,0 @@ -# this script creates an inventory for each supplier -# and places all the resource provided by the supplier in this inventory -from DateTime import DateTime -from zLOG import LOG - -def Inventory_testBuildInventories(self, item=0,REQUEST=None): - """ - build inventories - """ - context=self - - inventory_module = context.inventaire_mp - - my_supplier_item_list = context.Resource_getSupplierItemList() - my_supplier_title_list = map(lambda x:x[0], my_supplier_item_list) - - LOG('testBuildInventories',0,'supplier: %s' % str(my_supplier_title_list[item])) - for supplier in my_supplier_title_list[item] : - # create inventory - new_inventory_id = str(inventory_module.generateNewId()) - my_categories = ['destination/site/Stock_MP/Gravelines','destination_section/group/Coramy'] - context.portal_types.constructContent(type_name = 'Inventory MP', - container = inventory_module, - id = new_inventory_id, - description = supplier, - start_date = DateTime(), - categories = my_categories) - inventory = inventory_module[new_inventory_id] - - # create all inventory lines - inventory.InventoryMP_fastAddLine(product_reference_list=[], supplier_list=[supplier]) - diff --git a/product/Coramy/Extensions/UpdateQuantityUnit.py b/product/Coramy/Extensions/UpdateQuantityUnit.py deleted file mode 100755 index 263e4cf210..0000000000 --- a/product/Coramy/Extensions/UpdateQuantityUnit.py +++ /dev/null @@ -1,66 +0,0 @@ -############################################################################## -# -# Copyright (c) 2003 Nexedi SARL and Contributors. All Rights Reserved. -# Sebastien Robin <seb@nexedi.com> -# -# WARNING: This program as such is intended to be used by professional -# programmers who take the whole responsability of assessing all potential -# consequences resulting from its eventual inadequacies and bugs -# -# This program as such is not intended to be used by end users. End -# users who are looking for a ready-to-use solution with commercial -# garantees and support are strongly adviced to contract a Free Software -# Service Company -# -# This program is Free Software; you can redistribute it and/or -# modify it under the terms of the Zope Public License (ZPL) Version 2.0 -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. -# -############################################################################## - -def filterUpdateQuantityUnit(object=None,request=None,**kw): - if object.getPortalType() <> 'Inventory MP' : - return 1 - else : - return 0 - -def testAfterUpdateQuantityUnit(object=None,request=None,**kw): - result = [] - return result - -def methodUpdateQuantityUnit(object=None,request=None,**kw): - result = [] - try: - object.setQuantityUnit('Unite/Cone') - except: - message = 'Object could not be updated' - if hasattr(object,'getRelativeUrl'): - result.append((object.getRelativeUrl(), 'methodUpdateQuantityUnit',101,message)) - elif hasattr(object,'id'): - result.append((object.id, 'methodUpdateQuantityUnit',101,message)) - else: - result.append(('Object with no id', 'methodUpdateQuantityUnit',101,message)) - return result - -def UpdateQuantityUnit(object=None,request=None,**kw): - """ - Folder needs to be updated in order to take into account - changes of classes and in particular meta_type - """ - #container = REQUEST.PARENTS[0] - result = [] - container = object - if hasattr(container,'updateAll'): - result += container.updateAll(filter=filterUpdateQuantityUnit, method=methodUpdateQuantityUnit, - test_after=testAfterUpdateQuantityUnit,request=request) - else: - #for folder in container.objectValues(("ERP5 Folder",)): - for object in container.objectValues(): - if hasattr(object,'updateAll'): - result += object.updateAll(filter=filterUpdateQuantityUnit, method=methodUpdateQuantityUnit, - test_after=testAfterUpdateQuantityUnit,request=request) - - return result diff --git a/product/Coramy/Extensions/cartesianProduct.py b/product/Coramy/Extensions/cartesianProduct.py deleted file mode 100755 index fbd6061819..0000000000 --- a/product/Coramy/Extensions/cartesianProduct.py +++ /dev/null @@ -1 +0,0 @@ -from Products.ERP5Type.Utils import cartesianProduct \ No newline at end of file diff --git a/product/Coramy/Extensions/deliveryTester.py b/product/Coramy/Extensions/deliveryTester.py deleted file mode 100755 index d2dcd1a753..0000000000 --- a/product/Coramy/Extensions/deliveryTester.py +++ /dev/null @@ -1,25 +0,0 @@ -def explainRootGroup(root_group=None) : - - message = "" - - if root_group is not None : - - # printing result - message += "nombre de OrderGroup : %s" %len(root_group.group_list)+"\n" - for order_group in root_group.group_list : - message += "\t"+"order : %s" %order_group.order+"\n" - message += "nombre de PathGroup : %s" %len(order_group.group_list)+"\n" - for group in order_group.group_list : - message += "\t"+"source : %s _ destination : %s" %(group.source, group.destination)+"\n" - message += "\t"+"source_section : %s _ destination_section : %s" %(group.source_section, group.destination_section)+"\n" - message += "\t"+"nombre de DateGroup : %s" %len(group.group_list)+"\n" - for sub_group in group.group_list : - message += "\t"*2+"start : %s _ stop : %s" %(sub_group.start_date, sub_group.stop_date)+"\n" - message += "\t"*2+"nombre de ResourceGroup : %s" %len(sub_group.group_list)+"\n" - for sub_group2 in sub_group.group_list : - message += "\t"*3+"resource : %s" %sub_group2.resource+"\n" - message += "\t"*3+"nombre de VariantGroup : %s" %len(sub_group2.group_list)+"\n" - for sub_group3 in sub_group2.group_list : - message += "\t"*4+"categories : %s" %str(sub_group3.category_list)+str(len(sub_group3.category_list))+"\n" - - return message diff --git a/product/Coramy/Extensions/productionOrderBuilder.py b/product/Coramy/Extensions/productionOrderBuilder.py deleted file mode 100755 index a79e70a1c5..0000000000 --- a/product/Coramy/Extensions/productionOrderBuilder.py +++ /dev/null @@ -1,45 +0,0 @@ -def productionOrderBuilder(self): - - context = self - - # Delete all proposed orders - for o in context.portal_catalog(simulation_state = "auto_planned", parent_uid=[context.ordre_fabrication.getUid()]) : - realo = o.getObject() - realo.aq_parent._delObject(o.id) - - # Empty Zero Stock - for mid in context.portal_simulation.zero_stock.contentIds(): - context.portal_simulation.zero_stock._delObject(mid) - - # Expand Zero Stock as many times as needed (1 or 2 for the Coramy case) - # for i in range(0,1): - context.portal_simulation.zero_stock.expand() - - # Collect movements in Zero Stock applied rule - zs_movement_list = context.portal_simulation.zero_stock.contentValues() - - # keep only movements with a Modele resource - movement_list = [] - for movement in zs_movement_list : - try : - if movement.getResourceValue().getPortalType() == 'Modele' : - movement_list.append(movement) - except : - pass - - # Parse movements into a root group - root_group = context.portal_simulation.collectMovement(movement_list) - order_list = context.portal_simulation.buildOrderList(root_group) - - # Look at result - # return map(lambda x:x.getRelativeUrl(), order_list) - for order in order_list: - order.autoPlan() - order.purchase_order_apply_condition() - - request = context.REQUEST - redirect_url = '%s/view?%s' % ( context.absolute_url() - , 'portal_status_message=%s+propositions+OF+créés.' % len(order_list) - ) - - request[ 'RESPONSE' ].redirect( redirect_url ) diff --git a/product/Coramy/Interface/.cvsignore b/product/Coramy/Interface/.cvsignore deleted file mode 100755 index d0743b7da6..0000000000 --- a/product/Coramy/Interface/.cvsignore +++ /dev/null @@ -1,2 +0,0 @@ -.AppleDouble -*.pyc diff --git a/product/Coramy/Interface/__init__.py b/product/Coramy/Interface/__init__.py deleted file mode 100755 index e69de29bb2..0000000000 diff --git a/product/Coramy/MetoAPI.py b/product/Coramy/MetoAPI.py deleted file mode 100755 index 94f6cdcbc7..0000000000 --- a/product/Coramy/MetoAPI.py +++ /dev/null @@ -1,78 +0,0 @@ -from Products.PythonScripts.Utility import allow_module -allow_module("Products.Coramy.MetoAPI") - -XON = "\x11" -XOFF = "\x13" -STX = "\x02" -SOH = "\x01" -ESC = "\x1B" -LF = "\x0A" -CR = "\x0D" - -def command(*args): - raw_string = ''.join(args) - return raw_string - -def selectMeter(): - return command(STX, "m") - -def setDecoration(active): - if active: - return command(STX, "V4") - else: - return command(STX, "V0") - -def startFormat(): - return command(STX, "L") - -def endFormat(): - return command("E", CR) - -def setNumber(n = 1): - return command("Q%04d" % n, CR) - -def setTemparature(t = 15): - return command("H%02d" % t) - -def setPixel(width = 1, height = 1): - return command("D%1d%1d" % (width, height)) - -def setPrintSpeed(s = "C"): - return command("P", s) - -def setAsdFont(s = "4"): - return command("Kl<", s) - -def setPaperSpeed(s = "C"): - return command("S", s) - -def printLine(rotation, x, y, width, height, unit = 1): - return command("%1d" % rotation, - "X11000", - "%04d%04d" % (y * unit, x * unit), - "l", - "%04d%04d" % (width * unit, height * unit), - CR) - -def printText(rotation, font, horizontal_expansion, vertical_expansion, - size, x, y, text, unit = 1): - return command("%1d" % rotation, - font, - "%1d" % horizontal_expansion, - "%1d" % vertical_expansion, - "%03d" % size, - "%04d%04d" % (y * unit, x * unit), - text, - CR) - -def printFrame(rotation, x, y, width, height, - thickness_of_horizontal_lines, thickness_of_vertical_lines, - unit = 1): - return command("%1d" % rotation, - "X11000", - "%04d%04d" % (y * unit, x * unit), - "b", - "%04d%04d" % (width * unit, height * unit), - "%04d%04d" % (thickness_of_horizontal_lines, - thickness_of_vertical_lines), - CR) diff --git a/product/Coramy/Permissions.py b/product/Coramy/Permissions.py deleted file mode 100755 index e69de29bb2..0000000000 diff --git a/product/Coramy/PropertySheet/.cvsignore b/product/Coramy/PropertySheet/.cvsignore deleted file mode 100755 index d0743b7da6..0000000000 --- a/product/Coramy/PropertySheet/.cvsignore +++ /dev/null @@ -1,2 +0,0 @@ -.AppleDouble -*.pyc diff --git a/product/Coramy/PropertySheet/Assortiment.py b/product/Coramy/PropertySheet/Assortiment.py deleted file mode 100755 index 571a03c51d..0000000000 --- a/product/Coramy/PropertySheet/Assortiment.py +++ /dev/null @@ -1,60 +0,0 @@ -############################################################################## -# -# Copyright (c) 2002 Nexedi SARL and Contributors. All Rights Reserved. -# Jean-Paul Smets-Solanes <jp@nexedi.com> -# -# WARNING: This program as such is intended to be used by professional -# programmers who take the whole responsability of assessing all potential -# consequences resulting from its eventual inadequacies and bugs -# End users who are looking for a ready-to-use solution with commercial -# garantees and support are strongly adviced to contract a Free Software -# Service Company -# -# This program is Free Software; you can redistribute it and/or -# modify it under the terms of the GNU General Public License -# as published by the Free Software Foundation; either version 2 -# of the License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -# -############################################################################## - - - -class Assortiment: - """ - Assortiment properties and categories - """ - - _properties = ( - { 'id' : 'commentaires', - 'description' : 'Commentaires', - 'type' : 'text', - 'mode' : 'w' }, - { 'id' : 'code_ean13', - 'description' : 'Code EAN 13 de l assortiment', - 'type' : 'string', - 'mode' : 'w' }, - { 'id' : 'correspondance_tailles_id', - 'description' : 'Id de la correspondance de tailles utilisee', - 'type' : 'string', - 'acquisition_base_category' : ('specialise',), - 'acquisition_portal_type' : ('Correspondance Tailles',), - 'acquisition_copy_value' : 0, - 'acquisition_mask_value' : 0, - 'acquisition_accessor_id' : 'getId', - 'acquisition_depends' : None, - 'mode' : 'w' }, - ) - - _categories = ( 'eip', 'collection', 'destination', 'taille', 'nomenclature_douane', 'specialise' ) - - _constraints = ( - ) diff --git a/product/Coramy/PropertySheet/Coloris.py b/product/Coramy/PropertySheet/Coloris.py deleted file mode 100755 index dacac893ff..0000000000 --- a/product/Coramy/PropertySheet/Coloris.py +++ /dev/null @@ -1,36 +0,0 @@ -############################################################################## -# -# Copyright (c) 2002 Nexedi SARL and Contributors. All Rights Reserved. -# Jean-Paul Smets-Solanes <jp@nexedi.com> -# -# WARNING: This program as such is intended to be used by professional -# programmers who take the whole responsability of assessing all potential -# consequences resulting from its eventual inadequacies and bugs -# End users who are looking for a ready-to-use solution with commercial -# garantees and support are strongly adviced to contract a Free Software -# Service Company -# -# This program is Free Software; you can redistribute it and/or -# modify it under the terms of the GNU General Public License -# as published by the Free Software Foundation; either version 2 -# of the License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -# -############################################################################## - - - -class Coloris: - """ - Coloris properties and categories - """ - - _properties = () diff --git a/product/Coramy/PropertySheet/Composant.py b/product/Coramy/PropertySheet/Composant.py deleted file mode 100755 index d1d71f9c6b..0000000000 --- a/product/Coramy/PropertySheet/Composant.py +++ /dev/null @@ -1,45 +0,0 @@ -############################################################################## -# -# Copyright (c) 2002 Nexedi SARL and Contributors. All Rights Reserved. -# Jean-Paul Smets-Solanes <jp@nexedi.com> -# -# WARNING: This program as such is intended to be used by professional -# programmers who take the whole responsability of assessing all potential -# consequences resulting from its eventual inadequacies and bugs -# End users who are looking for a ready-to-use solution with commercial -# garantees and support are strongly adviced to contract a Free Software -# Service Company -# -# This program is Free Software; you can redistribute it and/or -# modify it under the terms of the GNU General Public License -# as published by the Free Software Foundation; either version 2 -# of the License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -# -############################################################################## - -class Composant: - """ - Attributs specifiques d'une ressource Composant chez Coramy - """ - - _properties = ( - { 'id' : 'nb_couleurs', - 'description' : 'Le nombre de couleurs', - 'type' : 'int', - 'mode' : 'w' }, - { 'id' : 'commentaires', - 'description' : 'Commentaires', - 'type' : 'text', - 'mode' : 'w' }, - ) - - _categories = ( 'composition', 'collection', 'type_composant') diff --git a/product/Coramy/PropertySheet/CoramyDeliveryLine.py b/product/Coramy/PropertySheet/CoramyDeliveryLine.py deleted file mode 100755 index 7eb3341b2b..0000000000 --- a/product/Coramy/PropertySheet/CoramyDeliveryLine.py +++ /dev/null @@ -1,38 +0,0 @@ -############################################################################## -# -# Copyright (c) 2002 Coramy SAS and Contributors. All Rights Reserved. -# Thierry Faucher <Thierry_Faucher@coramy.com> -# -# WARNING: This program as such is intended to be used by professional -# programmers who take the whole responsability of assessing all potential -# consequences resulting from its eventual inadequacies and bugs -# End users who are looking for a ready-to-use solution with commercial -# garantees and support are strongly adviced to contract a Free Software -# Service Company -# -# This program is Free Software; you can redistribute it and/or -# modify it under the terms of the GNU General Public License -# as published by the Free Software Foundation; either version 2 -# of the License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -# -############################################################################## - - -class CoramyDeliveryLine: - """ - Specific attributes / categories for Coramy (coloris, taille) - """ - - _properties = ( - ) - - _categories = ( 'taille', 'coloris' ) diff --git a/product/Coramy/PropertySheet/CoramyItem.py b/product/Coramy/PropertySheet/CoramyItem.py deleted file mode 100755 index 1bc8cc329a..0000000000 --- a/product/Coramy/PropertySheet/CoramyItem.py +++ /dev/null @@ -1,56 +0,0 @@ -############################################################################## -# -# Copyright (c) 2002 Nexedi SARL and Contributors. All Rights Reserved. -# Jean-Paul Smets-Solanes <jp@nexedi.com> -# -# WARNING: This program as such is intended to be used by professional -# programmers who take the whole responsability of assessing all potential -# consequences resulting from its eventual inadequacies and bugs -# End users who are looking for a ready-to-use solution with commercial -# garantees and support are strongly adviced to contract a Free Software -# Service Company -# -# This program is Free Software; you can redistribute it and/or -# modify it under the terms of the GNU General Public License -# as published by the Free Software Foundation; either version 2 -# of the License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -# -############################################################################## - -class CoramyItem: - """ - Attributs specifiques d'un item chez Coramy - ceci concerne particulierement les pieces de tissu - """ - - _properties = ( - { 'id' : 'laize_totale', - 'description' : 'La laize utile du tissu', - 'type' : 'float', - 'mode' : 'w' }, - { 'id' : 'laize_utile', - 'description' : 'La laize utile du tissu', - 'type' : 'float', - 'mode' : 'w' }, - { 'id' : 'bain_teinture', - 'description' : 'Le numero de bain de teinture de la piece', - 'type' : 'string', - 'mode' : 'w' }, - { 'id' : 'commentaires', - 'description' : 'Commentaires', - 'type' : 'text', - 'mode' : 'w' }, - ) - - _categories = () - - _constraints = () diff --git a/product/Coramy/PropertySheet/CoramyOrder.py b/product/Coramy/PropertySheet/CoramyOrder.py deleted file mode 100755 index 029c10a39a..0000000000 --- a/product/Coramy/PropertySheet/CoramyOrder.py +++ /dev/null @@ -1,72 +0,0 @@ -############################################################################## -# -# Copyright (c) 2002 Coramy SAS and Contributors. All Rights Reserved. -# Thierry Faucher <Thierry_Faucher@coramy.com> -# -# WARNING: This program as such is intended to be used by professional -# programmers who take the whole responsability of assessing all potential -# consequences resulting from its eventual inadequacies and bugs -# End users who are looking for a ready-to-use solution with commercial -# garantees and support are strongly adviced to contract a Free Software -# Service Company -# -# This program is Free Software; you can redistribute it and/or -# modify it under the terms of the GNU General Public License -# as published by the Free Software Foundation; either version 2 -# of the License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -# -############################################################################## - - -class CoramyOrder: - """ - Coramy order properties and categories - """ - - _properties = ( - { 'id' : 'date_reception', - 'description' : 'Date de reception', - 'type' : 'date', - 'mode' : 'w' }, - { 'id' : 'date_emission', - 'description' : 'Date emission', - 'type' : 'date', - 'mode' : 'w' }, - { 'id' : 'commission_ratio', - 'description' : 'Pourcentage de commision', - 'type' : 'float', - 'default' : 0.0, - 'mode' : 'w' }, - { 'id' : 'trade_condition_title', - 'description' : 'le nom de la condition commerciale appliquee', - 'type' : 'string', - 'acquisition_base_category' : ('specialise',), - 'acquisition_portal_type' : ('Condition Vente','Condition Achat'), - 'acquisition_copy_value' : 0, - 'acquisition_accessor_id' : 'getTitle', - 'acquisition_depends' : None, - 'mode' : 'w' }, - ) - - _categories = ('commande_origine', 'order_type', 'price_currency', 'group', 'specialise', - 'incoterm', 'delivery_mode', 'segmentation_strategique') - - _constraints = ( - { 'id' : 'applied_rule', - 'description' : 'There must at most one Applied Rule using this order', - 'type' : 'CategoryRelatedMembershipArity', - 'min_arity' : '0', - 'max_arity' : '1', - 'portal_type' : ('Applied Rule', ), - 'base_category' : ('causality',) - }, - ) diff --git a/product/Coramy/PropertySheet/CoramyTransformation.py b/product/Coramy/PropertySheet/CoramyTransformation.py deleted file mode 100755 index 33352d5745..0000000000 --- a/product/Coramy/PropertySheet/CoramyTransformation.py +++ /dev/null @@ -1,47 +0,0 @@ -############################################################################## -# -# Copyright (c) 2002 Nexedi SARL and Contributors. All Rights Reserved. -# Jean-Paul Smets-Solanes <jp@nexedi.com> -# -# WARNING: This program as such is intended to be used by professional -# programmers who take the whole responsability of assessing all potential -# consequences resulting from its eventual inadequacies and bugs -# End users who are looking for a ready-to-use solution with commercial -# garantees and support are strongly adviced to contract a Free Software -# Service Company -# -# This program is Free Software; you can redistribute it and/or -# modify it under the terms of the GNU General Public License -# as published by the Free Software Foundation; either version 2 -# of the License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -# -############################################################################## - -class CoramyTransformation: - """ - Attributs spécifiques d'une ressource Transformation chez Coramy - """ - - _properties = () - - _categories = ( 'transformation_state', 'taille' ) - - _constraints = ( - { 'id' : 'resource', - 'description' : 'There must at most one Modele', - 'type' : 'CategoryMembershipArity', - 'min_arity' : '0', - 'max_arity' : '1', - 'portal_type' : (), - 'base_category' : ('resource',) - }, - ) diff --git a/product/Coramy/PropertySheet/CoramyTransformedResource.py b/product/Coramy/PropertySheet/CoramyTransformedResource.py deleted file mode 100755 index 8efe9a7992..0000000000 --- a/product/Coramy/PropertySheet/CoramyTransformedResource.py +++ /dev/null @@ -1,42 +0,0 @@ -############################################################################## -# -# Copyright (c) 2002 Nexedi SARL and Contributors. All Rights Reserved. -# Jean-Paul Smets-Solanes <jp@nexedi.com> -# -# WARNING: This program as such is intended to be used by professional -# programmers who take the whole responsability of assessing all potential -# consequences resulting from its eventual inadequacies and bugs -# End users who are looking for a ready-to-use solution with commercial -# garantees and support are strongly adviced to contract a Free Software -# Service Company -# -# This program is Free Software; you can redistribute it and/or -# modify it under the terms of the GNU General Public License -# as published by the Free Software Foundation; either version 2 -# of the License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -# -############################################################################## - -class CoramyTransformedResource: - """ - Attributs spécifiques d'une Transformed Resource chez Coramy - """ - - _properties = ( - { 'id' : 'element_composition', - 'description' : 'indique si une tranformed resource entre dans la composition du produit de transformation', - 'type' : 'boolean', - 'mode' : 'w' }, - ) - - _categories = ( 'transformation_subpart', ) - diff --git a/product/Coramy/PropertySheet/CorrespondanceMesures.py b/product/Coramy/PropertySheet/CorrespondanceMesures.py deleted file mode 100755 index e580d31cf4..0000000000 --- a/product/Coramy/PropertySheet/CorrespondanceMesures.py +++ /dev/null @@ -1,49 +0,0 @@ -############################################################################## -# -# Copyright (c) 2002 Nexedi SARL and Contributors. All Rights Reserved. -# Jean-Paul Smets-Solanes <jp@nexedi.com> -# -# WARNING: This program as such is intended to be used by professional -# programmers who take the whole responsability of assessing all potential -# consequences resulting from its eventual inadequacies and bugs -# End users who are looking for a ready-to-use solution with commercial -# garantees and support are strongly adviced to contract a Free Software -# Service Company -# -# This program is Free Software; you can redistribute it and/or -# modify it under the terms of the GNU General Public License -# as published by the Free Software Foundation; either version 2 -# of the License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -# -############################################################################## - - - -class CorrespondanceMesures: - """ - CorrespondanceMesures properties and categories - """ - - _properties = ( - { 'id' : 'destination_title', - 'storage_id' : 'default_destination_title', # Coramy Compatibility - 'description' : 'The titles of the destination concerned by this document', - 'type' : 'string', - 'acquisition_base_category' : ('destination',), - 'acquisition_portal_type' : ('Organisation','MetaNode'), - 'acquisition_copy_value' : 0, - 'acquisition_accessor_id' : 'getTitle', - 'acquisition_depends' : None, - 'mode' : 'w' }, - ) - - _categories = ( 'mesure_vetement', 'reference_mesure') diff --git a/product/Coramy/PropertySheet/CorrespondanceTailles.py b/product/Coramy/PropertySheet/CorrespondanceTailles.py deleted file mode 100755 index 2214e34afa..0000000000 --- a/product/Coramy/PropertySheet/CorrespondanceTailles.py +++ /dev/null @@ -1,49 +0,0 @@ -############################################################################## -# -# Copyright (c) 2002 Nexedi SARL and Contributors. All Rights Reserved. -# Jean-Paul Smets-Solanes <jp@nexedi.com> -# -# WARNING: This program as such is intended to be used by professional -# programmers who take the whole responsability of assessing all potential -# consequences resulting from its eventual inadequacies and bugs -# End users who are looking for a ready-to-use solution with commercial -# garantees and support are strongly adviced to contract a Free Software -# Service Company -# -# This program is Free Software; you can redistribute it and/or -# modify it under the terms of the GNU General Public License -# as published by the Free Software Foundation; either version 2 -# of the License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -# -############################################################################## - - - -class CorrespondanceTailles: - """ - CorrespondanceTailles properties and categories - """ - - _properties = ( - { 'id' : 'destination_title', - 'storage_id' : 'default_destination_title', # Coramy Compatibility - 'description' : 'The titles of the destination concerned by this document', - 'type' : 'string', - 'acquisition_base_category' : ('destination',), - 'acquisition_portal_type' : ('Organisation','MetaNode'), - 'acquisition_copy_value' : 0, - 'acquisition_accessor_id' : 'getTitle', - 'acquisition_depends' : None, - 'mode' : 'w' }, - ) - - _categories = ( 'taille', 'destination', 'morpho_type' ) diff --git a/product/Coramy/PropertySheet/ElementTarif.py b/product/Coramy/PropertySheet/ElementTarif.py deleted file mode 100755 index 9f1cbc226b..0000000000 --- a/product/Coramy/PropertySheet/ElementTarif.py +++ /dev/null @@ -1,42 +0,0 @@ -############################################################################## -# -# Copyright (c) 2002 Coramy SAS and Contributors. All Rights Reserved. -# Thierry Faucher <Thierry_Faucher@coramy.com> -# -# WARNING: This program as such is intended to be used by professional -# programmers who take the whole responsability of assessing all potential -# consequences resulting from its eventual inadequacies and bugs -# End users who are looking for a ready-to-use solution with commercial -# garantees and support are strongly adviced to contract a Free Software -# Service Company -# -# This program is Free Software; you can redistribute it and/or -# modify it under the terms of the GNU General Public License -# as published by the Free Software Foundation; either version 2 -# of the License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -# -############################################################################## - - -class ElementTarif: - """ - Element tarif - """ - - _properties = ( - { 'id' : 'commentaires', - 'description' : 'Commentaires', - 'type' : 'text', - 'mode' : 'w' }, - ) - - _categories = ( 'taille', 'coloris', 'quantity_range') diff --git a/product/Coramy/PropertySheet/Forme.py b/product/Coramy/PropertySheet/Forme.py deleted file mode 100755 index 0eca5304d4..0000000000 --- a/product/Coramy/PropertySheet/Forme.py +++ /dev/null @@ -1,60 +0,0 @@ -############################################################################## -# -# Copyright (c) 2002 Coramy SAS and Contributors. All Rights Reserved. -# Thierry Faucher <Thierry_Faucher@coramy.com> -# -# WARNING: This program as such is intended to be used by professional -# programmers who take the whole responsability of assessing all potential -# consequences resulting from its eventual inadequacies and bugs -# End users who are looking for a ready-to-use solution with commercial -# garantees and support are strongly adviced to contract a Free Software -# Service Company -# -# This program is Free Software; you can redistribute it and/or -# modify it under the terms of the GNU General Public License -# as published by the Free Software Foundation; either version 2 -# of the License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -# -############################################################################## - - -class Forme: - """ - Forme properties and categories - """ - - _properties = ( - { 'id' : 'commentaires', - 'description' : 'Commentaires', - 'type' : 'text', - 'mode' : 'w' }, - { 'id' : 'forme_id', - 'description' : 'Id des vetements utilises', - 'type' : 'lines', - 'acquisition_base_category' : ('specialise',), - 'acquisition_portal_type' : ('Forme',), - 'acquisition_copy_value' : 0, - 'acquisition_mask_value' : 0, - 'acquisition_accessor_id' : 'getId', - 'acquisition_depends' : None, - 'mode' : 'w' }, - { 'id' : 'nomenclature', - 'description' : 'composants et consommations principaux servant a mettre au point la forme', - 'type' : 'text', - 'mode' : 'w' }, - { 'id' : 'mode_operatoire', - 'description' : 'ensemble de recommandations de montage servant a mettre au point la forme', - 'type' : 'text', - 'mode' : 'w' }, - ) - - _categories = ( 'eip', 'collection', 'referentiel_forme', 'specialise', 'option_forme' ) diff --git a/product/Coramy/PropertySheet/Gamme.py b/product/Coramy/PropertySheet/Gamme.py deleted file mode 100755 index 1df253ef2f..0000000000 --- a/product/Coramy/PropertySheet/Gamme.py +++ /dev/null @@ -1,39 +0,0 @@ -############################################################################## -# -# Copyright (c) 2002 Coramy SAS and Contributors. All Rights Reserved. -# Thierry Faucher <Thierry_Faucher@coramy.com> -# -# WARNING: This program as such is intended to be used by professional -# programmers who take the whole responsability of assessing all potential -# consequences resulting from its eventual inadequacies and bugs -# End users who are looking for a ready-to-use solution with commercial -# garantees and support are strongly adviced to contract a Free Software -# Service Company -# -# This program is Free Software; you can redistribute it and/or -# modify it under the terms of the GNU General Public License -# as published by the Free Software Foundation; either version 2 -# of the License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -# -############################################################################## - - -class Gamme: - """ - Gamme properties and categories - """ - - _properties = ( - - ) - - _categories = ( 'eip', 'collection' ) diff --git a/product/Coramy/PropertySheet/GrilleConsommation.py b/product/Coramy/PropertySheet/GrilleConsommation.py deleted file mode 100755 index 52d424c324..0000000000 --- a/product/Coramy/PropertySheet/GrilleConsommation.py +++ /dev/null @@ -1,38 +0,0 @@ -############################################################################## -# -# Copyright (c) 2002 Nexedi SARL and Contributors. All Rights Reserved. -# Jean-Paul Smets-Solanes <jp@nexedi.com> -# -# WARNING: This program as such is intended to be used by professional -# programmers who take the whole responsability of assessing all potential -# consequences resulting from its eventual inadequacies and bugs -# End users who are looking for a ready-to-use solution with commercial -# garantees and support are strongly adviced to contract a Free Software -# Service Company -# -# This program is Free Software; you can redistribute it and/or -# modify it under the terms of the GNU General Public License -# as published by the Free Software Foundation; either version 2 -# of the License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -# -############################################################################## - - - -class GrilleConsommation: - """ - Coloris properties and categories - """ - - _properties = () - - _categories = ( 'taille' , ) diff --git a/product/Coramy/PropertySheet/LigneNomenclature.py b/product/Coramy/PropertySheet/LigneNomenclature.py deleted file mode 100755 index b43caa74e7..0000000000 --- a/product/Coramy/PropertySheet/LigneNomenclature.py +++ /dev/null @@ -1,42 +0,0 @@ -############################################################################## -# -# Copyright (c) 2002 Nexedi SARL and Contributors. All Rights Reserved. -# Jean-Paul Smets-Solanes <jp@nexedi.com> -# -# WARNING: This program as such is intended to be used by professional -# programmers who take the whole responsability of assessing all potential -# consequences resulting from its eventual inadequacies and bugs -# End users who are looking for a ready-to-use solution with commercial -# garantees and support are strongly adviced to contract a Free Software -# Service Company -# -# This program is Free Software; you can redistribute it and/or -# modify it under the terms of the GNU General Public License -# as published by the Free Software Foundation; either version 2 -# of the License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -# -############################################################################## - - - -class LigneNomenclature: - """ - LigneNomenclature properties and categories - """ - - _properties = ( - { 'id' : 'entre_dans_la_composition', - 'description' : 'description des accessoires', - 'type' : 'boolean', - 'mode' : 'w' }, - ) - diff --git a/product/Coramy/PropertySheet/Machine.py b/product/Coramy/PropertySheet/Machine.py deleted file mode 100755 index 7232ced3f7..0000000000 --- a/product/Coramy/PropertySheet/Machine.py +++ /dev/null @@ -1,47 +0,0 @@ -############################################################################## -# -# Copyright (c) 2002 Nexedi SARL and Contributors. All Rights Reserved. -# Jean-Paul Smets-Solanes <jp@nexedi.com> -# -# WARNING: This program as such is intended to be used by professional -# programmers who take the whole responsability of assessing all potential -# consequences resulting from its eventual inadequacies and bugs -# End users who are looking for a ready-to-use solution with commercial -# garantees and support are strongly adviced to contract a Free Software -# Service Company -# -# This program is Free Software; you can redistribute it and/or -# modify it under the terms of the GNU General Public License -# as published by the Free Software Foundation; either version 2 -# of the License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -# -############################################################################## - - - -class Machine: - """ - Machine properties and categories - """ - - _properties = ( - { 'id' : 'date_fin_garantie', - 'description' : 'la date de fin de garantie', - 'type' : 'date', - 'mode' : 'w' }, - { 'id' : 'date_fabrication', - 'description' : 'la date de fabrication', - 'type' : 'date', - 'mode' : 'w' } - ) - - _categories = ( 'type_acquisition', ) diff --git a/product/Coramy/PropertySheet/Modele.py b/product/Coramy/PropertySheet/Modele.py deleted file mode 100755 index a2000daf08..0000000000 --- a/product/Coramy/PropertySheet/Modele.py +++ /dev/null @@ -1,157 +0,0 @@ -############################################################################## -# -# Copyright (c) 2002 Nexedi SARL and Contributors. All Rights Reserved. -# Jean-Paul Smets-Solanes <jp@nexedi.com> -# -# WARNING: This program as such is intended to be used by professional -# programmers who take the whole responsability of assessing all potential -# consequences resulting from its eventual inadequacies and bugs -# End users who are looking for a ready-to-use solution with commercial -# garantees and support are strongly adviced to contract a Free Software -# Service Company -# -# This program is Free Software; you can redistribute it and/or -# modify it under the terms of the GNU General Public License -# as published by the Free Software Foundation; either version 2 -# of the License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -# -############################################################################## - - - -class Modele: - """ - Modele properties and categories - """ - - _properties = ( - { 'id' : 'accessoires', - 'description' : 'description des accessoires', - 'type' : 'text', - 'mode' : 'w' }, - { 'id' : 'gamme_id', - 'description' : 'la gamme de coloris du modele', - 'type' : 'string', - 'acquisition_base_category' : ('specialise',), - 'acquisition_portal_type' : ('Gamme',), - 'acquisition_copy_value' : 0, - 'acquisition_accessor_id' : 'getId', - 'acquisition_depends' : None, - 'mode' : 'w' }, - { 'id' : 'forme_id', - 'description' : 'la forme du modèle', - 'type' : 'string', - 'acquisition_base_category' : ('specialise',), - 'acquisition_portal_type' : ('Forme',), - 'acquisition_copy_value' : 0, - 'acquisition_accessor_id' : 'getId', - 'acquisition_depends' : None, - 'mode' : 'w' }, - { 'id' : 'vetement_id', - 'description' : 'Id des vetements utilises', - 'type' : 'lines', - 'acquisition_base_category' : ('specialise',), - 'acquisition_portal_type' : ('Vetement',), - 'acquisition_copy_value' : 0, - 'acquisition_mask_value' : 0, - 'acquisition_accessor_id' : 'getId', - 'acquisition_depends' : None, - 'mode' : 'w' }, - { 'id' : 'commentaires', - 'description' : 'Commentaires', - 'type' : 'text', - 'mode' : 'w' }, - { 'id' : 'composition', - 'description' : 'Composition du modele', - 'type' : 'text', - 'mode' : 'w' }, - { 'id' : 'coef_marge', - 'description' : 'Coefficient de marge', - 'type' : 'float', - 'mode' : 'w' }, - { 'id' : 'coef_majoration', - 'description' : 'Coefficient de majoration de prix', - 'type' : 'float', - 'mode' : 'w' }, - { 'id' : 'cout_additionnel', - 'description' : 'Cout additionnel en euros', - 'type' : 'float', - 'mode' : 'w' }, - { 'id' : 'code_ean13', - 'description' : 'Code EAN 13 du modle', - 'type' : 'string', - 'mode' : 'w' }, - { 'id' : 'temps_piquage', - 'description' : 'temps de piquage du modle', - 'type' : 'float', - 'mode' : 'w' }, - { 'id' : 'modele_template', - 'description' : 'Id du modele de reference', - 'type' : 'string', - 'acquisition_base_category' : ('specialise',), - 'acquisition_portal_type' : ('Modele',), - 'acquisition_copy_value' : 0, - 'acquisition_mask_value' : 0, - 'acquisition_accessor_id' : 'getId', - 'acquisition_depends' : None, - 'mode' : 'w' }, - { 'id' : 'correspondance_tailles_id', - 'description' : 'Id de la correspondance de tailles utilisee', - 'type' : 'string', - 'acquisition_base_category' : ('specialise',), - 'acquisition_portal_type' : ('Correspondance Tailles',), - 'acquisition_copy_value' : 0, - 'acquisition_mask_value' : 0, - 'acquisition_accessor_id' : 'getId', - 'acquisition_depends' : None, - 'mode' : 'w' }, - { 'id' : 'correspondance_mesures_id', - 'description' : 'Id de la correspondance de mesures utilisee', - 'type' : 'string', - 'acquisition_base_category' : ('specialise',), - 'acquisition_portal_type' : ('Correspondance Mesures',), - 'acquisition_copy_value' : 0, - 'acquisition_mask_value' : 0, - 'acquisition_accessor_id' : 'getId', - 'acquisition_depends' : None, - 'mode' : 'w' }, - { 'id' : 'nomenclature', - 'description' : 'composants et consommations principaux servant a mettre au point le modele', - 'type' : 'text', - 'mode' : 'w' }, - { 'id' : 'mode_operatoire', - 'description' : 'ensemble de recommandations de montage servant a mettre au point le modele', - 'type' : 'text', - 'mode' : 'w' }, - ) - - _categories = ( 'eip', 'collection', 'specialise', 'destination', 'taille', 'transformation_state', 'tarif', 'modele_origine', 'marque', 'nomenclature_douane', -'code_entretien', 'label' ) - - _constraints = ( - { 'id' : 'forme', - 'description' : 'There must at most one Forme', - 'type' : 'CategoryMembershipArity', - 'min_arity' : '0', - 'max_arity' : '1', - 'portal_type' : ('Forme',), - 'base_category' : ('specialise',) - }, - { 'id' : 'gamme', - 'description' : 'There must at most one Gamme', - 'type' : 'CategoryMembershipArity', - 'min_arity' : '0', - 'max_arity' : '1', - 'portal_type' : ('Gamme',), - 'base_category' : ('specialise',) - }, - ) diff --git a/product/Coramy/PropertySheet/ModeleMachine.py b/product/Coramy/PropertySheet/ModeleMachine.py deleted file mode 100755 index 2ccd45c5cc..0000000000 --- a/product/Coramy/PropertySheet/ModeleMachine.py +++ /dev/null @@ -1,37 +0,0 @@ -############################################################################## -# -# Copyright (c) 2002 Nexedi SARL and Contributors. All Rights Reserved. -# Jean-Paul Smets-Solanes <jp@nexedi.com> -# -# WARNING: This program as such is intended to be used by professional -# programmers who take the whole responsability of assessing all potential -# consequences resulting from its eventual inadequacies and bugs -# End users who are looking for a ready-to-use solution with commercial -# garantees and support are strongly adviced to contract a Free Software -# Service Company -# -# This program is Free Software; you can redistribute it and/or -# modify it under the terms of the GNU General Public License -# as published by the Free Software Foundation; either version 2 -# of the License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -# -############################################################################## - - - -class ModeleMachine: - """ - Modele machine properties and categories - """ - _properties = () - - _categories = ( 'type_machine', 'marque_machine') diff --git a/product/Coramy/PropertySheet/Morceau.py b/product/Coramy/PropertySheet/Morceau.py deleted file mode 100755 index aa47b38cd0..0000000000 --- a/product/Coramy/PropertySheet/Morceau.py +++ /dev/null @@ -1,57 +0,0 @@ -############################################################################## -# -# Copyright (c) 2002 Coramy SAS and Contributors. All Rights Reserved. -# Thierry Faucher <Thierry_Faucher@coramy.com> -# -# WARNING: This program as such is intended to be used by professional -# programmers who take the whole responsability of assessing all potential -# consequences resulting from its eventual inadequacies and bugs -# End users who are looking for a ready-to-use solution with commercial -# garantees and support are strongly adviced to contract a Free Software -# Service Company -# -# This program is Free Software; you can redistribute it and/or -# modify it under the terms of the GNU General Public License -# as published by the Free Software Foundation; either version 2 -# of the License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -# -############################################################################## - - -class Morceau: - """ - Morceau properties and categories - """ - - _properties = ( - { 'id' : 'quantite_simple', - 'description' : 'nombre de morceaux simples', - 'type' : 'int', - 'mode' : 'w' }, - { 'id' : 'quantite_double', - 'description' : 'nombre de morceaux doubles', - 'type' : 'string', - 'mode' : 'w' }, - { 'id' : 'type_tissu', - 'description' : 'le type lectra du tissu', - 'type' : 'string', - 'mode' : 'w' }, - { 'id' : 'type_cran', - 'description' : 'le type de cran utilise', - 'type' : 'string', - 'mode' : 'w' }, - { 'id' : 'fao', - 'description' : 'traitement fao du morceau oui ou non', - 'type' : 'boolean', - 'mode' : 'w' }, - - ) diff --git a/product/Coramy/PropertySheet/Operation.py b/product/Coramy/PropertySheet/Operation.py deleted file mode 100755 index 9118cbaa70..0000000000 --- a/product/Coramy/PropertySheet/Operation.py +++ /dev/null @@ -1,62 +0,0 @@ -############################################################################## -# -# Copyright (c) 2002 Nexedi SARL and Contributors. All Rights Reserved. -# Jean-Paul Smets-Solanes <jp@nexedi.com> -# -# WARNING: This program as such is intended to be used by professional -# programmers who take the whole responsability of assessing all potential -# consequences resulting from its eventual inadequacies and bugs -# End users who are looking for a ready-to-use solution with commercial -# garantees and support are strongly adviced to contract a Free Software -# Service Company -# -# This program is Free Software; you can redistribute it and/or -# modify it under the terms of the GNU General Public License -# as published by the Free Software Foundation; either version 2 -# of the License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -# -############################################################################## - - - -class Operation: - """ - Operation properties and categories - """ - - _properties = ( - - { 'id' : 'frequence', - 'description' : 'Frequence', - 'type' : 'float', - 'mode' : 'w' }, - { 'id' : 'temps', - 'description' : 'Temps de l operation', - 'type' : 'float', - 'mode' : 'w' }, - { 'id' : 'machine', - 'description' : 'Machine', - 'type' : 'string', - 'mode' : 'w' }, - { 'id' : 'equipement', - 'description' : 'Equipement', - 'type' : 'string', - 'mode' : 'w' }, - { 'id' : 'etape', - 'description' : 'Etape', - 'type' : 'string', - 'mode' : 'w' }, - ) - - _categories = ( ) - - _constraints = ( ) diff --git a/product/Coramy/PropertySheet/PresentAuCatalogue.py b/product/Coramy/PropertySheet/PresentAuCatalogue.py deleted file mode 100755 index 1bb8809874..0000000000 --- a/product/Coramy/PropertySheet/PresentAuCatalogue.py +++ /dev/null @@ -1,41 +0,0 @@ -############################################################################## -# -# Copyright (c) 2002 Coramy SAS and Contributors. All Rights Reserved. -# Romain Courteaud <Romain_Courteaud@coramy.com> - -# WARNING: This program as such is intended to be used by professional -# programmers who take the whole responsability of assessing all potential -# consequences resulting from its eventual inadequacies and bugs -# End users who are looking for a ready-to-use solution with commercial -# garantees and support are strongly adviced to contract a Free Software -# Service Company -# -# This program is Free Software; you can redistribute it and/or -# modify it under the terms of the GNU General Public License -# as published by the Free Software Foundation; either version 2 -# of the License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -# -############################################################################## - - -class PresentAuCatalogue: - """ - Generic property - """ - - _properties = ( - { 'id' : 'present_au_catalogue', - 'description' : 'Présent au catalogue', - 'type' : 'boolean', - 'mode' : 'w' }, - ) - diff --git a/product/Coramy/PropertySheet/SampleOrderLine.py b/product/Coramy/PropertySheet/SampleOrderLine.py deleted file mode 100755 index bd0a0d8f63..0000000000 --- a/product/Coramy/PropertySheet/SampleOrderLine.py +++ /dev/null @@ -1,67 +0,0 @@ -############################################################################## -# -# Copyright (c) 2002 Coramy SAS and Contributors. All Rights Reserved. -# -# -# WARNING: This program as such is intended to be used by professional -# programmers who take the whole responsability of assessing all potential -# consequences resulting from its eventual inadequacies and bugs -# End users who are looking for a ready-to-use solution with commercial -# garantees and support are strongly adviced to contract a Free Software -# Service Company -# -# This program is Free Software; you can redistribute it and/or -# modify it under the terms of the GNU General Public License -# as published by the Free Software Foundation; either version 2 -# of the License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -# -############################################################################## - - -class SampleOrderLine: - """ - Sample order line properties and categories - """ - - _properties = ( - { 'id' : 'destination_reference', - 'storage_id' : 'default_destination_reference', # Compatibility - 'description' : 'The references of the resource for default destinations', - 'type' : 'string', - 'mode' : 'w' }, - { 'id' : 'coef_marge', - 'description' : 'Coefficient de marge', - 'type' : 'float', - 'mode' : 'w' }, - { 'id' : 'coef_majoration', - 'description' : 'Coefficient de majoration de prix', - 'type' : 'float', - 'mode' : 'w' }, - { 'id' : 'cout_additionnel', - 'description' : 'Cout additionnel en euros', - 'type' : 'float', - 'mode' : 'w' }, - { 'id' : 'theme', - 'description' : 'Theme', - 'type' : 'string', - 'mode' : 'w' }, - { 'id' : 'sort_index', - 'description' : 'sort_index', - 'type' : 'int', - 'mode' : 'w' }, - { 'id' : 'theme_index', - 'description' : 'theme_index', - 'type' : 'int', - 'mode' : 'w' }, - ) - - _categories = ('tarif',) diff --git a/product/Coramy/PropertySheet/SamplesOrder.py b/product/Coramy/PropertySheet/SamplesOrder.py deleted file mode 100755 index 1888dc49a0..0000000000 --- a/product/Coramy/PropertySheet/SamplesOrder.py +++ /dev/null @@ -1,64 +0,0 @@ -############################################################################## -# -# Copyright (c) 2002 Coramy SAS and Contributors. All Rights Reserved. -# Thierry Faucher <Thierry_Faucher@coramy.com> -# -# WARNING: This program as such is intended to be used by professional -# programmers who take the whole responsability of assessing all potential -# consequences resulting from its eventual inadequacies and bugs -# End users who are looking for a ready-to-use solution with commercial -# garantees and support are strongly adviced to contract a Free Software -# Service Company -# -# This program is Free Software; you can redistribute it and/or -# modify it under the terms of the GNU General Public License -# as published by the Free Software Foundation; either version 2 -# of the License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -# -############################################################################## - - -class SamplesOrder: - """ - Samples order properties and categories - """ - - _properties = ( - { 'id' : 'buyer_title', - 'description' : 'nom de l acheteur', - 'type' : 'string', - 'acquisition_base_category' : ('contact',), - 'acquisition_portal_type' : ('Person',), - 'acquisition_copy_value' : 0, - 'acquisition_mask_value' : 0, - 'acquisition_accessor_id' : 'getTitle', - 'acquisition_depends' : None, - 'mode' : 'w' }, - { 'id' : 'commentaires', - 'description' : 'Commentaires', - 'type' : 'text', - 'mode' : 'w' }, - { 'id' : 'date_rdv', - 'description' : 'Date du rendez-vous', - 'type' : 'date', - 'mode' : 'w' }, - { 'id' : 'rayon', - 'description' : 'Rayon', - 'type' : 'string', - 'mode' : 'w' }, - { 'id' : 'themes', - 'description' : 'Themes', - 'type' : 'text', - 'mode' : 'w' }, - ) - - _categories = ('contact', 'collection', 'commande_origine', 'samples_order_type') diff --git a/product/Coramy/PropertySheet/SamplesPackingList.py b/product/Coramy/PropertySheet/SamplesPackingList.py deleted file mode 100755 index fb21c6dc0a..0000000000 --- a/product/Coramy/PropertySheet/SamplesPackingList.py +++ /dev/null @@ -1,51 +0,0 @@ -############################################################################## -# -# Copyright (c) 2002 Nexedi SARL and Contributors. All Rights Reserved. -# Jean-Paul Smets-Solanes <jp@nexedi.com> -# -# WARNING: This program as such is intended to be used by professional -# programmers who take the whole responsability of assessing all potential -# consequences resulting from its eventual inadequacies and bugs -# End users who are looking for a ready-to-use solution with commercial -# garantees and support are strongly adviced to contract a Free Software -# Service Company -# -# This program is Free Software; you can redistribute it and/or -# modify it under the terms of the GNU General Public License -# as published by the Free Software Foundation; either version 2 -# of the License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -# -############################################################################## - -class SamplesPackingList: - """ - Properties which allow to define a Samples Packing List. - - Delivery objects usually have a causality. - """ - - _properties = ( - { 'id' : 'order_id', - 'description' : 'numero de commande echantillon', - 'type' : 'string', - 'override' : 1, - 'acquisition_base_category' : ('causality',), - 'acquisition_portal_type' : ('Samples Order',), - 'acquisition_copy_value' : 0, - 'acquisition_mask_value' : 0, - 'acquisition_accessor_id' : 'getId', - 'acquisition_depends' : None, - 'mode' : 'w' }, - ) - - _categories = ( 'causality', ) - diff --git a/product/Coramy/PropertySheet/Tissu.py b/product/Coramy/PropertySheet/Tissu.py deleted file mode 100755 index a87f764622..0000000000 --- a/product/Coramy/PropertySheet/Tissu.py +++ /dev/null @@ -1,63 +0,0 @@ -############################################################################## -# -# Copyright (c) 2002 Nexedi SARL and Contributors. All Rights Reserved. -# Jean-Paul Smets-Solanes <jp@nexedi.com> -# -# WARNING: This program as such is intended to be used by professional -# programmers who take the whole responsability of assessing all potential -# consequences resulting from its eventual inadequacies and bugs -# End users who are looking for a ready-to-use solution with commercial -# garantees and support are strongly adviced to contract a Free Software -# Service Company -# -# This program is Free Software; you can redistribute it and/or -# modify it under the terms of the GNU General Public License -# as published by the Free Software Foundation; either version 2 -# of the License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -# -############################################################################## - -class Tissu: - """ - Attributs spécifiques d'une ressource Tissu chez Coramy - """ - - _properties = ( - { 'id' : 'laize_totale', - 'description' : 'La laize utile du tissu', - 'type' : 'float', - 'mode' : 'w' }, - { 'id' : 'laize_utile', - 'description' : 'La laize utile du tissu', - 'type' : 'float', - 'mode' : 'w' }, - { 'id' : 'nb_couleurs', - 'description' : 'Nombre de couleurs', - 'type' : 'int', - 'mode' : 'w' }, - { 'id' : 'reference_qualite', - 'description' : 'La qualite tissu caracterise le support du tissu', - 'type' : 'string', - 'mode' : 'w' }, - { 'id' : 'reference_dessin', - 'description' : 'La reference du dessin chez le fournisseur tissu', - 'type' : 'string', - 'mode' : 'w' }, - { 'id' : 'commentaires', - 'description' : 'Commentaires', - 'type' : 'text', - 'mode' : 'w' }, - ) - - _categories = ( 'composition', 'collection', 'eip', 'motif', 'categorie_tissu', - 'code_entretien', 'label' ) - diff --git a/product/Coramy/PropertySheet/VarianteComposant.py b/product/Coramy/PropertySheet/VarianteComposant.py deleted file mode 100755 index a9103591a5..0000000000 --- a/product/Coramy/PropertySheet/VarianteComposant.py +++ /dev/null @@ -1,39 +0,0 @@ -############################################################################## -# -# Copyright (c) 2002 Coramy SAS and Contributors. All Rights Reserved. -# Thierry Faucher <Thierry_Faucher@coramy.com> -# -# WARNING: This program as such is intended to be used by professional -# programmers who take the whole responsability of assessing all potential -# consequences resulting from its eventual inadequacies and bugs -# End users who are looking for a ready-to-use solution with commercial -# garantees and support are strongly adviced to contract a Free Software -# Service Company -# -# This program is Free Software; you can redistribute it and/or -# modify it under the terms of the GNU General Public License -# as published by the Free Software Foundation; either version 2 -# of the License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -# -############################################################################## - - - -class VarianteComposant: - """ - VarianteComposant properties and categories - """ - - _properties = ( - - ) - diff --git a/product/Coramy/PropertySheet/VarianteGamme.py b/product/Coramy/PropertySheet/VarianteGamme.py deleted file mode 100755 index 38134c84ec..0000000000 --- a/product/Coramy/PropertySheet/VarianteGamme.py +++ /dev/null @@ -1,59 +0,0 @@ -############################################################################## -# -# Copyright (c) 2002 Coramy SAS and Contributors. All Rights Reserved. -# Thierry Faucher <Thierry_Faucher@coramy.com> -# -# WARNING: This program as such is intended to be used by professional -# programmers who take the whole responsability of assessing all potential -# consequences resulting from its eventual inadequacies and bugs -# End users who are looking for a ready-to-use solution with commercial -# garantees and support are strongly adviced to contract a Free Software -# Service Company -# -# This program is Free Software; you can redistribute it and/or -# modify it under the terms of the GNU General Public License -# as published by the Free Software Foundation; either version 2 -# of the License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -# -############################################################################## - - - -class VarianteGamme: - """ - VarianteGamme properties and categories - """ - - _properties = ( - { 'id' : 'couleur_id', - 'description' : 'Id des variantes de couleur de tissu', - 'type' : 'lines', - 'acquisition_base_category' : ('couleur',), - 'acquisition_portal_type' : ('Variante Tissu',), - 'acquisition_copy_value' : 0, - 'acquisition_mask_value' : 0, - 'acquisition_accessor_id' : 'getId', - 'acquisition_depends' : None, - 'mode' : 'w' }, - { 'id' : 'couleur_relative_url', - 'description' : 'Url locale des variantes de couleur de tissu', - 'type' : 'lines', - 'acquisition_base_category' : ('couleur',), - 'acquisition_portal_type' : ('Variante Tissu',), - 'acquisition_copy_value' : 0, - 'acquisition_mask_value' : 0, - 'acquisition_accessor_id' : 'getRelativeUrl', - 'acquisition_depends' : None, - 'mode' : 'w' }, - ) - - _categories = ( 'couleur', ) diff --git a/product/Coramy/PropertySheet/VarianteModele.py b/product/Coramy/PropertySheet/VarianteModele.py deleted file mode 100755 index d3e5acef0c..0000000000 --- a/product/Coramy/PropertySheet/VarianteModele.py +++ /dev/null @@ -1,43 +0,0 @@ -############################################################################## -# -# Copyright (c) 2002 Coramy SAS and Contributors. All Rights Reserved. -# Thierry Faucher <Thierry_Faucher@coramy.com> -# -# WARNING: This program as such is intended to be used by professional -# programmers who take the whole responsability of assessing all potential -# consequences resulting from its eventual inadequacies and bugs -# End users who are looking for a ready-to-use solution with commercial -# garantees and support are strongly adviced to contract a Free Software -# Service Company -# -# This program is Free Software; you can redistribute it and/or -# modify it under the terms of the GNU General Public License -# as published by the Free Software Foundation; either version 2 -# of the License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -# -############################################################################## - - - -class VarianteModele: - """ - VarianteModele properties and categories - """ - - _properties = ( - { 'id' : 'prototype', - 'description' : 'definit la variante dans laquelle on realise le prototype', - 'type' : 'boolean', - 'mode' : 'w' }, - ) - - diff --git a/product/Coramy/PropertySheet/VarianteMorphologique.py b/product/Coramy/PropertySheet/VarianteMorphologique.py deleted file mode 100755 index 3717f8a180..0000000000 --- a/product/Coramy/PropertySheet/VarianteMorphologique.py +++ /dev/null @@ -1,49 +0,0 @@ -############################################################################## -# -# Copyright (c) 2002 Coramy SAS and Contributors. All Rights Reserved. -# Thierry Faucher <Thierry_Faucher@coramy.com> -# -# WARNING: This program as such is intended to be used by professional -# programmers who take the whole responsability of assessing all potential -# consequences resulting from its eventual inadequacies and bugs -# End users who are looking for a ready-to-use solution with commercial -# garantees and support are strongly adviced to contract a Free Software -# Service Company -# -# This program is Free Software; you can redistribute it and/or -# modify it under the terms of the GNU General Public License -# as published by the Free Software Foundation; either version 2 -# of the License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -# -############################################################################## - - - -class VarianteMorphologique: - """ - VarianteMorphologique properties and categories - """ - - _properties = ( - { 'id' : 'vetement_id', - 'description' : 'Id des vetements utilises', - 'type' : 'lines', - 'acquisition_base_category' : ('specialise',), - 'acquisition_portal_type' : ('Vetement',), - 'acquisition_copy_value' : 0, - 'acquisition_mask_value' : 0, - 'acquisition_accessor_id' : 'getId', - 'acquisition_depends' : None, - 'mode' : 'w' }, - ) - - _categories = ( 'morpho_type', 'specialise') diff --git a/product/Coramy/PropertySheet/VarianteTissu.py b/product/Coramy/PropertySheet/VarianteTissu.py deleted file mode 100755 index 0ba7196a1f..0000000000 --- a/product/Coramy/PropertySheet/VarianteTissu.py +++ /dev/null @@ -1,40 +0,0 @@ -############################################################################## -# -# Copyright (c) 2002 Coramy SAS and Contributors. All Rights Reserved. -# Thierry Faucher <Thierry_Faucher@coramy.com> -# -# WARNING: This program as such is intended to be used by professional -# programmers who take the whole responsability of assessing all potential -# consequences resulting from its eventual inadequacies and bugs -# End users who are looking for a ready-to-use solution with commercial -# garantees and support are strongly adviced to contract a Free Software -# Service Company -# -# This program is Free Software; you can redistribute it and/or -# modify it under the terms of the GNU General Public License -# as published by the Free Software Foundation; either version 2 -# of the License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -# -############################################################################## - - - -class VarianteTissu: - """ - VarianteTissu properties and categories - """ - - _properties = ( - - ) - - _categories = ( 'referentiel_couleur', 'collection') diff --git a/product/Coramy/PropertySheet/VariatedReference.py b/product/Coramy/PropertySheet/VariatedReference.py deleted file mode 100755 index d6cfd3a53c..0000000000 --- a/product/Coramy/PropertySheet/VariatedReference.py +++ /dev/null @@ -1,46 +0,0 @@ -############################################################################## -# -# Copyright (c) 2002 Nexedi SARL and Contributors. All Rights Reserved. -# Jean-Paul Smets-Solanes <jp@nexedi.com> -# -# WARNING: This program as such is intended to be used by professional -# programmers who take the whole responsability of assessing all potential -# consequences resulting from its eventual inadequacies and bugs -# End users who are looking for a ready-to-use solution with commercial -# garantees and support are strongly adviced to contract a Free Software -# Service Company -# -# This program is Free Software; you can redistribute it and/or -# modify it under the terms of the GNU General Public License -# as published by the Free Software Foundation; either version 2 -# of the License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -# -############################################################################## - -class VariatedReference: - """ - VariatedReference determine des references ou codes - dont les valeurs changent en fonction des variantes possibles de la resource concernee. - """ - - _properties = ( - # Definition of the variation domain - { 'id' : 'reference_variation_base_category', - 'storage_id' : 'reference_variation_base_category_list', # Coramy Compatibility - 'description' : 'A list of base categories which define possible discrete variations. '\ - 'Variation ranges are stored as category membership. '\ - '(prev. variation_category_list).', - 'type' : 'lines', - 'mode' : 'w' }, - ) - - _categories = ('reference_type', ) diff --git a/product/Coramy/PropertySheet/Vetement.py b/product/Coramy/PropertySheet/Vetement.py deleted file mode 100755 index bf12671198..0000000000 --- a/product/Coramy/PropertySheet/Vetement.py +++ /dev/null @@ -1,78 +0,0 @@ -############################################################################## -# -# Copyright (c) 2002 Coramy SAS and Contributors. All Rights Reserved. -# Thierry Faucher <Thierry_Faucher@coramy.com> -# -# WARNING: This program as such is intended to be used by professional -# programmers who take the whole responsability of assessing all potential -# consequences resulting from its eventual inadequacies and bugs -# End users who are looking for a ready-to-use solution with commercial -# garantees and support are strongly adviced to contract a Free Software -# Service Company -# -# This program is Free Software; you can redistribute it and/or -# modify it under the terms of the GNU General Public License -# as published by the Free Software Foundation; either version 2 -# of the License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -# -############################################################################## - - -class Vetement: - """ - Vetement properties and categories - """ - - _properties = ( - { 'id' : 'librairie', - 'description' : 'librairie contenant les morceaux', - 'type' : 'string', - 'mode' : 'w' }, - { 'id' : 'base_taille', - 'description' : 'taille de base', - 'type' : 'string', - 'mode' : 'w' }, - { 'id' : 'commentaires', - 'description' : 'Commentaires', - 'type' : 'text', - 'mode' : 'w' }, - { 'id' : 'nomenclature', - 'description' : 'composants et consommations principaux servant a mettre au point le vetement', - 'type' : 'text', - 'mode' : 'w' }, - { 'id' : 'mode_operatoire', - 'description' : 'ensemble de recommandations de montage servant a mettre au point le vetement', - 'type' : 'text', - 'mode' : 'w' }, - { 'id' : 'forme_id', - 'description' : 'Id des formes compatibles', - 'type' : 'lines', - 'acquisition_base_category' : ('specialise',), - 'acquisition_portal_type' : ('Forme',), - 'acquisition_copy_value' : 0, - 'acquisition_mask_value' : 0, - 'acquisition_accessor_id' : 'getId', - 'acquisition_depends' : None, - 'mode' : 'w' }, - { 'id' : 'correspondance_id', - 'description' : 'Id de la correspondance mesure associée', - 'type' : 'lines', - 'acquisition_base_category' : ('specialise',), - 'acquisition_portal_type' : ('Correspondance Mesures',), - 'acquisition_copy_value' : 0, - 'acquisition_mask_value' : 0, - 'acquisition_accessor_id' : 'getId', - 'acquisition_depends' : None, - 'mode' : 'w' }, - ) - - _categories = ( 'taille', 'mesure_vetement', 'specialise') diff --git a/product/Coramy/PropertySheet/__init__.py b/product/Coramy/PropertySheet/__init__.py deleted file mode 100755 index e69de29bb2..0000000000 diff --git a/product/Coramy/VERSION.txt b/product/Coramy/VERSION.txt deleted file mode 100755 index d65cabcf9f..0000000000 --- a/product/Coramy/VERSION.txt +++ /dev/null @@ -1 +0,0 @@ -Coramy 0.1 diff --git a/product/Coramy/__init__.py b/product/Coramy/__init__.py deleted file mode 100755 index 726156cfdd..0000000000 --- a/product/Coramy/__init__.py +++ /dev/null @@ -1,56 +0,0 @@ -############################################################################## -# -# Copyright (c) 2002 Nexedi SARL and Contributors. All Rights Reserved. -# Jean-Paul Smets-Solanes <jp@nexedi.com> -# -# WARNING: This program as such is intended to be used by professional -# programmers who take the whole responsability of assessing all potential -# consequences resulting from its eventual inadequacies and bugs -# End users who are looking for a ready-to-use solution with commercial -# garantees and support are strongly adviced to contract a Free Software -# Service Company -# -# This program is Free Software; you can redistribute it and/or -# modify it under the terms of the GNU General Public License -# as published by the Free Software Foundation; either version 2 -# of the License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -# -############################################################################## -""" - ERP5 Free Software ERP -""" - -# Update ERP5 Globals -from Products.ERP5Type.Utils import initializeProduct, updateGlobals -import sys, Permissions -this_module = sys.modules[ __name__ ] -document_classes = updateGlobals( this_module, globals(), permissions_module = Permissions) - -# Define object classes and tools -object_classes = () -portal_tools = () -content_classes = () -content_constructors = () - -# Import modules and initialize security -import MetoAPI - -# Finish installation -def initialize( context ): - import Document - initializeProduct(context, this_module, globals(), - document_module = Document, - document_classes = document_classes, - object_classes = object_classes, - portal_tools = portal_tools, - content_constructors = content_constructors, - content_classes = content_classes) diff --git a/product/Coramy/everyday_script b/product/Coramy/everyday_script deleted file mode 100755 index 792d600548..0000000000 --- a/product/Coramy/everyday_script +++ /dev/null @@ -1 +0,0 @@ -# diff --git a/product/Coramy/help/.cvsignore b/product/Coramy/help/.cvsignore deleted file mode 100755 index d0743b7da6..0000000000 --- a/product/Coramy/help/.cvsignore +++ /dev/null @@ -1,2 +0,0 @@ -.AppleDouble -*.pyc diff --git a/product/Coramy/help/Composant.html b/product/Coramy/help/Composant.html deleted file mode 100755 index bc9196586d..0000000000 --- a/product/Coramy/help/Composant.html +++ /dev/null @@ -1,13 +0,0 @@ -<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> -<html> -<head> -<title>Doc</title> -<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> -<link href="coramy" rel="stylesheet" type="text/css"> -</head> - -<body> -<p class="Title">Composant</p> -<p> </p><p> </p> -</body> -</html> diff --git a/product/Coramy/help/Forme_Creer.html b/product/Coramy/help/Forme_Creer.html deleted file mode 100755 index 55927fd023..0000000000 --- a/product/Coramy/help/Forme_Creer.html +++ /dev/null @@ -1,32 +0,0 @@ -<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> -<html> -<head> -<title>Doc</title> -<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> -<link href="coramy" rel="stylesheet" type="text/css"> -</head> - -<body> -<p class="Title">Forme</p> -<p> </p> -<p><strong>Créer une nouvelle forme :</strong></p> -<p>Il y a deux méthodes pour afficher un formulaire vierge :<br> - - Dans le menu action, choisir "Add Forme"et - cliquer sur le bouton, ou<br> - - A partir du module Forme, cliquer directement - sur l'icone d'un nouveau document<br> -<br> - <input type="checkbox" name="checkbox" value="checkbox"> Dans ce formulaire vierge, nommer la forme selon la nouvelle nomenclature<br> - <input type="checkbox" name="checkbox" value="checkbox"> Remplir le référentiel forme <br> -<input type="checkbox" name="checkbox" value="checkbox"> Indiquer la Collection et l'EIP (Espace Imaginaire Produit)<br> - <input type="checkbox" name="checkbox" value="checkbox"> Remplir la description<br> -<input type="checkbox" name="checkbox" value="checkbox"> Ne pas oublier de VALIDER<br> - <br> - <input type="checkbox" name="checkbox" value="checkbox"> Dans le menu Action, ajouter un dessin technique (add dessin technique)<br> - - <input type="checkbox" name="checkbox" value="checkbox"> Description du dessin (particulièrement s'il y en a plusieurs)<br> - - <input type="checkbox" name="checkbox" value="checkbox"> VALIDER<br> - <input type="checkbox" name="checkbox" value="checkbox"> Cliquer sur Parcourir, et choisir le dessin technique</p> -</body> -</html> diff --git a/product/Coramy/help/Gamme_Creer.html b/product/Coramy/help/Gamme_Creer.html deleted file mode 100755 index 75fbfb8059..0000000000 --- a/product/Coramy/help/Gamme_Creer.html +++ /dev/null @@ -1,29 +0,0 @@ -<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> -<html> -<head> -<title>Doc</title> -<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> -<link href="coramy" rel="stylesheet" type="text/css"> -</head> - -<body> -<p class="Title">Gamme (coloris)</p> -<p> </p> -<p><strong>Crer une gamme</strong></p> -<p>Il y a deux méthodes pour afficher un formulaire vierge :<br> - - Dans le menu action, choisir "Add Modele"et cliquer sur le bouton, ou<br> - - A partir du module Modele, cliquer directement - sur l'icone d'un nouveau document<br> -<br><input type="checkbox" name="checkbox" value="checkbox"> Dans ce formulaire vierge, nommer le modèle selon la nouvelle nomenclature<br> -<input type="checkbox" name="checkbox" value="checkbox"> Remplir la référence client (si ellle existe)<br> -<input type="checkbox" name="checkbox" value="checkbox"> Indiquer la Collection et l'EIP (Espace Imaginaire Produit)<br> -<input type="checkbox" name="checkbox" value="checkbox"> Remplir la description<br> -<input type="checkbox" name="checkbox" value="checkbox"> Dans Accesoires, il est possible d'annoter les transferts ou autre composant<br> -<input type="checkbox" name="checkbox" value="checkbox"> Ne pas oublier de VALIDER<br> -<br>(Pour mettre a jour le lien avec la forme et la gamme de coloris, il faut que ces éléments existent.)<br> -<input type="checkbox" name="checkbox" value="checkbox"> Créer le lien avec la forme<br> -<input type="checkbox" name="checkbox" value="checkbox"> Créer le lien avec la gamme<br> - -</p> -</body> -</html> diff --git a/product/Coramy/help/Gamme_ope.html b/product/Coramy/help/Gamme_ope.html deleted file mode 100755 index fc2521d3ef..0000000000 --- a/product/Coramy/help/Gamme_ope.html +++ /dev/null @@ -1,43 +0,0 @@ -<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> -<html> -<head> -<title>Doc</title> -<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> -<link href="coramy" rel="stylesheet" type="text/css"> -</head> - -<body> -<p class="Title">Gamme opératoire</p> -<p> </p> -<p><strong>Check-list de la gamme opératoire</strong></p> -<p><input type="checkbox" name="checkbox" value="checkbox"> - A partir des favoris (Etudes gamme opératoire), repérer les - modèles à valider.<br> - <input type="checkbox" name="checkbox" value="checkbox"> Ouvrir un nouvel onglet, cliquer sur Accueil, choisir le module Transformations<br> - <input type="checkbox" name="checkbox" value="checkbox"> Rechercher une gamme existante afin de la copier (ex 70170)<br> - <input type="checkbox" name="checkbox" value="checkbox"> Cocher cette gamme, cliquer sur copier, puis sur coller<br> - <input type="checkbox" name="checkbox" value="checkbox"> Retrouver la copie (COPY%), et rentrer dans la fiche<br> - <input type="checkbox" name="checkbox" value="checkbox"> Changer le nom et la description<br> - <input type="checkbox" name="checkbox" value="checkbox"> VALIDER<br> - Cas ou il y a une erreur "id XXXXX it's already in use", voir à la fin<br> - <input type="checkbox" name="checkbox" value="checkbox"> Indiquer le produit principal (forme/70170)<br> - <input type="checkbox" name="checkbox" value="checkbox"> Lancer la recherche (moulinette)<br> - <input type="checkbox" name="checkbox" value="checkbox"> Cocher la forme recherchée<br> - <input type="checkbox" name="checkbox" value="checkbox"> Cliquer sur Update Relation<br> - <input type="checkbox" name="checkbox" value="checkbox"> Cliquer sur l'onglet Operations<br> - <input type="checkbox" name="checkbox" value="checkbox"> Modifier les temps<br> - <input type="checkbox" name="checkbox" value="checkbox"> VALIDER<br> - <input type="checkbox" name="checkbox" value="checkbox"> Dans l'onglet Netscape, revenir sur modèle à valider<br> - <input type="checkbox" name="checkbox" value="checkbox"> Dans le menu Action, cliquer sur "Valider la gamme opératoire" (+ moulinette)<br><br> - Cas ou il y a une erreur "id XXXXX it's already in use" : cela signifit que - la transformation XXXXX existe déjà.<br> - Dans ce cas :<br> -- Ouvrir un nouvel onglet, cliquer sur accueil, puis Transformations<br> -- Rechercher la gamme existante (XXXXX%)<br> -Si elle contient des opérations, vous pouvez alors la mettre à jour (comme une gamme normale)<br> -On ne tient alors plus compte de la gamme que vous aviez commencé à remplir,<br> -cette copie (elle s'appelle toujours copy..... puisque la validation a été refusée) peut<br> -servir pour une autre gamme.<br> -</p> -</body> -</html> diff --git a/product/Coramy/help/Modele.html b/product/Coramy/help/Modele.html deleted file mode 100755 index 93d3a1865f..0000000000 --- a/product/Coramy/help/Modele.html +++ /dev/null @@ -1,21 +0,0 @@ -<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> -<html> -<head> -<title>Doc</title> -<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> -<link href="coramy" rel="stylesheet" type="text/css"> -</head> - -<body> -<p class="Title">Modèle</p> -<p> </p> -<p><strong>Le module Modèle </strong>contient tous les modèles.</p> -<p>Il y a deux méthodes pour se rendre dans le module Modèle :<br> - - à partir de la page d'accueil, cliquer - sur modèles (cf 1)<br> - - quelque soit l'endroit où l'on se trouve, - sélectionner dans la palette des modules (cf 2) le module Modèle<br> - et cliquer sur le <a href="Outils">bouton - palette</a>.</p> -</body> -</html> diff --git a/product/Coramy/help/Modele_Creer.html b/product/Coramy/help/Modele_Creer.html deleted file mode 100755 index 2bcc942b37..0000000000 --- a/product/Coramy/help/Modele_Creer.html +++ /dev/null @@ -1,31 +0,0 @@ -<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> -<html> -<head> -<title>Doc</title> -<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> -<link href="coramy" rel="stylesheet" type="text/css"> -</head> - -<body> -<p class="Title">Modele</p> -<p> </p> -<p><strong>Créer un nouveau modèle :</strong></p> -<p>Il y a deux méthodes pour afficher un formulaire vierge :<br> - - Dans le menu action, choisir "Add Modele"et cliquer sur le bouton, ou<br> - - A partir du module Modele, cliquer directement - sur l'icone d'un nouveau document<br> -<br><input type="checkbox" name="checkbox" value="checkbox"> Dans ce formulaire vierge, nommer le modèle selon la nouvelle nomenclature<br> -<input type="checkbox" name="checkbox" value="checkbox"> Remplir la référence client (si ellle existe)<br> -<input type="checkbox" name="checkbox" value="checkbox"> Indiquer la Collection et l'EIP (Espace Imaginaire Produit)<br> -<input type="checkbox" name="checkbox" value="checkbox"> Remplir la description<br> -<input type="checkbox" name="checkbox" value="checkbox"> Dans Accesoires, il est possible d'annoter les transferts ou autre composant<br> -<input type="checkbox" name="checkbox" value="checkbox"> Ne pas oublier de VALIDER<br> -<br> - (Pour mettre à jour le lien avec la forme et la gamme de coloris, il - faut que ces éléments existent.)<br> -<input type="checkbox" name="checkbox" value="checkbox"> Créer le lien avec la forme<br> -<input type="checkbox" name="checkbox" value="checkbox"> Créer le lien avec la gamme<br> - -</p> -</body> -</html> diff --git a/product/Coramy/help/Outils.html b/product/Coramy/help/Outils.html deleted file mode 100755 index af676db19a..0000000000 --- a/product/Coramy/help/Outils.html +++ /dev/null @@ -1,16 +0,0 @@ -<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> -<html> -<head> -<title>Doc</title> -<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> -<link href="coramy" rel="stylesheet" type="text/css"> -</head> - -<body> -<p class="Title">Outils</p> -<p> </p> -<p><strong>Le bouton palette </strong>charge la page du module recherché - : </p> -<p> </p> -</body> -</html> diff --git a/product/Coramy/help/Page1.html b/product/Coramy/help/Page1.html deleted file mode 100755 index dd04a057fa..0000000000 --- a/product/Coramy/help/Page1.html +++ /dev/null @@ -1,13 +0,0 @@ -<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> -<html> -<head> -<title>Doc</title> -<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> -<link href="coramy" rel="stylesheet" type="text/css"> -</head> - -<body> -<p class="Title">Documentation ERP5</p><p> </p><p> </p> -<div align="center"><img src="images/ERP5.gif"> </div> -</body> -</html> diff --git a/product/Coramy/help/Sommaire.html b/product/Coramy/help/Sommaire.html deleted file mode 100755 index 73d626cef2..0000000000 --- a/product/Coramy/help/Sommaire.html +++ /dev/null @@ -1,61 +0,0 @@ -<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> -<html> -<head> - <title>Sommaire</title> - <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"/> - <link href="coramy" rel="stylesheet" type="text/css"/> -</head> - -<body> - <a href="http://192.168.253.14:9673/coramy"> - <img src="images/ERP5.jpg"></a> - <p> </p> - <p> - <a href="Page1" target="Page"> Index </a><br> - ------------------------------------------------------------------------<br> - <a href="#A">A</a> <a href="#B">B</a> <a href="#C">C</a> - <a href="#D">D</a> <a href="#E">E</a> <a href="#F">F</a> - <a href="#G">G</a> <a href="#H">H</a> <a href="#I">I</a> - <a href="#J">J</a> <a href="#K">K</a> <a href="#L">L</a> - <a href="#M">M</a> <a href="#N">N</a> <a href="#O">O</a> - <a href="#P">P</a> <a href="#Q">Q</a> <a href="#R">R</a> - <a href="#S">S</a> <a href="#T">T</a> <a href="#U">U</a> - <a href="#V">V</a> <a href="#W">W</a> <a href="#X">X</a> - <a href="#Y">Y</a> <a href="#Z">Z</a><br> - ------------------------------------------------------------------------ - </p> - <p> </p> - <p> - <a name="A"> </a><br> - <a name="B"> </a><br> - <a name="C"> </a><br> - - <a href="Composant" target="Page">Composant</a><br> - - <a href="Composant_Creer" target="Page">nouveau</a><br> - <a name="D"> </a><br> - <a name="E"> </a><br> - <a name="F"> </a><br> - <a href="Forme" targer="Page">Forme</a><br> - - <a href="Forme_Creer" target="Page">nouvelle</a> <br> - <a name="G">Gamme</a><br> - <a name="H"> </a><br> - <a name="I"> </a><br> - <a name="J"> </a><br> - <a name="K"> </a><br> - <a name="L"> </a><br> - <a name="M"> </a><br> - <a href="Modele" target="Page">Modèle</a><br> - - <a href="Modele_Creer" target="Page">nouveau</a><br> - <a name="N"> </a><br> - <a name="O"> </a><br> - <a href="Outils" target="Page">Outils</a> - <a name="T"> </a><br> - Transformations<br> - <a href="Gamme_ope" target="Page">Gamme opératoire</a> -</p> - -</body> -</html> diff --git a/product/Coramy/help/coramy.css b/product/Coramy/help/coramy.css deleted file mode 100755 index 3413784694..0000000000 --- a/product/Coramy/help/coramy.css +++ /dev/null @@ -1,74 +0,0 @@ -/* _________________ CSS CORAMY _________________ */ -/* ________ Thierry_Faucher@coramy.com - last modif. : 08-03-03 ________ */ - -A:link { - color: #2F5651; - text-decoration: underline; -} - -A:visited { - color: #2F5651; - text-decoration: none; -} - -A:hover { - text-decoration: underline; - color: red; -} - -BODY{ - background-color: #DAE6E6; - color: #2F5651; -} - -.Title{ - font-family: Arial, Helvetica, Sans-serif; - font-size: 32px; - line-height: 24px; - color: #2F5651; - text-align: center; -} - -.subSummary{ - font-family: Arial, Helvetica, Sans-serif; - font-size: 10px; - line-height: 10px; - color: #2F5651; -} - -.Coramy{ - font-family: Palatino; - font-weight: bold; - font-size: 36px; - line-height: 36px; - color: #a39d99; - text-align: center; -} - -.TexteActif{ - font-family: Palatino; - font-weight: normal; - font-size: 18px; - line-height: 18px; - color: #1a3664; - text-align: center; -} - -.TextePassif{ - font-family: Palatino; - font-weight: normal; - font-size: 18px; - line-height: 18px; - color: #a39d99; - text-align: center; -} - -.Texte{ - font-family: Arial, Helvetica, Sans-serif; - font-size: 14px; - line-height: 14px; - color: #1a3664; - text-align: left; -} - - diff --git a/product/Coramy/help/images/.cvsignore b/product/Coramy/help/images/.cvsignore deleted file mode 100755 index d0743b7da6..0000000000 --- a/product/Coramy/help/images/.cvsignore +++ /dev/null @@ -1,2 +0,0 @@ -.AppleDouble -*.pyc diff --git a/product/Coramy/help/images/ERP5.gif b/product/Coramy/help/images/ERP5.gif deleted file mode 100755 index c93746483f43d5a2e3c8cdbdcb264d6a10fca31b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 25410 zcmZU3Wm6jr)MZGJ5EuyV6n7}aiWezPDei^f?k<Jk?h?GX7k4NG_aeouSg``dikIxO z@9fOZ?A}lJ2i!CFn1YhLu!vb9pbKz^0vuf5y}Z1fo}NldNLX1~)=dA{-rfeO#$i}g zE6OYAx<;^gHF<k`O-)TrjE@Hg2R}SKxRg$Wg@p|)9~6H165Y1ExVYHV+}u!K-#EQn zQ&Y2hcFjUeOeE(%JUpz{(ULMh>*(O{^6~)8%h8Bw(?~`Vl@y^Be@RJBj*gB-p`Ke? zTfJg3AOF3){aQWP*?GLW*3;9oxOW1O^x^p6=$zItKR<u<^!)sEyRxz(=#pRdZK}Aq z`045C@87?gwn3E@6-m`S�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 diff --git a/product/Coramy/help/images/ERP5.jpg b/product/Coramy/help/images/ERP5.jpg deleted file mode 100755 index b56de31d3b7899c281abbdf687827b31b07c3c6b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 20598 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 RjSBpbZuD-flcDDN{{TR)py&Vq diff --git a/product/Coramy/help/images/Modele_cf1.jpg b/product/Coramy/help/images/Modele_cf1.jpg deleted file mode 100755 index a1a3fd84d23961d8effff99732a26ac6016718a6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 36697 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 diff --git a/product/Coramy/help/images/accueil.jpg b/product/Coramy/help/images/accueil.jpg deleted file mode 100755 index 8f6a63304d500ce1e8e76b941c8bd129dc8d09a7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 76787 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 diff --git a/product/Coramy/help/images/apache_pb.gif b/product/Coramy/help/images/apache_pb.gif deleted file mode 100755 index 4ea5856123daab22f2d01cd2cbb11442b6a9c5ee..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2326 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 diff --git a/product/Coramy/help/images/macosxlogo.gif b/product/Coramy/help/images/macosxlogo.gif deleted file mode 100755 index cf99817c0928ff7a522592eeecdaef5e332511ae..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2829 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 QuVD*Ly9Qr}M+2V!19(u>dH?_b diff --git a/product/Coramy/help/images/palette.jpg b/product/Coramy/help/images/palette.jpg deleted file mode 100755 index 2d818ad3b774a0595871d2dd3b9161303add5eec..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 17743 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 diff --git a/product/Coramy/help/images/web_share.gif b/product/Coramy/help/images/web_share.gif deleted file mode 100755 index 9abd912742c167e3fec310fbd2f6263c606f2c98..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16923 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 XP3j5S=|xt_<V@cLRV`%*Snz)Urgbr~ diff --git a/product/Coramy/help/index.html b/product/Coramy/help/index.html deleted file mode 100755 index 10b184a8e0..0000000000 --- a/product/Coramy/help/index.html +++ /dev/null @@ -1,15 +0,0 @@ -<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN" "http://www.w3.org/TR/html4/frameset.dtd"> -<html> -<head> -<title>Documentation ERP5</title> -<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> -</head> - -<frameset cols="22%,*" frameborder="NO" border="0" framespacing="0"> - <frame src="Sommaire" name="Sommaire" scrolling="YES" resize> - <frame src="Page1" name="Page"> -</frameset> -<noframes><body> - -</body></noframes> -</html> diff --git a/product/Coramy/refresh.txt b/product/Coramy/refresh.txt deleted file mode 100755 index e69de29bb2..0000000000 diff --git a/product/Coramy/skins/.cvsignore b/product/Coramy/skins/.cvsignore deleted file mode 100755 index d0743b7da6..0000000000 --- a/product/Coramy/skins/.cvsignore +++ /dev/null @@ -1,2 +0,0 @@ -.AppleDouble -*.pyc diff --git a/product/Coramy/skins/coramy_crm/Organisation_defaultSearchForm.form b/product/Coramy/skins/coramy_crm/Organisation_defaultSearchForm.form deleted file mode 100755 index c2a87ce3c0..0000000000 --- a/product/Coramy/skins/coramy_crm/Organisation_defaultSearchForm.form +++ /dev/null @@ -1,167 +0,0 @@ -<?xml version="1.0"?> - -<form> - <title>Rechercher</title> - <row_length>4</row_length> - <name>search</name> - <pt>form_view_dialog</pt> - <action>Base_searchHandler</action> - <method>POST</method> - <enctype></enctype> - <encoding>UTF-8</encoding> - <stored_encoding>ISO-8859-1</stored_encoding> - <unicode_mode>false</unicode_mode> - <groups> - <group> - <title>left</title> - <fields> - - <field><id>my_organisation_id_list</id> <type>LinesField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default type="list">[]</default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <height type="int">5</height> - <hidden type="int">0</hidden> - <max_length></max_length> - <max_linelength></max_linelength> - <max_lines></max_lines> - <required type="int">0</required> - <title>Modèle</title> - <unicode type="int">0</unicode> - <view_separator><br /> -</view_separator> - <whitespace_preserve type="int">0</whitespace_preserve> - <width type="int">40</width> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_many_lines">You entered too many lines.</message> - <message name="line_too_long">A line was too long.</message> - <message name="too_long">You entered too many characters.</message> - </messages> - </field> - <field><id>my_reset</id> <type>CheckBoxField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default type="int">1</default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <title>Recherche globale</title> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - </messages> - </field> - <field><id>my_list_form_id</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">1</hidden> - <max_length></max_length> - <required type="int">0</required> - <title></title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <default>python:here.REQUEST.form_id</default> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - <field><id>my_list_method_id</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default>Organisation_zDefaultSearch</default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">1</hidden> - <max_length></max_length> - <required type="int">0</required> - <title>x</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>right</title> - <fields> - - <field><id>my_group_list</id> <type>MultiListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default type="list">[]</default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <extra_item></extra_item> - <hidden type="int">0</hidden> - <items type="list">[]</items> - <required type="int">0</required> - <size type="int">5</size> - <title>Organigramme</title> - <unicode type="int">0</unicode> - <view_separator><br /> -</view_separator> - </values> - <tales> - <default>python:'rien du tout'</default> - <items>here/portal_categories/group/getFormItemList</items> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - </fields> - </group> - </groups> -</form> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_crm/Organisation_getOneLineAddress.py b/product/Coramy/skins/coramy_crm/Organisation_getOneLineAddress.py deleted file mode 100755 index 0d3543e0f3..0000000000 --- a/product/Coramy/skins/coramy_crm/Organisation_getOneLineAddress.py +++ /dev/null @@ -1,24 +0,0 @@ -## Script (Python) "Organisation_getOneLineAddress" -##bind container=container -##bind context=context -##bind namespace= -##bind script=script -##bind subpath=traverse_subpath -##parameters= -##title= -## -address = context.getDefaultAddress() -if address != None: - zip_code = context.getDefaultAddress().getZipCode() - city = context.getDefaultAddress().getCity() -else: - zip_code = '' - city = '' - -region = context.getDefaultAddressRegion() -if region == None: - region = '' -else: - region = region.split('/')[-1] - -return 'Lieu livraison : %s %s %s' % (zip_code, city, region) diff --git a/product/Coramy/skins/coramy_crm/Organisation_importFile.py b/product/Coramy/skins/coramy_crm/Organisation_importFile.py deleted file mode 100755 index 0b76d64fc3..0000000000 --- a/product/Coramy/skins/coramy_crm/Organisation_importFile.py +++ /dev/null @@ -1,171 +0,0 @@ -## Script (Python) "Organisation_importFile" -##bind container=container -##bind context=context -##bind namespace= -##bind script=script -##bind subpath=traverse_subpath -##parameters=import_file, **kw -##title= -## -# import des lieux fonctions depuis Cognis -# format de fichier attendu : -# Organigramme, Role, Metier, Fonction, Raison sociale, Adresse, CodePostal, Ville -# Ville, Pays, Code Ean, Code TVA, Code compta, Tél, Fax, email - -request = context.REQUEST -file_line_list = import_file.readlines() -organisation_module = context.getPortalObject().organisation -compteur = 0 - -for file_line in file_line_list : - sub_line_list = file_line.split('\r') - for sub_line in sub_line_list : - if sub_line != '': - - # create a new item - line_item_list = sub_line.split('\t') - - # génération Id - my_id = str(organisation_module.generateNewId()) - - # recup categorie Organigramme - if len(line_item_list) > 0 : - my_organigramme = line_item_list[0] - else : - my_organigramme = None - - # recup catégorie Role - if len(line_item_list) > 1 : - my_role = line_item_list[1] - else : - my_role = None - - # recup categorie Métier - if len(line_item_list) > 2 : - my_metier = line_item_list[2] - else : - my_metier = None - - # recup categorie Fonction - if len(line_item_list) > 3 : - my_fonction = line_item_list[3] - else : - my_fonction = None - - # recup raison sociale - if len(line_item_list) > 4 : - my_name = line_item_list[4] - else : - my_name = None - - # recup Adresse - if len(line_item_list) > 5 : - my_street1 = line_item_list[5] - else : - my_street1 = None - if len(line_item_list) > 6 : - my_street2 = line_item_list[6] - else : - my_street2 = None - if len(line_item_list) > 7 : - my_street3 = line_item_list[7] - else : - my_street3 = None - - # recup Code Postal - if len(line_item_list) > 8 : - my_cp = line_item_list[8] - else : - my_cp = None - - # recup Ville - if len(line_item_list) > 9 : - my_city = line_item_list[9] - else : - my_city = None - - # recup catégorie Pays - if len(line_item_list) > 10 : - if line_item_list[10] == "France" : - my_country = "Europe/Nord/France" - else : - my_country = None - else : - my_country = None - - # recup Code EAN - if len(line_item_list) > 11 : - my_ean_code = line_item_list[11] - else : - my_ean_code = None - - # recup Code TVA - if len(line_item_list) > 12 : - my_tva_code = line_item_list[12] - else : - my_tva_code = None - - # recup Code comptable - if len(line_item_list) > 13 : - my_compta_code = line_item_list[13] - else : - my_compta_code = None - - # recup Téléphone - if len(line_item_list) > 14 : - my_tel = line_item_list[14] - else : - my_tel = None - - # recup Fax - if len(line_item_list) > 15 : - my_fax = line_item_list[15] - else : - my_fax = None - - # recup Email - if len(line_item_list) > 16 : - my_email = line_item_list[16] - else : - my_email = None - - my_address = '' - if my_street1 != '' : - my_address += my_street1 - if my_street2 != '' : - my_address += '\n'+my_street2 - if my_street3 != '' : - my_address += '\n'+my_street3 - - # print my_id,my_name,my_address,my_tel,my_fax,my_email,my_role,my_organigramme,my_fonction,my_metier,my_country,my_city,my_cp,my_name,my_ean_code,my_tva_code,my_compta_code - # print len(line_item_list), len(file_line_list) - - context.portal_types.constructContent(type_name = 'Organisation', - container = organisation_module, - id = my_id, - title = my_name, - default_address_street_address = my_address, - default_telephone_text = my_tel, - default_fax_text = my_fax, - default_email_text = my_email, - role = my_role, - group = my_organigramme, - function = my_fonction, - activity = my_metier, - default_address_region = my_country, - default_address_city = my_city, - default_address_zip_code = my_cp, - corporate_name = my_name, - ean13_code = my_ean_code, - eu_vat_code = my_tva_code, - code_comptable = my_compta_code) - compteur += 1 - organisation_module[my_id].flushActivity(invoke=1) - -# return printed - -redirect_url = '%s?%s' % ( organisation_module.absolute_url() - , 'portal_status_message=%s+organisations+créées.' % compteur - ) - -request[ 'RESPONSE' ].redirect( redirect_url ) diff --git a/product/Coramy/skins/coramy_crm/Organisation_importForm.form b/product/Coramy/skins/coramy_crm/Organisation_importForm.form deleted file mode 100755 index 701195c4b1..0000000000 --- a/product/Coramy/skins/coramy_crm/Organisation_importForm.form +++ /dev/null @@ -1,49 +0,0 @@ -<?xml version="1.0"?> - -<form> - <title>Importer</title> - <row_length>4</row_length> - <name>Organisation_importForm</name> - <pt>form_dialog</pt> - <action>Organisation_importFile</action> - <method>POST</method> - <enctype>multipart/form-data</enctype> - <encoding>UTF-8</encoding> - <stored_encoding>ISO-8859-1</stored_encoding> - <unicode_mode>false</unicode_mode> - <groups> - <group> - <title>Default</title> - <fields> - - <field><id>my_import_file</id> <type>FileField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">40</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <title>Fichier à importer</title> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>hidden</title> - <fields> - - </fields> - </group> - </groups> -</form> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_crm/bank_account_view.form b/product/Coramy/skins/coramy_crm/bank_account_view.form deleted file mode 100755 index 83e11e5e7e..0000000000 --- a/product/Coramy/skins/coramy_crm/bank_account_view.form +++ /dev/null @@ -1,153 +0,0 @@ -<?xml version="1.0"?> - -<form> - <title></title> - <row_length>4</row_length> - <name>Telephone View</name> - <pt>form_view</pt> - <action>base_edit</action> - <method>POST</method> - <enctype></enctype> - <encoding>UTF-8</encoding> - <stored_encoding>ISO-8859-1</stored_encoding> - <unicode_mode>false</unicode_mode> - <groups> - <group> - <title>left</title> - <fields> - - <field><id>my_id</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <max_length></max_length> - <required type="int">1</required> - <title>my_id</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <default>here/Id</default> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - <field><id>my_title</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <max_length></max_length> - <required type="int">1</required> - <title>my_title</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <default>here/Title</default> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - <field><id>my_iban</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <max_length></max_length> - <required type="int">1</required> - <title>Iban Number</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <default>here/Iban</default> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>right</title> - <fields> - - </fields> - </group> - <group> - <title>center</title> - <fields> - - <field><id>my_description</id> <type>TextAreaField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <height type="int">5</height> - <hidden type="int">0</hidden> - <max_length></max_length> - <max_linelength></max_linelength> - <max_lines></max_lines> - <required type="int">0</required> - <title>my_description</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - <width type="int">40</width> - </values> - <tales> - <default>here/Description</default> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_many_lines">You entered too many lines.</message> - <message name="line_too_long">A line was too long.</message> - <message name="too_long">You entered too many characters.</message> - </messages> - </field> - </fields> - </group> - </groups> -</form> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_crm/chat_address_view.form b/product/Coramy/skins/coramy_crm/chat_address_view.form deleted file mode 100755 index 1d3495064d..0000000000 --- a/product/Coramy/skins/coramy_crm/chat_address_view.form +++ /dev/null @@ -1,80 +0,0 @@ -<?xml version="1.0"?> - -<form> - <title></title> - <row_length>4</row_length> - <name>chat_address_view</name> - <pt>form_view</pt> - <action>base_edit</action> - <method>POST</method> - <enctype></enctype> - <encoding>UTF-8</encoding> - <stored_encoding>ISO-8859-1</stored_encoding> - <unicode_mode>false</unicode_mode> - <groups> - <group> - <title>Default</title> - <fields> - - <field><id>my_chat_protocol</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <max_length></max_length> - <required type="int">1</required> - <title>my_chat_protocol</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <default>here/getChatProtocol | nothing</default> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - <field><id>my_chat_id</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <max_length></max_length> - <required type="int">1</required> - <title>my_chat_id</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <default>here/getChatId | nothing</default> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - </fields> - </group> - </groups> -</form> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_crm/email_view.form b/product/Coramy/skins/coramy_crm/email_view.form deleted file mode 100755 index 3538f5df40..0000000000 --- a/product/Coramy/skins/coramy_crm/email_view.form +++ /dev/null @@ -1,153 +0,0 @@ -<?xml version="1.0"?> - -<form> - <title></title> - <row_length>4</row_length> - <name>Telephone View</name> - <pt>form_view</pt> - <action>base_edit</action> - <method>POST</method> - <enctype></enctype> - <encoding>UTF-8</encoding> - <stored_encoding>ISO-8859-1</stored_encoding> - <unicode_mode>false</unicode_mode> - <groups> - <group> - <title>left</title> - <fields> - - <field><id>my_id</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <max_length></max_length> - <required type="int">1</required> - <title>Id</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <default>here/getId</default> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - <field><id>my_title</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <max_length></max_length> - <required type="int">1</required> - <title>Title</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <default>here/getTitle</default> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - <field><id>my_url_string</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <max_length></max_length> - <required type="int">1</required> - <title>Url</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <default>here/getUrlString</default> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>right</title> - <fields> - - </fields> - </group> - <group> - <title>center</title> - <fields> - - <field><id>my_description</id> <type>TextAreaField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <height type="int">5</height> - <hidden type="int">0</hidden> - <max_length></max_length> - <max_linelength></max_linelength> - <max_lines></max_lines> - <required type="int">0</required> - <title>Description</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - <width type="int">40</width> - </values> - <tales> - <default>here/getDescription</default> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_many_lines">You entered too many lines.</message> - <message name="line_too_long">A line was too long.</message> - <message name="too_long">You entered too many characters.</message> - </messages> - </field> - </fields> - </group> - </groups> -</form> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_crm/geographic_address_view.form b/product/Coramy/skins/coramy_crm/geographic_address_view.form deleted file mode 100755 index 404a8d9565..0000000000 --- a/product/Coramy/skins/coramy_crm/geographic_address_view.form +++ /dev/null @@ -1,124 +0,0 @@ -<?xml version="1.0"?> - -<form> - <title></title> - <row_length>4</row_length> - <name>geographic_address_view</name> - <pt>form_view</pt> - <action>base_edit</action> - <method>POST</method> - <enctype></enctype> - <encoding>UTF-8</encoding> - <stored_encoding>ISO-8859-1</stored_encoding> - <unicode_mode>false</unicode_mode> - <groups> - <group> - <title>left</title> - <fields> - - <field><id>my_id</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <max_length></max_length> - <required type="int">1</required> - <title>Id</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <default>here/getId</default> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - <field><id>my_title</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <max_length></max_length> - <required type="int">1</required> - <title>Title</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <default>here/getTitle</default> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>right</title> - <fields> - - <field><id>my_street_address</id> <type>TextAreaField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <height type="int">5</height> - <hidden type="int">0</hidden> - <max_length></max_length> - <max_linelength></max_linelength> - <max_lines></max_lines> - <required type="int">1</required> - <title>street_address</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - <width type="int">40</width> - </values> - <tales> - <default>here/getStreetAddress</default> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_many_lines">You entered too many lines.</message> - <message name="line_too_long">A line was too long.</message> - <message name="too_long">You entered too many characters.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>center</title> - <fields> - - </fields> - </group> - </groups> -</form> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_crm/organisation_DefaultExport.pt b/product/Coramy/skins/coramy_crm/organisation_DefaultExport.pt deleted file mode 100755 index 8cf07f551e..0000000000 --- a/product/Coramy/skins/coramy_crm/organisation_DefaultExport.pt +++ /dev/null @@ -1 +0,0 @@ - <id tal:content="here/id"></id> diff --git a/product/Coramy/skins/coramy_crm/organisation_cat b/product/Coramy/skins/coramy_crm/organisation_cat deleted file mode 100755 index 10a325ec46..0000000000 --- a/product/Coramy/skins/coramy_crm/organisation_cat +++ /dev/null @@ -1,47 +0,0 @@ -<?xml version="1.0" encoding="iso-8859-1"?> - -<form> - <title></title> - <name>organisation_list</name> - <action></action> - <enctype></enctype> - <method>POST</method> - <pt>form_list</pt> - - <groups> - <group> - <title>Default</title> - <fields> - - <field><id>contact_list</id> <type>ListBox</type> - <values> - <sort></sort> - <search type="int">1</search> - <description></description> - <extra></extra> - <default></default> - <css_class></css_class> - <title>Contacts</title> - <lines type="int">30</lines> - <height type="int">5</height> - <external_validator></external_validator> - <width type="int">40</width> - <list_cookie>ORGANISATION_LIST</list_cookie> - <columns type="list">[('id', 'id'), ('Title', 'Title'), ('Description', 'Description')]</columns> - <meta_types type="list">[('ERP5 Telephone', 'ERP5 Telephone'), ('Document', 'Document'), ('Base18 Document', 'Base18 Document')]</meta_types> - <hidden type="int">0</hidden> - <list_method type="method">portal_catalog</list_method> - <default_params type="list">[('id', "''"), ('Title', "''"), ('Description', "''")]</default_params> - <alternate_name></alternate_name> - <reverse type="int">0</reverse> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - </messages> - </field> - </fields> - </group> - </groups> -</form> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_crm/organisation_cat.form b/product/Coramy/skins/coramy_crm/organisation_cat.form deleted file mode 100755 index 998562ee7b..0000000000 --- a/product/Coramy/skins/coramy_crm/organisation_cat.form +++ /dev/null @@ -1,67 +0,0 @@ -<?xml version="1.0"?> - -<form> - <title></title> - <row_length>4</row_length> - <name>organisation_list</name> - <pt>form_list</pt> - <action></action> - <method>POST</method> - <enctype></enctype> - <encoding>UTF-8</encoding> - <stored_encoding>ISO-8859-1</stored_encoding> - <unicode_mode>false</unicode_mode> - <groups> - <group> - <title>Default</title> - <fields> - - <field><id>contact_list</id> <type>ListBox</type> - <values> - <all_columns></all_columns> - <all_editable_columns></all_editable_columns> - <alternate_name></alternate_name> - <columns type="list">[('id', 'id'), ('Title', 'Title'), ('Description', 'Description')]</columns> - <css_class></css_class> - <default></default> - <default_params type="list">[('id', "''"), ('Title', "''"), ('Description', "''")]</default_params> - <description></description> - <domain_root_list></domain_root_list> - <domain_tree></domain_tree> - <editable type="int">1</editable> - <editable_columns></editable_columns> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <global_attributes></global_attributes> - <height type="int">5</height> - <hidden type="int">0</hidden> - <lines type="int">30</lines> - <list_action></list_action> - <list_cookie>ORGANISATION_LIST</list_cookie> - <list_method type="method">portal_catalog</list_method> - <meta_types type="list">[('ERP5 Telephone', 'ERP5 Telephone'), ('Document', 'Document'), ('Base18 Document', 'Base18 Document')]</meta_types> - <portal_types></portal_types> - <report_root_list></report_root_list> - <report_tree></report_tree> - <reverse type="int">0</reverse> - <search type="int">1</search> - <search_columns></search_columns> - <select></select> - <selection_name></selection_name> - <sort></sort> - <sort_columns></sort_columns> - <stat_method></stat_method> - <title>Contacts</title> - <width type="int">40</width> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - </messages> - </field> - </fields> - </group> - </groups> -</form> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_crm/organisation_edit.py b/product/Coramy/skins/coramy_crm/organisation_edit.py deleted file mode 100755 index 465fd83ef2..0000000000 --- a/product/Coramy/skins/coramy_crm/organisation_edit.py +++ /dev/null @@ -1,31 +0,0 @@ -## Script (Python) "organisation_edit" -##bind container=container -##bind context=context -##bind namespace= -##bind script=script -##bind subpath=traverse_subpath -##parameters= -##title= -## -from Products.Formulator.Errors import ValidationError, FormValidationError - -request=context.REQUEST - -try: - # Validate the form - context.organisation_view.validate_all_to_request(request) - context.edit(id=request.my_id - , title=request.my_title - , corporate_name = request.my_corporate_name - , description = request.my_description) -except FormValidationError, validation_errors: - # Pack errors into the request - field_errors = context.organisation_view.ErrorFields(validation_errors) - request.set('field_errors', field_errors) - return context.organisation_view(request) -else: - redirect_url = '%s/organisation_view?%s' % ( context.absolute_url() - , 'portal_status_message=Data+Updated.' - ) - -request[ 'RESPONSE' ].redirect( redirect_url ) diff --git a/product/Coramy/skins/coramy_crm/organisation_list.form b/product/Coramy/skins/coramy_crm/organisation_list.form deleted file mode 100755 index 5493785eb0..0000000000 --- a/product/Coramy/skins/coramy_crm/organisation_list.form +++ /dev/null @@ -1,68 +0,0 @@ -<?xml version="1.0"?> - -<form> - <title>Liste d'organisations</title> - <row_length>4</row_length> - <name>organisation_list</name> - <pt>form_list</pt> - <action></action> - <method>POST</method> - <enctype></enctype> - <encoding>UTF-8</encoding> - <stored_encoding>ISO-8859-1</stored_encoding> - <unicode_mode>false</unicode_mode> - <groups> - <group> - <title>Default</title> - <fields> - - <field><id>listbox</id> <type>ListBox</type> - <values> - <all_columns type="list">[]</all_columns> - <all_editable_columns type="list">[]</all_editable_columns> - <alternate_name></alternate_name> - <columns type="list">[('Title', 'Nom courant'), ('getRole', 'R\xf4le'), ('getGroup', 'Organigramme'), ('getActivity', 'M\xe9tier'), ('getFunction', 'Fonction'), ('getDefaultAddressRegion', 'Pays')]</columns> - <css_class></css_class> - <default></default> - <default_params type="list">[('min', '(0,1,3)'), ('max', '100')]</default_params> - <description></description> - <domain_root_list type="list">[]</domain_root_list> - <domain_tree type="int">0</domain_tree> - <editable type="int">1</editable> - <editable_columns type="list">[]</editable_columns> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <global_attributes type="list">[]</global_attributes> - <height type="int">5</height> - <hidden type="int">0</hidden> - <lines type="int">25</lines> - <list_action>organisation_list</list_action> - <list_cookie>ORGANISATION_LIST</list_cookie> - <list_method type="method">portal_catalog</list_method> - <meta_types type="list">[]</meta_types> - <portal_types type="list">[('Organisation', 'Organisation')]</portal_types> - <report_root_list type="list">[]</report_root_list> - <report_tree type="int">0</report_tree> - <reverse type="int">0</reverse> - <search type="int">1</search> - <search_columns type="list">[]</search_columns> - <select type="int">1</select> - <selection_name>organisations_selection</selection_name> - <sort type="list">[]</sort> - <sort_columns></sort_columns> - <stat_method></stat_method> - <title>Organisation</title> - <width type="int">40</width> - </values> - <tales> - <list_method>python:here.getPortalObject().portal_skins.local_list_method[here.REQUEST.list_method_id]</list_method> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - </messages> - </field> - </fields> - </group> - </groups> -</form> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_crm/organisation_listCoordinates.form b/product/Coramy/skins/coramy_crm/organisation_listCoordinates.form deleted file mode 100755 index bc438b2743..0000000000 --- a/product/Coramy/skins/coramy_crm/organisation_listCoordinates.form +++ /dev/null @@ -1,67 +0,0 @@ -<?xml version="1.0"?> - -<form> - <title></title> - <row_length>4</row_length> - <name>organisation_list</name> - <pt>form_list</pt> - <action></action> - <method>POST</method> - <enctype></enctype> - <encoding>UTF-8</encoding> - <stored_encoding>ISO-8859-1</stored_encoding> - <unicode_mode>false</unicode_mode> - <groups> - <group> - <title>Default</title> - <fields> - - <field><id>coordinate_list</id> <type>ListBox</type> - <values> - <all_columns></all_columns> - <all_editable_columns></all_editable_columns> - <alternate_name></alternate_name> - <columns type="list">[('id', 'id'), ('Title', 'Title'), ('AsText', 'Coordinate')]</columns> - <css_class></css_class> - <default></default> - <default_params type="list">[('min', '(0,1,3)'), ('max', '100')]</default_params> - <description></description> - <domain_root_list></domain_root_list> - <domain_tree></domain_tree> - <editable type="int">1</editable> - <editable_columns></editable_columns> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <global_attributes></global_attributes> - <height type="int">5</height> - <hidden type="int">0</hidden> - <lines type="int">10</lines> - <list_action></list_action> - <list_cookie>COORDINATE_LIST</list_cookie> - <list_method type="method">objectValues</list_method> - <meta_types type="list">[('ERP5 Telephone', 'ERP5 Telephone')]</meta_types> - <portal_types></portal_types> - <report_root_list></report_root_list> - <report_tree></report_tree> - <reverse type="int">0</reverse> - <search type="int">0</search> - <search_columns></search_columns> - <select type="int">1</select> - <selection_name></selection_name> - <sort></sort> - <sort_columns></sort_columns> - <stat_method></stat_method> - <title>Coordinates</title> - <width type="int">40</width> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - </messages> - </field> - </fields> - </group> - </groups> -</form> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_crm/organisation_view.form b/product/Coramy/skins/coramy_crm/organisation_view.form deleted file mode 100755 index 13e7e75fe1..0000000000 --- a/product/Coramy/skins/coramy_crm/organisation_view.form +++ /dev/null @@ -1,521 +0,0 @@ -<?xml version="1.0"?> - -<form> - <title>Organisation</title> - <row_length>4</row_length> - <name>General</name> - <pt>form_view</pt> - <action>base_edit</action> - <method>POST</method> - <enctype></enctype> - <encoding>UTF-8</encoding> - <stored_encoding>ISO-8859-1</stored_encoding> - <unicode_mode>false</unicode_mode> - <groups> - <group> - <title>Left</title> - <fields> - - <field><id>my_id</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">30</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <max_length></max_length> - <required type="int">1</required> - <title>Identifiant</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <default>here/getId</default> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - <field><id>my_title</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">30</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <max_length></max_length> - <required type="int">1</required> - <title>Nom courant</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <default>here/getTitle</default> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - <field><id>my_corporate_name</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">30</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <max_length></max_length> - <required type="int">1</required> - <title>Raison sociale</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <default>here/getCorporateName</default> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - <field><id>my_role</id> <type>ListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <extra_item></extra_item> - <first_item type="int">0</first_item> - <hidden type="int">0</hidden> - <items type="list">[]</items> - <required type="int">0</required> - <size type="int">1</size> - <title>Rôle</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <items>here/portal_categories/role/getFormItemList</items> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - <field><id>my_group</id> <type>ListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <extra_item></extra_item> - <first_item type="int">0</first_item> - <hidden type="int">0</hidden> - <items type="list">[]</items> - <required type="int">0</required> - <size type="int">1</size> - <title>Organigramme</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <items>here/portal_categories/group/getFormItemList</items> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - <field><id>my_activity</id> <type>ListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <extra_item></extra_item> - <first_item type="int">0</first_item> - <hidden type="int">0</hidden> - <items type="list">[]</items> - <required type="int">0</required> - <size type="int">1</size> - <title>Métier</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <items>here/portal_categories/activity/getFormItemList</items> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - <field><id>my_function</id> <type>ListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <extra_item></extra_item> - <first_item type="int">0</first_item> - <hidden type="int">0</hidden> - <items type="list">[]</items> - <required type="int">0</required> - <size type="int">1</size> - <title>Fonction</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <items>here/portal_categories/function/getFormItemList</items> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>Right</title> - <fields> - - <field><id>my_default_email_text</id> <type>EmailField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">30</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <max_length></max_length> - <required type="int">0</required> - <title>Email</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - <message name="not_email">You did not enter an email address.</message> - </messages> - </field> - <field><id>my_default_telephone_text</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">30</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <max_length></max_length> - <required type="int">0</required> - <title>Téléphone</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - <field><id>my_default_fax_text</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">30</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <max_length></max_length> - <required type="int">0</required> - <title>Fax</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - <field><id>my_default_address_street_address</id> <type>TextAreaField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <height type="int">3</height> - <hidden type="int">0</hidden> - <max_length></max_length> - <max_linelength></max_linelength> - <max_lines></max_lines> - <required type="int">0</required> - <title>Adresse</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - <width type="int">30</width> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_many_lines">You entered too many lines.</message> - <message name="line_too_long">A line was too long.</message> - <message name="too_long">You entered too many characters.</message> - </messages> - </field> - <field><id>my_default_address_zip_code</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">10</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <max_length></max_length> - <required type="int">0</required> - <title>Code postal</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - <field><id>my_default_address_city</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">30</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <max_length></max_length> - <required type="int">0</required> - <title>Ville</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - <field><id>my_default_address_region</id> <type>ListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <extra_item></extra_item> - <first_item type="int">0</first_item> - <hidden type="int">0</hidden> - <items type="list">[]</items> - <required type="int">0</required> - <size type="int">1</size> - <title>Pays</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <items>here/portal_categories/region/getFormItemList</items> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>Middle</title> - <fields> - - <field><id>my_description</id> <type>TextAreaField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <height type="int">3</height> - <hidden type="int">0</hidden> - <max_length></max_length> - <max_linelength></max_linelength> - <max_lines></max_lines> - <required type="int">0</required> - <title>Commentaires</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - <width type="int">100</width> - </values> - <tales> - <default>here/Description</default> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_many_lines">You entered too many lines.</message> - <message name="line_too_long">A line was too long.</message> - <message name="too_long">You entered too many characters.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>List</title> - <fields> - - <field><id>coordonnnees_list</id> <type>ListBox</type> - <values> - <all_columns type="list">[]</all_columns> - <all_editable_columns type="list">[]</all_editable_columns> - <alternate_name></alternate_name> - <columns type="list">[('id', 'Coordonn\xe9e'), ('asText', 'Valeur')]</columns> - <css_class></css_class> - <default></default> - <default_params type="list">[('id', "''")]</default_params> - <description></description> - <domain_root_list type="list">[]</domain_root_list> - <domain_tree type="int">0</domain_tree> - <editable type="int">1</editable> - <editable_columns type="list">[]</editable_columns> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <global_attributes type="list">[]</global_attributes> - <height type="int">5</height> - <hidden type="int">0</hidden> - <lines type="int">10</lines> - <list_action>folder_contents</list_action> - <list_cookie>CONTACT_LIST</list_cookie> - <list_method type="method">searchFolder</list_method> - <meta_types type="list">[]</meta_types> - <portal_types type="list">[]</portal_types> - <report_root_list type="list">[]</report_root_list> - <report_tree type="int">0</report_tree> - <reverse type="int">0</reverse> - <search type="int">0</search> - <search_columns></search_columns> - <select type="int">0</select> - <selection_name>folder_selection</selection_name> - <sort type="list">[]</sort> - <sort_columns></sort_columns> - <stat_method></stat_method> - <title>Coordonnées</title> - <width type="int">40</width> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - </messages> - </field> - </fields> - </group> - </groups> -</form> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_crm/organisation_viewDetails.form b/product/Coramy/skins/coramy_crm/organisation_viewDetails.form deleted file mode 100755 index 5434021442..0000000000 --- a/product/Coramy/skins/coramy_crm/organisation_viewDetails.form +++ /dev/null @@ -1,140 +0,0 @@ -<?xml version="1.0"?> - -<form> - <title>Organisation</title> - <row_length>4</row_length> - <name>Details</name> - <pt>form_view</pt> - <action>base_edit</action> - <method>POST</method> - <enctype></enctype> - <encoding>UTF-8</encoding> - <stored_encoding>ISO-8859-1</stored_encoding> - <unicode_mode>false</unicode_mode> - <groups> - <group> - <title>left</title> - <fields> - - <field><id>my_code_comptable</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">30</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <max_length></max_length> - <required type="int">0</required> - <title>Code comptable</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - <field><id>my_eu_vat_code</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">30</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <max_length></max_length> - <required type="int">0</required> - <title>N° TVA</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - <field><id>my_ean13_code</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">30</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <max_length></max_length> - <required type="int">0</required> - <title>Code EAN</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - <field><id>my_siren_code</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">30</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <max_length></max_length> - <required type="int">0</required> - <title>N° Siren</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>right</title> - <fields> - - </fields> - </group> - </groups> -</form> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_crm/person_emails.form b/product/Coramy/skins/coramy_crm/person_emails.form deleted file mode 100755 index 9a92e73f1e..0000000000 --- a/product/Coramy/skins/coramy_crm/person_emails.form +++ /dev/null @@ -1,115 +0,0 @@ -<?xml version="1.0"?> - -<form> - <title>List Emails</title> - <row_length>4</row_length> - <name>person_search</name> - <pt>form_dialog</pt> - <action>person_emails_report</action> - <method>POST</method> - <enctype></enctype> - <encoding>UTF-8</encoding> - <stored_encoding>ISO-8859-1</stored_encoding> - <unicode_mode>false</unicode_mode> - <groups> - <group> - <title>left</title> - <fields> - - <field><id>my_role</id> <type>ListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <extra_item></extra_item> - <first_item type="int">0</first_item> - <hidden type="int">0</hidden> - <items type="list">[]</items> - <required type="int">1</required> - <size type="int">5</size> - <title>Role</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <items>here/portal_categories/role/getFormItemList</items> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - <field><id>my_region</id> <type>ListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <extra_item></extra_item> - <first_item type="int">0</first_item> - <hidden type="int">0</hidden> - <items type="list">[]</items> - <required type="int">1</required> - <size type="int">5</size> - <title>Role</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <items>here/portal_categories/region/getFormItemList</items> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - <field><id>my_skill</id> <type>ListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <extra_item></extra_item> - <first_item type="int">0</first_item> - <hidden type="int">0</hidden> - <items type="list">[]</items> - <required type="int">1</required> - <size type="int">5</size> - <title>Role</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <items>here/portal_categories/skill/getFormItemList</items> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>right</title> - <fields> - - </fields> - </group> - </groups> -</form> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_crm/person_emails_report.dtml b/product/Coramy/skins/coramy_crm/person_emails_report.dtml deleted file mode 100755 index 51247399df..0000000000 --- a/product/Coramy/skins/coramy_crm/person_emails_report.dtml +++ /dev/null @@ -1,4 +0,0 @@ -<dtml-in "search_in_category(category_list=['role/%s' % role], portal_type='Email')"><dtml-if "getObject().getDefaultRegion() == region"> -<dtml-var "getObject().getUrlString()"> -</dtml-if> -</dtml-in> diff --git a/product/Coramy/skins/coramy_crm/person_exchange b/product/Coramy/skins/coramy_crm/person_exchange deleted file mode 100755 index f446eba515..0000000000 --- a/product/Coramy/skins/coramy_crm/person_exchange +++ /dev/null @@ -1,116 +0,0 @@ -<?xml version="1.0" encoding="iso-8859-1"?> - -<form> - <title>Import / Export</title> - <name>exchange</name> - <action>base_search</action> - <enctype></enctype> - <method>POST</method> - <pt>form_dialog</pt> - - <groups> - <group> - <title>left</title> - <fields> - - <field><id>my_title</id> <type>StringField</type> - <values> - <extra></extra> - <description></description> - <truncate type="int">0</truncate> - <title>Title</title> - <default></default> - <css_class></css_class> - <required type="int">1</required> - <display_maxwidth></display_maxwidth> - <external_validator></external_validator> - <max_length></max_length> - <hidden type="int">0</hidden> - <display_width type="int">20</display_width> - <alternate_name></alternate_name> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - <field><id>my_id</id> <type>StringField</type> - <values> - <extra></extra> - <description></description> - <truncate type="int">0</truncate> - <title>Id</title> - <default></default> - <css_class></css_class> - <required type="int">1</required> - <display_maxwidth></display_maxwidth> - <external_validator></external_validator> - <max_length></max_length> - <hidden type="int">0</hidden> - <display_width type="int">20</display_width> - <alternate_name></alternate_name> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - <field><id>external_file</id> <type>FileField</type> - <values> - <external_validator></external_validator> - <description></description> - <title>File</title> - <default></default> - <css_class></css_class> - <hidden type="int">0</hidden> - <extra></extra> - <display_width type="int">20</display_width> - <alternate_name></alternate_name> - <display_maxwidth></display_maxwidth> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>right</title> - <fields> - - <field><id>my_description</id> <type>StringField</type> - <values> - <extra></extra> - <description></description> - <truncate type="int">0</truncate> - <title>my_description</title> - <default></default> - <css_class></css_class> - <required type="int">1</required> - <display_maxwidth></display_maxwidth> - <external_validator></external_validator> - <max_length></max_length> - <hidden type="int">0</hidden> - <display_width type="int">20</display_width> - <alternate_name></alternate_name> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - </fields> - </group> - </groups> -</form> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_crm/person_exchange.form b/product/Coramy/skins/coramy_crm/person_exchange.form deleted file mode 100755 index 1663c49073..0000000000 --- a/product/Coramy/skins/coramy_crm/person_exchange.form +++ /dev/null @@ -1,133 +0,0 @@ -<?xml version="1.0"?> - -<form> - <title>Import / Export</title> - <row_length>4</row_length> - <name>exchange</name> - <pt>form_dialog</pt> - <action>PieceTissu_importFile</action> - <method>POST</method> - <enctype>multipart/form-data</enctype> - <encoding>UTF-8</encoding> - <stored_encoding>ISO-8859-1</stored_encoding> - <unicode_mode>false</unicode_mode> - <groups> - <group> - <title>left</title> - <fields> - - <field><id>my_title</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <max_length></max_length> - <required type="int">1</required> - <title>Title</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - <field><id>my_id</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <max_length></max_length> - <required type="int">1</required> - <title>Id</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - <field><id>my_import_file</id> <type>FileField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <title>File</title> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>right</title> - <fields> - - <field><id>my_description</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <max_length></max_length> - <required type="int">1</required> - <title>my_description</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - </fields> - </group> - </groups> -</form> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_crm/person_list.form b/product/Coramy/skins/coramy_crm/person_list.form deleted file mode 100755 index 573ef08f19..0000000000 --- a/product/Coramy/skins/coramy_crm/person_list.form +++ /dev/null @@ -1,68 +0,0 @@ -<?xml version="1.0"?> - -<form> - <title>Liste de personnes</title> - <row_length>4</row_length> - <name>folder_contents</name> - <pt>form_list</pt> - <action></action> - <method>POST</method> - <enctype></enctype> - <encoding>UTF-8</encoding> - <stored_encoding>ISO-8859-1</stored_encoding> - <unicode_mode>false</unicode_mode> - <groups> - <group> - <title>Default</title> - <fields> - - <field><id>listbox</id> <type>ListBox</type> - <values> - <all_columns type="list">[]</all_columns> - <all_editable_columns type="list">[]</all_editable_columns> - <alternate_name></alternate_name> - <columns type="list">[('Title', 'Nom courant'), ('getRole', 'R\xf4le'), ('getGroup', 'Groupe'), ('getActivity', 'Activit\xe9'), ('getSkill', 'Fonction'), ('getDefaultTelephoneText', 'T\xe9l\xe9phone'), ('getDefaultFaxText', 'Fax')]</columns> - <css_class></css_class> - <default></default> - <default_params type="list">[('id', "''"), ('Title', "''"), ('Description', "''")]</default_params> - <description></description> - <domain_root_list type="list">[]</domain_root_list> - <domain_tree type="int">0</domain_tree> - <editable type="int">1</editable> - <editable_columns type="list">[]</editable_columns> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <global_attributes type="list">[]</global_attributes> - <height type="int">5</height> - <hidden type="int">0</hidden> - <lines type="int">30</lines> - <list_action>list</list_action> - <list_cookie>PERSON_LIST</list_cookie> - <list_method type="method">portal_catalog</list_method> - <meta_types type="list">[]</meta_types> - <more_columns type="list">[('path', 'Path')]</more_columns> - <portal_types type="list">[('Person', 'Person')]</portal_types> - <report_root_list type="list">[]</report_root_list> - <report_tree type="int">0</report_tree> - <reverse type="int">0</reverse> - <search type="int">1</search> - <search_columns type="list">[]</search_columns> - <select type="int">1</select> - <selection_name>person_selection</selection_name> - <sort type="list">[]</sort> - <sort_columns></sort_columns> - <stat_method></stat_method> - <title>Personne</title> - <width type="int">40</width> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - </messages> - </field> - </fields> - </group> - </groups> -</form> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_crm/person_list_phone.form b/product/Coramy/skins/coramy_crm/person_list_phone.form deleted file mode 100755 index a9cde29fb0..0000000000 --- a/product/Coramy/skins/coramy_crm/person_list_phone.form +++ /dev/null @@ -1,68 +0,0 @@ -<?xml version="1.0"?> - -<form> - <title>Folder Contents</title> - <row_length>4</row_length> - <name>folder_contents</name> - <pt>form_list</pt> - <action></action> - <method>POST</method> - <enctype></enctype> - <encoding>UTF-8</encoding> - <stored_encoding>ISO-8859-1</stored_encoding> - <unicode_mode>false</unicode_mode> - <groups> - <group> - <title>Default</title> - <fields> - - <field><id>listbox</id> <type>ListBox</type> - <values> - <all_columns type="list">[('catalog.path', 'Path'), ('catalog.id', 'Id'), ('catalog.Title', 'Titlex'), ('catalog.Description', 'Description'), ('phone.path', 'Phone')]</all_columns> - <all_editable_columns></all_editable_columns> - <alternate_name></alternate_name> - <columns type="list">[('catalog.id', 'Id'), ('catalog.Title', 'Titlex'), ('catalog.Description', 'Description'), ('phone.path', 'Phone')]</columns> - <css_class></css_class> - <default></default> - <default_params type="list">[('id', "''"), ('Title', "''"), ('Description', "''")]</default_params> - <description></description> - <domain_root_list></domain_root_list> - <domain_tree></domain_tree> - <editable type="int">1</editable> - <editable_columns></editable_columns> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <global_attributes></global_attributes> - <height type="int">5</height> - <hidden type="int">0</hidden> - <lines type="int">30</lines> - <list_action></list_action> - <list_cookie>PERSON_LIST</list_cookie> - <list_method type="method">person_search_phone</list_method> - <meta_types type="list">[]</meta_types> - <more_columns type="list">[('path', 'Path')]</more_columns> - <portal_types type="list">[]</portal_types> - <report_root_list></report_root_list> - <report_tree></report_tree> - <reverse type="int">0</reverse> - <search type="int">1</search> - <search_columns></search_columns> - <select type="int">1</select> - <selection_name>persons</selection_name> - <sort type="list">[]</sort> - <sort_columns></sort_columns> - <stat_method></stat_method> - <title>Contacts</title> - <width type="int">40</width> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - </messages> - </field> - </fields> - </group> - </groups> -</form> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_crm/person_list_sort_on.form b/product/Coramy/skins/coramy_crm/person_list_sort_on.form deleted file mode 100755 index 223c096d83..0000000000 --- a/product/Coramy/skins/coramy_crm/person_list_sort_on.form +++ /dev/null @@ -1,78 +0,0 @@ -<?xml version="1.0"?> - -<form> - <title>Define Sort Order</title> - <row_length>4</row_length> - <name>person_list_sort_on</name> - <pt>form_sort</pt> - <action>base_sort_on</action> - <method>POST</method> - <enctype></enctype> - <encoding>UTF-8</encoding> - <stored_encoding>ISO-8859-1</stored_encoding> - <unicode_mode>false</unicode_mode> - <groups> - <group> - <title>Default</title> - <fields> - - <field><id>sort_on</id> <type>ListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <extra_item></extra_item> - <first_item type="int">0</first_item> - <hidden type="int">0</hidden> - <items type="list">[('None', 'None'), ('Title', 'Title'), ('Id', 'id'), ('Description', 'description')]</items> - <required type="int">1</required> - <size type="int">1</size> - <title>Sort Parameter</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - <field><id>sort_order</id> <type>ListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <extra_item></extra_item> - <first_item type="int">0</first_item> - <hidden type="int">0</hidden> - <items type="list">[('Ascending', 'ascending'), ('Descending', 'descending')]</items> - <required type="int">1</required> - <size type="int">1</size> - <title>sort_order</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - </fields> - </group> - </groups> -</form> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_crm/person_list_ui.form b/product/Coramy/skins/coramy_crm/person_list_ui.form deleted file mode 100755 index e1c92980aa..0000000000 --- a/product/Coramy/skins/coramy_crm/person_list_ui.form +++ /dev/null @@ -1,84 +0,0 @@ -<?xml version="1.0"?> - -<form> - <title>Set List Settting</title> - <row_length>4</row_length> - <name>person_list_ui</name> - <pt>form_list_ui</pt> - <action>base_list_ui</action> - <method>POST</method> - <enctype></enctype> - <encoding>UTF-8</encoding> - <stored_encoding>ISO-8859-1</stored_encoding> - <unicode_mode>false</unicode_mode> - <groups> - <group> - <title>left</title> - <fields> - - <field><id>columns</id> <type>ListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <extra_item></extra_item> - <first_item type="int">0</first_item> - <hidden type="int">0</hidden> - <items type="list">[('None', 'None'), ('Id', 'id'), ('Title', 'Title'), ('Description', 'Description')]</items> - <required type="int">1</required> - <size type="int">1</size> - <title>columns</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - <field><id>lines</id> <type>ListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <extra_item></extra_item> - <first_item type="int">0</first_item> - <hidden type="int">0</hidden> - <items type="list">[('5', '5'), ('10', '10'), ('25', '25'), ('50', '50'), ('100', '100'), ('200', '200'), ('500', '500')]</items> - <required type="int">1</required> - <size type="int">1</size> - <title>Line</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>right</title> - <fields> - - </fields> - </group> - </groups> -</form> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_crm/person_report.form b/product/Coramy/skins/coramy_crm/person_report.form deleted file mode 100755 index 7982e05f77..0000000000 --- a/product/Coramy/skins/coramy_crm/person_report.form +++ /dev/null @@ -1,112 +0,0 @@ -<?xml version="1.0"?> - -<form> - <title></title> - <row_length>4</row_length> - <name>person_search</name> - <pt>form_dialog</pt> - <action>base_search</action> - <method>POST</method> - <enctype></enctype> - <encoding>UTF-8</encoding> - <stored_encoding>ISO-8859-1</stored_encoding> - <unicode_mode>false</unicode_mode> - <groups> - <group> - <title>left</title> - <fields> - - <field><id>my_title</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <max_length></max_length> - <required type="int">1</required> - <title>Title</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - <field><id>my_id</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <max_length></max_length> - <required type="int">1</required> - <title>Id</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>right</title> - <fields> - - <field><id>my_description</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <max_length></max_length> - <required type="int">1</required> - <title>my_description</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - </fields> - </group> - </groups> -</form> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_crm/person_search.form b/product/Coramy/skins/coramy_crm/person_search.form deleted file mode 100755 index 2854a73d5c..0000000000 --- a/product/Coramy/skins/coramy_crm/person_search.form +++ /dev/null @@ -1,112 +0,0 @@ -<?xml version="1.0"?> - -<form> - <title>Search</title> - <row_length>4</row_length> - <name>search</name> - <pt>form_dialog</pt> - <action>person_list</action> - <method>POST</method> - <enctype></enctype> - <encoding>UTF-8</encoding> - <stored_encoding>ISO-8859-1</stored_encoding> - <unicode_mode>false</unicode_mode> - <groups> - <group> - <title>left</title> - <fields> - - <field><id>my_title</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default>%</default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <max_length></max_length> - <required type="int">1</required> - <title>Title</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - <field><id>my_id</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default>%</default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <max_length></max_length> - <required type="int">1</required> - <title>Id</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>right</title> - <fields> - - <field><id>my_description</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default>%</default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <max_length></max_length> - <required type="int">1</required> - <title>my_description</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - </fields> - </group> - </groups> -</form> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_crm/person_search_phone.zsql b/product/Coramy/skins/coramy_crm/person_search_phone.zsql deleted file mode 100755 index bed9c29119..0000000000 --- a/product/Coramy/skins/coramy_crm/person_search_phone.zsql +++ /dev/null @@ -1,19 +0,0 @@ -<dtml-comment> -title: -connection_id:erp5_sql_connection -max_rows:1000 -max_cache:100 -cache_time:0 -class_name:ZSQLBrain -class_file:zsqlbrain.py -</dtml-comment> -<params>select_columns -sort_on -Description -id -Title</params> -<dtml-if sort_on> -SELECT DISTINCT <dtml-var select_columns> FROM catalog as catalog, catalog as phone, roles_and_users WHERE catalog.uid=phone.parent_uid AND catalog.uid=roles_and_users.uid AND catalog.portal_type='Person' ORDER BY <dtml-var sort_on> -<dtml-else> -SELECT DISTINCT <dtml-var select_columns> FROM catalog as catalog, catalog as phone, roles_and_users WHERE catalog.uid=phone.parent_uid AND catalog.uid=roles_and_users.uid AND catalog.portal_type='Person' -</dtml-if> diff --git a/product/Coramy/skins/coramy_crm/person_search_phones.form b/product/Coramy/skins/coramy_crm/person_search_phones.form deleted file mode 100755 index e212ae2de1..0000000000 --- a/product/Coramy/skins/coramy_crm/person_search_phones.form +++ /dev/null @@ -1,84 +0,0 @@ -<?xml version="1.0"?> - -<form> - <title>Search</title> - <row_length>4</row_length> - <name>search</name> - <pt>form_dialog</pt> - <action>person_list_phone</action> - <method>POST</method> - <enctype></enctype> - <encoding>UTF-8</encoding> - <stored_encoding>ISO-8859-1</stored_encoding> - <unicode_mode>false</unicode_mode> - <groups> - <group> - <title>left</title> - <fields> - - <field><id>my_title</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default>%</default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <max_length></max_length> - <required type="int">1</required> - <title>Title</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - <field><id>my_id</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default>%</default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <max_length></max_length> - <required type="int">1</required> - <title>Id</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>right</title> - <fields> - - </fields> - </group> - </groups> -</form> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_crm/person_view.form b/product/Coramy/skins/coramy_crm/person_view.form deleted file mode 100755 index a159b614c7..0000000000 --- a/product/Coramy/skins/coramy_crm/person_view.form +++ /dev/null @@ -1,589 +0,0 @@ -<?xml version="1.0"?> - -<form> - <title>Personne</title> - <row_length>4</row_length> - <name>General</name> - <pt>form_view</pt> - <action>base_edit</action> - <method>POST</method> - <enctype></enctype> - <encoding>UTF-8</encoding> - <stored_encoding>ISO-8859-1</stored_encoding> - <unicode_mode>false</unicode_mode> - <groups> - <group> - <title>Left</title> - <fields> - - <field><id>my_id</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">30</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <max_length></max_length> - <required type="int">1</required> - <title>Identifiant</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <default>here/id</default> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - <field><id>my_gender</id> <type>ListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <extra_item></extra_item> - <first_item type="int">0</first_item> - <hidden type="int">0</hidden> - <items type="list">[]</items> - <required type="int">0</required> - <size type="int">1</size> - <title>Genre</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <items>here/portal_categories/gender/getFormItemList</items> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - <field><id>my_first_name</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">30</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <max_length></max_length> - <required type="int">0</required> - <title>Prénom</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <default>here/getFirstName</default> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - <field><id>my_last_name</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">30</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <max_length></max_length> - <required type="int">1</required> - <title>Nom</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <default>here/getLastName</default> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - <field><id>my_role</id> <type>ListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <extra_item></extra_item> - <first_item type="int">0</first_item> - <hidden type="int">0</hidden> - <items type="list">[]</items> - <required type="int">0</required> - <size type="int">1</size> - <title>Rôle</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <default>here/getDefaultRole</default> - <items>here/portal_categories/role/getFormItemList</items> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - <field><id>my_group</id> <type>ListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <extra_item></extra_item> - <first_item type="int">0</first_item> - <hidden type="int">0</hidden> - <items type="list">[]</items> - <required type="int">0</required> - <size type="int">1</size> - <title>Groupe</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <default>here/getDefaultGroup</default> - <items>here/portal_categories/group/getFormItemList</items> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - <field><id>my_activity</id> <type>ListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <extra_item></extra_item> - <first_item type="int">0</first_item> - <hidden type="int">0</hidden> - <items type="list">[('Distribution', 'Distribution'), ('Manufacture', 'Manufacture'), ('Transport', 'Transport')]</items> - <required type="int">0</required> - <size type="int">1</size> - <title>Activité</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <default>here/getDefaultActivity</default> - <items>here/portal_categories/activity/getFormItemList</items> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - <field><id>my_skill_list</id> <type>MultiListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default type="list">[]</default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <extra_item></extra_item> - <hidden type="int">0</hidden> - <items type="list">[]</items> - <required type="int">0</required> - <size type="int">5</size> - <title>Fonctions</title> - <unicode type="int">0</unicode> - <view_separator><br /> -</view_separator> - </values> - <tales> - <default>here/getSkillList</default> - <items>here/portal_categories/skill/getFormItemList</items> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>Right</title> - <fields> - - <field><id>my_default_email_text</id> <type>EmailField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">30</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <max_length></max_length> - <required type="int">0</required> - <title>Email</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <default>here/getDefaultEmailText</default> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - <message name="not_email">You did not enter an email address.</message> - </messages> - </field> - <field><id>my_organisation_title</id> <type>RelationStringField</type> - <values> - <alternate_name></alternate_name> - <base_category>subordination</base_category> - <catalog_index>Title</catalog_index> - <css_class></css_class> - <default></default> - <default_module>organisation</default_module> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <jump_method>base_jump_relation</jump_method> - <max_length></max_length> - <portal_type type="list">[('Organisation', 'Organisation')]</portal_type> - <required type="int">0</required> - <title>Organisation</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <update_method>base_update_relation</update_method> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - <field><id>my_default_telephone_text</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">30</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <max_length></max_length> - <required type="int">0</required> - <title>Téléphone</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - <field><id>my_default_fax_text</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">30</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <max_length></max_length> - <required type="int">0</required> - <title>Fax</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - <field><id>my_default_address_street_address</id> <type>TextAreaField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <height type="int">3</height> - <hidden type="int">0</hidden> - <max_length></max_length> - <max_linelength></max_linelength> - <max_lines></max_lines> - <required type="int">0</required> - <title>Adresse</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - <width type="int">30</width> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_many_lines">You entered too many lines.</message> - <message name="line_too_long">A line was too long.</message> - <message name="too_long">You entered too many characters.</message> - </messages> - </field> - <field><id>my_default_address_zip_code</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">10</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <max_length></max_length> - <required type="int">0</required> - <title>Code postal</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - <field><id>my_default_address_city</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">30</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <max_length></max_length> - <required type="int">0</required> - <title>Ville</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - <field><id>my_default_address_region</id> <type>ListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <extra_item></extra_item> - <first_item type="int">0</first_item> - <hidden type="int">0</hidden> - <items type="list">[]</items> - <required type="int">0</required> - <size type="int">1</size> - <title>Pays</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <items>here/portal_categories/region/getFormItemList</items> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>Middle</title> - <fields> - - <field><id>my_description</id> <type>TextAreaField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <height type="int">3</height> - <hidden type="int">0</hidden> - <max_length></max_length> - <max_linelength></max_linelength> - <max_lines></max_lines> - <required type="int">0</required> - <title>Commentaires</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - <width type="int">100</width> - </values> - <tales> - <default>here/Description</default> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_many_lines">You entered too many lines.</message> - <message name="line_too_long">A line was too long.</message> - <message name="too_long">You entered too many characters.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>List</title> - <fields> - - <field><id>coordonnnees_list</id> <type>ListBox</type> - <values> - <all_columns type="list">[]</all_columns> - <all_editable_columns type="list">[]</all_editable_columns> - <alternate_name></alternate_name> - <columns type="list">[('id', 'Coordonn\xe9e'), ('asText', 'Valeur')]</columns> - <css_class></css_class> - <default></default> - <default_params type="list">[('id', "''")]</default_params> - <description></description> - <domain_root_list type="list">[]</domain_root_list> - <domain_tree type="int">0</domain_tree> - <editable type="int">1</editable> - <editable_columns type="list">[]</editable_columns> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <global_attributes type="list">[]</global_attributes> - <height type="int">5</height> - <hidden type="int">0</hidden> - <lines type="int">10</lines> - <list_action>folder_contents</list_action> - <list_cookie>CONTACT_LIST</list_cookie> - <list_method type="method">searchFolder</list_method> - <meta_types type="list">[]</meta_types> - <portal_types type="list">[]</portal_types> - <report_root_list type="list">[]</report_root_list> - <report_tree type="int">0</report_tree> - <reverse type="int">0</reverse> - <search type="int">0</search> - <search_columns></search_columns> - <select type="int">0</select> - <selection_name>folder_selection</selection_name> - <sort type="list">[]</sort> - <sort_columns></sort_columns> - <stat_method></stat_method> - <title>Coordonnées</title> - <width type="int">40</width> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - </messages> - </field> - </fields> - </group> - </groups> -</form> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_crm/person_viewProfile.form b/product/Coramy/skins/coramy_crm/person_viewProfile.form deleted file mode 100755 index 4ae7e46f65..0000000000 --- a/product/Coramy/skins/coramy_crm/person_viewProfile.form +++ /dev/null @@ -1,309 +0,0 @@ -<?xml version="1.0"?> - -<form> - <title>Person Default View Form</title> - <row_length>4</row_length> - <name>General</name> - <pt>form_view</pt> - <action>base_edit</action> - <method>POST</method> - <enctype></enctype> - <encoding>UTF-8</encoding> - <stored_encoding>ISO-8859-1</stored_encoding> - <unicode_mode>false</unicode_mode> - <groups> - <group> - <title>Left</title> - <fields> - - <field><id>my_id</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">30</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <max_length></max_length> - <required type="int">1</required> - <title>ID</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <default>here/id</default> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - <field><id>my_title</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">30</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <max_length></max_length> - <required type="int">0</required> - <title>Usual Name</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - <field><id>my_group</id> <type>ListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <extra_item></extra_item> - <first_item type="int">0</first_item> - <hidden type="int">0</hidden> - <items type="list">[]</items> - <required type="int">0</required> - <size type="int">1</size> - <title>Group</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <default>here/getDefaultGroup</default> - <items>here/portal_categories/group/getFormItemList</items> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - <field><id>my_activity</id> <type>ListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <extra_item></extra_item> - <first_item type="int">0</first_item> - <hidden type="int">0</hidden> - <items type="list">[('Distribution', 'Distribution'), ('Manufacture', 'Manufacture'), ('Transport', 'Transport')]</items> - <required type="int">0</required> - <size type="int">1</size> - <title>Activity</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <default>here/getDefaultActivity</default> - <items>here/portal_categories/activity/getFormItemList</items> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - <field><id>my_function</id> <type>ListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <extra_item></extra_item> - <first_item type="int">0</first_item> - <hidden type="int">0</hidden> - <items type="list">[('Registered office', 'Registered office'), ('Store', 'Store'), ('Wharehouse', 'Wharehouse'), ('Workshop', 'Workshop')]</items> - <required type="int">0</required> - <size type="int">1</size> - <title>Function</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <default>here/getDefaultFunction</default> - <items>here/portal_categories/function/getFormItemList</items> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - <field><id>my_role</id> <type>ListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <extra_item></extra_item> - <first_item type="int">0</first_item> - <hidden type="int">0</hidden> - <items type="list">[]</items> - <required type="int">0</required> - <size type="int">1</size> - <title>Role</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <default>here/getDefaultRole</default> - <items>here/portal_categories/role/getFormItemList</items> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>Right</title> - <fields> - - <field><id>my_product_list</id> <type>MultiListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default type="list">[]</default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <extra_item></extra_item> - <hidden type="int">0</hidden> - <items type="list">[]</items> - <required type="int">0</required> - <size type="int">3</size> - <title>Product Interest</title> - <unicode type="int">0</unicode> - <view_separator><br /> -</view_separator> - </values> - <tales> - <default>here/getProductList</default> - <items>here/portal_categories/product/getFormItemList</items> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - <field><id>my_skill_list</id> <type>MultiListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default type="list">[]</default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <extra_item></extra_item> - <hidden type="int">0</hidden> - <items type="list">[]</items> - <required type="int">0</required> - <size type="int">5</size> - <title>Skills</title> - <unicode type="int">0</unicode> - <view_separator><br /> -</view_separator> - </values> - <tales> - <default>here/getSkillList</default> - <items>here/portal_categories/skill/getFormItemList</items> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>Middle</title> - <fields> - - <field><id>my_description</id> <type>TextAreaField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <height type="int">3</height> - <hidden type="int">0</hidden> - <max_length></max_length> - <max_linelength></max_linelength> - <max_lines></max_lines> - <required type="int">0</required> - <title>Comments</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - <width type="int">100</width> - </values> - <tales> - <default>here/Description</default> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_many_lines">You entered too many lines.</message> - <message name="line_too_long">A line was too long.</message> - <message name="too_long">You entered too many characters.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>List</title> - <fields> - - </fields> - </group> - </groups> -</form> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_crm/sales_enquire.form b/product/Coramy/skins/coramy_crm/sales_enquire.form deleted file mode 100755 index 54feb2027d..0000000000 --- a/product/Coramy/skins/coramy_crm/sales_enquire.form +++ /dev/null @@ -1,81 +0,0 @@ -<?xml version="1.0"?> - -<form> - <title>Offer Sales</title> - <row_length>4</row_length> - <name>sales_enquire</name> - <pt>form_view_dialog</pt> - <action>workflow_status_modify</action> - <method>POST</method> - <enctype></enctype> - <encoding>UTF-8</encoding> - <stored_encoding>ISO-8859-1</stored_encoding> - <unicode_mode>false</unicode_mode> - <groups> - <group> - <title>Default</title> - <fields> - - <field><id>my_comment</id> <type>TextAreaField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <height type="int">5</height> - <hidden type="int">0</hidden> - <max_length></max_length> - <max_linelength></max_linelength> - <max_lines></max_lines> - <required type="int">1</required> - <title>Comment</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - <width type="int">40</width> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_many_lines">You entered too many lines.</message> - <message name="line_too_long">A line was too long.</message> - <message name="too_long">You entered too many characters.</message> - </messages> - </field> - <field><id>my_workflow_action</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default>enquire</default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <max_length></max_length> - <required type="int">1</required> - <title>workflow_action</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - </fields> - </group> - </groups> -</form> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_crm/sales_offer.form b/product/Coramy/skins/coramy_crm/sales_offer.form deleted file mode 100755 index 60ed23cd8b..0000000000 --- a/product/Coramy/skins/coramy_crm/sales_offer.form +++ /dev/null @@ -1,81 +0,0 @@ -<?xml version="1.0"?> - -<form> - <title>Offer Sales</title> - <row_length>4</row_length> - <name>sales_offer</name> - <pt>form_view_dialog</pt> - <action>workflow_status_modify</action> - <method>POST</method> - <enctype></enctype> - <encoding>UTF-8</encoding> - <stored_encoding>ISO-8859-1</stored_encoding> - <unicode_mode>false</unicode_mode> - <groups> - <group> - <title>Default</title> - <fields> - - <field><id>my_comment</id> <type>TextAreaField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <height type="int">5</height> - <hidden type="int">0</hidden> - <max_length></max_length> - <max_linelength></max_linelength> - <max_lines></max_lines> - <required type="int">1</required> - <title>Comment</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - <width type="int">40</width> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_many_lines">You entered too many lines.</message> - <message name="line_too_long">A line was too long.</message> - <message name="too_long">You entered too many characters.</message> - </messages> - </field> - <field><id>my_workflow_action</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default>offer</default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <max_length></max_length> - <required type="int">1</required> - <title>workflow_action</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - </fields> - </group> - </groups> -</form> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_crm/sales_opportunity_list.form b/product/Coramy/skins/coramy_crm/sales_opportunity_list.form deleted file mode 100755 index a70d05fb04..0000000000 --- a/product/Coramy/skins/coramy_crm/sales_opportunity_list.form +++ /dev/null @@ -1,67 +0,0 @@ -<?xml version="1.0"?> - -<form> - <title>Folder Contents</title> - <row_length>4</row_length> - <name>folder_contents</name> - <pt>form_list</pt> - <action></action> - <method>POST</method> - <enctype></enctype> - <encoding>UTF-8</encoding> - <stored_encoding>ISO-8859-1</stored_encoding> - <unicode_mode>false</unicode_mode> - <groups> - <group> - <title>Default</title> - <fields> - - <field><id>contact_list</id> <type>ListBox</type> - <values> - <all_columns type="list">[('Description', 'Description')]</all_columns> - <all_editable_columns></all_editable_columns> - <alternate_name></alternate_name> - <columns type="list">[('Title', 'Title'), ('sales_state', 'State'), ('Description', 'Description')]</columns> - <css_class></css_class> - <default></default> - <default_params type="list">[('Title', "''"), ('sales_state', "''"), ('Description', "''")]</default_params> - <description></description> - <domain_root_list></domain_root_list> - <domain_tree></domain_tree> - <editable type="int">1</editable> - <editable_columns></editable_columns> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <global_attributes></global_attributes> - <height type="int">5</height> - <hidden type="int">0</hidden> - <lines type="int">30</lines> - <list_action>list</list_action> - <list_cookie>PERSON_LIST</list_cookie> - <list_method type="method">portal_catalog</list_method> - <meta_types type="list">[]</meta_types> - <portal_types type="list">[('Sales Opportunity', 'Sales Opportunity')]</portal_types> - <report_root_list></report_root_list> - <report_tree></report_tree> - <reverse type="int">0</reverse> - <search type="int">1</search> - <search_columns></search_columns> - <select type="int">1</select> - <selection_name>sales_opportunities</selection_name> - <sort type="list">[]</sort> - <sort_columns></sort_columns> - <stat_method></stat_method> - <title>Contacts</title> - <width type="int">40</width> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - </messages> - </field> - </fields> - </group> - </groups> -</form> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_crm/sales_opportunity_view.form b/product/Coramy/skins/coramy_crm/sales_opportunity_view.form deleted file mode 100755 index ceed351ea9..0000000000 --- a/product/Coramy/skins/coramy_crm/sales_opportunity_view.form +++ /dev/null @@ -1,255 +0,0 @@ -<?xml version="1.0"?> - -<form> - <title>Person Default View Form</title> - <row_length>4</row_length> - <name>General</name> - <pt>form_view</pt> - <action>base_edit</action> - <method>POST</method> - <enctype></enctype> - <encoding>UTF-8</encoding> - <stored_encoding>ISO-8859-1</stored_encoding> - <unicode_mode>false</unicode_mode> - <groups> - <group> - <title>Left</title> - <fields> - - <field><id>my_id</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">30</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <max_length></max_length> - <required type="int">1</required> - <title>ID</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <default>here/id</default> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - <field><id>my_title</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">30</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <max_length></max_length> - <required type="int">1</required> - <title>Usual Name</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <default>here/Title</default> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>Right</title> - <fields> - - <field><id>my_client_person_title_list</id> <type>MultiRelationStringField</type> - <values> - <alternate_name></alternate_name> - <base_category>client</base_category> - <catalog_index>Title</catalog_index> - <css_class></css_class> - <default type="list">[]</default> - <default_module>person</default_module> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <height type="int">5</height> - <hidden type="int">0</hidden> - <jump_method>base_jump_relation</jump_method> - <max_length></max_length> - <max_linelength></max_linelength> - <max_lines></max_lines> - <portal_type type="list">[('Person', 'Person')]</portal_type> - <required type="int">0</required> - <title>Client persons</title> - <unicode type="int">0</unicode> - <update_method>base_update_relation</update_method> - <view_separator><br /> -</view_separator> - <whitespace_preserve type="int">0</whitespace_preserve> - <width type="int">40</width> - </values> - <tales> - <default>here/getClientPersonTitleList</default> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_many_lines">You entered too many lines.</message> - <message name="line_too_long">A line was too long.</message> - <message name="too_long">You entered too many characters.</message> - </messages> - </field> - <field><id>my_client_organisation_title_list</id> <type>MultiRelationStringField</type> - <values> - <alternate_name></alternate_name> - <base_category>client</base_category> - <catalog_index>Title</catalog_index> - <css_class></css_class> - <default type="list">[]</default> - <default_module>organisation</default_module> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <height type="int">5</height> - <hidden type="int">0</hidden> - <jump_method>base_jump_relation</jump_method> - <max_length></max_length> - <max_linelength></max_linelength> - <max_lines></max_lines> - <portal_type type="list">[('Organisation', 'Organisation')]</portal_type> - <required type="int">0</required> - <title>Client organisations</title> - <unicode type="int">0</unicode> - <update_method>base_update_relation</update_method> - <view_separator><br /> -</view_separator> - <whitespace_preserve type="int">0</whitespace_preserve> - <width type="int">40</width> - </values> - <tales> - <default>here/getClientOrganisationTitleList</default> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_many_lines">You entered too many lines.</message> - <message name="line_too_long">A line was too long.</message> - <message name="too_long">You entered too many characters.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>Middle</title> - <fields> - - <field><id>my_description</id> <type>TextAreaField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <height type="int">3</height> - <hidden type="int">0</hidden> - <max_length></max_length> - <max_linelength></max_linelength> - <max_lines></max_lines> - <required type="int">0</required> - <title>Comments</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - <width type="int">100</width> - </values> - <tales> - <default>here/Description</default> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_many_lines">You entered too many lines.</message> - <message name="line_too_long">A line was too long.</message> - <message name="too_long">You entered too many characters.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>List</title> - <fields> - - <field><id>item_list</id> <type>ListBox</type> - <values> - <all_columns type="list">[('id', 'id'), ('portal_type', 'Type'), ('Title', 'Title')]</all_columns> - <all_editable_columns></all_editable_columns> - <alternate_name></alternate_name> - <columns type="list">[('id', 'id'), ('portal_type', 'Type'), ('Title', 'Title')]</columns> - <css_class></css_class> - <default></default> - <default_params type="list">[]</default_params> - <description></description> - <domain_root_list></domain_root_list> - <domain_tree></domain_tree> - <editable type="int">1</editable> - <editable_columns></editable_columns> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <global_attributes></global_attributes> - <height type="int">5</height> - <hidden type="int">0</hidden> - <lines type="int">10</lines> - <list_action>folder_contents</list_action> - <list_cookie>CONTACT_LIST</list_cookie> - <list_method type="method">searchFolder</list_method> - <meta_types type="list">[]</meta_types> - <portal_types type="list">[]</portal_types> - <report_root_list></report_root_list> - <report_tree></report_tree> - <reverse type="int">0</reverse> - <search type="int">0</search> - <search_columns></search_columns> - <select type="int">0</select> - <selection_name></selection_name> - <sort type="list">[]</sort> - <sort_columns></sort_columns> - <stat_method></stat_method> - <title>Contacts</title> - <width type="int">40</width> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - </messages> - </field> - </fields> - </group> - </groups> -</form> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_crm/sales_reset.form b/product/Coramy/skins/coramy_crm/sales_reset.form deleted file mode 100755 index 89f727342e..0000000000 --- a/product/Coramy/skins/coramy_crm/sales_reset.form +++ /dev/null @@ -1,81 +0,0 @@ -<?xml version="1.0"?> - -<form> - <title>Offer Sales</title> - <row_length>4</row_length> - <name>sales_reset</name> - <pt>form_view_dialog</pt> - <action>workflow_status_modify</action> - <method>POST</method> - <enctype></enctype> - <encoding>UTF-8</encoding> - <stored_encoding>ISO-8859-1</stored_encoding> - <unicode_mode>false</unicode_mode> - <groups> - <group> - <title>Default</title> - <fields> - - <field><id>my_comment</id> <type>TextAreaField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <height type="int">5</height> - <hidden type="int">0</hidden> - <max_length></max_length> - <max_linelength></max_linelength> - <max_lines></max_lines> - <required type="int">1</required> - <title>Comment</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - <width type="int">40</width> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_many_lines">You entered too many lines.</message> - <message name="line_too_long">A line was too long.</message> - <message name="too_long">You entered too many characters.</message> - </messages> - </field> - <field><id>my_workflow_action</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default>reset</default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <max_length></max_length> - <required type="int">1</required> - <title>workflow_action</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - </fields> - </group> - </groups> -</form> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_crm/telephone_view.form b/product/Coramy/skins/coramy_crm/telephone_view.form deleted file mode 100755 index 8310e4b06a..0000000000 --- a/product/Coramy/skins/coramy_crm/telephone_view.form +++ /dev/null @@ -1,240 +0,0 @@ -<?xml version="1.0"?> - -<form> - <title></title> - <row_length>4</row_length> - <name>Telephone View</name> - <pt>form_view</pt> - <action>base_edit</action> - <method>POST</method> - <enctype></enctype> - <encoding>UTF-8</encoding> - <stored_encoding>ISO-8859-1</stored_encoding> - <unicode_mode>false</unicode_mode> - <groups> - <group> - <title>left</title> - <fields> - - <field><id>my_id</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <max_length></max_length> - <required type="int">1</required> - <title>Id</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <default>here/getId</default> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - <field><id>my_title</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <max_length></max_length> - <required type="int">1</required> - <title>Title</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <default>here/getTitle</default> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>right</title> - <fields> - - <field><id>my_telephone_country</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <max_length></max_length> - <required type="int">1</required> - <title>Country</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <default>here/getTelephoneCountry</default> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - <field><id>my_telephone_area</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <max_length></max_length> - <required type="int">1</required> - <title>Area</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <default>here/getTelephoneArea</default> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - <field><id>my_telephone_number</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <max_length></max_length> - <required type="int">1</required> - <title>Number</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <default>here/getTelephoneNumber</default> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - <field><id>my_telephone_extension</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <max_length></max_length> - <required type="int">0</required> - <title>Extension</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <default>here/getTelephoneExtension</default> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>center</title> - <fields> - - <field><id>my_description</id> <type>TextAreaField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <height type="int">5</height> - <hidden type="int">0</hidden> - <max_length></max_length> - <max_linelength></max_linelength> - <max_lines></max_lines> - <required type="int">0</required> - <title>Description</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - <width type="int">40</width> - </values> - <tales> - <default>here/getDescription</default> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_many_lines">You entered too many lines.</message> - <message name="line_too_long">A line was too long.</message> - <message name="too_long">You entered too many characters.</message> - </messages> - </field> - </fields> - </group> - </groups> -</form> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_custom/Coramy_sendMailToUser.py b/product/Coramy/skins/coramy_custom/Coramy_sendMailToUser.py deleted file mode 100755 index 88792c21ea..0000000000 --- a/product/Coramy/skins/coramy_custom/Coramy_sendMailToUser.py +++ /dev/null @@ -1,34 +0,0 @@ -## Script (Python) "Coramy_sendMailToUser" -##bind container=container -##bind context=context -##bind namespace= -##bind script=script -##bind subpath=traverse_subpath -##parameters=user_name='rc',mMsg='Message par défaut', mSubj='Sujet par défaut',**kw -##title= -## -try: - mailhost=getattr(context, context.portal_url.superValues('Mail Host')[0].id) -except: - raise AttributeError, "Cannot find a Mail Host object" - -mFrom = context.portal_properties.email_from_name+' <'+context.portal_properties.email_from_address+'>' - -# Only for doing test -if user_name == 'rc': - user_name = 'Romain_Courteaud' - -mTo = user_name + '@coramy.com' - -try: - # send mail to user - mailhost.send(mMsg,mTo,mFrom,mSubj) - # send mail to admin - mailhost.send(mMsg,mFrom,mFrom,mSubj) - -except: - mNewMsg = 'Sujet ' + mSubj + '\n' - mNewMsg += 'Destinataire ' + mTo + '\n' - mNewMsg += 'Message ' + mMsg + '\n' - - mailhost.send(mNewMsg,mFrom,mFrom,"ERP5:Coramy_sendMailToUser:Erreur") diff --git a/product/Coramy/skins/coramy_custom/Coramy_userLabelPrinterDefinition.py b/product/Coramy/skins/coramy_custom/Coramy_userLabelPrinterDefinition.py deleted file mode 100755 index 8e932be748..0000000000 --- a/product/Coramy/skins/coramy_custom/Coramy_userLabelPrinterDefinition.py +++ /dev/null @@ -1,30 +0,0 @@ -## Script (Python) "Coramy_userLabelPrinterDefinition" -##bind container=container -##bind context=context -##bind namespace= -##bind script=script -##bind subpath=traverse_subpath -##parameters=user_name=None -##title= -## -if user_name==None: - local_user = context.portal_membership.getAuthenticatedMember().getUserName() -else: - local_user = user_name - -printer_dict = { - 'Nicole_Denis' : 'Meto_XS40_2', - 'Christelle_Megret' : 'Meto_XS40_3', - 'Jocelyne_Olejarz' : 'Meto_XS40_4', - 'Nathalie_Wadoux' : 'Meto_XS40_5', - 'Chantal_Hannequin' : 'Meto_XS40_5', - 'Joelle_Gorriez': 'Meto_XS40_6', - 'Gaelle_Manier' : 'Meto_XS40_6' -} - -if local_user in printer_dict.keys(): - printer_name = printer_dict[local_user] -else: - printer_name = 'Meto_XS40_2' - -return printer_name diff --git a/product/Coramy/skins/coramy_custom/Coramy_userPrinterDefinition.py b/product/Coramy/skins/coramy_custom/Coramy_userPrinterDefinition.py deleted file mode 100755 index f6e1cb49e9..0000000000 --- a/product/Coramy/skins/coramy_custom/Coramy_userPrinterDefinition.py +++ /dev/null @@ -1,23 +0,0 @@ -## Script (Python) "Coramy_userPrinterDefinition" -##bind container=container -##bind context=context -##bind namespace= -##bind script=script -##bind subpath=traverse_subpath -##parameters=user_name=None -##title= -## -if user_name==None: - local_user = context.portal_membership.getAuthenticatedMember().getUserName() -else: - local_user = user_name - -printer_dict = { -} - -if local_user in printer_dict.keys(): - printer_name = printer_dict[local_user] -else: - printer_name = 'Xerox_DC_440' - -return printer_name diff --git a/product/Coramy/skins/coramy_custom/FlatList.py b/product/Coramy/skins/coramy_custom/FlatList.py deleted file mode 100755 index 20eb3276fb..0000000000 --- a/product/Coramy/skins/coramy_custom/FlatList.py +++ /dev/null @@ -1,13 +0,0 @@ -## Script (Python) "FlatList" -##bind container=container -##bind context=context -##bind namespace= -##bind script=script -##bind subpath=traverse_subpath -##parameters=form_id, list_start -##title= -## -request = container.REQUEST -request.set('list_start', int(list_start)) - -return getattr(context,form_id)(request) diff --git a/product/Coramy/skins/coramy_custom/Inventory_checkConsistency.py b/product/Coramy/skins/coramy_custom/Inventory_checkConsistency.py deleted file mode 100755 index 8f38d26e73..0000000000 --- a/product/Coramy/skins/coramy_custom/Inventory_checkConsistency.py +++ /dev/null @@ -1,23 +0,0 @@ -## Script (Python) "Inventory_checkConsistency" -##bind container=container -##bind context=context -##bind namespace= -##bind script=script -##bind subpath=traverse_subpath -##parameters= -##title= -## -olist = list(context.inventaire_mp.objectValues()) + list(context.inventaire_pf.objectValues()) - -for o in olist: - for l in o.objectValues(spec=('CORAMY Inventory Line','ERP5 Inventory Line')): - if l.hasCellContent(): - for c in l.objectValues(spec=('CORAMY Inventory Cell','ERP5 Inventory Cell')): - inventory = getattr(c, 'inventory', 0.0) # We have no acquisition here (None at class level ?) - line_inventory = getattr(l, 'inventory', 0.0) - if line_inventory is None: line_inventory = 0.0 - if inventory == 0.0 and line_inventory != 0.0 and len(l.objectValues(spec=('CORAMY Inventory Cell','ERP5 Inventory Cell'))) == 1: - print "Fixing Error on %s" % c.getRelativeUrl() - c.edit(inventory = line_inventory, force_update =1 ) - -return printed diff --git a/product/Coramy/skins/coramy_custom/Inventory_copyDefault.py b/product/Coramy/skins/coramy_custom/Inventory_copyDefault.py deleted file mode 100755 index d95a02db69..0000000000 --- a/product/Coramy/skins/coramy_custom/Inventory_copyDefault.py +++ /dev/null @@ -1,23 +0,0 @@ -## Script (Python) "Inventory_copyDefault" -##bind container=container -##bind context=context -##bind namespace= -##bind script=script -##bind subpath=traverse_subpath -##parameters= -##title= -## -for l in context.objectValues(spec=('CORAMY Inventory Line','ERP5 Inventory Line')): - if l.hasCellContent(): - for c in l.objectValues(spec=('CORAMY Inventory Cell','ERP5 Inventory Cell')): - inventory = getattr(c, 'inventory', 0.0) # We have acquisition here - if inventory is None: inventory=0.0 - print "Update Cell %s %s" % (getattr(c, 'inventory', 0.0), inventory) - if inventory == 0.0: c.edit(inventory = inventory, force_update=1) # Only update if 0.0 - else: - inventory = getattr(l, 'inventory', 0.0) - if inventory is None: inventory=0.0 - print "Update Line %s %s" % (getattr(l, 'inventory', 0.0), inventory) - if inventory == 0.0: l.edit(inventory = inventory, force_update=1) # Only update if 0.0 - -return printed diff --git a/product/Coramy/skins/coramy_custom/Inventory_updateDefault.py b/product/Coramy/skins/coramy_custom/Inventory_updateDefault.py deleted file mode 100755 index 141f1fa791..0000000000 --- a/product/Coramy/skins/coramy_custom/Inventory_updateDefault.py +++ /dev/null @@ -1,18 +0,0 @@ -## Script (Python) "Inventory_updateDefault" -##bind container=container -##bind context=context -##bind namespace= -##bind script=script -##bind subpath=traverse_subpath -##parameters= -##title= -## -for o in context.inventaire_mp.objectValues(): - print "Inventory copy default %s" % o.getRelativeUrl() - o.activate(priority=3).Inventory_copyDefault() - -for o in context.inventaire_pf.objectValues(): - print "Inventory copy default %s" % o.getRelativeUrl() - o.activate(priority=3).Inventory_copyDefault() - -return printed diff --git a/product/Coramy/skins/coramy_custom/Item_doWorkflowTransition.py b/product/Coramy/skins/coramy_custom/Item_doWorkflowTransition.py deleted file mode 100755 index bc93093aef..0000000000 --- a/product/Coramy/skins/coramy_custom/Item_doWorkflowTransition.py +++ /dev/null @@ -1,39 +0,0 @@ -## Script (Python) "Item_doWorkflowTransition" -##bind container=container -##bind context=context -##bind namespace= -##bind script=script -##bind subpath=traverse_subpath -##parameters=workflow_action='', workflow_id='' -##title= -## -# A shorter version of of workflow_status_modify and folder_workflow_status_modify ... - -error_message = '' - -action_list = context.portal_workflow.getActionsFor(context) -action_list = filter(lambda x:x.has_key('id'), action_list ) -action_id_list = map(lambda x:x['id'], action_list) - -# If the user is not allowed to do this transition, it will not be in action_list -if workflow_action in action_id_list: - context.portal_workflow.doActionFor( - context, - workflow_action, - wf_id=workflow_id - ) - -# We will check if there's an error_message -history_data = None -try: - history_data = context.portal_workflow.getInfoFor(ob=context, name='history') -except: - pass - redirect_url = None - if history_data is not None: - last_history_data = history_data[len(history_data)-1] - this_error = last_history_data.get('error_message') - if this_error != None and this_error != '': - error_message += this_error + "-" - -return error_message diff --git a/product/Coramy/skins/coramy_custom/Item_resetLocation.py b/product/Coramy/skins/coramy_custom/Item_resetLocation.py deleted file mode 100755 index cb9e434201..0000000000 --- a/product/Coramy/skins/coramy_custom/Item_resetLocation.py +++ /dev/null @@ -1,12 +0,0 @@ -## Script (Python) "Item_resetLocation" -##bind container=container -##bind context=context -##bind namespace= -##bind script=script -##bind subpath=traverse_subpath -##parameters= -##title= -## -item = context - -item.setLocation('') diff --git a/product/Coramy/skins/coramy_custom/PackingList_cleanupAssortiment.py b/product/Coramy/skins/coramy_custom/PackingList_cleanupAssortiment.py deleted file mode 100755 index 146697632d..0000000000 --- a/product/Coramy/skins/coramy_custom/PackingList_cleanupAssortiment.py +++ /dev/null @@ -1,24 +0,0 @@ -## Script (Python) "PackingList_cleanupAssortiment" -##bind container=container -##bind context=context -##bind namespace= -##bind script=script -##bind subpath=traverse_subpath -##parameters= -##title= -## -# This script cleans packing lists we deffective quantities equal to 0.0 by resetting quantities -# to values in the simulation - -for movement_brain in context.PackingList_searchAssortiment(): - movement = movement_brain.getObject() - if movement.getQuantity() == 0.0: - if movement.getRelatedQuantity() is not None: - print "Fix movement %s from %s to %s" % (movement.getRelativeUrl(), movement.getQuantity(), movement.getRelatedQuantity()) - #movement.setQuantity(movement.getRelatedQuantity()) - else: - print "### Error movement %s has no simulation" % movement.getRelativeUrl() - else: - print "### NONSENSE on %s" % movement.getRelativeUrl() - -return printed diff --git a/product/Coramy/skins/coramy_custom/PackingList_searchAssortiment.zsql b/product/Coramy/skins/coramy_custom/PackingList_searchAssortiment.zsql deleted file mode 100755 index 3cae739fa4..0000000000 --- a/product/Coramy/skins/coramy_custom/PackingList_searchAssortiment.zsql +++ /dev/null @@ -1,23 +0,0 @@ -<dtml-comment> -title: -connection_id:MySQL -max_rows:1000 -max_cache:100 -cache_time:0 -class_name:ZSQLBrain -class_file:zsqlbrain.py -</dtml-comment> -<params></params> -SELECT DISTINCT - movement_c.* -FROM - catalog, catalog AS resource, movement, catalog AS movement_c -WHERE - movement.delivery_uid = catalog.uid -AND catalog.portal_type = "Sales Packing List" -AND resource.uid = movement.resource_uid -AND resource.portal_type = "Assortiment" -AND (movement.quantity is NULL OR movement.quantity = 0.0) -AND (movement.target_quantity is NULL OR movement.target_quantity = 0.0) -AND movement_c.uid = movement.uid -AND movement_c.portal_type = "Sales Packing List Line" \ No newline at end of file diff --git a/product/Coramy/skins/coramy_custom/PackingList_setTargetStopToTargetStart.py b/product/Coramy/skins/coramy_custom/PackingList_setTargetStopToTargetStart.py deleted file mode 100755 index d12dfbe7b9..0000000000 --- a/product/Coramy/skins/coramy_custom/PackingList_setTargetStopToTargetStart.py +++ /dev/null @@ -1,11 +0,0 @@ -## Script (Python) "PackingList_setTargetStopToTargetStart" -##bind container=container -##bind context=context -##bind namespace= -##bind script=script -##bind subpath=traverse_subpath -##parameters= -##title= -## -packing_list = context -packing_list.setTargetStopDate(packing_list.getTargetStartDate()) diff --git a/product/Coramy/skins/coramy_custom/PdfTemplate_changePdfStylesheet.py b/product/Coramy/skins/coramy_custom/PdfTemplate_changePdfStylesheet.py deleted file mode 100755 index 3ee077fda3..0000000000 --- a/product/Coramy/skins/coramy_custom/PdfTemplate_changePdfStylesheet.py +++ /dev/null @@ -1,10 +0,0 @@ -## Script (Python) "PdfTemplate_changePdfStylesheet" -##bind container=container -##bind context=context -##bind namespace= -##bind script=script -##bind subpath=traverse_subpath -##parameters=stylesheet_name='default_pdf_template_save' -##title= -## -context.setProperty('pdf_Stylesheet',stylesheet_name) diff --git a/product/Coramy/skins/coramy_custom/PieceTissu_deleteFromMovement.py b/product/Coramy/skins/coramy_custom/PieceTissu_deleteFromMovement.py deleted file mode 100755 index 9375c61ba3..0000000000 --- a/product/Coramy/skins/coramy_custom/PieceTissu_deleteFromMovement.py +++ /dev/null @@ -1,42 +0,0 @@ -## Script (Python) "PieceTissu_deleteFromMovement" -##bind container=container -##bind context=context -##bind namespace= -##bind script=script -##bind subpath=traverse_subpath -##parameters= -##title= -## -piece_dict = {} -piece_dict['41874']='livraison_fabrication/2004/7/movement_0_0' -piece_dict['40398']='livraison_fabrication/1838/4/movement_5_0' -piece_dict['41975']='livraison_fabrication/1873/11/movement_0_0' -piece_dict['42254']='mouvement_mp/102/19/movement_0_0' -piece_dict['36473']='livraison_fabrication/1967/1/movement_0_0' -piece_dict['36555']='mouvement_mp/98/9/movement_0_0' -piece_dict['40226']='mouvement_mp/102/9/movement_0_0' -piece_dict['40145']='livraison_fabrication/2028/8/movement_3_0' -piece_dict['40092']='livraison_fabrication/1946/1/movement_0_0' -piece_dict['41789']='mouvement_mp/82/1/movement_0_0' -piece_dict['41586']='livraison_fabrication/1950/2/movement_2_0' - -for key in piece_dict.keys() : - mouvement = context.restrictedTraverse(piece_dict[key]) - if mouvement is not None : - if piece_dict[key].find('mouvement_mp') != -1 : - if mouvement.getProductionQuantity() > 0 : - item_id_list = mouvement.getProducedItemIdList() - new_item_id_list = filter(lambda k_item: k_item != key, item_id_list) - mouvement.setProducedItemIdList(new_item_id_list) - else : - item_id_list = mouvement.getConsumedItemIdList() - new_item_id_list = filter(lambda k_item: k_item != key, item_id_list) - mouvement.setConsumedItemIdList(new_item_id_list) - else : - item_id_list = mouvement.getItemIdList() - new_item_id_list = filter(lambda k_item: k_item != key, item_id_list) - mouvement.setItemIdList(new_item_id_list) - - print piece_dict[key], item_id_list, new_item_id_list, key - -return printed diff --git a/product/Coramy/skins/coramy_custom/PieceTissu_exportList.py b/product/Coramy/skins/coramy_custom/PieceTissu_exportList.py deleted file mode 100755 index 3b681482b2..0000000000 --- a/product/Coramy/skins/coramy_custom/PieceTissu_exportList.py +++ /dev/null @@ -1,22 +0,0 @@ -## Script (Python) "PieceTissu_exportList" -##bind container=container -##bind context=context -##bind namespace= -##bind script=script -##bind subpath=traverse_subpath -##parameters= -##title= -## -request = context.REQUEST -piece_list = context.zGetLocatedPieceTissuList() -cr = '\r' -tab = '\t' -movement_log = 'Piece'+tab+tab+'Quantité initiale'+tab+'Quantité restante'+cr - -for piece_item in piece_list : - piece= piece_item.getObject() - movement_log += piece.getRelativeUrl()+tab+piece.getId()+tab+str(piece.getQuantity())+tab+str(piece.getRemainingQuantity())+tab+piece.getLocation()+tab+piece.getComment().replace('\r',' ') + cr - -request.RESPONSE.setHeader('Content-Type','application/text') - -return movement_log diff --git a/product/Coramy/skins/coramy_custom/PieceTissu_findNegativeQty.py b/product/Coramy/skins/coramy_custom/PieceTissu_findNegativeQty.py deleted file mode 100755 index f6ab93e7ff..0000000000 --- a/product/Coramy/skins/coramy_custom/PieceTissu_findNegativeQty.py +++ /dev/null @@ -1,26 +0,0 @@ -## Script (Python) "PieceTissu_findNegativeQty" -##bind container=container -##bind context=context -##bind namespace= -##bind script=script -##bind subpath=traverse_subpath -##parameters= -##title= -## -request = context.REQUEST -cr = '\n' -tab = '\t' -movement_log = 'Problèmes'+cr - -piece_list = context.portal_catalog(portal_type=('Piece Tissu',)) - -for piece_item in piece_list : - piece = piece_item.getObject() - if piece is not None : - qty = piece.getRemainingQuantity() - if qty < 0 : - movement_log += piece.getRelativeUrl()+tab+str(qty)+cr - -request.RESPONSE.setHeader('Content-Type','application/text') - -return movement_log diff --git a/product/Coramy/skins/coramy_custom/PieceTissu_findSuspectMovement.py b/product/Coramy/skins/coramy_custom/PieceTissu_findSuspectMovement.py deleted file mode 100755 index 930bf31127..0000000000 --- a/product/Coramy/skins/coramy_custom/PieceTissu_findSuspectMovement.py +++ /dev/null @@ -1,69 +0,0 @@ -## Script (Python) "PieceTissu_findSuspectMovement" -##bind container=container -##bind context=context -##bind namespace= -##bind script=script -##bind subpath=traverse_subpath -##parameters= -##title= -## -request = context.REQUEST -cr = '\n' -tab = '\t' -movement_log = 'Id pieces'+tab+'piece_relative_url'+tab+'In-Out'+tab+'number'+tab+'relative_url_movement'+cr - -piece_list = context.portal_catalog(portal_type=('Piece Tissu',)) -#piece_list = context.portal_catalog(id = ('41890','36921') , portal_type="Piece Tissu") - -for piece_item in piece_list : - out_movement_list = '' - out_count = 0 - in_movement_list = '' - in_count = 0 - suspect_movement_list = '' - suspect_count = 0 - piece = piece_item.getObject() - if piece is not None : - related_movement_list = piece.getAggregateRelatedValueList() - for movement in related_movement_list : - movement_relative_url = movement.getRelativeUrl() - if movement_relative_url.find('livraison_fabrication') != -1 : - out_movement_list += movement_relative_url + tab - out_count += 1 - elif movement_relative_url.find('inventaire_mp') != -1 : - in_movement_list += movement_relative_url + tab - in_count += 1 - elif movement_relative_url.find('livraison_achat') != -1 : - in_movement_list += movement_relative_url + tab - in_count += 1 - elif movement_relative_url.find('mouvement_mp') != -1 : - if movement.getProductionQuantity() > 0 : - in_movement_list += movement_relative_url + tab - in_count += 1 - elif movement.getConsumptionQuantity() > 0 : - out_movement_list += movement_relative_url + tab - out_count += 1 - else : - suspect_movement_list += movement_relative_url + tab - suspect_count += 1 - else : - suspect_movement_list += movement_relative_url + tab - suspect_count += 1 - if (in_count==1 and out_count==1 and suspect_count==0) or (in_count==1 and out_count==0 and suspect_count==0) or (in_count==0 and out_count==0 and suspect_count==0): - pass - elif (in_count==0 and out_count==1 and suspect_count==0) : - if piece.aq_parent.getPortalType()=="Piece Tissu" : - pass - else : - movement_log += piece.getId() + tab + piece.getRelativeUrl() + tab + 'OUT' + tab + str(out_count) + tab + out_movement_list + cr - else : - if in_count > 0 : - movement_log += piece.getId() + tab + piece.getRelativeUrl() + tab + 'IN' + tab + str(in_count) + tab + in_movement_list + cr - if out_count > 0 : - movement_log += piece.getId() + tab + piece.getRelativeUrl() + tab + 'OUT' + tab + str(out_count) + tab + out_movement_list + cr - if suspect_count > 0 : - movement_log += piece.getId() + tab + piece.getRelativeUrl() + tab + 'SUSPECT' + tab + str(suspect_count) + tab + suspect_movement_list + cr - -request.RESPONSE.setHeader('Content-Type','application/text') - -return movement_log diff --git a/product/Coramy/skins/coramy_custom/SalesOrder_updateAssortimentPrice.py b/product/Coramy/skins/coramy_custom/SalesOrder_updateAssortimentPrice.py deleted file mode 100755 index a3bbd117da..0000000000 --- a/product/Coramy/skins/coramy_custom/SalesOrder_updateAssortimentPrice.py +++ /dev/null @@ -1,246 +0,0 @@ -## Script (Python) "SalesOrder_updateAssortimentPrice" -##bind container=container -##bind context=context -##bind namespace= -##bind script=script -##bind subpath=traverse_subpath -##parameters= -##title= -## -assort_dict ={} -assort_dict['009H401_12P_H']=51.00 -assort_dict['009H402_12P_H']=47.40 -assort_dict['009H403_12P_H']=57.00 -assort_dict['108E5386_12P_H']=150.00 -assort_dict['108H401_12P_H']=145.80 -assort_dict['11414442_12P_H']=182.40 -assort_dict['11495210_12P_H']=171.60 -assort_dict['114H401_12P_H']=264.00 -assort_dict['114H402_12P_H']=240.00 -assort_dict['114H403_12P_H']=214.80 -assort_dict['11684401_12P_H']=136.80 -assort_dict['116H401_12P_H']=147.00 -assort_dict['116H402_12P_H']=144.00 -assort_dict['118H401_12P_H']=151.20 -assort_dict['118H402_12P_H']=117.60 -assort_dict['124H401_12P_H']=135.60 -assort_dict['134A0104_12P_H']=115.20 -assort_dict['136H401_12P_H']=149.40 -assort_dict['136H402_12P_H']=192.00 -assort_dict['136H403_12P_H']=192.00 -assort_dict['137H401_18P_H']=234.00 -assort_dict['140H401_12P_H']=107.16 -assort_dict['140H402_12P_H']=109.59 -assort_dict['141H401_12P_H']=131.64 -assort_dict['14693101_12P_H']=199.20 -assort_dict['153E5245_12P_H']=166.80 -assort_dict['153F5340_12P_H']=166.80 -assort_dict['153H402_12P_H']=186.00 -assort_dict['153H403_12P_H']=183.00 -assort_dict['15554770_12P_H']=144.00 -assort_dict['15873440_12P_H']=172.80 -assort_dict['158H401_12P_H']=138.00 -assort_dict['16863440_12P_H']=171.60 -assort_dict['168H401_12P_H']=150.00 -assort_dict['168H402_12P_H']=168.00 -assort_dict['168H403_12P_H']=138.00 -assort_dict['169H401_12P_H']=107.16 -assort_dict['169H402_12P_H']=152.40 -assort_dict['169H403_12P_H']=163.20 -assort_dict['19015387_18P_H']=216.00 -assort_dict['19015896_12P_H']=144.00 -assort_dict['213H401_12P_H']=148.20 -assort_dict['223H401_12P_H']=139.20 -assort_dict['223H402_12P_H']=139.20 -assort_dict['230H401_12P_H']=159.60 -assort_dict['232H401_12P_H']=142.80 -assort_dict['232H402_12P_H']=140.40 -assort_dict['232H403_12P_H']=156.00 -assort_dict['233H402_12P_H']=126.00 -assort_dict['233H403_12P_H']=216.00 -assort_dict['236H401_12P_H']=174.00 -assort_dict['237H401_12P_H']=150.00 -assort_dict['237H402_12P_H']=138.00 -assort_dict['237H403_12P_H']=118.80 -assort_dict['237H404_12P_H']=171.00 -assort_dict['237H405_12P_H']=135.00 -assort_dict['237H406_12P_H']=115.20 -assort_dict['237H407_12P_H']=174.00 -assort_dict['237H412_12P_H']=150.00 -assort_dict['240H401_12P_H']=146.40 -assort_dict['240H402_12P_H']=151.20 -assort_dict['240H403_12P_H']=139.20 -assort_dict['245H401_12P_H']=216.00 -assort_dict['246H401_12P_H']=187.20 -assort_dict['247H401_12P_H']=234.00 -assort_dict['247H402_12P_H']=216.00 -assort_dict['24800156_12P_H']=82.80 -assort_dict['24805576_12P_H']=83.40 -assort_dict['24850104_12P_H']=94.80 -assort_dict['24850134_12P_H']=90.00 -assort_dict['24860157_12P_H']=87.60 -assort_dict['248B5000_12P_H']=91.20 -assort_dict['248H402_12P_H']=216.00 -assort_dict['248H403_12P_H']=231.60 -assort_dict['248H404_12_H']=201.60 -assort_dict['248H405_12P_H']=216.00 -assort_dict['248H406_12P_H']=211.20 -assort_dict['248H407_12P_H']=188.40 -assort_dict['248H408_12P_H']=190.80 -assort_dict['248H409_12P_H']=183.00 -assort_dict['248H410_12P_H']=196.80 -assort_dict['25040169_12P_H']=81.00 -assort_dict['25042733_12P_H']=88.80 -assort_dict['25065455_12P_H']=114.00 -assort_dict['251H401_12P_H']=180.00 -assort_dict['251H402_12P_H']=189.60 -assort_dict['251H403_12P_H']=148.80 -assort_dict['251H405_12P_H']=213.60 -assort_dict['25365673_12P_H']=98.40 -assort_dict['25415284_12P_H']=102.00 -assort_dict['25415674_12P_H']=99.60 -assort_dict['26220104_12P_H']=126.00 -assort_dict['27165093_12P_H']=160.80 -assort_dict['27284967_12P_H']=159.00 -assort_dict['274E5600_12P_H']=152.40 -assort_dict['335H401_12P_H']=174.00 -assort_dict['335H402_12P_H']=174.00 -assort_dict['352H401_12P_H']=60.60 -assort_dict['354H401_12P_H']=97.32 -assort_dict['372H401_12P_H']=123.60 -assort_dict['401H401_12P_H']=74.40 -assort_dict['401H402_12P_H']=127.20 -assort_dict['405H401_12P_H']=116.40 -assort_dict['406H402_18P_H']=115.20 -assort_dict['406H403_12P_H']=88.80 -assort_dict['40700157_12P_H']=72.00 -assort_dict['40750109_12P_H']=67.20 -assort_dict['408H401_12P_H']=102.00 -assort_dict['41335586_12P_H']=68.40 -assort_dict['415H401_18P_H']=104.40 -assort_dict['415H402_12P_H']=90.00 -assort_dict['415H404_12P_H']=99.60 -assort_dict['416H401_12P_H']=87.60 -assort_dict['416H402_12P_H']=91.20 -assort_dict['416H403_12P_H']=80.40 -assort_dict['416H404_12P_H']=114.00 -assort_dict['420H401_12P_H']=96.00 -assort_dict['42225455_12P_H']=84.00 -assort_dict['42232733_12P_H']=70.80 -assort_dict['423H401_12P_H']=94.80 -assort_dict['423H402_18P_H']=147.60 -assort_dict['423H403_18P_H']=178.20 -assort_dict['423H404_12P_H']=93.60 -assort_dict['42420163_12P_H']=59.40 -assort_dict['42435683_12P_H']=64.80 -assort_dict['500H401_12P_H']=79.20 -assort_dict['511H401_12P_H']=100.20 -assort_dict['511H402_12P_H']=99.00 -assort_dict['518E0157_12P_H']=67.20 -assort_dict['518H401_12P_H']=76.80 -assort_dict['519H401_12P_H']=90.00 -assort_dict['52020109_12P_H']=75.60 -assort_dict['52185530_12P_H']=71.40 -assort_dict['527H401_12P_H']=103.20 -assort_dict['527H402_12P_H']=68.40 -assort_dict['52830164_12P_H']=54.00 -assort_dict['52835683_12P_H']=68.40 -assort_dict['528H401_12P_H']=90.00 -assort_dict['53580108_12P_H']=51.60 -assort_dict['536H401_12P_H']=74.76 -assort_dict['536H402_12P_H']=85.68 -assort_dict['536H403_12P_H']=67.32 -assort_dict['537H401_12P_H']=74.76 -assort_dict['537K0107_12P_H']=44.40 -assort_dict['537K4747_12P_H']=58.80 -assort_dict['538H401_12P_H']=83.40 -assort_dict['538H402_12P_H']=114.00 -assort_dict['543H401_12P_H']=82.80 -assort_dict['590A5151_12P_H']=42.00 -assort_dict['593K4747_12P_H(2-8)']=36.00 -assort_dict['593K4747_12P_H(6-24m)']=33.60 -assort_dict['593M5000_12P_H']=38.40 -assort_dict['636H401_12P_H']=70.80 -assort_dict['656H401_12P_H']=52.08 -assort_dict['658H401_12P_H']=72.84 -assort_dict['701H401_12P_H']=47.40 -assort_dict['701H402_12P_H']=43.20 -assort_dict['701H403_12P_H']=59.40 -assort_dict['70255000_12P_H(10-16)']=43.80 -assort_dict['70255000_16P_H(2-8)']=52.80 -assort_dict['702H401_12P_H']=45.00 -assort_dict['709H401_12P_H']=54.00 -assort_dict['712H401_12P_H']=51.60 -assort_dict['712H402_12P_H']=49.80 -assort_dict['712H403_12P_H']=57.00 -assort_dict['712H404_18P_H']=85.50 -assort_dict['712K0108_12P_H']=39.00 -assort_dict['712K0150_12P_H']=42.00 -assort_dict['713H401_12P_H']=56.40 -assort_dict['71414760_12P_H']=44.40 -assort_dict['71415665_16P_H']=44.00 -assort_dict['714B5306_12P_H']=43.80 -assort_dict['714H401_12P_H']=42.00 -assort_dict['714H402_12P_H']=51.48 -assort_dict['714H403_12P_H']=42.24 -assort_dict['714H404_12P_H']=51.60 -assort_dict['715H401_12P_H']=57.60 -assort_dict['715H402_12P_H']=51.60 -assort_dict['720A5265_12P_H']=40.20 -assort_dict['720H401_12P_H']=52.20 -assort_dict['720H402_12P_H']=64.80 -assort_dict['72374749_12P_H']=52.80 -assort_dict['72375665_16P_H']=56.00 -assort_dict['723H401_18P_H']=83.70 -assort_dict['723H402_12P_H']=70.80 -assort_dict['724H401_12P_H']=79.56 -assort_dict['724h402_18P_H']=90.00 -assort_dict['725H401_12P_H']=70.80 -assort_dict['725J0108_12P_H']=43.20 -assort_dict['725J0150_12P_H']=43.80 -assort_dict['727H401_12P_H']=60.00 -assort_dict['72845000_12P_H(10-16)']=54.00 -assort_dict['72845000_16P_H(2-8)']=63.20 -assort_dict['75105143_12P_H']=61.20 -assort_dict['751H401_12P_H']=75.60 -assort_dict['751H402_12P_H']=63.00 -assort_dict['755H401_16P_H']=76.00 -assort_dict['769H401_12P_H']=70.44 -assort_dict['769H402_16P_H']=91.20 -assort_dict['77045143_12P_H']=47.40 -assort_dict['770H401_12P_H']=67.32 -assort_dict['770H402_12P_H']=64.92 -assort_dict['770H403_12P_H']=79.20 -assort_dict['770H404_16P_H']=116.00 -assort_dict['770H405_12P_H']=63.00 -assort_dict['77115217_12P_H']=62.40 -assort_dict['77115401_12P_H']=70.80 -assort_dict['771H401_12P_H']=66.72 -assort_dict['771H402_12P_H']=97.80 -assort_dict['771H403_16P_H']=84.00 -assort_dict['771H404_12P_H']=66.00 -assort_dict['772H401_12P_H']=68.40 -assort_dict['774H402_16P_H']=108.00 -assort_dict['774H403_16P_H']=130.40 -assort_dict['775H401_12P_H']=88.80 -assort_dict['775H402_16P_H']=159.20 -assort_dict['776H401_16P_H']=110.40 -assort_dict['778H401_16P_H']=120.00 -assort_dict['778H402_12P_H']=85.80 -assort_dict['855H401_12P_H']=39.00 -assort_dict['869H401_12P_H']=53.40 -assort_dict['910H401_12P_H']=149.40 - -order = context -assort_keys = assort_dict.keys() -movement_list = order.getMovementList() -for movement in movement_list : - resource = movement.getResourceValue() - if resource is not None : - if resource.getPortalType() == "Assortiment" : - assort_id = resource.getId() - if assort_id in assort_keys : - movement.setProperty(key='price',value=assort_dict[assort_id]) - #print "prix actuel : "+str(movement.getPrice())+" prix assortiment : "+str(assort_dict[assort_id]) - -#return printed diff --git a/product/Coramy/skins/coramy_custom/SalesOrder_zGetCarnetCommande.zsql b/product/Coramy/skins/coramy_custom/SalesOrder_zGetCarnetCommande.zsql deleted file mode 100755 index 6e4200d25e..0000000000 --- a/product/Coramy/skins/coramy_custom/SalesOrder_zGetCarnetCommande.zsql +++ /dev/null @@ -1,36 +0,0 @@ -<dtml-comment> -title: -connection_id:MySQL -max_rows:100000 -max_cache:100 -cache_time:0 -class_name:ZSQLBrain -class_file:zsqlbrain.py -</dtml-comment> -<params></params> -SELECT group_client.title, sum(movement.quantity) AS qte1, sum(movement.total_price) AS total_prix1,sum(other_movement.quantity) AS qte2, sum(other_movement.total_price) AS total_prix2 -FROM catalog AS sale_order, catalog AS order_line, category AS category_sc -LEFT JOIN catalog as order_cell ON (order_cell.parent_uid = order_line.uid AND order_cell.portal_type = "Delivery Cell") -LEFT JOIN movement ON ( movement.uid = order_cell.uid -AND movement.has_cell_content = 0 ) -LEFT JOIN movement AS other_movement ON ( other_movement.uid = order_line.uid -AND other_movement.has_cell_content = 0 ) -LEFT JOIN category AS category_group ON ( category_group.uid=sale_order.uid -AND category_group.base_category_uid = <dtml-var "portal_categories.group.uid"> -AND category_group.category_strict_membership = 1 ) -LEFT JOIN catalog AS group_client ON ( group_client.uid = category_group.category_uid ) - -WHERE sale_order.portal_type = "Sales Order" -AND order_line.parent_uid = sale_order.uid -AND order_line.portal_type = "Sales Order Line" - -AND (sale_order.simulation_state = "planned" -OR sale_order.simulation_state = "ordered" -OR sale_order.simulation_state = "draft" -OR sale_order.simulation_state = "confirmed") - -AND category_sc.uid=sale_order.uid -AND category_sc.base_category_uid = <dtml-var "portal_categories.source_section.uid"> -AND category_sc.category_uid = <dtml-var "portal_categories.group.Coramy.Houvenaegel.uid"> - -GROUP BY group_client.title \ No newline at end of file diff --git a/product/Coramy/skins/coramy_custom/base_edit2.py b/product/Coramy/skins/coramy_custom/base_edit2.py deleted file mode 100755 index 9e6c78ce6c..0000000000 --- a/product/Coramy/skins/coramy_custom/base_edit2.py +++ /dev/null @@ -1,119 +0,0 @@ -## Script (Python) "base_edit2" -##bind container=container -##bind context=context -##bind namespace= -##bind script=script -##bind subpath=traverse_subpath -##parameters=form_id, selection_index=0, selection_name='' -##title= -## -# Updates attributes of an Zope document -# which is in a class inheriting from ERP5 Base -# -# TODO -# - Implement validation of matrix fields -# - Implement validation of list fields -# - -from Products.Formulator.Errors import ValidationError, FormValidationError - -request=context.REQUEST - -try: - # Define form basic fields - form = getattr(context,form_id) - # Validate - form.validate_all_to_request(request) - # Basic attributes - kw = {} - # Parse attributes - for f in form.get_fields(): - k = f.id - v = getattr(request,k,None) - if v is not None: - if k[0:3] == 'my_': - # We only take into account - # the object attributes - k = k[3:] - kw[k] = v - # Update matrix attributes - matrixbox = request.get('matrixbox') - if matrixbox is not None: - matrixbox_field = form.get_field('matrixbox') - cell_base_id = matrixbox_field.get_value('cell_base_id') - kd = {} - kd['base_id'] = cell_base_id - gv = {} - if matrixbox_field.has_value('global_attributes'): - hidden_attributes = map(lambda x:x[0], matrixbox_field.get_value('global_attributes')) - for k in hidden_attributes: - gv[k] = getattr(request, k,None) - if matrixbox_field.get_value('update_cell_range'): - # Update cell range each time it is modified - lines = matrixbox_field.get_value('lines') - columns = matrixbox_field.get_value('columns') - tabs = matrixbox_field.get_value('tabs') - column_ids = map(lambda x: x[0], columns) - line_ids = map(lambda x: x[0], lines) - tab_ids = map(lambda x: x[0], tabs) - cell_range = context.getCellRange(base_id = cell_base_id) - if cell_range != [line_ids, column_ids, tab_ids]: - if len(tab_ids) > 0: - context.setCellRange(line_ids, column_ids, tab_ids, base_id=cell_base_id) - else: - context.setCellRange(line_ids, column_ids, base_id=cell_base_id) - for k,v in matrixbox.items(): - # Only update cells which still exist - if context.hasInRange(*k, **kd): - c = context.newCell(*k, **kd) - c.edit(**gv) # Make sure global properties are set (ie. mapped_value_property_list for ex. - if v.has_key('variated_property'): - # For Variated Properties - value = v['variated_property'] - del v['variated_property'] - if gv.has_key('mapped_value_property_list'): - # Change the property which is defined by the - # first element of mapped_value_property_list - key = gv['mapped_value_property_list'][0] - v[key] = value - c.edit(**v) - else: - return "Cell %s does not exist" % str(k) - # Update listbox attributes - listbox = request.get('listbox') - if listbox is not None: - listbox_field = form.get_field('listbox') - gv = {} - if listbox_field.has_value('global_attributes'): - hidden_attributes = map(lambda x:x[0], listbox_field.get_value('global_attributes')) - for k in hidden_attributes: - gv[k] = getattr(request, k,None) - for url, v in listbox.items(): - o = context.restrictedTraverse(url) - v.update(gv) - o.edit(**v) - # Update basic attributes - #return kw - context.edit(REQUEST=request,**kw) -except FormValidationError, validation_errors: - # Pack errors into the request - field_errors = form.ErrorFields(validation_errors) - request.set('field_errors', field_errors) - return form(request) -else: - if not selection_index: - redirect_url = '%s/%s?%s' % ( context.absolute_url() - , form_id - , 'portal_status_message=Data+Updated.' - ) - else: - redirect_url = '%s/%s?selection_index=%s&selection_name=%s&%s' % ( context.absolute_url() - , form_id - , selection_index - , selection_name - , 'portal_status_message=Data+Updated.' - ) - - - -request[ 'RESPONSE' ].redirect( redirect_url ) diff --git a/product/Coramy/skins/coramy_custom/breadcrumb.pt b/product/Coramy/skins/coramy_custom/breadcrumb.pt deleted file mode 100755 index cca47e909c..0000000000 --- a/product/Coramy/skins/coramy_custom/breadcrumb.pt +++ /dev/null @@ -1,54 +0,0 @@ -<span tal:replace="nothing"> -<!-- -Copyright (c) 2002 Nexedi SARL and Contributors. All Rights Reserved. - Thierry Faucher <tf@nexedi.com> - -This program is Free Software; you can redistribute it and/or -modify it under the terms of the GNU General Public License -as published by the Free Software Foundation; either version 2 -of the License, or (at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program; if not, write to the Free Software -Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. ---> -</span> - -<html> - <head> - <title tal:content="template/title">The title</title> - </head> - <body> - - <div metal:define-macro="small_breadcrumb"> - <table width="100%"> - <tr> - <td nowrap align="left"> - <span tal:repeat="item here/breadcrumbs"><a href="url goes here" tal:attributes="href python:'%s/view' % item ['url']"><span tal:replace="item/title" /></a> / </span></td> - <td align="right"></td> - </tr> - </table> - </div> - - <div metal:define-macro="full_breadcrumb"> - <table width="100%"> - <tr> - <td nowrap align="left"> - <span tal:repeat="item here/breadcrumbs"><a href="url goes here" tal:attributes="href python:'%s/view' % item ['url']"><span tal:replace="item/title" /></a> / </span></td> - <td align="right" tal:condition="python: not here.portal_membership.isAnonymousUser()"> <a href="undo_form">Créé</a> par : <span tal:replace="python:here.getOwnerInfo()['id']" /> - <span tal:replace="here/bobobase_modification_time" /></td> - <td align="right" tal:condition="python: here.portal_membership.isAnonymousUser()"> </td> - </tr> - </table> - </div> - - - - </body> - - -</html> diff --git a/product/Coramy/skins/coramy_custom/changeSourceAdministrationList.py b/product/Coramy/skins/coramy_custom/changeSourceAdministrationList.py deleted file mode 100755 index b09882cd9a..0000000000 --- a/product/Coramy/skins/coramy_custom/changeSourceAdministrationList.py +++ /dev/null @@ -1,23 +0,0 @@ -## Script (Python) "changeSourceAdministrationList" -##bind container=container -##bind context=context -##bind namespace= -##bind script=script -##bind subpath=traverse_subpath -##parameters= -##title= -## -order_list = context.changeSourceAdministrationSQL() -i = 1 -for order in order_list: - - - order_object = order.getObject() - source_admin = order_object.getSourceAdministration() - - if source_admin != 'person/347': - print order_object.getId(), order_object.getComment() - i += 1 - -print 'fin' -return printed diff --git a/product/Coramy/skins/coramy_custom/changeSourceAdministrationSQL.zsql b/product/Coramy/skins/coramy_custom/changeSourceAdministrationSQL.zsql deleted file mode 100755 index 951aa9059d..0000000000 --- a/product/Coramy/skins/coramy_custom/changeSourceAdministrationSQL.zsql +++ /dev/null @@ -1,14 +0,0 @@ -<dtml-comment> -title: -connection_id:MySQL -max_rows:1000 -max_cache:100 -cache_time:0 -class_name:ZSQLBrain -class_file:zsqlbrain.py -</dtml-comment> -<params></params> -SELECT DISTINCT id, relative_url, path, Description -FROM catalog -WHERE simulation_state = "draft" -AND portal_type = "Sales Order" \ No newline at end of file diff --git a/product/Coramy/skins/coramy_custom/check_production_delivery.py b/product/Coramy/skins/coramy_custom/check_production_delivery.py deleted file mode 100755 index 3d22d3886e..0000000000 --- a/product/Coramy/skins/coramy_custom/check_production_delivery.py +++ /dev/null @@ -1,36 +0,0 @@ -## Script (Python) "check_production_delivery" -##bind container=container -##bind context=context -##bind namespace= -##bind script=script -##bind subpath=traverse_subpath -##parameters= -##title= -## -delivery_list = context.object_action_list(selection_name='production_packing_list_selection') - -for delivery in delivery_list : - print '\n'+'Livraison :'+delivery.getId() - movement_list = delivery.getMovementList() - for movement in movement_list : - item_list = movement.getAggregateValueList() - if not item_list in ([], None) : - quantity = 0 - for item in item_list : -# print movement.getResource(),movement.getVariationCategoryList(),item.getResource(),item.getVariationCategoryList() - # verify if resource of item == resource of movement - if movement.getResource() == item.getResource() : - # check if variation_category is the same - if movement.getVariationCategoryList() != item.getVariationCategoryList() : - print 'Problème de variante',movement.getVariationCategoryList(),item.getId(),item.getVariationCategoryList() - else : - print 'Problème de resource',movement.getResource(),item.getId(),item.getResource() -# print movement.getResource(), movement.getItemIdList() - - # verify if quantity of movement == sum (item.getRemainingQuantity) - quantity += item.getRemainingQuantity() - - if quantity != movement.getTargetQuantity() : - print 'Problème de quantité',movement.getTargetQuantity(),round(quantity,4) - -return printed diff --git a/product/Coramy/skins/coramy_custom/getInfo.py b/product/Coramy/skins/coramy_custom/getInfo.py deleted file mode 100755 index 2748335483..0000000000 --- a/product/Coramy/skins/coramy_custom/getInfo.py +++ /dev/null @@ -1,10 +0,0 @@ -## Script (Python) "getInfo" -##bind container=container -##bind context=context -##bind namespace= -##bind script=script -##bind subpath=traverse_subpath -##parameters= -##title= -## -return context.portal_type diff --git a/product/Coramy/skins/coramy_custom/getListboxSearchMethod.py b/product/Coramy/skins/coramy_custom/getListboxSearchMethod.py deleted file mode 100755 index a4f7d4b204..0000000000 --- a/product/Coramy/skins/coramy_custom/getListboxSearchMethod.py +++ /dev/null @@ -1,11 +0,0 @@ -## Script (Python) "getListboxSearchMethod" -##bind container=container -##bind context=context -##bind namespace= -##bind script=script -##bind subpath=traverse_subpath -##parameters= -##title= -## -result='portal_catalog' -return result diff --git a/product/Coramy/skins/coramy_custom/getOneLineShortDescription.py b/product/Coramy/skins/coramy_custom/getOneLineShortDescription.py deleted file mode 100755 index a5b6a6a189..0000000000 --- a/product/Coramy/skins/coramy_custom/getOneLineShortDescription.py +++ /dev/null @@ -1,20 +0,0 @@ -## Script (Python) "getOneLineShortDescription" -##bind container=container -##bind context=context -##bind namespace= -##bind script=script -##bind subpath=traverse_subpath -##parameters=description='',len_max=100 -##title= -## -# cut the description to fit under len_max caracteres -from string import join - -result = description.split('\n')[0] - -if len(result) > len_max: - result = join(result[:len_max].split(' ')[:-2]) + '...' -else: - result = description - -return result diff --git a/product/Coramy/skins/coramy_custom/goTest.py b/product/Coramy/skins/coramy_custom/goTest.py deleted file mode 100755 index 2766d777b3..0000000000 --- a/product/Coramy/skins/coramy_custom/goTest.py +++ /dev/null @@ -1,12 +0,0 @@ -## Script (Python) "goTest" -##bind container=container -##bind context=context -##bind namespace= -##bind script=script -##bind subpath=traverse_subpath -##parameters= -##title= -## -#return context.setVariationBaseCategoryList -context.setVariationBaseCategoryList(('coloris')) -return context.getVariationBaseCategoryList(), context.variation_base_category_list diff --git a/product/Coramy/skins/coramy_custom/launchChangeEipAndCollection.py b/product/Coramy/skins/coramy_custom/launchChangeEipAndCollection.py deleted file mode 100755 index 9e3613aef8..0000000000 --- a/product/Coramy/skins/coramy_custom/launchChangeEipAndCollection.py +++ /dev/null @@ -1,22 +0,0 @@ -## Script (Python) "launchChangeEipAndCollection" -##bind container=container -##bind context=context -##bind namespace= -##bind script=script -##bind subpath=traverse_subpath -##parameters= -##title= -## -request = context.REQUEST -item_list = context.zGetEipChangeObjectlist() -cr = '\n' -tab = '\t' - -for item_item in item_list : - item = item_item.getObject() - if item is not None: - item.activate(priority=2).updateEipAndCollection() - -#request.RESPONSE.setHeader('Content-Type','application/text') - -return 'lancé'+str(len(item_list)) diff --git a/product/Coramy/skins/coramy_custom/launchResetLocationOnLocatedPieceTissu.py b/product/Coramy/skins/coramy_custom/launchResetLocationOnLocatedPieceTissu.py deleted file mode 100755 index fa900fc0dc..0000000000 --- a/product/Coramy/skins/coramy_custom/launchResetLocationOnLocatedPieceTissu.py +++ /dev/null @@ -1,22 +0,0 @@ -## Script (Python) "launchResetLocationOnLocatedPieceTissu" -##bind container=container -##bind context=context -##bind namespace= -##bind script=script -##bind subpath=traverse_subpath -##parameters= -##title= -## -request = context.REQUEST -item_list = context.zGetLocatedPieceTissuList() -cr = '\n' -tab = '\t' - -for item_item in item_list : - item = item_item.getObject() - if item is not None: - context.portal_activities.newMessage('SQLDict', item.getPath(), None, {}, 'Item_resetLocation') - -#request.RESPONSE.setHeader('Content-Type','application/text') - -return 'fait' diff --git a/product/Coramy/skins/coramy_custom/launchResetTargetQtyOnItemAggregatedMovement.py b/product/Coramy/skins/coramy_custom/launchResetTargetQtyOnItemAggregatedMovement.py deleted file mode 100755 index 7c295b3a1b..0000000000 --- a/product/Coramy/skins/coramy_custom/launchResetTargetQtyOnItemAggregatedMovement.py +++ /dev/null @@ -1,24 +0,0 @@ -## Script (Python) "launchResetTargetQtyOnItemAggregatedMovement" -##bind container=container -##bind context=context -##bind namespace= -##bind script=script -##bind subpath=traverse_subpath -##parameters= -##title= -## -request = context.REQUEST -movement_list = context.zGetTissuMovementWithoutItem() -cr = '\n' -tab = '\t' -movement_log = 'Problème'+cr - -for movement_item in movement_list : - movement = movement_item.getObject() - if movement is not None: - context.portal_activities.newMessage('SQLDict', movement.getPath(), None, {}, 'Movement_resetTargetQuantity') - # movement_log.append(movement.getRelativeUrl()) - -#request.RESPONSE.setHeader('Content-Type','application/text') - -return 'fait' diff --git a/product/Coramy/skins/coramy_custom/launchSetStopDateONProdDelivery.py b/product/Coramy/skins/coramy_custom/launchSetStopDateONProdDelivery.py deleted file mode 100755 index fad31d3cf4..0000000000 --- a/product/Coramy/skins/coramy_custom/launchSetStopDateONProdDelivery.py +++ /dev/null @@ -1,20 +0,0 @@ -## Script (Python) "launchSetStopDateONProdDelivery" -##bind container=container -##bind context=context -##bind namespace= -##bind script=script -##bind subpath=traverse_subpath -##parameters= -##title= -## -request = context.REQUEST -packing_list = context.zGetProductionDeliveryList() -cr = '\n' -tab = '\t' - -for packing_item in packing_list : - packing = packing_item.getObject() - if packing is not None: - packing.activate().recursiveImmediateReindexObject() - -return 'lancé' diff --git a/product/Coramy/skins/coramy_custom/launchTransferVetement.py b/product/Coramy/skins/coramy_custom/launchTransferVetement.py deleted file mode 100755 index a170296094..0000000000 --- a/product/Coramy/skins/coramy_custom/launchTransferVetement.py +++ /dev/null @@ -1,22 +0,0 @@ -## Script (Python) "launchTransferVetement" -##bind container=container -##bind context=context -##bind namespace= -##bind script=script -##bind subpath=traverse_subpath -##parameters= -##title= -## -request = context.REQUEST -item_list = context.zGetVetementList() -cr = '\n' -tab = '\t' - -for item_item in item_list : - item = item_item.getObject() - if item is not None: - item.activate().transfer_vetement() - -#request.RESPONSE.setHeader('Content-Type','application/text') - -return 'lancé'+str(len(item_list)) diff --git a/product/Coramy/skins/coramy_custom/launchUpdateAssortimentPriceOnSalesOrder.py b/product/Coramy/skins/coramy_custom/launchUpdateAssortimentPriceOnSalesOrder.py deleted file mode 100755 index 11f9038124..0000000000 --- a/product/Coramy/skins/coramy_custom/launchUpdateAssortimentPriceOnSalesOrder.py +++ /dev/null @@ -1,22 +0,0 @@ -## Script (Python) "launchUpdateAssortimentPriceOnSalesOrder" -##bind container=container -##bind context=context -##bind namespace= -##bind script=script -##bind subpath=traverse_subpath -##parameters= -##title= -## -request = context.REQUEST -item_list = context.zGetHouvSalesOrderList() -cr = '\n' -tab = '\t' - -for item_item in item_list : - item = item_item.getObject() - if item is not None: - item.activate().SalesOrder_updateAssortimentPrice() - -#request.RESPONSE.setHeader('Content-Type','application/text') - -return 'lancé'+str(len(item_list)) diff --git a/product/Coramy/skins/coramy_custom/launchUpdateQuantityOnItemAggregatedMovement.py b/product/Coramy/skins/coramy_custom/launchUpdateQuantityOnItemAggregatedMovement.py deleted file mode 100755 index 943cbe8339..0000000000 --- a/product/Coramy/skins/coramy_custom/launchUpdateQuantityOnItemAggregatedMovement.py +++ /dev/null @@ -1,24 +0,0 @@ -## Script (Python) "launchUpdateQuantityOnItemAggregatedMovement" -##bind container=container -##bind context=context -##bind namespace= -##bind script=script -##bind subpath=traverse_subpath -##parameters= -##title= -## -request = context.REQUEST -movement_list = context.zGetItemAggregatedMovement() -cr = '\n' -tab = '\t' -movement_log = 'Problème'+cr - -for movement_item in movement_list : - movement = movement_item.getObject() - if movement is not None: - context.portal_activities.newMessage('SQLDict', movement.getPath(), None, {}, 'updateQuantityOnItemAggregatedMovement') - # movement_log.append(movement.getRelativeUrl()) - -request.RESPONSE.setHeader('Content-Type','application/text') - -return 'fait' diff --git a/product/Coramy/skins/coramy_custom/mail_received.py b/product/Coramy/skins/coramy_custom/mail_received.py deleted file mode 100755 index b1ba645add..0000000000 --- a/product/Coramy/skins/coramy_custom/mail_received.py +++ /dev/null @@ -1,59 +0,0 @@ -## Script (Python) "mail_received" -##bind container=container -##bind context=context -##bind namespace= -##bind script=script -##bind subpath=traverse_subpath -##parameters=theMail -##title= -## -# This method gets called when a mail arrives at the portal object - -# the variable called 'theMail' contains the entire mail in a dictionary -# set out in the following format: -# -# {'attachments': {}, -# 'body': 'THis is a mailIn test from ME.\n\nHa Ha\n\n-Andy\n\n', -# 'headers': {'content-transfer-encoding': '7bit', -# 'content-type': 'text/plain;\n charset="iso-8859-1"', -# 'date': 'Tue, 13 Jun 2000 09:34:08 +0100', -# 'from': '"Andy Dawkins" <andyd@nipltd.com>', -# 'importance': 'Normal', -# 'message-id': '<NEBBLGACMKDPCFFIIEALKEDDCBAA.andyd@nipltd.com>', -# 'mime-version': '1.0', -# 'subject': 'Mail In Test', -# 'to': '<testing@legolas.private.nipltd.com>'}, -# 'localpart': 'testing'} - -# This is just an example Mail handeler method -# It is designed to give you an idea of how one should be written -# And it is used to test the MailIn tool - -# Get the members folder -mf = container.portal_url.getPortalObject().Members - -# Check if the localpart exists in the members folder -if not theMail['localpart'] in mf.objectIds(): - raise "NotFound", "Cannot find the user '%s' that the email was destined for"%theMail['localpart'] - -# get a handle on the user folder -uf = mf[theMail['localpart']] - -uf.invokeFactory(type_name='MailMessage', - id=container.strip_punctuation(theMail['headers']['message-id']), - title=theMail['headers'].get('subject'), - subject=theMail['headers'].get('subject'), - date=theMail['headers'].get('date'), - to=theMail['headers'].get('to'), - sender=theMail['headers'].get('from'), - replyto=theMail['headers'].get('replyto'), - body=theMail['body'], - headers=theMail['headers'], - otherInfo=theMail['localpart'], - attachments=theMail['attachments'] - ) - -# the return of None indicates a success -# The return of anything else assumes that you are returning an error message -# and most MTA's will bounce that error message back to the mail sender -return None diff --git a/product/Coramy/skins/coramy_custom/manage_after_clone.py b/product/Coramy/skins/coramy_custom/manage_after_clone.py deleted file mode 100755 index 13bef6ef95..0000000000 --- a/product/Coramy/skins/coramy_custom/manage_after_clone.py +++ /dev/null @@ -1,18 +0,0 @@ -## Script (Python) "manage_after_clone" -##bind container=container -##bind context=context -##bind namespace= -##bind script=script -##bind subpath=traverse_subpath -##parameters= -##title= -## -print " " - -o = context.getObject() - -context.manage_afterClone(o) - -print "manage_afterClone() Done" - -return printed diff --git a/product/Coramy/skins/coramy_custom/metadata_edit.form b/product/Coramy/skins/coramy_custom/metadata_edit.form deleted file mode 100755 index 9f4691476c..0000000000 --- a/product/Coramy/skins/coramy_custom/metadata_edit.form +++ /dev/null @@ -1,302 +0,0 @@ -<?xml version="1.0"?> - -<form> - <title></title> - <row_length>4</row_length> - <name>metadata_edit</name> - <pt>form_view</pt> - <action>base_edit</action> - <method>POST</method> - <enctype></enctype> - <encoding>UTF-8</encoding> - <stored_encoding>ISO-8859-1</stored_encoding> - <unicode_mode>false</unicode_mode> - <groups> - <group> - <title>Default</title> - <fields> - - <field><id>my_title</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <max_length></max_length> - <required type="int">0</required> - <title>Title</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - <field><id>my_language</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <max_length></max_length> - <required type="int">0</required> - <title>Language</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - <field><id>my_effective_date</id> <type>DateTimeField</type> - <values> - <allow_empty_time type="int">0</allow_empty_time> - <alternate_name></alternate_name> - <ampm_time_style type="int">0</ampm_time_style> - <css_class></css_class> - <date_only type="int">1</date_only> - <date_separator>/</date_separator> - <default_now type="int">0</default_now> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <hidden type="int">0</hidden> - <input_order>ymd</input_order> - <input_style>text</input_style> - <required type="int">0</required> - <time_separator>:</time_separator> - <title>Effective date</title> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="not_datetime">You did not enter a valid date and time.</message> - <message name="datetime_out_of_range">The date and time you entered were out of range.</message> - </messages> - </field> - <field><id>my_expiration_date</id> <type>DateTimeField</type> - <values> - <allow_empty_time type="int">0</allow_empty_time> - <alternate_name></alternate_name> - <ampm_time_style type="int">0</ampm_time_style> - <css_class></css_class> - <date_only type="int">1</date_only> - <date_separator>/</date_separator> - <default_now type="int">0</default_now> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <hidden type="int">0</hidden> - <input_order>ymd</input_order> - <input_style>text</input_style> - <required type="int">0</required> - <time_separator>:</time_separator> - <title>Expiration Date</title> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="not_datetime">You did not enter a valid date and time.</message> - <message name="datetime_out_of_range">The date and time you entered were out of range.</message> - </messages> - </field> - <field><id>my_format</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <max_length></max_length> - <required type="int">0</required> - <title>Format</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - <field><id>my_rights</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <max_length></max_length> - <required type="int">0</required> - <title>Rights</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>right</title> - <fields> - - <field><id>my_category_list</id> <type>LinesField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default type="list">[]</default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <height type="int">8</height> - <hidden type="int">0</hidden> - <max_length></max_length> - <max_linelength></max_linelength> - <max_lines></max_lines> - <required type="int">0</required> - <title>Categories</title> - <unicode type="int">0</unicode> - <view_separator><br /> -</view_separator> - <whitespace_preserve type="int">0</whitespace_preserve> - <width type="int">40</width> - </values> - <tales> - <default>here/getCategoryList</default> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_many_lines">You entered too many lines.</message> - <message name="line_too_long">A line was too long.</message> - <message name="too_long">You entered too many characters.</message> - </messages> - </field> - <field><id>my_contributors</id> <type>LinesField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default type="list">[]</default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <height type="int">4</height> - <hidden type="int">0</hidden> - <max_length></max_length> - <max_linelength></max_linelength> - <max_lines></max_lines> - <required type="int">0</required> - <title>Contributors</title> - <unicode type="int">0</unicode> - <view_separator><br /> -</view_separator> - <whitespace_preserve type="int">0</whitespace_preserve> - <width type="int">40</width> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_many_lines">You entered too many lines.</message> - <message name="line_too_long">A line was too long.</message> - <message name="too_long">You entered too many characters.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>center</title> - <fields> - - <field><id>my_description</id> <type>TextAreaField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <height type="int">10</height> - <hidden type="int">0</hidden> - <max_length></max_length> - <max_linelength></max_linelength> - <max_lines></max_lines> - <required type="int">0</required> - <title>Description</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - <width type="int">80</width> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_many_lines">You entered too many lines.</message> - <message name="line_too_long">A line was too long.</message> - <message name="too_long">You entered too many characters.</message> - </messages> - </field> - </fields> - </group> - </groups> -</form> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_custom/pay_sheet_view.form b/product/Coramy/skins/coramy_custom/pay_sheet_view.form deleted file mode 100755 index 331446d997..0000000000 --- a/product/Coramy/skins/coramy_custom/pay_sheet_view.form +++ /dev/null @@ -1,138 +0,0 @@ -<?xml version="1.0"?> - -<form> - <title>pay_sheet_view</title> - <row_length>4</row_length> - <name>pay_sheet_view</name> - <pt>form_view</pt> - <action>base_edit</action> - <method>POST</method> - <enctype></enctype> - <encoding>UTF-8</encoding> - <stored_encoding>ISO-8859-1</stored_encoding> - <unicode_mode>false</unicode_mode> - <groups> - <group> - <title>left</title> - <fields> - - <field><id>my_id</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <max_length></max_length> - <required type="int">1</required> - <title>my_id</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - <field><id>my_title</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <max_length></max_length> - <required type="int">1</required> - <title>my_title</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - <field><id>my_description</id> <type>TextAreaField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <height type="int">5</height> - <hidden type="int">0</hidden> - <max_length></max_length> - <max_linelength></max_linelength> - <max_lines></max_lines> - <required type="int">1</required> - <title>my_description</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - <width type="int">40</width> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_many_lines">You entered too many lines.</message> - <message name="line_too_long">A line was too long.</message> - <message name="too_long">You entered too many characters.</message> - </messages> - </field> - <field><id>my_month</id> <type>DateTimeField</type> - <values> - <allow_empty_time type="int">0</allow_empty_time> - <alternate_name></alternate_name> - <ampm_time_style type="int">0</ampm_time_style> - <css_class></css_class> - <date_only type="int">0</date_only> - <date_separator>/</date_separator> - <default_now type="int">0</default_now> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <hidden type="int">0</hidden> - <input_order>ymd</input_order> - <input_style>text</input_style> - <required type="int">1</required> - <time_separator>:</time_separator> - <title>my_month</title> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="not_datetime">You did not enter a valid date and time.</message> - <message name="datetime_out_of_range">The date and time you entered were out of range.</message> - </messages> - </field> - </fields> - </group> - </groups> -</form> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_custom/payroll_list.form b/product/Coramy/skins/coramy_custom/payroll_list.form deleted file mode 100755 index 69b1beb82a..0000000000 --- a/product/Coramy/skins/coramy_custom/payroll_list.form +++ /dev/null @@ -1,64 +0,0 @@ -<?xml version="1.0"?> - -<form> - <title></title> - <row_length>4</row_length> - <name>payroll_list</name> - <pt>form_list</pt> - <action></action> - <method>POST</method> - <enctype></enctype> - <encoding>UTF-8</encoding> - <stored_encoding>ISO-8859-1</stored_encoding> - <unicode_mode>false</unicode_mode> - <groups> - <group> - <title>Default</title> - <fields> - - <field><id>pay_list</id> <type>ListBox</type> - <values> - <all_columns type="list">[('getId', 'Id'), ('getTitle', 'Title')]</all_columns> - <all_editable_columns></all_editable_columns> - <alternate_name></alternate_name> - <columns type="list">[('getId', 'Id'), ('getTitle', 'Title')]</columns> - <css_class></css_class> - <default></default> - <default_params type="list">[('min', '(0,1,3)'), ('max', '100')]</default_params> - <description></description> - <domain_root_list></domain_root_list> - <domain_tree></domain_tree> - <editable type="int">1</editable> - <editable_columns></editable_columns> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <global_attributes></global_attributes> - <hidden type="int">0</hidden> - <lines type="int">10</lines> - <list_action></list_action> - <list_cookie>PAYROLL_COOKIE</list_cookie> - <list_method type="method">portal_catalog</list_method> - <meta_types type="list">[('ERP5 PaySheet', 'ERP5 PaySheet')]</meta_types> - <portal_types type="list">[]</portal_types> - <report_root_list></report_root_list> - <report_tree></report_tree> - <reverse type="int">0</reverse> - <search type="int">1</search> - <search_columns></search_columns> - <select type="int">1</select> - <selection_name>payroll</selection_name> - <sort type="list">[]</sort> - <sort_columns></sort_columns> - <stat_method></stat_method> - <title>pay_list</title> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - </messages> - </field> - </fields> - </group> - </groups> -</form> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_custom/search.form b/product/Coramy/skins/coramy_custom/search.form deleted file mode 100755 index 4bdbb82810..0000000000 --- a/product/Coramy/skins/coramy_custom/search.form +++ /dev/null @@ -1,68 +0,0 @@ -<?xml version="1.0"?> - -<form> - <title>Résultats</title> - <row_length>4</row_length> - <name>folder_contents</name> - <pt>form_list</pt> - <action></action> - <method>POST</method> - <enctype></enctype> - <encoding>UTF-8</encoding> - <stored_encoding>ISO-8859-1</stored_encoding> - <unicode_mode>false</unicode_mode> - <groups> - <group> - <title>Default</title> - <fields> - - <field><id>search_list</id> <type>ListBox</type> - <values> - <all_columns type="list">[]</all_columns> - <all_editable_columns type="list">[]</all_editable_columns> - <alternate_name></alternate_name> - <columns type="list">[('id', 'id'), ('portal_type', 'Portal Type'), ('Title', 'Title'), ('Description', 'Description')]</columns> - <css_class></css_class> - <default></default> - <default_params type="list">[('id', "''"), ('portal_type', "''"), ('Title', "''"), ('Description', "''")]</default_params> - <description></description> - <domain_root_list type="list">[]</domain_root_list> - <domain_tree type="int">0</domain_tree> - <editable type="int">1</editable> - <editable_columns type="list">[]</editable_columns> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <global_attributes type="list">[]</global_attributes> - <height type="int">5</height> - <hidden type="int">0</hidden> - <lines type="int">30</lines> - <list_action>list</list_action> - <list_cookie>SEARCH_LIST</list_cookie> - <list_method type="method">portal_catalog</list_method> - <meta_types type="list">[]</meta_types> - <portal_types type="list">[]</portal_types> - <report_root_list type="list">[]</report_root_list> - <report_tree type="int">0</report_tree> - <reverse type="int">0</reverse> - <search type="int">0</search> - <search_columns type="list">[]</search_columns> - <select type="int">0</select> - <selection_name></selection_name> - <sort type="list">[]</sort> - <sort_columns></sort_columns> - <stat_method></stat_method> - <title>Résultats</title> - <width type="int">40</width> - </values> - <tales> - <list_method>python:here.portal_url.getPortalObject().portal_skins.local_list_method[here.REQUEST.list_method_id]</list_method> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - </messages> - </field> - </fields> - </group> - </groups> -</form> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_custom/search_category.zsql b/product/Coramy/skins/coramy_custom/search_category.zsql deleted file mode 100755 index 539e6e4275..0000000000 --- a/product/Coramy/skins/coramy_custom/search_category.zsql +++ /dev/null @@ -1,23 +0,0 @@ -<dtml-comment> -title:Search Category -connection_id:erp5_sql_connection -max_rows:1000 -max_cache:100 -cache_time:0 -class_name:ZSQLBrain -class_file:zsqlbrain.py -</dtml-comment> -<params>category_list -portal_type</params> -<dtml-if portal_type> -SELECT DISTINCT catalog.uid, catalog.path, catalog.relative_url, portal_type -FROM catalog, category -WHERE (<dtml-in portal_type><dtml-unless sequence-start> OR </dtml-unless>catalog.portal_type='<dtml-var sequence-item>'</dtml-in>) -AND catalog.uid = category.uid -AND (<dtml-var "portal_categories.buildSQLSelector(category_list)">) -<dtml-else> -SELECT DISTINCT catalog.uid, catalog.path, portal_type -FROM catalog, category -WHERE catalog.uid = category.uid -AND (<dtml-var "portal_categories.buildSQLSelector(category_list)">) -</dtml-if> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_custom/search_relation.form b/product/Coramy/skins/coramy_custom/search_relation.form deleted file mode 100755 index c72d2c00c4..0000000000 --- a/product/Coramy/skins/coramy_custom/search_relation.form +++ /dev/null @@ -1,67 +0,0 @@ -<?xml version="1.0"?> - -<form> - <title>Mettre à jour la relation</title> - <row_length>4</row_length> - <name>Update Relation</name> - <pt>form_list_relation</pt> - <action>update_relation</action> - <method>POST</method> - <enctype></enctype> - <encoding>UTF-8</encoding> - <stored_encoding>ISO-8859-1</stored_encoding> - <unicode_mode>false</unicode_mode> - <groups> - <group> - <title>Default</title> - <fields> - - <field><id>listbox</id> <type>ListBox</type> - <values> - <all_columns type="list">[('id', 'R\xe9f\xe9rence'), ('portal_type', 'Type'), ('Title', 'Titre'), ('relative_url', "Chemin d'acc\xe8s"), ('Description', 'Description')]</all_columns> - <all_editable_columns type="list">[]</all_editable_columns> - <alternate_name></alternate_name> - <columns type="list">[('id', 'R\xe9f\xe9rence'), ('portal_type', 'Type'), ('Title', 'Titre'), ('relative_url', "Chemin d'acc\xe8s"), ('Description', 'Description')]</columns> - <css_class></css_class> - <default></default> - <default_params type="list">[('id', "''"), ('relative_url', "''"), ('portal_type', "''"), ('Description', "''")]</default_params> - <description></description> - <domain_root_list type="list">[]</domain_root_list> - <domain_tree type="int">0</domain_tree> - <editable type="int">1</editable> - <editable_columns type="list">[]</editable_columns> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <global_attributes></global_attributes> - <height type="int">5</height> - <hidden type="int">0</hidden> - <lines type="int">30</lines> - <list_action>list</list_action> - <list_cookie>SEARCH_LIST</list_cookie> - <list_method type="method">portal_catalog</list_method> - <meta_types type="list">[]</meta_types> - <portal_types type="list">[]</portal_types> - <report_root_list type="list">[]</report_root_list> - <report_tree type="int">0</report_tree> - <reverse type="int">0</reverse> - <search type="int">0</search> - <search_columns></search_columns> - <select type="int">1</select> - <selection_name>search_relation</selection_name> - <sort type="list">[('relative_url', 'relative_url')]</sort> - <sort_columns></sort_columns> - <stat_method></stat_method> - <title>Résultats</title> - <width type="int">40</width> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - </messages> - </field> - </fields> - </group> - </groups> -</form> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_custom/seb_test.py b/product/Coramy/skins/coramy_custom/seb_test.py deleted file mode 100755 index b6d812d34c..0000000000 --- a/product/Coramy/skins/coramy_custom/seb_test.py +++ /dev/null @@ -1,26 +0,0 @@ -## Script (Python) "seb_test" -##bind container=container -##bind context=context -##bind namespace= -##bind script=script -##bind subpath=traverse_subpath -##parameters= -##title= -## -organisation_list = context.object_action_list(selection_name='organisations_selection') - -request = context.REQUEST -tab = '\t' -cr = '\n' -export = '' -del_list = [] - -for modele_item in organisation_list : - ligne_modele = '' - modele=modele_item.getObject() - - if int(modele.getId()) >= 726 : - del_list.append(modele.getId()) - -context.getPortalObject().organisation.deleteContent(del_list) -return len(del_list) diff --git a/product/Coramy/skins/coramy_custom/show_request.py b/product/Coramy/skins/coramy_custom/show_request.py deleted file mode 100755 index 9bad2c459f..0000000000 --- a/product/Coramy/skins/coramy_custom/show_request.py +++ /dev/null @@ -1,10 +0,0 @@ -## Script (Python) "show_request" -##bind container=container -##bind context=context -##bind namespace= -##bind script=script -##bind subpath=traverse_subpath -##parameters= -##title= -## -return context.REQUEST diff --git a/product/Coramy/skins/coramy_custom/test_form.form b/product/Coramy/skins/coramy_custom/test_form.form deleted file mode 100755 index 415de8e30f..0000000000 --- a/product/Coramy/skins/coramy_custom/test_form.form +++ /dev/null @@ -1,48 +0,0 @@ -<?xml version="1.0" encoding="iso-8859-1"?> - -<form> - <title></title> - <name>test_form</name> - <action></action> - <enctype></enctype> - <method>POST</method> - <pt>form_view</pt> - - <groups> - <group> - <title>Default</title> - <fields> - - <field><id>xxx</id> <type>TextAreaField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <external_validator></external_validator> - <extra></extra> - <height type="int">5</height> - <hidden type="int">0</hidden> - <max_length></max_length> - <max_linelength></max_linelength> - <max_lines></max_lines> - <required type="int">1</required> - <title>xxx</title> - <width type="int">40</width> - </values> - <tales> - <default>request/toto</default> - <description>request/toto</description> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_many_lines">You entered too many lines.</message> - <message name="line_too_long">A line was too long.</message> - <message name="too_long">You entered too many characters.</message> - </messages> - </field> - </fields> - </group> - </groups> -</form> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_custom/test_jps.py b/product/Coramy/skins/coramy_custom/test_jps.py deleted file mode 100755 index 21c2334f5e..0000000000 --- a/product/Coramy/skins/coramy_custom/test_jps.py +++ /dev/null @@ -1,31 +0,0 @@ -## Script (Python) "test_jps" -##bind container=container -##bind context=context -##bind namespace= -##bind script=script -##bind subpath=traverse_subpath -##parameters= -##title= -## -# Collect movements in Zero Stock applied rule -zs_movement_list = [context.portal_simulation.zero_stock['modele-137H401_coloris-modele-137H401-1_taille-adulte-52']] - -# keep only movements with a Modele resource -movement_list = [] -for movement in zs_movement_list : - try : - if movement.getResourceValue().getPortalType() == 'Modele' : - movement_list.append(movement) - except : - pass - -# Parse movements into a root group -root_group = context.portal_simulation.collectMovement(movement_list) -order_list = context.portal_simulation.buildOrderList(root_group) - -# update produced orders -for order in order_list: - order.autoPlan() - order.purchase_order_apply_condition() - -return "fait" diff --git a/product/Coramy/skins/coramy_custom/test_link.py b/product/Coramy/skins/coramy_custom/test_link.py deleted file mode 100755 index c3997a40d7..0000000000 --- a/product/Coramy/skins/coramy_custom/test_link.py +++ /dev/null @@ -1,19 +0,0 @@ -## Script (Python) "test_link" -##bind container=container -##bind context=context -##bind namespace= -##bind script=script -##bind subpath=traverse_subpath -##parameters= -##title= -## -request = context.REQUEST - -transformation_list = context.transformation_sql_search(modele_id = context.id) - -if len(transformation_list) > 0: - jump_url = transformation_list[0].absolute_url() -else: - jump_url = context.absolute_url() - -return request[ 'RESPONSE' ].redirect( '%s/view' % jump_url ) diff --git a/product/Coramy/skins/coramy_custom/test_piece.zsql b/product/Coramy/skins/coramy_custom/test_piece.zsql deleted file mode 100755 index cdb26e7aba..0000000000 --- a/product/Coramy/skins/coramy_custom/test_piece.zsql +++ /dev/null @@ -1,28 +0,0 @@ -<dtml-comment> -title: -connection_id:MySQL -max_rows:1000 -max_cache:100 -cache_time:0 -class_name: -class_file: -</dtml-comment> -<params></params> -SELECT DISTINCT - item.uid, item.id, item.path, - item.Description, item.simulation_state, item.default_destination_title, - stock.uid as stock_uid, - stock.node_uid as stock_node_uid, - stock.quantity as stock_quantity - -FROM - catalog AS item - -LEFT JOIN category, stock -ON (category.category_uid=item.uid -AND category.base_category_uid = <dtml-var "portal_categories.aggregate.getUid()"> -AND stock.uid = category.uid) - -WHERE item.portal_type = "Piece Tissu" - -AND item.uid=1987190823 \ No newline at end of file diff --git a/product/Coramy/skins/coramy_custom/test_script.py b/product/Coramy/skins/coramy_custom/test_script.py deleted file mode 100755 index 12eacc7e93..0000000000 --- a/product/Coramy/skins/coramy_custom/test_script.py +++ /dev/null @@ -1,12 +0,0 @@ -## Script (Python) "test_script" -##bind container=container -##bind context=context -##bind namespace= -##bind script=script -##bind subpath=traverse_subpath -##parameters= -##title= -## -rule = context.getSpecialiseValue() -if rule is not None: - rule.expand(context, force=1) diff --git a/product/Coramy/skins/coramy_custom/test_script2.py b/product/Coramy/skins/coramy_custom/test_script2.py deleted file mode 100755 index 954a3dd2e9..0000000000 --- a/product/Coramy/skins/coramy_custom/test_script2.py +++ /dev/null @@ -1,16 +0,0 @@ -## Script (Python) "test_script2" -##bind container=container -##bind context=context -##bind namespace= -##bind script=script -##bind subpath=traverse_subpath -##parameters= -##title= -## -object_list = context.object_action_list(selection_name='purchase_packing_list_selection') - -for object in object_list : - object.deliver() - object.invoice() - -return 'fait', len(object_list) diff --git a/product/Coramy/skins/coramy_custom/testdocument_pdf.pt b/product/Coramy/skins/coramy_custom/testdocument_pdf.pt deleted file mode 100755 index 14cc630c25..0000000000 --- a/product/Coramy/skins/coramy_custom/testdocument_pdf.pt +++ /dev/null @@ -1,31 +0,0 @@ -<?xml version="1.0" encoding="iso-8859-1" ?> -<document filename="report01.pdf"> - <title tal:content="template/title">Test Document</title> - <author>Ulrich Eck</author> - <subject>only for testing ...</subject> - <content tal:define="price python:65.0; count python:10"> - - - - <para>this is some paragraph text followed by an flowing image</para> - <para>this is some paragraph text followed by an flowing image</para> - <spacer height="30" /> - <table rowheight="0.7cm" colwidth="2cm" splitbyrow="1" repeatrows="1" repeatcols="0" style="StandardTable"> - <tr> - <td colwidth="2cm">Amount</td><td colwidth="11cm">Description</td><td colwidth="3cm">Price</td> - </tr> - <tal:block tal:repeat="item python:range(count)"> - <tr> - <td tal:content="item"/> - <td>Some Description</td> - <td tal:content="string:${price},- EUR"/> - </tr> - </tal:block> - <tr tal:define="sum python:count*price"> - <td> </td> - <td>Total</td> - <td tal:content="string:${sum},- EUR"/> - </tr> - </table> - </content> -</document> diff --git a/product/Coramy/skins/coramy_custom/testjp.py b/product/Coramy/skins/coramy_custom/testjp.py deleted file mode 100755 index 6a5165607e..0000000000 --- a/product/Coramy/skins/coramy_custom/testjp.py +++ /dev/null @@ -1,418 +0,0 @@ -## Script (Python) "testjp" -##bind container=container -##bind context=context -##bind namespace= -##bind script=script -##bind subpath=traverse_subpath -##parameters= -##title= -## -context.SimulationTool_buildRequirementOrder( - resource="composant/B4002", - node_category="site/Stock_MP", - section_category="group/Coramy" - ) - -return "Done" - - -# - -if len(context.getCausalityRelatedValueList()) == 1: - # Only applied rule - context.activate().buildDeliveryList() -else: - return "causality is not 1" - -return "Done" - -# - -context.SimulationTool_buildRequirementOrder(resource='composant/VIDJL') -return None - -# -context.buildDeliveryList() -return "Done" - -## - -movement_list = [] -order = context - -if order.getPortalType() == 'Purchase Order' : - filter_dict = {'portal_type': 'Purchase Order Line'} -else : - filter_dict = {'portal_type': 'Sales Order Line'} - -movement_list += order.getOrderRelatedValueList(portal_type = 'Simulation Movement') -for order_line in order.contentValues(filter=filter_dict) : - movement_list += order_line.getOrderRelatedValueList(portal_type = 'Simulation Movement') - for cell in order_line.contentValues(filter={'portal_type': 'Delivery Cell'}) : - movement_list += cell.getOrderRelatedValueList(portal_type = 'Simulation Movement') - -root_group = context.portal_simulation.collectMovement(movement_list) -delivery_list = context.portal_simulation.buildDeliveryList(root_group) - -# what's the gestionaire of this order -user_name = '' -# are we on a sales order or puchase order ? -if order.getPortalType() == 'Sales Order' : - user_name = order.getSourceAdministrationTitle().replace(' ','_') -elif order.getPortalType() == 'Purchase Order' : - user_name = order.getDestinationAdministrationPersonTitle().replace(' ','_') - -for delivery in delivery_list : - # update the state of the created deliveries to 'confirmed' - delivery.confirm() - # update local_roles - delivery.assign_gestionaire_designe_roles(user_name = user_name) - -return str(delivery_list) - - -# - -context.buildDeliveryList() -return None - -# - -for l in context.objectValues(): - print l.getRelativeUrl(), l.getInventoriatedQuantity() - for c in l.objectValues(): - print c.getRelativeUrl(), c.getInventoriatedQuantity() - -return printed - - -# -context.buildInvoiceList() -return "Done" - -# - -return str(context.getConvertedQuantity() is not None) - -# - -for l in context.objectValues(): - l.immediateReindexObject() - for c in l.objectValues(): - try: - c.immediateReindexObject() - except: - print c.getRelativeUrl() - -return printed - -#- - -return str(context.getCausalityValueList()) - -#- - -context.expand(applied_rule_id = '2308') -return "Done" - -#- - -for l in context.objectValues(): - if l.isDivergent(): - print "Divergent", l.getRelativeUrl(), str(l.getDeliveryRelatedValueList()) - for c in l.objectValues(): - if not c.isSimulated(): - print "Not simulated", c.getRelativeUrl(), str(c.getDeliveryRelatedValueList()) - elif c.isDivergent(): - print "Divergent", c.getRelativeUrl(), str(c.getDeliveryRelatedValueList()) - - -print 'OK' -return printed - -#- - -context.updateAppliedRule() -return "Done" - -#¬ -return context.portal_simulation.updateAssetPrice( - 'assortiment/751H402_12P_H', '', - "group/Coramy", - "site/Stock_PF" - ) - -return context.portal_simulation.updateAssetPrice( - 'composant/AN014', 'variante/composant/AN014/bronze blanc', - "group/Coramy", - "site/Stock_MP" - ) - -return context.portal_simulation.updateAssetPrice( - 'modele/067E402', 'coloris/modele/067E402/0_noir_blanc\nmorphologie/modele/067E402/C\ntaille/adulte/48', - "group/Coramy", - "site/Stock_PF" - ) - - - - -#- - -context.buildInvoiceList() -return "Done" - - - - -t = context.getDefaultCausalityValue() -return t.getId() - - -#- - -return str(context.getAggregatedAmountList( - categories = "taille/adulte/40\ncoloris/modele/058B406/2")) -#-- - -print context.getQLineItemList() -print context.getQColumnItemList() -print context.getQTabItemList() -print context.getVLineItemList() -print context.getVColumnItemList() -print context.getVTabItemList() - -return printed - -#-- - -return context.buildInvoiceList() - -#- - -return str(hasattr(context, 'inventory')) - -#-- - - -return str(context.getInventory()) - -#-- - -resource_list = context.PortalSimulation_zGetResourceList() -context.portal_simulation.commitTransaction() - -commit = 100 -for b in resource_list : - relative_url = b.resource_relative_url - variation_text = b.variation_text - if relative_url is not None: - if relative_url.find('modele') >= 0: - if variation_text not in (None, ''): - #print "##Calculate price for %s %s" % (b.resource_relative_url, b.variation_text) - context.portal_simulation.activate(activity='SQLQueue', priority=3).updateAssetPrice( - relative_url, variation_text, - "group/Coramy", - "site/Stock_PF" - ) - else: - print "###Error variation for modele" % variation_text - commit = commit -1 - if commit == 0: - context.portal_simulation.commitTransaction() - commit = 100 - -return printed - -## - -result = context.portal_simulation.updateAssetPrice( - "tissu/TI012", - """coloris/tissu/TI012/Serenity 6025""", - "group/Coramy", - "site/Stock_MP" - ) - -for i in result: - print ' '.join(map(lambda x:str(x), i)) - -return printed - - -#-- - -result = context.portal_simulation.updateAssetPrice( - "modele/417P401", - """coloris/modele/417P401/1_espace_stuc -taille/enfant/10 ans""", - "group/Coramy", - "site/Stock_PF" - - ) - -for i in result: - print ' '.join(map(lambda x:str(x), i)) - -return printed - -#- - -context.restrictedTraverse("modele/537C419GLC/3").updateRelatedContent('modele/537C419GLC/2','modele/537C419GLC/3') -return 'Done' - -#- - -olist = context.portal_catalog(simulation_state="auto_planned", parent_uid=[context.ordre_fabrication.getUid(),context.commande_achat.getUid()]) -return map(lambda x:x.path, olist) - -#- - -return str(context.contentValues()) - -modele_prix = context.restrictedTraverse('modele/417P401/pri_0_0') -modele = context.restrictedTraverse('modele/417P401') - -return str(modele.getIndustrialPrice(context=context)) -return str(modele_prix.test(context.asContext())) - -#-- - -return str(context.isMemberOf('site/Piquage')) - -context.restrictedTraverse('portal_simulation/3078/2').setDelivery('livraison_vente/364/1') -context.restrictedTraverse('portal_simulation/3083/2').setDelivery('livraison_vente/366/1') - -return "Done" - - -#- - - -return context.buildDeliveryList() -#return context.getMovementList() -#return context.updateAppliedRule() - - -return len(context.Resource_zGetMovementHistoryList(resource=("modele/417P401",), - variation_text="""coloris/modele/417P401/1_espace_stuc -taille/enfant/10 ans""", - strict_membership=0, - section_category="group/Coramy", - node_category="site/Stock_PF", - simulation_state=('delivered', 'started', 'stopped', 'invoiced'))) -#-------------------- - -for m in context.getMovementList(): - if not m.isSimulated(): - print "Not simumlated: %s" % m.getRelativeUrl() - -return printed - -#-------------------- - -dest = context.getDestinationValue(portal_type=['Organisation']).getTitle() -return dest - - -movement_list = context.getOrderRelatedMovementList() -movement_uid_list = map(lambda o:o.getUid(), movement_list) -return movement_uid_list -return map(lambda x: (x.path, x.quantity, x.target_quantity),list(context.ProductionOrder_getAggregatedMaterialConsumptionList())) - -return context.updateAppliedRule() - -return '/'.join(context.getPhysicalPath()) - -# Use this script to test if simulation state is acceptable - -def hasDelivery(ps_item): - for m in ps_item.objectValues(): - if len(m.getCategoryMembershipList('delivery')) > 0: - return 1 - for a in m.objectValues(): - if hasDelivery(a): - return 1 - return 0 - -def getDeliveryList(ps_item): - result = {} - for m in ps_item.objectValues(): - for d in m.getDeliveryValueList(): - if d is not None: - result[d.getRelativeUrl()] = 1 - for a in m.objectValues(): - result.update( getDeliveryList(a)) - return result - -# ---------------------------------------------------------- -# First make sure all simulation movements point to an order - -print "-- Checking simulation" -for ar in context.portal_simulation.objectValues(): - if ar.getCausalityValue() is None: - print " Applied Rule %s has no order" % ar.getId() - print " Previously was: %s" % ar.getCausality() - if hasDelivery(ar): - print " Applied Rule %s has some delivered movements" % ar.getId() - print " deliveries: %s" % ' '.join(getDeliveryList(ar).keys()) - elif ar.getId() not in ('zero_stock', ): - print " Delete %s" % ar.getId() - context.portal_simulation.deleteContent(ar.getId()) - -# ---------------------------------------------------------- -# Next make sure all orders in > planned state have at most one applied rule - -order_list = context.ordre_fabrication.objectValues() + context.commande_achat.objectValues() + context.commande_vente.objectValues() - -for of in order_list: - if of.getSimulationState() not in ('draft', 'cancelled', 'auto_planned'): - ps = of.getCausalityRelatedValueList(portal_type="Applied Rule") - if len(ps) == 0: - print " Missing PS for Order %s of type %s" % (of.getId(), of.getPortalType()) - print " Reexpand order %s" % of.getId() - of.edit() - elif len(ps) > 1: - print " Too many PS for Order %s of type %s" % (of.getId(), of.getPortalType()) - no_delivery = [] - delivery = [] - for ps_item in ps: - if hasDelivery(ps_item): - print " PS %s has some delivered movements" % ps_item.getId() - delivery.append(ps_item) - else: - print " PS %s has no delivered movements" % ps_item.getId() - no_delivery.append(ps_item) - # manage_delObjects - if len(delivery) > 0: - # Only erase no_delivery if one item has delivery - for ps_item in no_delivery: - print " Delete PS %s" % ps_item.getId() - parent = ps_item.aq_parent - parent.deleteContent(ps_item.getId()) - else: - # Keep at least one - for ps_item in no_delivery[1:]: - print " Delete PS %s" % ps_item.getId() - id = ps_item.getId() - parent = ps_item.aq_parent - parent.deleteContent(ps_item.getId()) - if len(delivery) > 1: - # We erase the Applied Rule but keep - # some excessive packing lists which may have been generated - # THIS BREAKS CONSISTENCY - for ps_item in delivery[1:]: - print " Delete PS %s with BREAKS CONSISTENCY" % ps_item.getId() - id = ps_item.getId() - parent = ps_item.aq_parent - parent.deleteContent(ps_item.getId()) - - -# ---------------------------------------------------------- -# Next make sure all movements in a delivery of material point to simulation - - -# ---------------------------------------------------------- -# Next make sure all movements in a delivery of material point to simulation - - -return printed diff --git a/product/Coramy/skins/coramy_custom/testrc.py b/product/Coramy/skins/coramy_custom/testrc.py deleted file mode 100755 index f487c5f631..0000000000 --- a/product/Coramy/skins/coramy_custom/testrc.py +++ /dev/null @@ -1,41 +0,0 @@ -## Script (Python) "testrc" -##bind container=container -##bind context=context -##bind namespace= -##bind script=script -##bind subpath=traverse_subpath -##parameters= -##title= -## -context.setSourceAdministration('person/347') -return 'Done' - - -# set the source administration -local_user = context.portal_membership.getAuthenticatedMember() -local_user_name = string.replace(local_user.getUserName(), '_', ' ') -local_persons = context.item_by_title_sql_search(title = local_user_name, portal_type = 'Person') -if len(local_persons) > 0: - print local_user.getUserName() - print local_persons[0].relative_url -else: - print 'couscous' -return printed - - -# -context.activate().buildDeliveryList() -return "Done" - - -""" -summary = context.getAggregatedAmountList() -#amount = summary[0] -#print amount['converted_quantity'], amount['efficiency'] -print 'fin' -return printed -""" -""" -print float(context.getLaizeUtile()) -return printed -""" diff --git a/product/Coramy/skins/coramy_custom/testseb.py b/product/Coramy/skins/coramy_custom/testseb.py deleted file mode 100755 index 48d2632639..0000000000 --- a/product/Coramy/skins/coramy_custom/testseb.py +++ /dev/null @@ -1,11 +0,0 @@ -## Script (Python) "testseb" -##bind container=container -##bind context=context -##bind namespace= -##bind script=script -##bind subpath=traverse_subpath -##parameters= -##title= -## -delivery_list =context.object_action_list(selection_name='sales_packing_list_selection',max_nb=10) -return repr(delivery_list) diff --git a/product/Coramy/skins/coramy_custom/testyo.py b/product/Coramy/skins/coramy_custom/testyo.py deleted file mode 100755 index c139258abd..0000000000 --- a/product/Coramy/skins/coramy_custom/testyo.py +++ /dev/null @@ -1,31 +0,0 @@ -## Script (Python) "testyo" -##bind container=container -##bind context=context -##bind namespace= -##bind script=script -##bind subpath=traverse_subpath -##parameters= -##title= -## -movement_list = context.getMovementList() -movement_group = context.collectMovement(movement_list) - -invoice_line_list = context.buildInvoiceLineList(movement_group) -return repr(invoice_line_list) - -dict = context.showDict() -item_list = dict.items() -item_list.sort() -s = '' -for key,val in item_list: - s += "%s: %s\n" % (str(key), str(val)) -return s - -ret = [] - -invoice_line_list = context.contentValues(filter={'portal_type':'Invoice Line'}) -for invoice_line in invoice_line_list: - cell_range = invoice_line.getCellRange(base_id='movement') - ret.append(cell_range) - -return repr(ret) diff --git a/product/Coramy/skins/coramy_custom/toto_test.py b/product/Coramy/skins/coramy_custom/toto_test.py deleted file mode 100755 index 4caa51976a..0000000000 --- a/product/Coramy/skins/coramy_custom/toto_test.py +++ /dev/null @@ -1,16 +0,0 @@ -## Script (Python) "toto_test" -##bind container=container -##bind context=context -##bind namespace= -##bind script=script -##bind subpath=traverse_subpath -##parameters= -##title= -## -print context.variated_reference_matrix_item_list(base_category_list = ('coloris',), base=0) -print context.variated_reference_matrix_item_list(base_category_list = ('taille',), base=0) -print context.variated_reference_matrix_item_list(base_category_list = ('taille','coloris',), base=0, include=0) - - -print " " -return printed diff --git a/product/Coramy/skins/coramy_custom/transfer_vetement.py b/product/Coramy/skins/coramy_custom/transfer_vetement.py deleted file mode 100755 index c158300de5..0000000000 --- a/product/Coramy/skins/coramy_custom/transfer_vetement.py +++ /dev/null @@ -1,61 +0,0 @@ -## Script (Python) "transfer_vetement" -##bind container=container -##bind context=context -##bind namespace= -##bind script=script -##bind subpath=traverse_subpath -##parameters= -##title= -## -vetement = context -vetement_relative_url = vetement.getRelativeUrl() - -related_object_list = vetement.getSpecialiseRelatedValueList() - -forme = vetement.aq_parent - -vetement_module = context.getPortalObject().vetement - -# copy and paste vetement -copy_data = forme.manage_copyObjects(ids=[vetement.getId()]) -new_id_list = vetement_module.manage_pasteObjects(copy_data) -new_vetement = vetement_module[new_id_list[0]['new_id']] - -# forme_id_list is used to build the specialise relation between the vetement and formes -forme_id_list = [] -forme_id_list.append(forme.getId()) - -# update relation on each related_object and complete forme_id_list -for related_object in related_object_list : - category_items = related_object.getCategoryList() - filtered_items = filter(lambda cat_item:cat_item.find(vetement_relative_url) == (-1) , category_items) -# print related_object.getId() -# print len(category_items) -# print len(filtered_items) - # update categories on related_object - filtered_items.append("specialise/vetement/"+vetement.getId()) - related_object.edit(categories = filtered_items) - - if related_object.getPortalType() == "Modele" : - modele_forme_list = related_object.getFormeIdList() - for forme_id in modele_forme_list : - if forme_id in forme_id_list : - pass - else : - forme_id_list.append(forme_id) - -#print forme_id_list -# set forme_id_list on vetement -vetement_categories = new_vetement.getCategoryList() -for forme_id in forme_id_list : - vetement_categories += ('specialise/forme/'+forme_id,) - -# update fichier Lectra -fichierLectra = new_vetement.getLibrairie()+'/'+new_vetement.getId() - -new_vetement.edit(categories = vetement_categories, librairie = fichierLectra) - -# delete old vetement -forme.deleteContent(vetement.getId()) - -#return printed diff --git a/product/Coramy/skins/coramy_custom/updateEipAndCollection.py b/product/Coramy/skins/coramy_custom/updateEipAndCollection.py deleted file mode 100755 index 757f0a7d31..0000000000 --- a/product/Coramy/skins/coramy_custom/updateEipAndCollection.py +++ /dev/null @@ -1,59 +0,0 @@ -## Script (Python) "updateEipAndCollection" -##bind container=container -##bind context=context -##bind namespace= -##bind script=script -##bind subpath=traverse_subpath -##parameters= -##title= -## -# callable on tissu, modele, forme, gamme - -categorie_dict = {} -categorie_dict['eip/Baby']=['eip/Baby'] -categorie_dict['eip/Baby/Fille']=['eip/Baby/Fille'] -categorie_dict['eip/Baby/Garcon']=['eip/Baby/Garcon'] -categorie_dict['eip/Femme']=['eip/Femme'] -categorie_dict['eip/Femme/Chic elegante']=['eip/Femme'] -categorie_dict['eip/Femme/Classic']=['eip/Femme'] -categorie_dict['eip/Femme/Confort']=['eip/Femme'] -categorie_dict['eip/Femme/Cote azur']=['eip/Femme'] -categorie_dict['eip/Femme/Maternite']=['eip/Femme'] -categorie_dict['eip/Femme/Piscine']=['eip/Femme'] -categorie_dict['eip/Femme/Rebelle attitude']=['eip/Femme'] -categorie_dict['eip/Femme/Separables']=['eip/Femme'] -categorie_dict['eip/Femme/Sportswear']=['eip/Femme'] -categorie_dict['eip/Femme/Surf']=['eip/Femme'] -categorie_dict['eip/Fille']=['eip/Fille'] -categorie_dict['eip/Fille/Basic line']=['eip/Fille'] -categorie_dict['eip/Fille/Junior']=['eip/Fille'] -categorie_dict['eip/Fille/Nautic']=['eip/Fille'] -categorie_dict['eip/Fille/Piscine']=['eip/Fille'] -categorie_dict['eip/Fille/Pretty girl']=['eip/Fille'] -categorie_dict['eip/Fille/Rayures']=['eip/Fille'] -categorie_dict['eip/Fille/Surf']=['eip/Fille'] -categorie_dict['eip/Garcon']=['eip/Garcon'] -categorie_dict['eip/Garcon/Fantaisie']=['eip/Garcon'] -categorie_dict['eip/Garcon/Junior']=['eip/Garcon'] -categorie_dict['eip/Garcon/Piscine']=['eip/Garcon'] -categorie_dict['eip/Garcon/Surf']=['eip/Garcon'] -categorie_dict['eip/Homme']=['eip/Homme'] -categorie_dict['eip/Homme/Basic']=['eip/Homme'] -categorie_dict['eip/Homme/Classic']=['eip/Homme'] -categorie_dict['eip/Homme/Piscine']=['eip/Homme'] -categorie_dict['eip/Homme/Surf']=['eip/Homme'] -categorie_dict['eip/Homme/Techno']=['eip/Homme'] - -old_category_list = context.getCategoryList() -new_category_list = [] -categorie_keys = categorie_dict.keys() -for item in old_category_list : - if item in categorie_keys : - for cat_item in categorie_dict[item] : - if not cat_item in new_category_list : - new_category_list.append(cat_item) - else : - if not item in new_category_list and item.find('modele_origine') == -1: - new_category_list.append(item) - -context.setCategoryList(new_category_list) diff --git a/product/Coramy/skins/coramy_custom/updateItemAggregatedMovement.py b/product/Coramy/skins/coramy_custom/updateItemAggregatedMovement.py deleted file mode 100755 index 6188d36e64..0000000000 --- a/product/Coramy/skins/coramy_custom/updateItemAggregatedMovement.py +++ /dev/null @@ -1,59 +0,0 @@ -## Script (Python) "updateItemAggregatedMovement" -##bind container=container -##bind context=context -##bind namespace= -##bind script=script -##bind subpath=traverse_subpath -##parameters= -##title= -## -request = context.REQUEST -movement_list = context.zGetItemAggregatedMovement() -cr = '\n' -tab = '\t' -movement_log = 'Problème'+cr - -for movement_item in movement_list : - movement = movement_item.getObject() - item_list = movement.getAggregateValueList() - if not item_list in ([], None) : - quantity = 0 - for item in item_list : - # verify if resource of item == resource of movement - if movement.getResource() == item.getResource() : - # check if variation_category is the same - if movement.getVariationCategoryList() != item.getVariationCategoryList() : - movement_log += movement.getRelativeUrl()+tab - movement_log += str(movement.getVariationCategoryList())+tab - movement_log += item.getRelativeUrl()+tab - movement_log += str(item.getVariationCategoryList())+tab+cr - else : - movement_log += movement.getRelativeUrl()+tab - movement_log += str(movement.getVariationCategoryList())+tab - movement_log += item.getRelativeUrl()+tab - movement_log += str(item.getVariationCategoryList())+tab+cr - - # verify if quantity of movement == sum (item.getRemainingQuantity) - quantity += item.getRemainingQuantity() - - if 1 : # movement_MP - if (movement.getConsumptionQuantity()+movement.getProductionQuantity()) != 0 : # : - ratio = round(quantity/(movement.getConsumptionQuantity()+movement.getProductionQuantity()),0) - else : - ratio = 0 - else : # livraison_fab - if movement.getTargetQuantity() !=0 : - ratio = round(quantity/movement.getTargetQuantity(),0) - else : - ratio = 0 - - if ratio != 1: - movement_log += movement.getRelativeUrl()+tab - movement_log += str(movement.getVariationCategoryList())+tab - #movement_log += str(movement.getTargetQuantity())+tab - movement_log += str(movement.getConsumptionQuantity()+movement.getProductionQuantity())+tab - movement_log += str(round(quantity,4))+tab+str(ratio)+cr - -request.RESPONSE.setHeader('Content-Type','application/text') - -return movement_log diff --git a/product/Coramy/skins/coramy_custom/updateQuantityOnItemAggregatedMovement.py b/product/Coramy/skins/coramy_custom/updateQuantityOnItemAggregatedMovement.py deleted file mode 100755 index 7827939e47..0000000000 --- a/product/Coramy/skins/coramy_custom/updateQuantityOnItemAggregatedMovement.py +++ /dev/null @@ -1,26 +0,0 @@ -## Script (Python) "updateQuantityOnItemAggregatedMovement" -##bind container=container -##bind context=context -##bind namespace= -##bind script=script -##bind subpath=traverse_subpath -##parameters= -##title= -## -movement = context - -# initial_qty = movement.getTargetQuantity() - -if movement.getPortalType() in ('Inventory Cell', 'Inventory Line') : - #if movement.getProductionQuantity() != 0.0 : - # movement.setProducedItemIdList(movement.getProducedItemIdList()) - #elif movement.getConsumptionQuantity() != 0.0 : - # movement.setConsumedItemIdList(movement.getConsumedItemIdList()) - #else : # inventory - movement.setItemIdList(movement.getItemIdList()) -else : # Delivery Line or Cell - movement.setItemIdList(movement.getItemIdList()) - -# final_qty = movement.getTargetQuantity() - -# return str(initial_qty-final_qty) diff --git a/product/Coramy/skins/coramy_custom/update_this_one.py b/product/Coramy/skins/coramy_custom/update_this_one.py deleted file mode 100755 index 0499d90500..0000000000 --- a/product/Coramy/skins/coramy_custom/update_this_one.py +++ /dev/null @@ -1,26 +0,0 @@ -## Script (Python) "update_this_one" -##bind container=container -##bind context=context -##bind namespace= -##bind script=script -##bind subpath=traverse_subpath -##parameters= -##title= -## -for o in context.objectValues("CORAMY Transformation"): - print o.id - for t in o.objectValues("CORAMY Transformed Resource"): - print t.id - for c in t.objectValues("ERP5 Set Mapped Value"): - if c.id[0:8] == 'quantity': - atr_list = c.getMappedValueAttributeList() - if len(atr_list) == 0: - c.setMappedValueAttributeList(['quantity']) - print c.getRelativeUrl() - if c.id[0:9] == 'variation': - var_bc = c.getMappedValueBaseCategoryList() - if len(var_bc) == 0: - print c.getRelativeUrl() - c.setMappedValueBaseCategoryList(t.getResourceDefaultValue().getVariationBaseCategoryList()) - -return printed diff --git a/product/Coramy/skins/coramy_custom/zGetConfirmedOrderWithoutDeliveries.zsql b/product/Coramy/skins/coramy_custom/zGetConfirmedOrderWithoutDeliveries.zsql deleted file mode 100755 index a055c0e7e5..0000000000 --- a/product/Coramy/skins/coramy_custom/zGetConfirmedOrderWithoutDeliveries.zsql +++ /dev/null @@ -1,23 +0,0 @@ -<dtml-comment> -title: -connection_id:MySQL -max_rows:100000 -max_cache:100 -cache_time:0 -class_name:ZSQLBrain -class_file:zsqlbrain.py -</dtml-comment> -<params></params> -SELECT DISTINCT catalog.relative_url, catalog.id, catalog.path -FROM catalog, catalog AS delivery -LEFT JOIN category ON (catalog.uid=category.category_uid -AND category.base_category_uid = <dtml-var "portal_categories.causality.uid"> -AND category.uid = delivery.uid ) -WHERE ( catalog.portal_type = "Sales Order" -OR catalog.portal_type = "Purchase Order" -OR catalog.portal_type = "Production Order" ) -AND ( delivery.portal_type = "Sales Packing List" -OR delivery.portal_type = "Purchase Packing List" -OR delivery.portal_type = "Production Packing List" ) -AND catalog.simulation_state = "confirmed" -AND category.uid IS NULL \ No newline at end of file diff --git a/product/Coramy/skins/coramy_custom/zGetEipChangeObjectlist.zsql b/product/Coramy/skins/coramy_custom/zGetEipChangeObjectlist.zsql deleted file mode 100755 index 46530481dd..0000000000 --- a/product/Coramy/skins/coramy_custom/zGetEipChangeObjectlist.zsql +++ /dev/null @@ -1,23 +0,0 @@ -<dtml-comment> -title: -connection_id:MySQL -max_rows:100000 -max_cache:100 -cache_time:0 -class_name:ZSQLBrain -class_file:zsqlbrain.py -</dtml-comment> -<params></params> -SELECT catalog.id, catalog.relative_url, catalog.path, category.uid -FROM catalog -LEFT JOIN category ON ( catalog.uid=category.uid -AND category.base_category_uid = <dtml-var "portal_categories.collection.uid"> -AND category.category_uid = <dtml-var "portal_categories.collection['2004'].Coramy.uid"> -) - -WHERE not (category.uid is NULL) -AND (catalog.portal_type = "Modele" -OR catalog.portal_type = "Forme" -OR catalog.portal_type = "Tissu" -OR catalog.portal_type = "Gamme" ) -AND catalog.uid = -1893100782 \ No newline at end of file diff --git a/product/Coramy/skins/coramy_custom/zGetHouvSalesOrderList.zsql b/product/Coramy/skins/coramy_custom/zGetHouvSalesOrderList.zsql deleted file mode 100755 index 5aea7cead8..0000000000 --- a/product/Coramy/skins/coramy_custom/zGetHouvSalesOrderList.zsql +++ /dev/null @@ -1,17 +0,0 @@ -<dtml-comment> -title: -connection_id:MySQL -max_rows:100000 -max_cache:100 -cache_time:0 -class_name:ZSQLBrain -class_file:zsqlbrain.py -</dtml-comment> -<params></params> -SELECT catalog.id, catalog.relative_url, catalog.path -FROM catalog, category -WHERE catalog.uid=category.uid -AND category.base_category_uid = <dtml-var "portal_categories.source_section.uid"> -AND category.category_uid = <dtml-var "portal_categories.group.Coramy.Houvenaegel.uid"> -AND ( catalog.portal_type = "Sales Order" -OR catalog.portal_type = "Sales Packing List") diff --git a/product/Coramy/skins/coramy_custom/zGetInSubPieceTissuList.zsql b/product/Coramy/skins/coramy_custom/zGetInSubPieceTissuList.zsql deleted file mode 100755 index 3218fa7e58..0000000000 --- a/product/Coramy/skins/coramy_custom/zGetInSubPieceTissuList.zsql +++ /dev/null @@ -1,20 +0,0 @@ -<dtml-comment> -title: -connection_id:MySQL -max_rows:100000 -max_cache:100 -cache_time:0 -class_name:ZSQLBrain -class_file:zsqlbrain.py -</dtml-comment> -<params></params> -SELECT DISTINCT catalog.relative_url, catalog.path -FROM catalog, catalog as master_item, category, stock -WHERE category.uid=stock.uid -AND category.base_category_uid = <dtml-var "portal_categories.aggregate.uid"> -AND category.category_uid = catalog.uid -AND stock.node_uid = <dtml-var "portal_categories.site.Stock_MP.Gravelines.uid"> -AND stock.quantity > 0 -AND catalog.parent_uid = master_item.uid -AND master_item.portal_type = "Piece Tissu" -AND catalog.portal_type = "Piece Tissu" \ No newline at end of file diff --git a/product/Coramy/skins/coramy_custom/zGetItemAggregatedMovement.zsql b/product/Coramy/skins/coramy_custom/zGetItemAggregatedMovement.zsql deleted file mode 100755 index 4f783afb26..0000000000 --- a/product/Coramy/skins/coramy_custom/zGetItemAggregatedMovement.zsql +++ /dev/null @@ -1,23 +0,0 @@ -<dtml-comment> -title: -connection_id:MySQL -max_rows:100000 -max_cache:100 -cache_time:0 -class_name:ZSQLBrain -class_file:zsqlbrain.py -</dtml-comment> -<params></params> -SELECT DISTINCT catalog.id, catalog.relative_url, catalog.path -FROM catalog, catalog as tissu, catalog as delivery, category, movement -WHERE catalog.uid=category.uid -AND tissu.uid = category.category_uid -AND tissu.portal_type = "Piece Tissu" -AND category.base_category_uid = <dtml-var "portal_categories.aggregate.uid"> -AND movement.uid = catalog.uid -AND delivery.uid = movement.delivery_uid -AND ( delivery.portal_type = "xProduction Packing List" -OR delivery.portal_type = "xPurchase Packing List" -OR delivery.portal_type = "Inventory MP" -OR delivery.portal_type = "xMovement MP" ) -AND delivery.relative_url like "inventaire_mp/10%" \ No newline at end of file diff --git a/product/Coramy/skins/coramy_custom/zGetLocatedPieceTissuList.zsql b/product/Coramy/skins/coramy_custom/zGetLocatedPieceTissuList.zsql deleted file mode 100755 index 6e89eacd29..0000000000 --- a/product/Coramy/skins/coramy_custom/zGetLocatedPieceTissuList.zsql +++ /dev/null @@ -1,24 +0,0 @@ -<dtml-comment> -title: -connection_id:MySQL -max_rows:10000 -max_cache:100 -cache_time:0 -class_name:ZSQLBrain -class_file:zsqlbrain.py -</dtml-comment> -<params></params> -SELECT catalog.relative_url, catalog.path, catalog.id, resource.relative_url as resource, variation.relative_url as variation -FROM catalog - -LEFT JOIN category ON (category.uid = catalog.uid -AND category.base_category_uid = <dtml-var "portal_categories.resource.uid">) -LEFT JOIN category as cat2 ON (cat2.uid = catalog.uid -AND cat2.base_category_uid = <dtml-var "portal_categories.coloris.uid">) -LEFT JOIN catalog as resource ON (resource.uid = category.category_uid) -LEFT JOIN catalog as variation ON (variation.uid = cat2.category_uid) -WHERE catalog.portal_type = "Piece Tissu" -AND catalog.location <> '' -AND catalog.location <> 'None' - -AND not (category.uid is NULL OR cat2.uid is NULL) \ No newline at end of file diff --git a/product/Coramy/skins/coramy_custom/zGetPieceTissuList.zsql b/product/Coramy/skins/coramy_custom/zGetPieceTissuList.zsql deleted file mode 100755 index f95b603030..0000000000 --- a/product/Coramy/skins/coramy_custom/zGetPieceTissuList.zsql +++ /dev/null @@ -1,18 +0,0 @@ -<dtml-comment> -title: -connection_id:MySQL -max_rows:100000 -max_cache:100 -cache_time:0 -class_name:ZSQLBrain -class_file:zsqlbrain.py -</dtml-comment> -<params></params> -SELECT DISTINCT catalog.relative_url, catalog.path -FROM catalog, catalog as resource, category -WHERE catalog.portal_type = "Piece Tissu" -AND category.uid=catalog.uid -AND category.base_category_uid = <dtml-var "portal_categories.coloris.uid"> -AND category.category_uid = resource.uid -AND resource.relative_url = "tissu/TM002/blanc" -order by catalog.id \ No newline at end of file diff --git a/product/Coramy/skins/coramy_custom/zGetProductionDeliveryList.zsql b/product/Coramy/skins/coramy_custom/zGetProductionDeliveryList.zsql deleted file mode 100755 index 9c9f4f225b..0000000000 --- a/product/Coramy/skins/coramy_custom/zGetProductionDeliveryList.zsql +++ /dev/null @@ -1,16 +0,0 @@ -<dtml-comment> -title: -connection_id:MySQL -max_rows:10000 -max_cache:100 -cache_time:0 -class_name:ZSQLBrain -class_file:zsqlbrain.py -</dtml-comment> -<params></params> -SELECT catalog.relative_url, catalog.path -FROM catalog -WHERE catalog.portal_type = "Production Packing List" -AND ( catalog.simulation_state = "started" -OR catalog.simulation_state = "stopped" -OR catalog.simulation_state = "delivered" ) \ No newline at end of file diff --git a/product/Coramy/skins/coramy_custom/zGetStockCoramy.zsql b/product/Coramy/skins/coramy_custom/zGetStockCoramy.zsql deleted file mode 100755 index b552414897..0000000000 --- a/product/Coramy/skins/coramy_custom/zGetStockCoramy.zsql +++ /dev/null @@ -1,23 +0,0 @@ -<dtml-comment> -title: -connection_id:MySQL -max_rows:10000 -max_cache:100 -cache_time:0 -class_name:ZSQLBrain -class_file:zsqlbrain.py -</dtml-comment> -<params></params> -SELECT - catalog.relative_url , - movement.variation_text , - SUM( stock.quantity ) AS inventory, - SUM( stock.total_asset_price) AS asset_price -FROM - stock -LEFT JOIN catalog ON ( catalog.uid = stock.resource_uid ) -LEFT JOIN movement ON ( stock.uid = movement.uid ) -WHERE - -GROUP BY - stock.resource_uid , movement.variation_text \ No newline at end of file diff --git a/product/Coramy/skins/coramy_custom/zGetTissuMovementWithoutItem.zsql b/product/Coramy/skins/coramy_custom/zGetTissuMovementWithoutItem.zsql deleted file mode 100755 index 8fc9261dce..0000000000 --- a/product/Coramy/skins/coramy_custom/zGetTissuMovementWithoutItem.zsql +++ /dev/null @@ -1,27 +0,0 @@ -<dtml-comment> -title: -connection_id:MySQL -max_rows:100000 -max_cache:100 -cache_time:0 -class_name:ZSQLBrain -class_file:zsqlbrain.py -</dtml-comment> -<params></params> -SELECT DISTINCT catalog.relative_url, catalog.path -FROM catalog, catalog as resource, catalog as delivery, movement -LEFT JOIN category -ON (category.uid=movement.uid -AND category.base_category_uid = <dtml-var "portal_categories.aggregate.uid">) -WHERE movement.uid = catalog.uid -AND movement.target_quantity <> 0 -AND category.uid IS NULL -AND movement.is_accountable = 1 -AND resource.uid = movement.resource_uid -AND resource.portal_type = "Tissu" -AND delivery.uid = movement.delivery_uid -AND (delivery.simulation_state = "getting_ready" -OR delivery.simulation_state = "started" -OR delivery.simulation_state = "delivered") -AND ( delivery.portal_type = "Production Packing List" -OR delivery.portal_type = "Movement MP" ) \ No newline at end of file diff --git a/product/Coramy/skins/coramy_custom/zGetVetementList.zsql b/product/Coramy/skins/coramy_custom/zGetVetementList.zsql deleted file mode 100755 index 06ba0dfdc4..0000000000 --- a/product/Coramy/skins/coramy_custom/zGetVetementList.zsql +++ /dev/null @@ -1,14 +0,0 @@ -<dtml-comment> -title: -connection_id:MySQL -max_rows:10000 -max_cache:100 -cache_time:0 -class_name:ZSQLBrain -class_file:zsqlbrain.py -</dtml-comment> -<params></params> -SELECT catalog.relative_url, catalog.path -FROM catalog -WHERE catalog.portal_type = "Vetement" -AND catalog.relative_url like "forme/%" \ No newline at end of file diff --git a/product/Coramy/skins/coramy_erp5/ActiveProcess_view.form b/product/Coramy/skins/coramy_erp5/ActiveProcess_view.form deleted file mode 100755 index 10ce904f47..0000000000 --- a/product/Coramy/skins/coramy_erp5/ActiveProcess_view.form +++ /dev/null @@ -1,112 +0,0 @@ -<?xml version="1.0" encoding="iso-8859-1"?> - -<form> - <title>Active Process Results</title> - <name>ActiveProcess_view</name> - <action></action> - <enctype></enctype> - <method>POST</method> - <pt>form_view</pt> - - <groups> - <group> - <title>Default</title> - <fields> - - <field><id>my_id</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <max_length></max_length> - <required type="int">1</required> - <title>Id</title> - <truncate type="int">0</truncate> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>right</title> - <fields> - - <field><id>my_title</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">40</display_width> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <max_length></max_length> - <required type="int">1</required> - <title>Title</title> - <truncate type="int">0</truncate> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>center</title> - <fields> - - <field><id>my_error_list_text</id> <type>TextAreaField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <external_validator></external_validator> - <extra></extra> - <height type="int">25</height> - <hidden type="int">0</hidden> - <max_length></max_length> - <max_linelength></max_linelength> - <max_lines></max_lines> - <required type="int">1</required> - <title>Errors</title> - <width type="int">80</width> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_many_lines">You entered too many lines.</message> - <message name="line_too_long">A line was too long.</message> - <message name="too_long">You entered too many characters.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>bottom</title> - <fields> - - </fields> - </group> - </groups> -</form> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_erp5/ActivityTool_postError.py b/product/Coramy/skins/coramy_erp5/ActivityTool_postError.py deleted file mode 100755 index b75c1d3d85..0000000000 --- a/product/Coramy/skins/coramy_erp5/ActivityTool_postError.py +++ /dev/null @@ -1,10 +0,0 @@ -## Script (Python) "ActivityTool_postError" -##bind container=container -##bind context=context -##bind namespace= -##bind script=script -##bind subpath=traverse_subpath -##parameters=error -##title= -## -context.portal_activities.setTitle(context.portal_activities.title + '\p' + error) diff --git a/product/Coramy/skins/coramy_erp5/AppliedRule_cleanOrphanedOrder.py b/product/Coramy/skins/coramy_erp5/AppliedRule_cleanOrphanedOrder.py deleted file mode 100755 index ffd276bbad..0000000000 --- a/product/Coramy/skins/coramy_erp5/AppliedRule_cleanOrphanedOrder.py +++ /dev/null @@ -1,49 +0,0 @@ -## Script (Python) "AppliedRule_cleanOrphanedOrder" -##bind container=container -##bind context=context -##bind namespace= -##bind script=script -##bind subpath=traverse_subpath -##parameters= -##title= -## -# Use this script to test if simulation state is acceptable - -def hasDelivery(ps_item): - for m in ps_item.objectValues(): - if len(m.getCategoryMembershipList('delivery')) > 0: - return 1 - for a in m.objectValues(): - if hasDelivery(a): - return 1 - return 0 - -def getDeliveryList(ps_item): - result = {} - for m in ps_item.objectValues(): - for d in m.getDeliveryValueList(): - if d is not None: - result[d.getRelativeUrl()] = 1 - for a in m.objectValues(): - result.update( getDeliveryList(a)) - return result - -# ---------------------------------------------------------- -# First make sure all simulation movements point to an order - -ar = context -r = ar.getSpecialiseValue() -if r is not None: - if r.getPortalType() == "Order Rule": - if ar.getCausalityValue() is None: - # Additional test need to check this is an order rule - print " Applied Rule %s has no order" % ar.getId() - print " Previously was: %s" % ar.getCausality() - if hasDelivery(ar): - print " Applied Rule %s has some delivered movements" % ar.getId() - print " deliveries: %s" % ' '.join(getDeliveryList(ar).keys()) - elif ar.getId() not in ('zero_stock', ): - print " Delete %s" % ar.getId() - context.portal_simulation.deleteContent(ar.getId()) - -return printed diff --git a/product/Coramy/skins/coramy_erp5/AssignLocalRole.py b/product/Coramy/skins/coramy_erp5/AssignLocalRole.py deleted file mode 100755 index 6daef41f00..0000000000 --- a/product/Coramy/skins/coramy_erp5/AssignLocalRole.py +++ /dev/null @@ -1,30 +0,0 @@ -## Script (Python) "AssignLocalRole" -##bind container=container -##bind context=context -##bind namespace= -##bind script=script -##bind subpath=traverse_subpath -##parameters=user_list=[], role_list=[] -##title=Assign Local Role -## -# Assign to each user in the user_list all -# roles inside role_list. By the same time, -# we ensure that nobody else have one of -# the role of role_list - - -for role in role_list: - for user in context.users_with_local_role(role): - temp_roles = [] - user_roles = context.get_local_roles_for_userid(user) - for i in range(0,len(user_roles)): - if user_roles[i]!=role: - temp_roles+=[user_roles[i]] - #user_roles = user_roles[0:i] + user_roles[i+1:len(user_roles)] - if len(temp_roles) is not 0: - context.manage_setLocalRoles(user,temp_roles) - else: - context.manage_delLocalRoles((user,)) -# Add roles to users -for user in user_list: - context.manage_addLocalRoles(user, role_list) diff --git a/product/Coramy/skins/coramy_erp5/Base_searchHandler.py b/product/Coramy/skins/coramy_erp5/Base_searchHandler.py deleted file mode 100755 index e7649d9adc..0000000000 --- a/product/Coramy/skins/coramy_erp5/Base_searchHandler.py +++ /dev/null @@ -1,54 +0,0 @@ -## Script (Python) "Base_searchHandler" -##bind container=container -##bind context=context -##bind namespace= -##bind script=script -##bind subpath=traverse_subpath -##parameters=form_id,dialog_id,list_form_id,list_method_id='' -##title= -## -from Products.Formulator.Errors import ValidationError, FormValidationError -from ZTUtils import make_query - -request=context.REQUEST - -module_name = context.getId() - -# Required because sometimes list_form_id is not a string -if isinstance(list_form_id,tuple): - list_form_id = list_form_id[0] -# The type list is not working with isinstance, I have do do this bad hack -if hasattr(list_form_id,'sort'): - list_form_id = list_form_id[0] - -try: - # Validate the form - form = getattr(context,dialog_id) - form.validate_all_to_request(request) - kw = {} - for f in form.get_fields(): - k = f.id - k = k[3:] - v = getattr(request,k,None) - if v is not None and k != 'list_form_id' : - kw[k] = v - if list_method_id is not None and list_method_id != '' : - kw['list_method_id'] = list_method_id - url_params_string = make_query(kw) -except FormValidationError, validation_errors: - # Pack errors into the request - field_errors = form.ErrorFields(validation_errors) - request.set('field_errors', field_errors) - return form(request) - -if url_params_string != '': - redirect_url = '%s/%s?%s' % ( context.absolute_url() - , list_form_id - , url_params_string - ) -else: - redirect_url = '%s/%s' % ( context.absolute_url() - , list_form_id - ) - -return request.RESPONSE.redirect( redirect_url ) diff --git a/product/Coramy/skins/coramy_erp5/DateTime_getFormattedDate.py b/product/Coramy/skins/coramy_erp5/DateTime_getFormattedDate.py deleted file mode 100755 index 08492d117d..0000000000 --- a/product/Coramy/skins/coramy_erp5/DateTime_getFormattedDate.py +++ /dev/null @@ -1,15 +0,0 @@ -## Script (Python) "DateTime_getFormattedDate" -##bind container=container -##bind context=context -##bind namespace= -##bind script=script -##bind subpath=traverse_subpath -##parameters=date_time=None -##title= -## -from DateTime import DateTime - -if date_time == None : - date_time = DateTime() - -return "%2.2d/%2.2d/%s" % (date_time.day(), date_time.month(), date_time.year()) diff --git a/product/Coramy/skins/coramy_erp5/DeliveryLine_zGetRelatedQuantity.zsql b/product/Coramy/skins/coramy_erp5/DeliveryLine_zGetRelatedQuantity.zsql deleted file mode 100755 index 3ef8fb1700..0000000000 --- a/product/Coramy/skins/coramy_erp5/DeliveryLine_zGetRelatedQuantity.zsql +++ /dev/null @@ -1,22 +0,0 @@ -<dtml-comment> -title: -connection_id:erp5_sql_connection -max_rows:1000 -max_cache:100 -cache_time:10 -class_name: -class_file: -</dtml-comment> -<params>uid</params> -SELECT - SUM(movement.quantity) AS quantity, - SUM(movement.target_quantity) AS target_quantity -FROM - category, movement -WHERE - category.category_uid = <dtml-sqlvar uid type="int"> -AND - category.uid = movement.uid -AND - category.base_category_uid = <dtml-sqlvar expr="portal_categories.delivery.getUid()" type="int"> - \ No newline at end of file diff --git a/product/Coramy/skins/coramy_erp5/Delivery_reindexAll.py b/product/Coramy/skins/coramy_erp5/Delivery_reindexAll.py deleted file mode 100755 index 344d84d944..0000000000 --- a/product/Coramy/skins/coramy_erp5/Delivery_reindexAll.py +++ /dev/null @@ -1,31 +0,0 @@ -## Script (Python) "Delivery_reindexAll" -##bind container=container -##bind context=context -##bind namespace= -##bind script=script -##bind subpath=traverse_subpath -##parameters= -##title= -## -error_list = [] -return_list = [] - -context.portal_catalog.catalog_object(context.portal_categories,None) - -base_url = '/'.join(context.getPhysicalPath()) - -print "#### Indexing categories ####" -for id in list(context.portal_categories.objectIds()): - context.portal_activities.newMessage('SQLDict', '%s/portal_categories/%s' % (base_url, id), {}, 'recursiveImmediateReindexObject') - -# We index simulation first to make sure we can calculate tests -print "#### Indexing simulation ####" -for id in list(context.portal_simulation.objectIds()): - context.portal_activities.newMessage('SQLDict', '%s/portal_simulation/%s' % (base_url, id), {}, 'immediateReindexObject') - -for folder in context.portal_url.getPortalObject().objectValues(("ERP5 Folder",)): - print "#### Indexing contents inside folder %s ####" % folder.id - for id in list(folder.objectIds()): - context.portal_activities.newMessage('SQLDict', '%s/%s/%s' % (base_url, folder.getId(), id), {}, 'recursiveImmediateReindexObject') - -return printed diff --git a/product/Coramy/skins/coramy_erp5/Delivery_rescueOrphanedMovement.py b/product/Coramy/skins/coramy_erp5/Delivery_rescueOrphanedMovement.py deleted file mode 100755 index 4f627d5d9e..0000000000 --- a/product/Coramy/skins/coramy_erp5/Delivery_rescueOrphanedMovement.py +++ /dev/null @@ -1,85 +0,0 @@ -## Script (Python) "Delivery_rescueOrphanedMovement" -##bind container=container -##bind context=context -##bind namespace= -##bind script=script -##bind subpath=traverse_subpath -##parameters=fix=0 -##title=Tries to find orphaned movements to fix a given delivery -## -# Example code: - -order_uid_list = list(context.getCausalityUidList()) + [context.getUid()] # XXX We may need to filter portal_type -#order_uid_list = context.getCausalityUidList() -# We must consider delivery rules and deliveries without order (ie. order is delivery) - -# Check each existing movement in delivery -attached_to_movement = [] -requires_delivery_rule = [] -requires_new_delivery = [] -for m in context.getMovementList(): - simulation_movement_list = m.getDeliveryRelatedValueList() - if len(simulation_movement_list) > 0: - # This movement is simulated - # let us check if simulation movements point where they should - for orphaned in simulation_movement_list: - simulation_movement = orphaned.getObject() - if simulation_movement.getDelivery() != m.getRelativeUrl(): - print "Found inconsistent simulation movement %s attached to %s instead of %s" % (simulation_movement.getRelativeUrl(), simulation_movement.getDelivery(), m.getRelativeUrl()) - print "##Reindexing" - simulation_movement.immediateReindexObject() # Always fix - else: - # This movement is not simulated - # find potential orphaned - result = context.Delivery_zGetOrphanedMovementList(order_uid_list = order_uid_list, - resource_uid = m.getResourceUid(), - variation_text = m.getVariationText()) - if len(result) > 0: - for orphaned in result: - simulation_movement = orphaned.getObject() - initial_quantity = m.getQuantity() - quantity = simulation_movement.getQuantity() - print "Found orphaned movement %s attached to %s. (%s in simulation instead of %s in delivery)" % (orphaned.relative_url, m.getRelativeUrl(), quantity, initial_quantity) - attached_to_movement.append(orphaned.relative_url) - if fix: - # More job is required here XXX - simulation_movement.setDeliveryValue(m) - m.setQuantity(quantity) - print " Fixed orphaned movement %s attached to %s with simulation quantity %s" % (orphaned.relative_url, m.getRelativeUrl(), quantity) - else: - requires_delivery_rule.append(m) - -# Check each orphaned movement related to orders which we came from -print "##Building orphaned list" -result = context.Delivery_zGetOrphanedMovementList( order_uid_list = order_uid_list ) -#return map(lambda x:x.portal_type, result) -for orphaned in result: - if orphaned.relative_url not in attached_to_movement: - print "Found orphaned movement %s which requires new delivery" % orphaned.relative_url - simulation_movement = orphaned.getObject() - if simulation_movement is not None: - try: - simulation_movement.getDeliveryValue() - except: - return str(orphaned.portal_type) - if simulation_movement.getDeliveryValue() is None: - simulation_movement.setDelivery(None) - requires_new_delivery.append(simulation_movement) - else: - print "Error: has previous delivery but found as orphaned movement (%s)" % orphaned.relative_url - -# Build new deliveries -if fix: - print "Building new packing lists" - root_group = context.portal_simulation.collectMovement(requires_new_delivery) - delivery_list = context.portal_simulation.buildDeliveryList(root_group) - for delivery in delivery_list: - print " New delivery %s for causality %s" % (delivery.getRelativeUrl(), ' '.join(delivery.getCausalityList())) - -# Invoke delivery rule -if len(requires_delivery_rule) > 0: - if fix: - context.updateAppliedRule() - print "Building new delivery rule" - -return printed diff --git a/product/Coramy/skins/coramy_erp5/Delivery_zGetOrphanedMovementList.zsql b/product/Coramy/skins/coramy_erp5/Delivery_zGetOrphanedMovementList.zsql deleted file mode 100755 index b03ab66948..0000000000 --- a/product/Coramy/skins/coramy_erp5/Delivery_zGetOrphanedMovementList.zsql +++ /dev/null @@ -1,57 +0,0 @@ -<dtml-comment> -title: -connection_id:erp5_sql_connection -max_rows:1000 -max_cache:100 -cache_time:0 -class_name:ZSQLBrain -class_file:zsqlbrain.py -</dtml-comment> -<params>order_uid_list:list -resource_uid -variation_text</params> -SELECT - catalog.*, - movement.quantity, - movement.target_quantity, - movement.resource_uid, - movement.variation_text, - movement.source_uid, - movement.destination_uid, - movement.start_date, - movement.stop_date, - movement.target_start_date, - movement.target_stop_date -FROM - movement AS related_order_line, - movement, - catalog AS related_order, - category AS movement_c, - catalog LEFT JOIN category ON (category.uid=catalog.uid - AND category.base_category_uid = <dtml-var "portal_categories.delivery.getUid()">) - LEFT JOIN catalog as related_delivery ON related_delivery.uid = category.category_uid -WHERE - related_delivery.uid is NULL -AND - catalog.portal_type = "Simulation Movement" -AND - catalog.uid = movement_c.uid -AND - movement_c.category_uid = related_order_line.uid -AND - movement_c.base_category_uid = <dtml-var "portal_categories.order.getUid()"> -AND - related_order_line.delivery_uid = related_order.uid -AND - catalog.uid = movement.uid -AND ( - related_order.simulation_state = 'confirmed' -OR related_order.simulation_state = 'getting_started' -OR related_order.simulation_state = 'started' -OR related_order.simulation_state = 'stopped' -OR related_order.simulation_state = 'delivered' -) -<dtml-if order_uid_list>AND (<dtml-in order_uid_list>related_order.uid = <dtml-sqlvar sequence-item type="int"> <dtml-if sequence-end><dtml-else> OR </dtml-if> </dtml-in> -)</dtml-if><dtml-if resource_uid>AND movement.resource_uid = <dtml-sqlvar resource_uid type="int"> -</dtml-if><dtml-if variation_text>AND movement.variation_text = <dtml-sqlvar variation_text type="string"> -</dtml-if> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_erp5/Delivery_zGetOrphanedProductionMovementList.zsql b/product/Coramy/skins/coramy_erp5/Delivery_zGetOrphanedProductionMovementList.zsql deleted file mode 100755 index 79bf1ccffd..0000000000 --- a/product/Coramy/skins/coramy_erp5/Delivery_zGetOrphanedProductionMovementList.zsql +++ /dev/null @@ -1,54 +0,0 @@ -<dtml-comment> -title: -connection_id:erp5_sql_connection -max_rows:10000 -max_cache:100 -cache_time:0 -class_name:ZSQLBrain -class_file:zsqlbrain.py -</dtml-comment> -<params>order_uid_list:list -resource_uid -variation_text</params> -SELECT - catalog.*, - movement.quantity, - movement.target_quantity, - movement.resource_uid, - movement.variation_text, - movement.source_uid, - movement.destination_uid, - movement.start_date, - movement.stop_date, - movement.target_start_date, - movement.target_stop_date -FROM - movement , - catalog AS related_order, - catalog AS resource, - catalog AS parent, - catalog LEFT JOIN category ON (category.uid=catalog.uid - AND category.base_category_uid = <dtml-var "portal_categories.delivery.getUid()">) - LEFT JOIN catalog as related_delivery ON related_delivery.uid = category.category_uid -WHERE - related_delivery.uid is NULL -AND - catalog.portal_type = "Simulation Movement" -AND - movement.delivery_uid = related_order.uid -AND - catalog.uid = movement.uid -AND - related_order.simulation_state = 'confirmed' -AND - movement.resource_uid = resource.uid -AND - catalog.parent_uid = parent.uid -AND ((parent.id = "default_transformation_sourcing_rule" -AND (resource.portal_type = "Composant" OR resource.portal_type = "Tissu")) -OR (parent.id = "default_transformation_rule" -AND (resource.portal_type = "Modele" OR resource.portal_type = "Composant" OR resource.portal_type = "Tissu" OR resource.portal_type = "Category"))) -<dtml-if order_uid_list>AND <dtml-in order_uid_list>related_order.uid = <dtml-sqlvar sequence-item type="int"> <dtml-if sequence-end><dtml-else> OR </dtml-if> </dtml-in> -</dtml-if><dtml-if resource_uid>AND movement.resource_uid = <dtml-sqlvar resource_uid type="int"> -</dtml-if><dtml-if variation_text>AND movement.variation_text = <dtml-sqlvar variation_text type="string"> -</dtml-if> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_erp5/ERP5Site_reindexAll.py b/product/Coramy/skins/coramy_erp5/ERP5Site_reindexAll.py deleted file mode 100755 index c5c4c3530d..0000000000 --- a/product/Coramy/skins/coramy_erp5/ERP5Site_reindexAll.py +++ /dev/null @@ -1,32 +0,0 @@ -## Script (Python) "ERP5Site_reindexAll" -##bind container=container -##bind context=context -##bind namespace= -##bind script=script -##bind subpath=traverse_subpath -##parameters= -##title= -## -error_list = [] -return_list = [] - -context.portal_catalog.catalog_object(context.portal_categories,None) - -base_url = '/'.join(context.getPhysicalPath()) - -print "#### Indexing categories ####" -for id in list(context.portal_categories.objectIds()): - context.portal_activities.newMessage('SQLDict', '%s/portal_categories/%s' % (base_url, id), None, {}, 'recursiveImmediateReindexObject') - -# We index simulation first to make sure we can calculate tests (ie. related quantity) -print "#### Indexing simulation ####" -for id in list(context.portal_simulation.objectIds()): - context.portal_activities.newMessage('SQLDict', '%s/portal_simulation/%s' % (base_url, id), None, {}, 'immediateReindexObject') - -for folder in context.portal_url.getPortalObject().objectValues(("ERP5 Folder",)): - print "#### Indexing contents inside folder %s ####" % folder.id - for id in list(folder.objectIds()): - context.portal_activities.newMessage('SQLDict', '%s/%s/%s' % (base_url, folder.getId(), id), None, {}, 'recursiveImmediateReindexObject') - #context.portal_activities.newMessage('SQLDict', '%s/%s/%s' % (base_url, folder.getId(), id), None, {}, 'Folder_reindexAll') - -return printed diff --git a/product/Coramy/skins/coramy_erp5/ERP5Site_reindexCurrentMovement.py b/product/Coramy/skins/coramy_erp5/ERP5Site_reindexCurrentMovement.py deleted file mode 100755 index 369b1d2ba2..0000000000 --- a/product/Coramy/skins/coramy_erp5/ERP5Site_reindexCurrentMovement.py +++ /dev/null @@ -1,19 +0,0 @@ -## Script (Python) "ERP5Site_reindexCurrentMovement" -##bind container=container -##bind context=context -##bind namespace= -##bind script=script -##bind subpath=traverse_subpath -##parameters= -##title= -## -folder_id_list = ['mouvement_mp', 'mouvement_pf', 'livraison_achat', - 'livraison_vente', 'livraison_fabrication'] - -for folder in context.portal_url.getPortalObject().objectValues(("ERP5 Folder",)): - if folder.getId() in folder_id_list: - print "#### Indexing contents inside folder %s ####" % folder.id - for o in folder.objectValues(): - o.activate(priority=5).recursiveImmediateReindexObject() - -return printed diff --git a/product/Coramy/skins/coramy_erp5/Folder_createModule.py b/product/Coramy/skins/coramy_erp5/Folder_createModule.py deleted file mode 100755 index b9bef6d673..0000000000 --- a/product/Coramy/skins/coramy_erp5/Folder_createModule.py +++ /dev/null @@ -1,23 +0,0 @@ -## Script (Python) "Folder_createModule" -##bind container=container -##bind context=context -##bind namespace= -##bind script=script -##bind subpath=traverse_subpath -##parameters=module_id='0', module_title='', module_type='' -##title= -## -request = context.REQUEST - -module_title = module_title.replace('_',' ') -module_type = module_type.replace('_',' ') -context.portal_types.constructContent(type_name=module_type, - container = context, - title = module_title, - id = module_id) - -redirect_url = '%s?%s' % ( context.absolute_url()+'/'+module_id - , 'portal_status_message=1+module+créé.' - ) - -request[ 'RESPONSE' ].redirect( redirect_url ) diff --git a/product/Coramy/skins/coramy_erp5/Folder_workflowAction.form b/product/Coramy/skins/coramy_erp5/Folder_workflowAction.form deleted file mode 100755 index 3492146c6d..0000000000 --- a/product/Coramy/skins/coramy_erp5/Folder_workflowAction.form +++ /dev/null @@ -1,103 +0,0 @@ -<?xml version="1.0" encoding="iso-8859-1"?> - -<form> - <title>Validate</title> - <name>base_folder_workflow_action</name> - <action>Folder_workflowStatusModify</action> - <enctype></enctype> - <method>POST</method> - <pt>form_view_dialog</pt> - - <groups> - <group> - <title>Default</title> - <fields> - - <field><id>my_comment</id> <type>TextAreaField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <external_validator></external_validator> - <extra></extra> - <height type="int">5</height> - <hidden type="int">0</hidden> - <max_length></max_length> - <max_linelength></max_linelength> - <max_lines></max_lines> - <required type="int">0</required> - <title>Commentaires</title> - <width type="int">40</width> - </values> - <tales> - <default>python:''</default> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_many_lines">You entered too many lines.</message> - <message name="line_too_long">A line was too long.</message> - <message name="too_long">You entered too many characters.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>hidden</title> - <fields> - - <field><id>my_workflow_action</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">1</hidden> - <max_length></max_length> - <required type="int">0</required> - <title>x</title> - <truncate type="int">0</truncate> - </values> - <tales> - <default>python:here.REQUEST.workflow_action</default> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - <field><id>my_workflow_id</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">1</hidden> - <max_length></max_length> - <required type="int">0</required> - <title>x</title> - <truncate type="int">0</truncate> - </values> - <tales> - <default>python:here.REQUEST.workflow_id</default> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - </fields> - </group> - </groups> -</form> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_erp5/LivraisonVente_fixEqualQuantity.py b/product/Coramy/skins/coramy_erp5/LivraisonVente_fixEqualQuantity.py deleted file mode 100755 index e9a00b32c1..0000000000 --- a/product/Coramy/skins/coramy_erp5/LivraisonVente_fixEqualQuantity.py +++ /dev/null @@ -1,24 +0,0 @@ -## Script (Python) "LivraisonVente_fixEqualQuantity" -##bind container=container -##bind context=context -##bind namespace= -##bind script=script -##bind subpath=traverse_subpath -##parameters= -##title= -## -blist = list(context.LivraisonVente_searchEqualQuantity()) -context.portal_simulation.commitTransaction() - -for b in blist: - o = b.getObject() - if o is not None: - if o.getQuantity() != o.getRelatedQuantity(): - if o.getRelatedQuantity() is None: - print "Not Fixeable %s %s %s" % (o.getRelativeUrl(), o.getQuantity(), o.getRelatedQuantity()) - else: - print "Fixed %s %s %s" % (o.getRelativeUrl(), o.getQuantity(), o.getRelatedQuantity()) - o.edit(quantity = o.getRelatedQuantity()) - - -return printed diff --git a/product/Coramy/skins/coramy_erp5/LivraisonVente_fixNoneQuantity.py b/product/Coramy/skins/coramy_erp5/LivraisonVente_fixNoneQuantity.py deleted file mode 100755 index f8290a20fb..0000000000 --- a/product/Coramy/skins/coramy_erp5/LivraisonVente_fixNoneQuantity.py +++ /dev/null @@ -1,28 +0,0 @@ -## Script (Python) "LivraisonVente_fixNoneQuantity" -##bind container=container -##bind context=context -##bind namespace= -##bind script=script -##bind subpath=traverse_subpath -##parameters= -##title= -## -blist = list(context.LivraisonVente_searchNoneQuantity()) -context.portal_simulation.commitTransaction() - -for b in blist: - o = b.getObject() - if o is not None: - if o.getQuantity() == o.getRelatedQuantity(): - #print "Fixed equal %s %s %s" % (o.getRelativeUrl(), o.getQuantity(), o.getRelatedQuantity()) - #o.edit(quantity = o.getQuantity(), force_update = 1) - pass - else: - if o.getRelatedQuantity() is None: - print "Not Fixeable %s %s %s" % (o.getRelativeUrl(), o.getQuantity(), o.getRelatedQuantity()) - else: - print "Fixed different %s %s %s" % (o.getRelativeUrl(), o.getQuantity(), o.getRelatedQuantity()) - o.edit(quantity = o.getRelatedQuantity()) - o.commitTransaction() - -return printed diff --git a/product/Coramy/skins/coramy_erp5/LivraisonVente_searchEqualQuantity.zsql b/product/Coramy/skins/coramy_erp5/LivraisonVente_searchEqualQuantity.zsql deleted file mode 100755 index 65d231f6e9..0000000000 --- a/product/Coramy/skins/coramy_erp5/LivraisonVente_searchEqualQuantity.zsql +++ /dev/null @@ -1,18 +0,0 @@ -<dtml-comment> -title: -connection_id:MySQL -max_rows:1000 -max_cache:100 -cache_time:0 -class_name:ZSQLBrain -class_file:zsqlbrain.py -</dtml-comment> -<params></params> -SELECT - catalog.* -FROM - catalog LEFT JOIN movement ON (catalog.uid = movement.uid) -WHERE - catalog.portal_type = "Sales Packing List Line" -AND movement.is_accountable = 1 -AND movement.quantity = movement.target_quantity \ No newline at end of file diff --git a/product/Coramy/skins/coramy_erp5/LivraisonVente_searchNoneQuantity.zsql b/product/Coramy/skins/coramy_erp5/LivraisonVente_searchNoneQuantity.zsql deleted file mode 100755 index 99c3543655..0000000000 --- a/product/Coramy/skins/coramy_erp5/LivraisonVente_searchNoneQuantity.zsql +++ /dev/null @@ -1,18 +0,0 @@ -<dtml-comment> -title: -connection_id:MySQL -max_rows:1000 -max_cache:100 -cache_time:0 -class_name:ZSQLBrain -class_file:zsqlbrain.py -</dtml-comment> -<params></params> -SELECT - catalog.* -FROM - catalog LEFT JOIN movement ON (catalog.uid = movement.uid) -WHERE - catalog.portal_type = "Sales Packing List Line" -AND movement.is_accountable = 1 -AND movement.has_cell_content = 0 \ No newline at end of file diff --git a/product/Coramy/skins/coramy_erp5/Movement_resetTargetQuantity.py b/product/Coramy/skins/coramy_erp5/Movement_resetTargetQuantity.py deleted file mode 100755 index d6ea2c2c7b..0000000000 --- a/product/Coramy/skins/coramy_erp5/Movement_resetTargetQuantity.py +++ /dev/null @@ -1,12 +0,0 @@ -## Script (Python) "Movement_resetTargetQuantity" -##bind container=container -##bind context=context -##bind namespace= -##bind script=script -##bind subpath=traverse_subpath -##parameters= -##title= -## -movement = context - -movement.setProperty(key='target_quantity',value=0) diff --git a/product/Coramy/skins/coramy_erp5/Movement_search.zsql b/product/Coramy/skins/coramy_erp5/Movement_search.zsql deleted file mode 100755 index 3aae4a8cbf..0000000000 --- a/product/Coramy/skins/coramy_erp5/Movement_search.zsql +++ /dev/null @@ -1,34 +0,0 @@ -<dtml-comment> -title: -connection_id:erp5_sql_connection -max_rows:1000 -max_cache:100 -cache_time:0 -class_name:ZSQLBrain -class_file:zsqlbrain.py -</dtml-comment> -<params>resource_uid -variation_text -source_uid -destination_uid -start_date -stop_date -target_start_date -target_stop_date</params> -SELECT - catalog.* -FROM - catalog, movement -WHERE - catalog.uid = movement.uid -AND movement.is_accountable = 1 -AND catalog.portal_type <> "Simulation Movement" -<dtml-if resource_uid>AND movement.resource_uid = <dtml-sqlvar resource_uid type="int"> -</dtml-if><dtml-if variation_text>AND movement.variation_text = <dtml-sqlvar variation_text type="string"> -</dtml-if><dtml-if source_uid>AND movement.source_uid = <dtml-sqlvar source_uid type="int"> -</dtml-if><dtml-if destination_uid>AND movement.destination_uid = <dtml-sqlvar destination_uid type="int"> -</dtml-if><dtml-if start_date>AND movement.start_date = <dtml-sqlvar start_date type="string"> -</dtml-if><dtml-if stop_date>AND movement.stop_date = <dtml-sqlvar stop_date type="string"> -</dtml-if><dtml-if target_start_date>AND movement.start_date = <dtml-sqlvar target_start_date type="string"> -</dtml-if><dtml-if target_stop_date>AND movement.stop_date = <dtml-sqlvar target_stop_date type="string"> -</dtml-if> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_erp5/OrderLine_zGetRelatedQuantity.zsql b/product/Coramy/skins/coramy_erp5/OrderLine_zGetRelatedQuantity.zsql deleted file mode 100755 index 1c601a1b8f..0000000000 --- a/product/Coramy/skins/coramy_erp5/OrderLine_zGetRelatedQuantity.zsql +++ /dev/null @@ -1,22 +0,0 @@ -<dtml-comment> -title: -connection_id:erp5_sql_connection -max_rows:1000 -max_cache:100 -cache_time:0 -class_name: -class_file: -</dtml-comment> -<params>uid</params> -SELECT - SUM(movement.quantity) AS quantity, - SUM(movement.target_quantity) AS target_quantity -FROM - category, movement -WHERE - category.category_uid = <dtml-sqlvar uid type="int"> -AND - category.uid = movement.uid -AND - category.base_category_uid = <dtml-sqlvar expr="portal_categories.order.getUid()" type="int"> - \ No newline at end of file diff --git a/product/Coramy/skins/coramy_erp5/Order_cleanDuplicates.py b/product/Coramy/skins/coramy_erp5/Order_cleanDuplicates.py deleted file mode 100755 index b98de568d0..0000000000 --- a/product/Coramy/skins/coramy_erp5/Order_cleanDuplicates.py +++ /dev/null @@ -1,73 +0,0 @@ -## Script (Python) "Order_cleanDuplicates" -##bind container=container -##bind context=context -##bind namespace= -##bind script=script -##bind subpath=traverse_subpath -##parameters= -##title= -## -# Use this script to test if simulation state is acceptable - -def hasDelivery(ps_item): - for m in ps_item.objectValues(): - if len(m.getCategoryMembershipList('delivery')) > 0: - return 1 - for a in m.objectValues(): - if hasDelivery(a): - return 1 - return 0 - -def getDeliveryList(ps_item): - result = {} - for m in ps_item.objectValues(): - for d in m.getDeliveryValueList(): - if d is not None: - result[d.getRelativeUrl()] = 1 - for a in m.objectValues(): - result.update( getDeliveryList(a)) - return result - -of = context -if of.getSimulationState() not in ('draft', 'cancelled', 'auto_planned'): - ps = of.getCausalityRelatedValueList(portal_type="Applied Rule") - if len(ps) == 0: - print " Missing PS for Order %s of type %s" % (of.getId(), of.getPortalType()) - print " Reexpand order %s" % of.getId() - of.edit() - elif len(ps) > 1: - print " Too many PS for Order %s of type %s" % (of.getId(), of.getPortalType()) - no_delivery = [] - delivery = [] - for ps_item in ps: - if hasDelivery(ps_item): - print " PS %s has some delivered movements" % ps_item.getId() - delivery.append(ps_item) - else: - print " PS %s has no delivered movements" % ps_item.getId() - no_delivery.append(ps_item) - # manage_delObjects - if len(delivery) > 0: - # Only erase no_delivery if one item has delivery - for ps_item in no_delivery: - print " Delete PS %s" % ps_item.getId() - parent = ps_item.aq_parent - parent.deleteContent(ps_item.getId()) - else: - # Keep at least one - for ps_item in no_delivery[1:]: - print " Delete PS %s" % ps_item.getId() - id = ps_item.getId() - parent = ps_item.aq_parent - parent.deleteContent(ps_item.getId()) - if len(delivery) > 1: - # We erase the Applied Rule but keep - # some excessive packing lists which may have been generated - # THIS BREAKS CONSISTENCY - for ps_item in delivery[1:]: - print " Delete PS %s with BREAKS CONSISTENCY" % ps_item.getId() - id = ps_item.getId() - parent = ps_item.aq_parent - #parent.deleteContent(ps_item.getId()) - -return printed diff --git a/product/Coramy/skins/coramy_erp5/PT_pageBreak.py b/product/Coramy/skins/coramy_erp5/PT_pageBreak.py deleted file mode 100755 index e7c9feea47..0000000000 --- a/product/Coramy/skins/coramy_erp5/PT_pageBreak.py +++ /dev/null @@ -1,14 +0,0 @@ -## Script (Python) "PT_pageBreak" -##bind container=container -##bind context=context -##bind namespace= -##bind script=script -##bind subpath=traverse_subpath -##parameters=page_number -##title= -## -page_number[0] = page_number[0] + 1 -if page_number[0] == 1 : - return "toto" -else : - return "PageA4" diff --git a/product/Coramy/skins/coramy_erp5/PT_reset_total_list.py b/product/Coramy/skins/coramy_erp5/PT_reset_total_list.py deleted file mode 100755 index 4a9790249f..0000000000 --- a/product/Coramy/skins/coramy_erp5/PT_reset_total_list.py +++ /dev/null @@ -1,17 +0,0 @@ -## Script (Python) "PT_reset_total_list" -##bind container=container -##bind context=context -##bind namespace= -##bind script=script -##bind subpath=traverse_subpath -##parameters=totalizer, index_list=[0] -##title= -## -# used in page templates to reset some total_sums -# uses a list named 'totalizer' which contains sums - -for i in index_list : - try : - totalizer[i] = 0 - except : - pass diff --git a/product/Coramy/skins/coramy_erp5/PT_update_total_list.py b/product/Coramy/skins/coramy_erp5/PT_update_total_list.py deleted file mode 100755 index b1ec49c616..0000000000 --- a/product/Coramy/skins/coramy_erp5/PT_update_total_list.py +++ /dev/null @@ -1,17 +0,0 @@ -## Script (Python) "PT_update_total_list" -##bind container=container -##bind context=context -##bind namespace= -##bind script=script -##bind subpath=traverse_subpath -##parameters=totalizer, index_list=[0], value=0 -##title= -## -# used in page templates to make sums -# uses a list named 'totalizer' which contains sums - -for i in index_list : - try : - totalizer[i] = totalizer[i] + value - except : - pass diff --git a/product/Coramy/skins/coramy_erp5/PortalSimulation_cleanup.py b/product/Coramy/skins/coramy_erp5/PortalSimulation_cleanup.py deleted file mode 100755 index a0832c7e29..0000000000 --- a/product/Coramy/skins/coramy_erp5/PortalSimulation_cleanup.py +++ /dev/null @@ -1,36 +0,0 @@ -## Script (Python) "PortalSimulation_cleanup" -##bind container=container -##bind context=context -##bind namespace= -##bind script=script -##bind subpath=traverse_subpath -##parameters= -##title= -## -process = context.portal_activities.newActiveProcess() -base_url = '/'.join(context.portal_url.getPortalObject().getPhysicalPath()) - -# ---------------------------------------------------------- -# First make sure all simulation movements point to an order - -print "-- Checking simulation" -for id in context.portal_simulation.objectIds(): - print " AppliedRule_cleanOrphadedOrder %s" % id - context.portal_activities.newMessage('SQLDict', '%s/portal_simulation/%s' % (base_url, id), process, {}, 'AppliedRule_cleanOrphanedOrder') - -# ---------------------------------------------------------- -# Next make sure all orders in > planned state have at most one applied rule - -for module_id in ('ordre_fabrication','commande_achat','commande_vente',): - for id in context[module_id].objectIds(): - print " Order_cleanDuplicates %s/%s" % (module_id , id) - context.portal_activities.newMessage('SQLDict', '%s/%s/%s' % (base_url, module_id, id), process, {}, 'Order_cleanDuplicates') - -# ---------------------------------------------------------- -# Next make sure all movements in a delivery of material point to simulation - - -# ---------------------------------------------------------- -# Next make sure all movements in a delivery of material point to simulation - -return printed diff --git a/product/Coramy/skins/coramy_erp5/PortalSimulation_rescueOrphaned.py b/product/Coramy/skins/coramy_erp5/PortalSimulation_rescueOrphaned.py deleted file mode 100755 index 79b148698a..0000000000 --- a/product/Coramy/skins/coramy_erp5/PortalSimulation_rescueOrphaned.py +++ /dev/null @@ -1,276 +0,0 @@ -## Script (Python) "PortalSimulation_rescueOrphaned" -##bind container=container -##bind context=context -##bind namespace= -##bind script=script -##bind subpath=traverse_subpath -##parameters= -##title= -## -exception_order = ['303',] - -orphaned_delivery_related_list = {} -orphaned_delivery_related_quantity = {} -exception_order = ['303',] - -orphaned_delivery_related_list = {} -has_delivery_rule_related_list = {} -orphaned_delivery_related_quantity = {} -orphaned_delivery_related_target_quantity = {} -orphaned_delivery_list = {} -orphaned_delivery_quantity = {} -orphaned_delivery_target_quantity = {} -build_delivery_list = [] - -m_list = list(context.Delivery_zGetOrphanedProductionMovementList()) + list(context.Delivery_zGetOrphanedMovementList()) -#m_list = context.Delivery_zGetOrphanedProductionMovementList() -#m_list = context.Delivery_zGetOrphanedMovementList() -for b in m_list: - m = b.getObject() - if m.getDeliveryValue() is None: - # Only process orphaned - if m.getNetConvertedTargetQuantity() is None: - return "Error for target_quantity on %s" % m.getRelativeUrl() - if m.getNetConvertedQuantity() is None: - return "Error for quantity on %s" % m.getRelativeUrl() - ra = m.getRootAppliedRule() - order = ra.getCausalityValue() # Order - if order is not None: - order_id = order.getId() - order_relative_url = order.getRelativeUrl() - else: - order_id = 'UNKNOWN ORDER' - order_relative_url = None - if order_id not in exception_order: - print "Trying to fix order %s: %s" % (order_relative_url , b.path) - candidates = context.Movement_search(resource_uid = b.resource_uid, variation_text = b.variation_text, - source_uid = m.getSourceUid(), destination_uid = m.getDestinationUid()) - found_candidate = 0 - if len(candidates) > 0: - for dm in candidates: - dm_object = dm.getObject() - if dm_object is not None: - if order_relative_url in dm_object.getDeliveryValue().getCausalityList(): - is_orphaned = not dm_object.isSimulated() - quantity_difference = dm_object.getNetConvertedQuantity() - m.getNetConvertedQuantity() - target_quantity_difference = dm_object.getNetConvertedTargetQuantity() - m.getNetConvertedTargetQuantity() - is_identical = quantity_difference == 0 - # We must test here is this object has a delivery rule attached to - # we may have to remove some delivery rules... - simulation_m = dm_object.getDeliveryRelatedValueList() - if len(simulation_m) == 1: - if simulation_m[0].getRootAppliedRule().getDefaultCausalityValue().getPortalType() == "Delivery Rule": - has_delivery_rule = 0 - else: - has_delivery_rule = 1 - else: - has_delivery_rule = 0 - print " found related %s orphaned: %s order: %s identical: %s drule: %s delivery q/t: %s %s simulation q/t: %s %s" % ( - dm_object.getRelativeUrl(), - is_orphaned, - dm_object.getCausalityList(), - is_identical, - has_delivery_rule, - dm_object.getNetConvertedQuantity(), - dm_object.getNetConvertedTargetQuantity(), - m.getNetConvertedQuantity(), - m.getNetConvertedTargetQuantity(), ) - if is_orphaned or has_delivery_rule: - # Only orphaned movements are good candidates - found_candidate = 1 - # Build dm_object to m mapping - if not orphaned_delivery_related_list.has_key(dm_object): - orphaned_delivery_related_list[dm_object] = [] - has_delivery_rule_related_list[dm_object] = [] - orphaned_delivery_related_quantity[dm_object] = 0.0 - orphaned_delivery_related_target_quantity[dm_object] = 0.0 - if m not in orphaned_delivery_related_list[dm_object]: - # Do not count twice - orphaned_delivery_related_list[dm_object].append(m) - if has_delivery_rule: has_delivery_rule_related_list[dm_object].append(m) - orphaned_delivery_related_quantity[dm_object] = orphaned_delivery_related_quantity[dm_object] + m.getNetConvertedQuantity() - orphaned_delivery_related_target_quantity[dm_object] = orphaned_delivery_related_target_quantity[dm_object] + \ - m.getNetConvertedTargetQuantity() - # Build m to dm_object mapping - if not orphaned_delivery_list.has_key(m): - orphaned_delivery_list[m] = [] - orphaned_delivery_quantity[m] = 0.0 - orphaned_delivery_target_quantity[m] = 0.0 - if dm_object not in orphaned_delivery_list[m]: - # Do not count twice - orphaned_delivery_list[m].append(dm_object) - orphaned_delivery_quantity[m] = orphaned_delivery_quantity[m] + dm_object.getNetConvertedQuantity() # Quantity is likely 0 - orphaned_delivery_target_quantity[m] = orphaned_delivery_target_quantity[m] + \ - dm_object.getNetConvertedTargetQuantity() # Quantity is likely 0 - if not found_candidate: - # Best solution is probably to create a new delivery - if order is not None: - for delivery in order.getCausalityRelatedValueList(portal_type=("Sales Packing List", "Purchase Packing List", - "Production Report", "Production Packing List", "Sale Packing List" )): - print " portential delivery %s" % delivery.getRelativeUrl() - else: - print " no order found" - build_delivery_list.append(m) - -print "=======================================================" -print "N to 1 aggregates" -for dm_object in orphaned_delivery_related_list.keys(): - if dm_object.getNetConvertedQuantity() == orphaned_delivery_related_quantity[dm_object]: - print " Found matching N(%s) quantity to 1 quantity aggregate for %s" % ( - len(orphaned_delivery_related_list[dm_object]), dm_object.getRelativeUrl()) - for m in orphaned_delivery_related_list[dm_object]: - print " #### attaching %s to %s" % (m.getRelativeUrl() , dm_object.getRelativeUrl()) - #m.setDeliveryValue(dm_object) - del orphaned_delivery_list[m] # Not needed anylonger since we found a solution - del orphaned_delivery_quantity[m] # Not needed anylonger since we found a solution - elif dm_object.getNetConvertedTargetQuantity() == orphaned_delivery_related_target_quantity[dm_object]: - print " Found matching N(%s) target_quantity to 1 target_quantity aggregate for %s" % ( - len(orphaned_delivery_related_list[dm_object]), dm_object.getRelativeUrl()) - print " #### updating quantity of %s" % dm_object.getRelativeUrl() - #dm_object.setNetConvertedQuantity(orphaned_delivery_related_quantity[dm_object]) # Update quantity to meet simulation - for m in orphaned_delivery_related_list[dm_object]: - print " #### attaching %s to %s" % (m.getRelativeUrl() , dm_object.getRelativeUrl()) - #m.setDeliveryValue(dm_object) - del orphaned_delivery_list[m] # Not needed anylonger since we found a solution - del orphaned_delivery_quantity[m] # Not needed anylonger since we found a solution - elif dm_object.getNetConvertedQuantity() == 0 and dm_object.getNetConvertedTargetQuantity() != 0: - # Probably delivery relation renamed at some point - print " Found zeroed N(%s) to 1 aggregate for %s" % ( - len(orphaned_delivery_related_list[dm_object]), dm_object.getRelativeUrl()) - print " #### updating quantity of %s" % dm_object.getRelativeUrl() - #dm_object.setNetConvertedQuantity(orphaned_delivery_related_quantity[dm_object]) # Update quantity to meet simulation - for m in orphaned_delivery_related_list[dm_object]: - print " #### attaching %s to %s" % (m.getRelativeUrl() , dm_object.getRelativeUrl()) - #m.setDeliveryValue(dm_object) - del orphaned_delivery_list[m] # Not needed anylonger since we found a solution - del orphaned_delivery_quantity[m] # Not needed anylonger since we found a solution - else: - print " Found non matching N(%s) to 1 aggregate for %s delivery q/t: %s %s simulation q/t: %s %s" % ( - len(orphaned_delivery_related_list[dm_object]), - dm_object.getRelativeUrl(), - dm_object.getNetConvertedQuantity(), dm_object.getNetConvertedTargetQuantity(), - orphaned_delivery_related_quantity[dm_object], orphaned_delivery_related_target_quantity[dm_object]) - print " #### updating quantity of %s" % dm_object.getRelativeUrl() - #dm_object.setNetConvertedQuantity(orphaned_delivery_related_quantity[dm_object]) # Update quantity to meet simulation - for m in orphaned_delivery_related_list[dm_object]: - print " #### attaching %s to %s" % (m.getRelativeUrl() , dm_object.getRelativeUrl()) - #m.setDeliveryValue(dm_object) - del orphaned_delivery_list[m] # Not needed anylonger since we found a solution - del orphaned_delivery_quantity[m] # Not needed anylonger since we found a solution - -print "=======================================================" -print "1 to N > 1 aggregates" -for m in orphaned_delivery_list.keys(): - if len(orphaned_delivery_list[m]) > 1: - # 1 to 1 should be already processed at this point - if m.getNetConvertedQuantity() == orphaned_delivery_target_quantity[m]: - print " Found matching 1 to N(%s) aggregate for %s" % (len(orphaned_delivery_list[m]), m.getRelativeUrl()) - dm_object = orphaned_delivery_list[m][0] - print " #### attaching %s to %s q/t: %s %s" % (m.getRelativeUrl(), dm_object.getRelativeUrl(), - dm_object.getNetConvertedQuantity(), dm_object.getNetConvertedTargetQuantity()) - # XXX What about quantity_unit -# m.edit( -# target_start_date = dm_object.getTargetStartDate(), -# target_stop_date = dm_object.getTargetStopDate(), -# start_date = dm_object.getStartDate(), -# stop_date = dm_object.getStopDate(), -# quantity = dm_object.getQuantity(), -# target_quantity = dm_object.getTargetQuantity(), -# delivery = dm_object.getRelativeUrl(), -# ) - for i in range(len(orphaned_delivery_list[m]) - 1): - new_id = "%s_fixsplit_%s" % (m.getId(), i) - dm_object = orphaned_delivery_list[m][i+1] - print " #### creating new simulation movement %s attached to %s q/t: %s %s" % (new_id, dm_object.getRelativeUrl(), - dm_object.getNetConvertedQuantity(), - dm_object.getNetConvertedTargetQuantity()) - # XXX What about quantity_unit -# new_movement = m.aq_parent.newContent(portal_type = "Simulation Movement", -# id = new_id, -# efficiency = m.getEfficiency(), -# target_efficiency = m.getTargetEfficiency(), -# target_start_date = dm_object.getTargetStartDate(), -# target_stop_date = dm_object.getTargetStopDate(), -# start_date = dm_object.getStartDate(), -# stop_date = dm_object.getStopDate(), -# quantity = dm_object.getQuantity(), -# target_quantity = dm_object.getTargetQuantity(), -# delivery = dm_object.getRelativeUrl(), -# source = m.getSource(), -# destination = m.getDestination(), -# source_section = m.getSourceSection(), -# destination_section = m.getDestinationSection(), -# order = m.getOrder() -# ) - else: - print " Found non matching 1 to N(%s) aggregate for %s delivery q/t: %s %s simulation q/t: %s %s" % ( - len(orphaned_delivery_list[m]), m.getRelativeUrl(), - orphaned_delivery_quantity[m], orphaned_delivery_target_quantity[m], - m.getNetConvertedQuantity(), m.getNetConvertedTargetQuantity(), - ) - dm_object = orphaned_delivery_list[m][0] - print " #### attaching %s to %s q/t: %s %s" % (m.getRelativeUrl(), dm_object.getRelativeUrl(), - dm_object.getNetConvertedQuantity(), dm_object.getNetConvertedTargetQuantity()) - # XXX What about quantity_unit -# m.edit( -# target_start_date = dm_object.getTargetStartDate(), -# target_stop_date = dm_object.getTargetStopDate(), -# start_date = dm_object.getStartDate(), -# stop_date = dm_object.getStopDate(), -# quantity = dm_object.getQuantity(), -# target_quantity = dm_object.getTargetQuantity(), -# delivery = dm_object.getRelativeUrl(), -# ) - for i in range(len(orphaned_delivery_list[m]) - 1): - new_id = "%s_fixsplit_%s" % (m.getId(), i) - dm_object = orphaned_delivery_list[m][i+1] - print " #### creating new simulation movement %s attached to %s q/t: %s %s" % (new_id, dm_object.getRelativeUrl(), - dm_object.getNetConvertedQuantity(), - dm_object.getNetConvertedTargetQuantity()) - # XXX What about quantity_unit -# new_movement = m.aq_parent.newContent(portal_type = "Simulation Movement", -# id = new_id, -# efficiency = m.getEfficiency(), -# target_efficiency = m.getTargetEfficiency(), -# target_start_date = dm_object.getTargetStartDate(), -# target_stop_date = dm_object.getTargetStopDate(), -# start_date = dm_object.getStartDate(), -# stop_date = dm_object.getStopDate(), -# quantity = dm_object.getQuantity(), -# target_quantity = dm_object.getTargetQuantity(), -# delivery = dm_object.getRelativeUrl(), -# source = m.getSource(), -# destination = m.getDestination(), -# source_section = m.getSourceSection(), -# destination_section = m.getDestinationSection(), -# order = m.getOrder() -# ) - -print "=======================================================" -print "New deliveries" - -#root_group = context.portal_simulation.collectMovement(build_delivery_list) -#delivery_list = context.portal_simulation.buildDeliveryList(root_group) -#for delivery in delivery_list: -# print "New delivery %s for causality %s" % (delivery.getRelativeUrl(), ' '.join(delivery.getCausalityList())) - -print '\n'.join(map(lambda x:x.getRelativeUrl(), build_delivery_list)) - -print "=======================================================" -print "Reexpand delivery rules (and delete duplicate delivery relations)" -for arb in context.portal_rules.default_delivery_rule.getSpecialiseRelatedValueList(): - ar = arb.getObject() - before = len(ar.objectIds()) - #ar.expand() - after = len(ar.objectIds()) - print " reexpand %s before: %s after: %s" % (ar.getRelativeUrl(), before, after) - - -print "=======================================================" -print "TODO" - -print " compare quantities in simulation and deliveries" - - - -return printed diff --git a/product/Coramy/skins/coramy_erp5/PortalSimulation_updateInventory.py b/product/Coramy/skins/coramy_erp5/PortalSimulation_updateInventory.py deleted file mode 100755 index 87ef0e8fa4..0000000000 --- a/product/Coramy/skins/coramy_erp5/PortalSimulation_updateInventory.py +++ /dev/null @@ -1,15 +0,0 @@ -## Script (Python) "PortalSimulation_updateInventory" -##bind container=container -##bind context=context -##bind namespace= -##bind script=script -##bind subpath=traverse_subpath -##parameters= -##title= -## -for b in context.SimulationTool_zGetSortedInventoryList(): - print "#### Indexing Inventory %s ####" % b.relative_url - o = b.getObject() - if o is not None: o.activate(priority=4).recursiveImmediateReindexObject() - -return printed diff --git a/product/Coramy/skins/coramy_erp5/PortalSimulation_zGetResourceList.zsql b/product/Coramy/skins/coramy_erp5/PortalSimulation_zGetResourceList.zsql deleted file mode 100755 index 142be25c71..0000000000 --- a/product/Coramy/skins/coramy_erp5/PortalSimulation_zGetResourceList.zsql +++ /dev/null @@ -1,16 +0,0 @@ -<dtml-comment> -title: -connection_id:erp5_sql_connection -max_rows:100000 -max_cache:0 -cache_time:0 -class_name: -class_file: -</dtml-comment> -<params></params> -SELECT DISTINCT - movement.resource_uid, - catalog.relative_url AS resource_relative_url, - movement.variation_text -FROM - movement LEFT JOIN catalog ON (catalog.uid = movement.resource_uid) \ No newline at end of file diff --git a/product/Coramy/skins/coramy_erp5/SQLDict_assignMessage.zsql b/product/Coramy/skins/coramy_erp5/SQLDict_assignMessage.zsql deleted file mode 100755 index b55f434068..0000000000 --- a/product/Coramy/skins/coramy_erp5/SQLDict_assignMessage.zsql +++ /dev/null @@ -1,25 +0,0 @@ -<dtml-comment> -title: -connection_id:MySQL -max_rows:1 -max_cache:0 -cache_time:0 -class_name: -class_file: -</dtml-comment> -<params>path -processing_node -method_id -uid=None</params> -UPDATE message -SET - processing_node=<dtml-sqlvar processing_node type="int">, - processing=0 -WHERE -<dtml-if uid> -<dtml-in uid>uid = <dtml-sqlvar sequence-item type="int"><dtml-if sequence-end><dtml-else> - OR </dtml-if></dtml-in> -<dtml-else> - path = <dtml-sqlvar path type="string"> -<dtml-if method_id>AND method_id = <dtml-sqlvar method_id type="string"></dtml-if> -</dtml-if> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_erp5/SQLDict_createMessageTable.zsql b/product/Coramy/skins/coramy_erp5/SQLDict_createMessageTable.zsql deleted file mode 100755 index 2bf8854dc5..0000000000 --- a/product/Coramy/skins/coramy_erp5/SQLDict_createMessageTable.zsql +++ /dev/null @@ -1,27 +0,0 @@ -<dtml-comment> -title: -connection_id:erp5_sql_connection -max_rows:1000 -max_cache:100 -cache_time:0 -class_name: -class_file: -</dtml-comment> -<params></params> -CREATE TABLE `message` ( - `uid` int(11) NOT NULL auto_increment, - `date` datetime, - `path` VARCHAR(255), - `method_id` VARCHAR(40), - `processing_node` INT DEFAULT -1, - `processing` INT DEFAULT 0, - `priority` INT DEFAULT 0, - `message` BLOB, - PRIMARY KEY (`uid`), - KEY `date` (`date`), - KEY `path` (`path`), - KEY `method_id` (`method_id`), - KEY `processing_node` (`processing_node`), - KEY `processing` (`processing`), - KEY `priority` (`priority`), -) TYPE = InnoDB; \ No newline at end of file diff --git a/product/Coramy/skins/coramy_erp5/SQLDict_delMessage.zsql b/product/Coramy/skins/coramy_erp5/SQLDict_delMessage.zsql deleted file mode 100755 index ce78ddf2a8..0000000000 --- a/product/Coramy/skins/coramy_erp5/SQLDict_delMessage.zsql +++ /dev/null @@ -1,15 +0,0 @@ -<dtml-comment> -title: -connection_id:erp5_sql_connection -max_rows:1000 -max_cache:100 -cache_time:0 -class_name: -class_file: -</dtml-comment> -<params>uid:list</params> -DELETE FROM - message -WHERE -<dtml-in uid>uid = <dtml-sqlvar sequence-item type="int"><dtml-if sequence-end><dtml-else> OR </dtml-if> -</dtml-in> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_erp5/SQLDict_hasMessage.zsql b/product/Coramy/skins/coramy_erp5/SQLDict_hasMessage.zsql deleted file mode 100755 index e4df300440..0000000000 --- a/product/Coramy/skins/coramy_erp5/SQLDict_hasMessage.zsql +++ /dev/null @@ -1,19 +0,0 @@ -<dtml-comment> -title: -connection_id:erp5_sql_connection -max_rows:1 -max_cache:100 -cache_time:1 -class_name: -class_file: -</dtml-comment> -<params>path -method_id</params> -SELECT count(path) as message_count FROM - message -<dtml-if "path or method_id"> -WHERE -<dtml-if path> path = <dtml-sqlvar path type="string"></dtml-if> -<dtml-if method_id>AND method_id = <dtml-sqlvar method_id type="string"></dtml-if> -</dtml-if> - \ No newline at end of file diff --git a/product/Coramy/skins/coramy_erp5/SQLDict_lockMessage.zsql b/product/Coramy/skins/coramy_erp5/SQLDict_lockMessage.zsql deleted file mode 100755 index 111ce16ba9..0000000000 --- a/product/Coramy/skins/coramy_erp5/SQLDict_lockMessage.zsql +++ /dev/null @@ -1,11 +0,0 @@ -<dtml-comment> -title: -connection_id:erp5_sql_connection -max_rows:1000 -max_cache:100 -cache_time:0 -class_name: -class_file: -</dtml-comment> -<params></params> -LOCK TABLES message WRITE \ No newline at end of file diff --git a/product/Coramy/skins/coramy_erp5/SQLDict_processMessage.zsql b/product/Coramy/skins/coramy_erp5/SQLDict_processMessage.zsql deleted file mode 100755 index 23dbae6cdd..0000000000 --- a/product/Coramy/skins/coramy_erp5/SQLDict_processMessage.zsql +++ /dev/null @@ -1,15 +0,0 @@ -<dtml-comment> -title: -connection_id:erp5_sql_connection -max_rows:1 -max_cache:0 -cache_time:0 -class_name: -class_file: -</dtml-comment> -<params>uid</params> -UPDATE message -SET processing=1 -WHERE -<dtml-in uid>uid = <dtml-sqlvar sequence-item type="int"><dtml-if sequence-end><dtml-else> - OR </dtml-if></dtml-in> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_erp5/SQLDict_readMessage.zsql b/product/Coramy/skins/coramy_erp5/SQLDict_readMessage.zsql deleted file mode 100755 index fd34f808c7..0000000000 --- a/product/Coramy/skins/coramy_erp5/SQLDict_readMessage.zsql +++ /dev/null @@ -1,20 +0,0 @@ -<dtml-comment> -title: -connection_id:erp5_sql_connection -max_rows:1 -max_cache:0 -cache_time:0 -class_name: -class_file: -</dtml-comment> -<params>processing_node -priority</params> -SELECT * FROM - message -WHERE - processing <> 1 -<dtml-if processing_node> AND processing_node = <dtml-sqlvar processing_node type="int"></dtml-if> -<dtml-if priority> AND priority = <dtml-sqlvar priority type="int"> </dtml-if> - -ORDER BY - priority, date diff --git a/product/Coramy/skins/coramy_erp5/SQLDict_readMessageList.zsql b/product/Coramy/skins/coramy_erp5/SQLDict_readMessageList.zsql deleted file mode 100755 index b198b085fb..0000000000 --- a/product/Coramy/skins/coramy_erp5/SQLDict_readMessageList.zsql +++ /dev/null @@ -1,25 +0,0 @@ -<dtml-comment> -title: -connection_id:erp5_sql_connection -max_rows:1000 -max_cache:0 -cache_time:0 -class_name: -class_file: -</dtml-comment> -<params>path -method_id -processing_node -priority</params> -SELECT * FROM - message -WHERE - processing <> 1 -<dtml-if processing_node>AND processing_node = <dtml-sqlvar processing_node type="int"> </dtml-if> -<dtml-if priority>AND priority = <dtml-sqlvar priority type="int"> </dtml-if> -<dtml-if path>AND path = <dtml-sqlvar path type="string"></dtml-if> -<dtml-if method_id>AND method_id = <dtml-sqlvar method_id type="string"></dtml-if> -GROUP BY - path, method_id, processing_node, processing -ORDER BY - priority, date diff --git a/product/Coramy/skins/coramy_erp5/SQLDict_readUidList.zsql b/product/Coramy/skins/coramy_erp5/SQLDict_readUidList.zsql deleted file mode 100755 index 9d76cdf3d5..0000000000 --- a/product/Coramy/skins/coramy_erp5/SQLDict_readUidList.zsql +++ /dev/null @@ -1,19 +0,0 @@ -<dtml-comment> -title: -connection_id:MySQL -max_rows:10000 -max_cache:0 -cache_time:0 -class_name: -class_file: -</dtml-comment> -<params>processing_node -method_id -path</params> -SELECT uid FROM - message -WHERE - processing <> 1 -<dtml-if processing_node> AND processing_node = <dtml-sqlvar processing_node type="int"></dtml-if> -<dtml-if method_id>AND method_id = <dtml-sqlvar method_id type="string"></dtml-if> -<dtml-if path>AND path = <dtml-sqlvar path type="string"></dtml-if> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_erp5/SQLDict_setPriority.zsql b/product/Coramy/skins/coramy_erp5/SQLDict_setPriority.zsql deleted file mode 100755 index a8a1280f96..0000000000 --- a/product/Coramy/skins/coramy_erp5/SQLDict_setPriority.zsql +++ /dev/null @@ -1,19 +0,0 @@ -<dtml-comment> -title: -connection_id:MySQL -max_rows:1000 -max_cache:100 -cache_time:0 -class_name: -class_file: -</dtml-comment> -<params>uid:list -priority</params> -UPDATE - message -SET - priority = <dtml-sqlvar priority type="int">, - processing = 0 -WHERE -<dtml-in uid>uid = <dtml-sqlvar sequence-item type="int"><dtml-if sequence-end><dtml-else> - OR </dtml-if></dtml-in> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_erp5/SQLDict_unlockMessage.zsql b/product/Coramy/skins/coramy_erp5/SQLDict_unlockMessage.zsql deleted file mode 100755 index 163752fb09..0000000000 --- a/product/Coramy/skins/coramy_erp5/SQLDict_unlockMessage.zsql +++ /dev/null @@ -1,11 +0,0 @@ -<dtml-comment> -title: -connection_id:erp5_sql_connection -max_rows:1000 -max_cache:100 -cache_time:0 -class_name: -class_file: -</dtml-comment> -<params></params> -UNLOCK TABLES \ No newline at end of file diff --git a/product/Coramy/skins/coramy_erp5/SQLDict_writeMessage.zsql b/product/Coramy/skins/coramy_erp5/SQLDict_writeMessage.zsql deleted file mode 100755 index 70fbb74a37..0000000000 --- a/product/Coramy/skins/coramy_erp5/SQLDict_writeMessage.zsql +++ /dev/null @@ -1,22 +0,0 @@ -<dtml-comment> -title: -connection_id:erp5_sql_connection -max_rows:1000 -max_cache:100 -cache_time:0 -class_name: -class_file: -</dtml-comment> -<params>path -method_id -message -priority</params> -INSERT INTO message -SET - path = <dtml-sqlvar path type="string">, - date = <dtml-sqlvar "_.DateTime()" type="string">, - method_id = <dtml-sqlvar method_id type="string">, - processing_node = -1, - processing = -1, - priority = <dtml-sqlvar priority type="int">, - message = <dtml-sqlvar message type="string"> diff --git a/product/Coramy/skins/coramy_erp5/SQLQueue_assignMessage.zsql b/product/Coramy/skins/coramy_erp5/SQLQueue_assignMessage.zsql deleted file mode 100755 index 7e1edea718..0000000000 --- a/product/Coramy/skins/coramy_erp5/SQLQueue_assignMessage.zsql +++ /dev/null @@ -1,21 +0,0 @@ -<dtml-comment> -title: -connection_id:MySQL -max_rows:1 -max_cache:0 -cache_time:0 -class_name: -class_file: -</dtml-comment> -<params>path -processing_node -method_id -uid:int=0</params> -UPDATE message_queue -SET - processing_node=<dtml-sqlvar processing_node type="int">, - processing=0 -WHERE -<dtml-if path> path = <dtml-sqlvar path type="string"> -<dtml-else> uid = <dtml-sqlvar uid type="int"> </dtml-if> -<dtml-if method_id> AND method_id = <dtml-sqlvar method_id type="string"></dtml-if> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_erp5/SQLQueue_createMessageTable.zsql b/product/Coramy/skins/coramy_erp5/SQLQueue_createMessageTable.zsql deleted file mode 100755 index ffd63cfee1..0000000000 --- a/product/Coramy/skins/coramy_erp5/SQLQueue_createMessageTable.zsql +++ /dev/null @@ -1,25 +0,0 @@ -<dtml-comment> -title: -connection_id:MySQL -max_rows:1000 -max_cache:100 -cache_time:0 -class_name: -class_file: -</dtml-comment> -<params></params> -CREATE TABLE `message_queue` ( - `uid` int(11) NOT NULL auto_increment, - `path` VARCHAR(255), - `method_id` VARCHAR(40), - `processing_node` INT DEFAULT -1, - `processing` INT DEFAULT 0, - `priority` INT DEFAULT 0, - `message` BLOB, - PRIMARY KEY (`uid`), - KEY `path` (`path`), - KEY `method_id` (`method_id`), - KEY `processing_node` (`processing_node`), - KEY `processing` (`processing`), - KEY `priority` (`priority`), -) TYPE = InnoDB; \ No newline at end of file diff --git a/product/Coramy/skins/coramy_erp5/SQLQueue_delMessage.zsql b/product/Coramy/skins/coramy_erp5/SQLQueue_delMessage.zsql deleted file mode 100755 index 91557f5383..0000000000 --- a/product/Coramy/skins/coramy_erp5/SQLQueue_delMessage.zsql +++ /dev/null @@ -1,14 +0,0 @@ -<dtml-comment> -title: -connection_id:MySQL -max_rows:1000 -max_cache:100 -cache_time:0 -class_name: -class_file: -</dtml-comment> -<params>uid</params> -DELETE FROM - message_queue -WHERE - uid = <dtml-sqlvar uid type="int"> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_erp5/SQLQueue_hasMessage.zsql b/product/Coramy/skins/coramy_erp5/SQLQueue_hasMessage.zsql deleted file mode 100755 index 00a26b9bb0..0000000000 --- a/product/Coramy/skins/coramy_erp5/SQLQueue_hasMessage.zsql +++ /dev/null @@ -1,19 +0,0 @@ -<dtml-comment> -title: -connection_id:MySQL -max_rows:1 -max_cache:100 -cache_time:1 -class_name: -class_file: -</dtml-comment> -<params>path -method_id</params> -SELECT count(path) as message_count FROM - message_queue -<dtml-if "path or method_id"> -WHERE -<dtml-if path> path = <dtml-sqlvar path type="string"></dtml-if> -<dtml-if method_id>AND method_id = <dtml-sqlvar method_id type="string"></dtml-if> -</dtml-if> - \ No newline at end of file diff --git a/product/Coramy/skins/coramy_erp5/SQLQueue_processMessage.zsql b/product/Coramy/skins/coramy_erp5/SQLQueue_processMessage.zsql deleted file mode 100755 index 69c8607835..0000000000 --- a/product/Coramy/skins/coramy_erp5/SQLQueue_processMessage.zsql +++ /dev/null @@ -1,14 +0,0 @@ -<dtml-comment> -title: -connection_id:MySQL -max_rows:1 -max_cache:0 -cache_time:0 -class_name: -class_file: -</dtml-comment> -<params>uid</params> -UPDATE message_queue -SET processing=1 -WHERE - uid = <dtml-sqlvar uid type="int"> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_erp5/SQLQueue_readMessage.zsql b/product/Coramy/skins/coramy_erp5/SQLQueue_readMessage.zsql deleted file mode 100755 index 8ef8d1dbbb..0000000000 --- a/product/Coramy/skins/coramy_erp5/SQLQueue_readMessage.zsql +++ /dev/null @@ -1,17 +0,0 @@ -<dtml-comment> -title: -connection_id:MySQL -max_rows:1 -max_cache:0 -cache_time:0 -class_name: -class_file: -</dtml-comment> -<params>processing_node -priority</params> -SELECT * FROM - message_queue -WHERE - processing <> 1 -<dtml-if processing_node> AND processing_node = <dtml-sqlvar processing_node type="int"></dtml-if> -<dtml-if priority> AND priority = <dtml-sqlvar priority type="int"> </dtml-if> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_erp5/SQLQueue_readMessageList.zsql b/product/Coramy/skins/coramy_erp5/SQLQueue_readMessageList.zsql deleted file mode 100755 index 799843b64d..0000000000 --- a/product/Coramy/skins/coramy_erp5/SQLQueue_readMessageList.zsql +++ /dev/null @@ -1,21 +0,0 @@ -<dtml-comment> -title: -connection_id:MySQL -max_rows:1000 -max_cache:0 -cache_time:0 -class_name: -class_file: -</dtml-comment> -<params>path -method_id -processing_node -priority</params> -SELECT * FROM - message_queue -WHERE - processing <> 1 -<dtml-if processing_node>AND processing_node = <dtml-sqlvar processing_node type="int"> </dtml-if> -<dtml-if priority>AND priority = <dtml-sqlvar priority type="int"> </dtml-if> -<dtml-if path>AND path = <dtml-sqlvar path type="string"></dtml-if> -<dtml-if method_id>AND method_id = <dtml-sqlvar method_id type="string"></dtml-if> diff --git a/product/Coramy/skins/coramy_erp5/SQLQueue_setPriority.zsql b/product/Coramy/skins/coramy_erp5/SQLQueue_setPriority.zsql deleted file mode 100755 index fe903eaa6f..0000000000 --- a/product/Coramy/skins/coramy_erp5/SQLQueue_setPriority.zsql +++ /dev/null @@ -1,18 +0,0 @@ -<dtml-comment> -title: -connection_id:MySQL -max_rows:1000 -max_cache:100 -cache_time:0 -class_name: -class_file: -</dtml-comment> -<params>uid -priority</params> -UPDATE - message_queue -SET - priority = <dtml-sqlvar priority type="int">, - processing = 0 -WHERE - uid = <dtml-sqlvar uid type="int"> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_erp5/SQLQueue_writeMessage.zsql b/product/Coramy/skins/coramy_erp5/SQLQueue_writeMessage.zsql deleted file mode 100755 index 4975c7ebd3..0000000000 --- a/product/Coramy/skins/coramy_erp5/SQLQueue_writeMessage.zsql +++ /dev/null @@ -1,21 +0,0 @@ -<dtml-comment> -title: -connection_id:MySQL -max_rows:1000 -max_cache:100 -cache_time:0 -class_name: -class_file: -</dtml-comment> -<params>path -method_id -message -priority</params> -INSERT INTO message_queue -SET - path = <dtml-sqlvar path type="string">, - method_id = <dtml-sqlvar method_id type="string">, - processing_node = -1, - processing = -1, - priority = <dtml-sqlvar priority type="int">, - message = <dtml-sqlvar message type="string"> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_erp5/SimulationTool_zGetSortedInventoryList.zsql b/product/Coramy/skins/coramy_erp5/SimulationTool_zGetSortedInventoryList.zsql deleted file mode 100755 index 7380952c2d..0000000000 --- a/product/Coramy/skins/coramy_erp5/SimulationTool_zGetSortedInventoryList.zsql +++ /dev/null @@ -1,19 +0,0 @@ -<dtml-comment> -title: -connection_id:MySQL -max_rows:10000 -max_cache:100 -cache_time:0 -class_name:ZSQLBrain -class_file:zsqlbrain.py -</dtml-comment> -<params></params> -SELECT - catalog.* -FROM - catalog LEFT JOIN movement ON(catalog.uid=movement.uid) -WHERE - catalog.portal_type = "Inventory MP" -OR catalog.portal_type = "Inventory PF" -ORDER BY - movement.start_date \ No newline at end of file diff --git a/product/Coramy/skins/coramy_erp5/Variated_getColorisList.py b/product/Coramy/skins/coramy_erp5/Variated_getColorisList.py deleted file mode 100755 index 6961cf2a9d..0000000000 --- a/product/Coramy/skins/coramy_erp5/Variated_getColorisList.py +++ /dev/null @@ -1,31 +0,0 @@ -## Script (Python) "Variated_getColorisList" -##bind container=container -##bind context=context -##bind namespace= -##bind script=script -##bind subpath=traverse_subpath -##parameters= -##title= -## -coloris_list = context.getColorisList() -coloris_coramy = [] -coloris_client = [] -for coloris in coloris_list : - coloris_items = coloris.split('/') - coloris_coramy.append(coloris_items[len(coloris_items)-1]) - - try : - coloris_object = context.restrictedTraverse('/'.join(coloris_items[0:len(coloris_items)])) - except : - coloris_object = None - - if coloris_object is not None : - if not coloris_object.getDestinationReference() in (None,'',' ') : - coloris_client.append(coloris_object.getDestinationReference()) - else : - coloris_client.append(coloris_items[len(coloris_items)-1]) - else : - coloris_client.append(coloris_items[len(coloris_items)-1]) - -coloris = [coloris_coramy, coloris_client, coloris_list] -return coloris diff --git a/product/Coramy/skins/coramy_erp5/Variated_getTailleClient.py b/product/Coramy/skins/coramy_erp5/Variated_getTailleClient.py deleted file mode 100755 index 63986538f8..0000000000 --- a/product/Coramy/skins/coramy_erp5/Variated_getTailleClient.py +++ /dev/null @@ -1,20 +0,0 @@ -## Script (Python) "Variated_getTailleClient" -##bind container=container -##bind context=context -##bind namespace= -##bind script=script -##bind subpath=traverse_subpath -##parameters= -##title= -## -cartesian_variation_list = context.Resource_getCartesianVariationList() -taille_client_dict = context.Variated_getTailleClientDict() -taille = context.getTaille() - -try : - taille_client = taille_client_dict[str(cartesian_variation_list[0])] -except : - taille_items = taille.split('/') - taille_client = taille_items[len(taille_items)-1] - -return taille_client diff --git a/product/Coramy/skins/coramy_erp5/Variated_getTailleClientDict.py b/product/Coramy/skins/coramy_erp5/Variated_getTailleClientDict.py deleted file mode 100755 index 531e8b954a..0000000000 --- a/product/Coramy/skins/coramy_erp5/Variated_getTailleClientDict.py +++ /dev/null @@ -1,34 +0,0 @@ -## Script (Python) "Variated_getTailleClientDict" -##bind container=container -##bind context=context -##bind namespace= -##bind script=script -##bind subpath=traverse_subpath -##parameters= -##title= -## -# return a dictionary -# key : cartesian_variation_list -# item : taille client - -try : - correspondance = context.getResourceValue().getSpecialiseValue(portal_type=['Correspondance Tailles']) -except : - correspondance = None - -taille_list = context.getTailleList() -cartesian_variation_list = context.Resource_getCartesianVariationList() -taille_client_dict = {} - -for variation_list in cartesian_variation_list : - mapped_value_list = correspondance.objectValues() - taille_found = 0 - for mapped_value in mapped_value_list : - if mapped_value.test(correspondance.asContext(categories=variation_list)) : - taille_client_dict[str(variation_list)] = mapped_value.getProperty(key='taille_client') - taille_found =1 - break - if not taille_found : - taille_client_dict[str(variation_list)] = '' - -return taille_client_dict diff --git a/product/Coramy/skins/coramy_erp5/Variated_getTailleList.py b/product/Coramy/skins/coramy_erp5/Variated_getTailleList.py deleted file mode 100755 index 362c859c10..0000000000 --- a/product/Coramy/skins/coramy_erp5/Variated_getTailleList.py +++ /dev/null @@ -1,35 +0,0 @@ -## Script (Python) "Variated_getTailleList" -##bind container=container -##bind context=context -##bind namespace= -##bind script=script -##bind subpath=traverse_subpath -##parameters=correspondance=None, morphologie=None -##title= -## -tailles_list = context.getTailleList() -tailles_coramy = [] -tailles_client = [] -for taille in tailles_list : - taille_items = taille.split('/') - tailles_coramy.append(taille_items[len(taille_items)-1]) - -if correspondance == None : - tailles_client = tailles_coramy -else : - if morphologie is None : - for taille in tailles_list : - if correspondance.getCell(None, taille, base_id='taille_client') <> None : - tailles_client.append(correspondance.getCell(None, taille, base_id='taille_client').taille_client) - else : - tailles_client.append("") - else : - my_morphologie = context.restrictedTraverse(morphologie).getMorphoType() - for taille in tailles_list : - if correspondance.getCell(my_morphologie, taille, base_id='taille_client') <> None : - tailles_client.append(correspondance.getCell(my_morphologie, taille, base_id='taille_client').taille_client) - else : - tailles_client.append("") - -tailles = [tailles_coramy, tailles_client, tailles_list] -return tailles diff --git a/product/Coramy/skins/coramy_erp5/Variated_getTaillesList.py b/product/Coramy/skins/coramy_erp5/Variated_getTaillesList.py deleted file mode 100755 index e0739c26f9..0000000000 --- a/product/Coramy/skins/coramy_erp5/Variated_getTaillesList.py +++ /dev/null @@ -1,27 +0,0 @@ -## Script (Python) "Variated_getTaillesList" -##bind container=container -##bind context=context -##bind namespace= -##bind script=script -##bind subpath=traverse_subpath -##parameters=correspondance=None -##title= -## -tailles_list = context.getTailleList() -tailles_coramy = [] -tailles_client = [] -for taille in tailles_list : - taille_items = taille.split('/') - tailles_coramy.append(taille_items[len(taille_items)-1]) - -if correspondance == None : - tailles_client = tailles_coramy -else : - for taille in tailles_list : - if correspondance.getCell(None, taille, base_id='taille_client') <> None : - tailles_client.append(correspondance.getCell(None, taille, base_id='taille_client').taille_client) - else : - tailles_client.append("") - -tailles = [tailles_coramy, tailles_client, tailles_list] -return tailles diff --git a/product/Coramy/skins/coramy_erp5/asPDF.py b/product/Coramy/skins/coramy_erp5/asPDF.py deleted file mode 100755 index bd39a674cd..0000000000 --- a/product/Coramy/skins/coramy_erp5/asPDF.py +++ /dev/null @@ -1,34 +0,0 @@ -## Script (Python) "asPDF" -##bind container=container -##bind context=context -##bind namespace= -##bind script=script -##bind subpath=traverse_subpath -##parameters= -##title=Traveral helper to render report -## -request = context.REQUEST - -if len(traverse_subpath) >= 2: - templatename = traverse_subpath[0] - documentname = traverse_subpath[1] - if len(traverse_subpath) >= 3: - resultname = traverse_subpath[2] - else: - resultname = context.id + '.pdf' - - report_tool = context.portal_report - doc_txt = getattr(context,documentname,None) - - if doc_txt: - doc_xml = context.testdocument_pdf(pdftemplate=templatename) - pdf = report_tool.renderPDF(templatename,doc_xml) - - request.RESPONSE.setHeader('Content-Type','application/pdf') - request.RESPONSE.setHeader('Content-Length',len(pdf)) - request.RESPONSE.setHeader('Content-Disposition','inline;filename=Myfile.pdf') - - return pdf - -url = '%s/%s?%s' % (context.portal_url(),'index_html','portal_status_message=error+using+asPDF.') -return request.RESPONSE.redirect(url) diff --git a/product/Coramy/skins/coramy_erp5/assign_gestionaire_designe_roles.py b/product/Coramy/skins/coramy_erp5/assign_gestionaire_designe_roles.py deleted file mode 100755 index a246b44f6c..0000000000 --- a/product/Coramy/skins/coramy_erp5/assign_gestionaire_designe_roles.py +++ /dev/null @@ -1,31 +0,0 @@ -## Script (Python) "assign_gestionaire_designe_roles" -##bind container=container -##bind context=context -##bind namespace= -##bind script=script -##bind subpath=traverse_subpath -##parameters=user_name='' -##title= -## -object = context - -equipe1=['Michele_Kmiecik', 'Laurence_Caron', 'Veronique_Tronet'] -equipe2=['Martine_Cirot', 'Michele_Grisolet'] -equipe3=['Maryvonne_Mathon', 'Magdalena_Cousin', 'Carole_Billant'] - -local_user = object.portal_membership.getAuthenticatedMember().getUserName() - -if user_name <> '' : - if user_name in equipe1 or user_name in equipe2 or user_name in equipe3 : - local_user = user_name - -if local_user in equipe1 : - object.AssignLocalRole(user_list=equipe1,role_list=['GestionaireDesigne',]) -elif local_user in equipe2 : - object.AssignLocalRole(user_list=equipe2,role_list=['GestionaireDesigne',]) -elif local_user in equipe3 : - object.AssignLocalRole(user_list=equipe3,role_list=['GestionaireDesigne',]) -else : - if user_name == "AnimatriceAppros" : - local_user = 'Michele_Kmiecik' - object.AssignLocalRole(user_list=[local_user,],role_list=['GestionaireDesigne',]) diff --git a/product/Coramy/skins/coramy_erp5/base_folder_workflow_action.form b/product/Coramy/skins/coramy_erp5/base_folder_workflow_action.form deleted file mode 100755 index 4371529c89..0000000000 --- a/product/Coramy/skins/coramy_erp5/base_folder_workflow_action.form +++ /dev/null @@ -1,118 +0,0 @@ -<?xml version="1.0"?> - -<form> - <title>Validate</title> - <row_length>4</row_length> - <name>base_folder_workflow_action</name> - <pt>form_view_dialog</pt> - <action>folder_workflow_status_modify</action> - <method>POST</method> - <enctype></enctype> - <encoding>UTF-8</encoding> - <stored_encoding>ISO-8859-1</stored_encoding> - <unicode_mode>false</unicode_mode> - <groups> - <group> - <title>Default</title> - <fields> - - <field><id>my_comment</id> <type>TextAreaField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <height type="int">5</height> - <hidden type="int">0</hidden> - <max_length></max_length> - <max_linelength></max_linelength> - <max_lines></max_lines> - <required type="int">0</required> - <title>Commentaires</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - <width type="int">40</width> - </values> - <tales> - <default>python:''</default> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_many_lines">You entered too many lines.</message> - <message name="line_too_long">A line was too long.</message> - <message name="too_long">You entered too many characters.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>hidden</title> - <fields> - - <field><id>my_workflow_action</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">1</hidden> - <max_length></max_length> - <required type="int">0</required> - <title>x</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <default>python:here.REQUEST.workflow_action</default> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - <field><id>my_workflow_id</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">1</hidden> - <max_length></max_length> - <required type="int">0</required> - <title>x</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <default>python:here.REQUEST.workflow_id</default> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - </fields> - </group> - </groups> -</form> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_erp5/base_folder_workflow_action_start_date.form b/product/Coramy/skins/coramy_erp5/base_folder_workflow_action_start_date.form deleted file mode 100755 index 93420e9339..0000000000 --- a/product/Coramy/skins/coramy_erp5/base_folder_workflow_action_start_date.form +++ /dev/null @@ -1,128 +0,0 @@ -<?xml version="1.0" encoding="iso-8859-1"?> - -<form> - <title>Validate</title> - <name>base_folder_workflow_action</name> - <action>folder_workflow_status_modify</action> - <enctype></enctype> - <method>POST</method> - <pt>form_view_dialog</pt> - - <groups> - <group> - <title>Default</title> - <fields> - - <field><id>my_comment</id> <type>TextAreaField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <external_validator></external_validator> - <extra></extra> - <height type="int">5</height> - <hidden type="int">0</hidden> - <max_length></max_length> - <max_linelength></max_linelength> - <max_lines></max_lines> - <required type="int">0</required> - <title>Commentaires</title> - <width type="int">40</width> - </values> - <tales> - <default>python:''</default> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_many_lines">You entered too many lines.</message> - <message name="line_too_long">A line was too long.</message> - <message name="too_long">You entered too many characters.</message> - </messages> - </field> - <field><id>my_start_date</id> <type>DateTimeField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <date_only type="int">1</date_only> - <date_separator>/</date_separator> - <default_now type="int">0</default_now> - <description></description> - <external_validator></external_validator> - <hidden type="int">0</hidden> - <input_order>dmy</input_order> - <input_style>text</input_style> - <required type="int">0</required> - <time_separator>:</time_separator> - <title>Date de facture</title> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="not_datetime">You did not enter a valid date and time.</message> - <message name="datetime_out_of_range">The date and time you entered were out of range.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>hidden</title> - <fields> - - <field><id>my_workflow_action</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">1</hidden> - <max_length></max_length> - <required type="int">0</required> - <title>x</title> - <truncate type="int">0</truncate> - </values> - <tales> - <default>python:here.REQUEST.workflow_action</default> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - <field><id>my_workflow_id</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">1</hidden> - <max_length></max_length> - <required type="int">0</required> - <title>x</title> - <truncate type="int">0</truncate> - </values> - <tales> - <default>python:here.REQUEST.workflow_id</default> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - </fields> - </group> - </groups> -</form> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_erp5/base_folder_workflow_action_start_date2.form b/product/Coramy/skins/coramy_erp5/base_folder_workflow_action_start_date2.form deleted file mode 100755 index e596719344..0000000000 --- a/product/Coramy/skins/coramy_erp5/base_folder_workflow_action_start_date2.form +++ /dev/null @@ -1,128 +0,0 @@ -<?xml version="1.0" encoding="iso-8859-1"?> - -<form> - <title>Validate</title> - <name>base_folder_workflow_action</name> - <action>folder_workflow_status_modify_test</action> - <enctype>multipart/form-data</enctype> - <method>POST</method> - <pt>form_view_dialog</pt> - - <groups> - <group> - <title>Default</title> - <fields> - - <field><id>my_comment</id> <type>TextAreaField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <external_validator></external_validator> - <extra></extra> - <height type="int">5</height> - <hidden type="int">0</hidden> - <max_length></max_length> - <max_linelength></max_linelength> - <max_lines></max_lines> - <required type="int">0</required> - <title>Commentaires</title> - <width type="int">40</width> - </values> - <tales> - <default>python:''</default> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_many_lines">You entered too many lines.</message> - <message name="line_too_long">A line was too long.</message> - <message name="too_long">You entered too many characters.</message> - </messages> - </field> - <field><id>my_start_date</id> <type>DateTimeField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <date_only type="int">1</date_only> - <date_separator>/</date_separator> - <default_now type="int">0</default_now> - <description></description> - <external_validator></external_validator> - <hidden type="int">0</hidden> - <input_order>dmy</input_order> - <input_style>text</input_style> - <required type="int">0</required> - <time_separator>:</time_separator> - <title>Date de facture</title> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="not_datetime">You did not enter a valid date and time.</message> - <message name="datetime_out_of_range">The date and time you entered were out of range.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>hidden</title> - <fields> - - <field><id>my_workflow_action</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">1</hidden> - <max_length></max_length> - <required type="int">0</required> - <title>x</title> - <truncate type="int">0</truncate> - </values> - <tales> - <default>python:here.REQUEST.workflow_action</default> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - <field><id>my_workflow_id</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">1</hidden> - <max_length></max_length> - <required type="int">0</required> - <title>x</title> - <truncate type="int">0</truncate> - </values> - <tales> - <default>python:here.REQUEST.workflow_id</default> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - </fields> - </group> - </groups> -</form> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_erp5/base_workflow_action.form b/product/Coramy/skins/coramy_erp5/base_workflow_action.form deleted file mode 100755 index 1aa5a4ad34..0000000000 --- a/product/Coramy/skins/coramy_erp5/base_workflow_action.form +++ /dev/null @@ -1,89 +0,0 @@ -<?xml version="1.0"?> - -<form> - <title>Validate</title> - <row_length>4</row_length> - <name>base_workflow_action</name> - <pt>form_view_dialog</pt> - <action>workflow_status_modify</action> - <method>POST</method> - <enctype></enctype> - <encoding>UTF-8</encoding> - <stored_encoding>ISO-8859-1</stored_encoding> - <unicode_mode>false</unicode_mode> - <groups> - <group> - <title>Default</title> - <fields> - - <field><id>my_comment</id> <type>TextAreaField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <height type="int">5</height> - <hidden type="int">0</hidden> - <max_length></max_length> - <max_linelength></max_linelength> - <max_lines></max_lines> - <required type="int">0</required> - <title>Commentaires</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - <width type="int">40</width> - </values> - <tales> - <default>python:''</default> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_many_lines">You entered too many lines.</message> - <message name="line_too_long">A line was too long.</message> - <message name="too_long">You entered too many characters.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>hidden</title> - <fields> - - <field><id>my_workflow_action</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">1</hidden> - <max_length></max_length> - <required type="int">1</required> - <title></title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <default>python:here.REQUEST.workflow_action</default> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - </fields> - </group> - </groups> -</form> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_erp5/base_workflow_action_comment.form b/product/Coramy/skins/coramy_erp5/base_workflow_action_comment.form deleted file mode 100755 index 61a5ea983e..0000000000 --- a/product/Coramy/skins/coramy_erp5/base_workflow_action_comment.form +++ /dev/null @@ -1,89 +0,0 @@ -<?xml version="1.0"?> - -<form> - <title>Validate</title> - <row_length>4</row_length> - <name>base_workflow_action_comment</name> - <pt>form_view_dialog</pt> - <action>workflow_status_modify</action> - <method>POST</method> - <enctype></enctype> - <encoding>UTF-8</encoding> - <stored_encoding>ISO-8859-1</stored_encoding> - <unicode_mode>false</unicode_mode> - <groups> - <group> - <title>Default</title> - <fields> - - <field><id>my_comment</id> <type>TextAreaField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <height type="int">5</height> - <hidden type="int">0</hidden> - <max_length></max_length> - <max_linelength></max_linelength> - <max_lines></max_lines> - <required type="int">1</required> - <title>Commentaires</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - <width type="int">40</width> - </values> - <tales> - <default>python:''</default> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_many_lines">You entered too many lines.</message> - <message name="line_too_long">A line was too long.</message> - <message name="too_long">You entered too many characters.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>hidden</title> - <fields> - - <field><id>my_workflow_action</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">1</hidden> - <max_length></max_length> - <required type="int">1</required> - <title></title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <default>python:here.REQUEST.workflow_action</default> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - </fields> - </group> - </groups> -</form> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_erp5/content_viewMetadata.form b/product/Coramy/skins/coramy_erp5/content_viewMetadata.form deleted file mode 100755 index b0dc8f89cc..0000000000 --- a/product/Coramy/skins/coramy_erp5/content_viewMetadata.form +++ /dev/null @@ -1,94 +0,0 @@ -<?xml version="1.0"?> - -<form> - <title></title> - <row_length>4</row_length> - <name>content_viewMetadata</name> - <pt>form_view</pt> - <action>content_MetadataEdit</action> - <method>POST</method> - <enctype></enctype> - <encoding>UTF-8</encoding> - <stored_encoding>ISO-8859-1</stored_encoding> - <unicode_mode>false</unicode_mode> - <groups> - <group> - <title>left</title> - <fields> - - <field><id>my_title</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <max_length></max_length> - <required type="int">1</required> - <title>Title</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <default>here/title</default> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>right</title> - <fields> - - </fields> - </group> - <group> - <title>center</title> - <fields> - - <field><id>description</id> <type>TextAreaField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <height type="int">5</height> - <hidden type="int">0</hidden> - <max_length></max_length> - <max_linelength></max_linelength> - <max_lines></max_lines> - <required type="int">1</required> - <title>Description</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - <width type="int">40</width> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_many_lines">You entered too many lines.</message> - <message name="line_too_long">A line was too long.</message> - <message name="too_long">You entered too many characters.</message> - </messages> - </field> - </fields> - </group> - </groups> -</form> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_erp5/copy_of_base_folder_workflow_action_start_date.form b/product/Coramy/skins/coramy_erp5/copy_of_base_folder_workflow_action_start_date.form deleted file mode 100755 index 93420e9339..0000000000 --- a/product/Coramy/skins/coramy_erp5/copy_of_base_folder_workflow_action_start_date.form +++ /dev/null @@ -1,128 +0,0 @@ -<?xml version="1.0" encoding="iso-8859-1"?> - -<form> - <title>Validate</title> - <name>base_folder_workflow_action</name> - <action>folder_workflow_status_modify</action> - <enctype></enctype> - <method>POST</method> - <pt>form_view_dialog</pt> - - <groups> - <group> - <title>Default</title> - <fields> - - <field><id>my_comment</id> <type>TextAreaField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <external_validator></external_validator> - <extra></extra> - <height type="int">5</height> - <hidden type="int">0</hidden> - <max_length></max_length> - <max_linelength></max_linelength> - <max_lines></max_lines> - <required type="int">0</required> - <title>Commentaires</title> - <width type="int">40</width> - </values> - <tales> - <default>python:''</default> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_many_lines">You entered too many lines.</message> - <message name="line_too_long">A line was too long.</message> - <message name="too_long">You entered too many characters.</message> - </messages> - </field> - <field><id>my_start_date</id> <type>DateTimeField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <date_only type="int">1</date_only> - <date_separator>/</date_separator> - <default_now type="int">0</default_now> - <description></description> - <external_validator></external_validator> - <hidden type="int">0</hidden> - <input_order>dmy</input_order> - <input_style>text</input_style> - <required type="int">0</required> - <time_separator>:</time_separator> - <title>Date de facture</title> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="not_datetime">You did not enter a valid date and time.</message> - <message name="datetime_out_of_range">The date and time you entered were out of range.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>hidden</title> - <fields> - - <field><id>my_workflow_action</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">1</hidden> - <max_length></max_length> - <required type="int">0</required> - <title>x</title> - <truncate type="int">0</truncate> - </values> - <tales> - <default>python:here.REQUEST.workflow_action</default> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - <field><id>my_workflow_id</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">1</hidden> - <max_length></max_length> - <required type="int">0</required> - <title>x</title> - <truncate type="int">0</truncate> - </values> - <tales> - <default>python:here.REQUEST.workflow_id</default> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - </fields> - </group> - </groups> -</form> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_erp5/create_relation_dialog.form b/product/Coramy/skins/coramy_erp5/create_relation_dialog.form deleted file mode 100755 index a9833ab67d..0000000000 --- a/product/Coramy/skins/coramy_erp5/create_relation_dialog.form +++ /dev/null @@ -1,55 +0,0 @@ -<?xml version="1.0"?> - -<form> - <title>Create New Document(s)</title> - <row_length>4</row_length> - <name>create_relation_dialog</name> - <pt>form_create_relation_dialog</pt> - <action>base_create_relation</action> - <method>POST</method> - <enctype>multipart/form-data</enctype> - <encoding>UTF-8</encoding> - <stored_encoding>ISO-8859-1</stored_encoding> - <unicode_mode>false</unicode_mode> - <groups> - <group> - <title>Default</title> - <fields> - - <field><id>relation_values</id> <type>LinesField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default type="list">[]</default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <height type="int">5</height> - <hidden type="int">0</hidden> - <max_length></max_length> - <max_linelength></max_linelength> - <max_lines></max_lines> - <required type="int">1</required> - <title>relation_values</title> - <unicode type="int">0</unicode> - <view_separator><br /> -</view_separator> - <whitespace_preserve type="int">0</whitespace_preserve> - <width type="int">40</width> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_many_lines">You entered too many lines.</message> - <message name="line_too_long">A line was too long.</message> - <message name="too_long">You entered too many characters.</message> - </messages> - </field> - </fields> - </group> - </groups> -</form> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_erp5/document_view.form b/product/Coramy/skins/coramy_erp5/document_view.form deleted file mode 100755 index 5b375777af..0000000000 --- a/product/Coramy/skins/coramy_erp5/document_view.form +++ /dev/null @@ -1,54 +0,0 @@ -<?xml version="1.0"?> - -<form> - <title></title> - <row_length>4</row_length> - <name>document_view</name> - <pt>form_view</pt> - <action>base_edit</action> - <method>POST</method> - <enctype></enctype> - <encoding>UTF-8</encoding> - <stored_encoding>ISO-8859-1</stored_encoding> - <unicode_mode>false</unicode_mode> - <groups> - <group> - <title>Default</title> - <fields> - - <field><id>my_text_content</id> <type>TextAreaField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <height type="int">5</height> - <hidden type="int">0</hidden> - <max_length></max_length> - <max_linelength></max_linelength> - <max_lines></max_lines> - <required type="int">1</required> - <title>Text</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - <width type="int">40</width> - </values> - <tales> - <default>here/getTextContent</default> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_many_lines">You entered too many lines.</message> - <message name="line_too_long">A line was too long.</message> - <message name="too_long">You entered too many characters.</message> - </messages> - </field> - </fields> - </group> - </groups> -</form> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_erp5/domain_view.form b/product/Coramy/skins/coramy_erp5/domain_view.form deleted file mode 100755 index c1c79109ae..0000000000 --- a/product/Coramy/skins/coramy_erp5/domain_view.form +++ /dev/null @@ -1,112 +0,0 @@ -<?xml version="1.0"?> - -<form> - <title></title> - <row_length>4</row_length> - <name>domain_view</name> - <pt>form_view</pt> - <action></action> - <method>POST</method> - <enctype>None</enctype> - <encoding>UTF-8</encoding> - <stored_encoding>ISO-8859-1</stored_encoding> - <unicode_mode>false</unicode_mode> - <groups> - <group> - <title>Default</title> - <fields> - - <field><id>my_domain_parameter</id> <type>ListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <extra_item></extra_item> - <first_item type="int">0</first_item> - <hidden type="int">0</hidden> - <items type="list">[('=', '='), ('!=', '!='), ('LIKE', 'LIKE'), ('>', '>'), ('>=', '>='), ('<', '<'), ('<=', '<='), ('IN', 'IN')]</items> - <required type="int">1</required> - <size type="int">5</size> - <title>my_domain_parameter</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <items>here/portal_categories/getBaseCategoryIds</items> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - <field><id>my_domain_operator</id> <type>ListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <extra_item></extra_item> - <first_item type="int">0</first_item> - <hidden type="int">0</hidden> - <items type="list">[('=', '='), ('!=', '!='), ('LIKE', 'LIKE'), ('>', '>'), ('>=', '>='), ('<', '<'), ('<=', '<='), ('INTERSECTS', 'INTERSECTS'), ('SUPERSET_OF', 'SUPERSET_OF'), ('SUBSET_OF', 'SUBSET_OF')]</items> - <required type="int">1</required> - <size type="int">5</size> - <title>my_domain_operator</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - <field><id>my_domain_values</id> <type>LinesField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default type="list">[]</default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <height type="int">5</height> - <hidden type="int">0</hidden> - <max_length></max_length> - <max_linelength></max_linelength> - <max_lines></max_lines> - <required type="int">1</required> - <title>my_domain_values</title> - <unicode type="int">0</unicode> - <view_separator><br /> -</view_separator> - <whitespace_preserve type="int">0</whitespace_preserve> - <width type="int">40</width> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_many_lines">You entered too many lines.</message> - <message name="line_too_long">A line was too long.</message> - <message name="too_long">You entered too many characters.</message> - </messages> - </field> - </fields> - </group> - </groups> -</form> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_erp5/file_view.form b/product/Coramy/skins/coramy_erp5/file_view.form deleted file mode 100755 index 6a24f73749..0000000000 --- a/product/Coramy/skins/coramy_erp5/file_view.form +++ /dev/null @@ -1,144 +0,0 @@ -<?xml version="1.0"?> - -<form> - <title>Edit</title> - <row_length>4</row_length> - <name>file_edit</name> - <pt>form_view</pt> - <action>base_edit</action> - <method>POST</method> - <enctype></enctype> - <encoding>UTF-8</encoding> - <stored_encoding>ISO-8859-1</stored_encoding> - <unicode_mode>false</unicode_mode> - <groups> - <group> - <title>left</title> - <fields> - - <field><id>my_id</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <max_length></max_length> - <required type="int">1</required> - <title>my_id</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <default>here/getId</default> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - <field><id>my_title</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <max_length></max_length> - <required type="int">1</required> - <title>my_title</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>right</title> - <fields> - - <field><id>my_file</id> <type>FileField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <title>my_file</title> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>description</title> - <fields> - - <field><id>my_description</id> <type>TextAreaField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <height type="int">5</height> - <hidden type="int">0</hidden> - <max_length></max_length> - <max_linelength></max_linelength> - <max_lines></max_lines> - <required type="int">1</required> - <title>my_description</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - <width type="int">40</width> - </values> - <tales> - <default>here/getDescription</default> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_many_lines">You entered too many lines.</message> - <message name="line_too_long">A line was too long.</message> - <message name="too_long">You entered too many characters.</message> - </messages> - </field> - </fields> - </group> - </groups> -</form> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_erp5/folder_contents.form b/product/Coramy/skins/coramy_erp5/folder_contents.form deleted file mode 100755 index b9af2f3e6e..0000000000 --- a/product/Coramy/skins/coramy_erp5/folder_contents.form +++ /dev/null @@ -1,67 +0,0 @@ -<?xml version="1.0"?> - -<form> - <title>Folder Contents</title> - <row_length>4</row_length> - <name>folder_contents</name> - <pt>form_list</pt> - <action></action> - <method>POST</method> - <enctype></enctype> - <encoding>UTF-8</encoding> - <stored_encoding>ISO-8859-1</stored_encoding> - <unicode_mode>false</unicode_mode> - <groups> - <group> - <title>Default</title> - <fields> - - <field><id>listbox</id> <type>ListBox</type> - <values> - <all_columns type="list">[]</all_columns> - <all_editable_columns></all_editable_columns> - <alternate_name></alternate_name> - <columns type="list">[('id', 'id'), ('Title', 'Title'), ('Description', 'Description')]</columns> - <css_class></css_class> - <default></default> - <default_params type="list">[('id', "''"), ('Title', "''"), ('Description', "''")]</default_params> - <description></description> - <domain_root_list></domain_root_list> - <domain_tree></domain_tree> - <editable type="int">1</editable> - <editable_columns></editable_columns> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <global_attributes></global_attributes> - <height type="int">5</height> - <hidden type="int">0</hidden> - <lines type="int">30</lines> - <list_action>list</list_action> - <list_cookie>FOLDER_LIST</list_cookie> - <list_method type="method">searchFolder</list_method> - <meta_types type="list">[]</meta_types> - <portal_types type="list">[]</portal_types> - <report_root_list></report_root_list> - <report_tree></report_tree> - <reverse type="int">0</reverse> - <search type="int">1</search> - <search_columns></search_columns> - <select type="int">1</select> - <selection_name>folders</selection_name> - <sort type="list">[]</sort> - <sort_columns></sort_columns> - <stat_method></stat_method> - <title>Elements contenus</title> - <width type="int">40</width> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - </messages> - </field> - </fields> - </group> - </groups> -</form> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_erp5/folder_delete_view.form b/product/Coramy/skins/coramy_erp5/folder_delete_view.form deleted file mode 100755 index 8ec6172ded..0000000000 --- a/product/Coramy/skins/coramy_erp5/folder_delete_view.form +++ /dev/null @@ -1,67 +0,0 @@ -<?xml version="1.0"?> - -<form> - <title>Supprimer les objets</title> - <row_length>4</row_length> - <name>folder_delete_view</name> - <pt>form_folder_delete</pt> - <action>folder_delete</action> - <method>POST</method> - <enctype></enctype> - <encoding>UTF-8</encoding> - <stored_encoding>ISO-8859-1</stored_encoding> - <unicode_mode>false</unicode_mode> - <groups> - <group> - <title>Default</title> - <fields> - - <field><id>listbox</id> <type>ListBox</type> - <values> - <all_columns type="list">[('id', 'R\xe9f\xe9rence'), ('portal_type', 'Type'), ('Title', 'Titre'), ('relative_url', "Chemin d'acc\xe8s"), ('Description', 'Description')]</all_columns> - <all_editable_columns type="list">[]</all_editable_columns> - <alternate_name></alternate_name> - <columns type="list">[('id', 'R\xe9f\xe9rence'), ('portal_type', 'Type'), ('Title', 'Titre'), ('relative_url', "Chemin d'acc\xe8s"), ('Description', 'Description')]</columns> - <css_class></css_class> - <default></default> - <default_params type="list">[('id', "''"), ('relative_url', "''"), ('portal_type', "''"), ('Description', "''")]</default_params> - <description></description> - <domain_root_list type="list">[]</domain_root_list> - <domain_tree type="int">0</domain_tree> - <editable type="int">1</editable> - <editable_columns type="list">[]</editable_columns> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <global_attributes type="list">[]</global_attributes> - <height type="int">5</height> - <hidden type="int">0</hidden> - <lines type="int">30</lines> - <list_action>list</list_action> - <list_cookie>SEARCH_LIST</list_cookie> - <list_method type="method">portal_catalog</list_method> - <meta_types type="list">[]</meta_types> - <portal_types type="list">[]</portal_types> - <report_root_list type="list">[]</report_root_list> - <report_tree type="int">0</report_tree> - <reverse type="int">0</reverse> - <search type="int">0</search> - <search_columns></search_columns> - <select type="int">0</select> - <selection_name>folder_delete_selection</selection_name> - <sort type="list">[('relative_url', 'relative_url')]</sort> - <sort_columns></sort_columns> - <stat_method></stat_method> - <title>Résultats</title> - <width type="int">40</width> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - </messages> - </field> - </fields> - </group> - </groups> -</form> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_erp5/folder_sort_on.form b/product/Coramy/skins/coramy_erp5/folder_sort_on.form deleted file mode 100755 index 04d3c045b5..0000000000 --- a/product/Coramy/skins/coramy_erp5/folder_sort_on.form +++ /dev/null @@ -1,78 +0,0 @@ -<?xml version="1.0"?> - -<form> - <title>Define Sort Order</title> - <row_length>4</row_length> - <name>folder_sort_on</name> - <pt>form_sort</pt> - <action>base_sort_on</action> - <method>POST</method> - <enctype></enctype> - <encoding>UTF-8</encoding> - <stored_encoding>ISO-8859-1</stored_encoding> - <unicode_mode>false</unicode_mode> - <groups> - <group> - <title>Default</title> - <fields> - - <field><id>sort_on</id> <type>ListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <extra_item></extra_item> - <first_item type="int">0</first_item> - <hidden type="int">0</hidden> - <items type="list">[('None', 'None'), ('Title', 'Title'), ('Id', 'id'), ('Description', 'description')]</items> - <required type="int">0</required> - <size type="int">1</size> - <title>Sort Parameter</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - <field><id>sort_order</id> <type>ListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <extra_item></extra_item> - <first_item type="int">0</first_item> - <hidden type="int">0</hidden> - <items type="list">[('Ascending', 'ascending'), ('Descending', 'descending')]</items> - <required type="int">0</required> - <size type="int">1</size> - <title>sort_order</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - </fields> - </group> - </groups> -</form> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_erp5/folder_view2.form b/product/Coramy/skins/coramy_erp5/folder_view2.form deleted file mode 100755 index c1415fb955..0000000000 --- a/product/Coramy/skins/coramy_erp5/folder_view2.form +++ /dev/null @@ -1,67 +0,0 @@ -<?xml version="1.0"?> - -<form> - <title></title> - <row_length>4</row_length> - <name>organisation_list</name> - <pt>form_list</pt> - <action></action> - <method>POST</method> - <enctype></enctype> - <encoding>UTF-8</encoding> - <stored_encoding>ISO-8859-1</stored_encoding> - <unicode_mode>false</unicode_mode> - <groups> - <group> - <title>Default</title> - <fields> - - <field><id>contact_list</id> <type>ListBox</type> - <values> - <all_columns></all_columns> - <all_editable_columns></all_editable_columns> - <alternate_name></alternate_name> - <columns type="list">[('id', 'id'), ('Title', 'Title'), ('Description', 'Description')]</columns> - <css_class></css_class> - <default></default> - <default_params type="list">[('id', "''"), ('Title', "''"), ('Description', "''")]</default_params> - <description></description> - <domain_root_list></domain_root_list> - <domain_tree></domain_tree> - <editable type="int">1</editable> - <editable_columns></editable_columns> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <global_attributes></global_attributes> - <height type="int">5</height> - <hidden type="int">0</hidden> - <lines type="int">30</lines> - <list_action></list_action> - <list_cookie>ORGANISATION_LIST</list_cookie> - <list_method type="method">portal_catalog</list_method> - <meta_types type="list">[('ERP5 Telephone', 'ERP5 Telephone'), ('Document', 'Document'), ('Base18 Document', 'Base18 Document')]</meta_types> - <portal_types></portal_types> - <report_root_list></report_root_list> - <report_tree></report_tree> - <reverse type="int">0</reverse> - <search type="int">0</search> - <search_columns></search_columns> - <select></select> - <selection_name></selection_name> - <sort></sort> - <sort_columns></sort_columns> - <stat_method></stat_method> - <title>Contacts</title> - <width type="int">40</width> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - </messages> - </field> - </fields> - </group> - </groups> -</form> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_erp5/folder_workflow_status_modify.py b/product/Coramy/skins/coramy_erp5/folder_workflow_status_modify.py deleted file mode 100755 index 3cce15d2b3..0000000000 --- a/product/Coramy/skins/coramy_erp5/folder_workflow_status_modify.py +++ /dev/null @@ -1,78 +0,0 @@ -## Script (Python) "folder_workflow_status_modify" -##bind container=container -##bind context=context -##bind namespace= -##bind script=script -##bind subpath=traverse_subpath -##parameters=form_id,dialog_id,selection_name -##title= -## -from Products.Formulator.Errors import ValidationError, FormValidationError - -request=context.REQUEST -error_message = '' - -try: - # Validate the form - form = getattr(context,dialog_id) - form.validate_all_to_request(request) - kw = {} - for f in form.get_fields(): - k = f.id - k = k[3:] - v = getattr(request,k,None) - if v is not None: - kw[k] = v - selection_list = context.portal_selections.callSelectionFor(selection_name, context=context) - for selection_item in selection_list: - o = selection_item.getObject() - workflow_action = kw['workflow_action'] - action_list = o.portal_workflow.getActionsFor(o) - action_list = filter(lambda x:x.has_key('id'), action_list ) - action_id_list = map(lambda x:x['id'], action_list) - # If the user is not allowed to do this transition, it will not be in action_list - if workflow_action in action_id_list: - o.portal_workflow.doActionFor( - o, - workflow_action, - wf_id=kw['workflow_id'], - **kw) - - # We will check if there's an error_message - history_data = None - try: - history_data = o.portal_workflow.getInfoFor(ob=o, name='history') - except: - pass - redirect_url = None - if history_data is not None: - last_history_data = history_data[len(history_data)-1] - this_error = last_history_data.get('error_message') - if this_error != None and this_error != '': - error_message += this_error + "-" - -except FormValidationError, validation_errors: - # Pack errors into the request - field_errors = form.ErrorFields(validation_errors) - request.set('field_errors', field_errors) - return form(request) -except ValueError, value_error: - # Pack errors into the request - redirect_url = '%s/%s?%s%s' % ( context.absolute_url(), form_id - , 'portal_status_message=',value_error - ) - - context.REQUEST[ 'RESPONSE' ].redirect( redirect_url ) -else: - - if error_message != None and error_message != '': - redirect_url = '%s/%s?%s' % ( context.absolute_url(), form_id - , 'portal_status_message=%s' % error_message - ) - pass - if redirect_url is None: - redirect_url = '%s/%s?%s' % ( context.absolute_url(), form_id - , 'portal_status_message=Status+changed.' - ) - - context.REQUEST[ 'RESPONSE' ].redirect( redirect_url ) diff --git a/product/Coramy/skins/coramy_erp5/folder_workflow_status_modify_test.py b/product/Coramy/skins/coramy_erp5/folder_workflow_status_modify_test.py deleted file mode 100755 index 6d96c1f0d4..0000000000 --- a/product/Coramy/skins/coramy_erp5/folder_workflow_status_modify_test.py +++ /dev/null @@ -1,80 +0,0 @@ -## Script (Python) "folder_workflow_status_modify_test" -##bind container=container -##bind context=context -##bind namespace= -##bind script=script -##bind subpath=traverse_subpath -##parameters=form_id,dialog_id,selection_name -##title= -## -from Products.Formulator.Errors import ValidationError, FormValidationError - -request=context.REQUEST -error_message = '' - -return context.REQUEST - -try: - # Validate the form - form = getattr(context,dialog_id) - form.validate_all_to_request(request) - kw = {} - for f in form.get_fields(): - k = f.id - k = k[3:] - v = getattr(request,k,None) - if v is not None: - kw[k] = v - selection_list = context.portal_selections.callSelectionFor(selection_name, context=context) - for selection_item in selection_list: - o = selection_item.getObject() - workflow_action = kw['workflow_action'] - action_list = o.portal_workflow.getActionsFor(o) - action_list = filter(lambda x:x.has_key('id'), action_list ) - action_id_list = map(lambda x:x['id'], action_list) - # If the user is not allowed to do this transition, it will not be in action_list - if workflow_action in action_id_list: - o.portal_workflow.doActionFor( - o, - workflow_action, - wf_id=kw['workflow_id'], - **kw) - - # We will check if there's an error_message - history_data = None - try: - history_data = o.portal_workflow.getInfoFor(ob=o, name='history') - except: - pass - redirect_url = None - if history_data is not None: - last_history_data = history_data[len(history_data)-1] - this_error = last_history_data.get('error_message') - if this_error != None and this_error != '': - error_message += this_error + "-" - -except FormValidationError, validation_errors: - # Pack errors into the request - field_errors = form.ErrorFields(validation_errors) - request.set('field_errors', field_errors) - return form(request) -except ValueError, value_error: - # Pack errors into the request - redirect_url = '%s/%s?%s%s' % ( context.absolute_url(), form_id - , 'portal_status_message=',value_error - ) - - context.REQUEST[ 'RESPONSE' ].redirect( redirect_url ) -else: - - if error_message != None and error_message != '': - redirect_url = '%s/%s?%s' % ( context.absolute_url(), form_id - , 'portal_status_message=%s' % error_message - ) - pass - if redirect_url is None: - redirect_url = '%s/%s?%s' % ( context.absolute_url(), form_id - , 'portal_status_message=Status+changed.' - ) - - context.REQUEST[ 'RESPONSE' ].redirect( redirect_url ) diff --git a/product/Coramy/skins/coramy_erp5/form_DefaultRender.pt b/product/Coramy/skins/coramy_erp5/form_DefaultRender.pt deleted file mode 100755 index 4003568411..0000000000 --- a/product/Coramy/skins/coramy_erp5/form_DefaultRender.pt +++ /dev/null @@ -1,19 +0,0 @@ -<html> - <head> - <title tal:content="template/title">The title</title> - </head> - <body> - - <h2><span tal:replace="here/title_or_id">content title or id</span> - <span tal:condition="template/title" - tal:replace="template/title">optional template id</span></h2> - - <span tal:replace="structure here/render" /> - - <p>Script: <span tal:replace="python: template" /></p> - <p>Here: <span tal:replace="python: here" /></p> - <p>Context: <span tal:replace="python: request" /></p> - - This is Page Template <em tal:content="template/id">template id</em>. - </body> -</html> diff --git a/product/Coramy/skins/coramy_erp5/getIntId.py b/product/Coramy/skins/coramy_erp5/getIntId.py deleted file mode 100755 index be41ca6682..0000000000 --- a/product/Coramy/skins/coramy_erp5/getIntId.py +++ /dev/null @@ -1,15 +0,0 @@ -## Script (Python) "getIntId" -##bind container=container -##bind context=context -##bind namespace= -##bind script=script -##bind subpath=traverse_subpath -##parameters= -##title= -## -try: - result = int(context.getId()) -except: - result = 0 - -return result diff --git a/product/Coramy/skins/coramy_erp5/identify_category.py b/product/Coramy/skins/coramy_erp5/identify_category.py deleted file mode 100755 index 31c9cc2ca0..0000000000 --- a/product/Coramy/skins/coramy_erp5/identify_category.py +++ /dev/null @@ -1,19 +0,0 @@ -## Script (Python) "identify_category" -##bind container=container -##bind context=context -##bind namespace= -##bind script=script -##bind subpath=traverse_subpath -##parameters=base_category='', category='' -##title= -## -# returns the uid of the category object -# according to the given base_category string and category string - -category_items = category.split("/") -category_object = context.portal_categories[base_category] - -for item in category_items : - category_object=category_object[item] - -return category_object.uid diff --git a/product/Coramy/skins/coramy_erp5/image_large_view.form b/product/Coramy/skins/coramy_erp5/image_large_view.form deleted file mode 100755 index 106ef86f05..0000000000 --- a/product/Coramy/skins/coramy_erp5/image_large_view.form +++ /dev/null @@ -1,60 +0,0 @@ -<?xml version="1.0"?> - -<form> - <title>Image</title> - <row_length>4</row_length> - <name>large_image_view_view</name> - <pt>form_view</pt> - <action>base_edit</action> - <method>POST</method> - <enctype></enctype> - <encoding>UTF-8</encoding> - <stored_encoding>ISO-8859-1</stored_encoding> - <unicode_mode>false</unicode_mode> - <groups> - <group> - <title>left</title> - <fields> - - </fields> - </group> - <group> - <title>right</title> - <fields> - - <field><id>image</id> <type>ImageField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <image_display>medium</image_display> - <image_format>jpg</image_format> - <image_resolution type="int">200</image_resolution> - <max_length></max_length> - <required type="int">0</required> - <title> </title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <default>here/absolute_url</default> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - </fields> - </group> - </groups> -</form> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_erp5/image_view.form b/product/Coramy/skins/coramy_erp5/image_view.form deleted file mode 100755 index eff6a59bcf..0000000000 --- a/product/Coramy/skins/coramy_erp5/image_view.form +++ /dev/null @@ -1,177 +0,0 @@ -<?xml version="1.0"?> - -<form> - <title>Edit</title> - <row_length>4</row_length> - <name>file_edit</name> - <pt>form_view</pt> - <action>base_edit</action> - <method>POST</method> - <enctype></enctype> - <encoding>UTF-8</encoding> - <stored_encoding>ISO-8859-1</stored_encoding> - <unicode_mode>false</unicode_mode> - <groups> - <group> - <title>left</title> - <fields> - - <field><id>my_id</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <max_length></max_length> - <required type="int">1</required> - <title>my_id</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <default>here/getId</default> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - <field><id>my_title</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <max_length></max_length> - <required type="int">1</required> - <title>Title</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <default>here/getTitle</default> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - <field><id>image</id> <type>ImageField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <image_display>thumbnail</image_display> - <image_format>jpeg</image_format> - <image_resolution type="int">75</image_resolution> - <max_length></max_length> - <required type="int">0</required> - <title>image</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <default>here/absolute_url</default> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>right</title> - <fields> - - <field><id>my_file</id> <type>FileField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <title>my_file</title> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>description</title> - <fields> - - <field><id>my_description</id> <type>TextAreaField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <height type="int">5</height> - <hidden type="int">0</hidden> - <max_length></max_length> - <max_linelength></max_linelength> - <max_lines></max_lines> - <required type="int">1</required> - <title>my_description</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - <width type="int">40</width> - </values> - <tales> - <default>here/getDescription</default> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_many_lines">You entered too many lines.</message> - <message name="line_too_long">A line was too long.</message> - <message name="too_long">You entered too many characters.</message> - </messages> - </field> - </fields> - </group> - </groups> -</form> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_erp5/new_ean13_code.py b/product/Coramy/skins/coramy_erp5/new_ean13_code.py deleted file mode 100755 index 34f05efa60..0000000000 --- a/product/Coramy/skins/coramy_erp5/new_ean13_code.py +++ /dev/null @@ -1,41 +0,0 @@ -## Script (Python) "new_ean13_code" -##bind container=container -##bind context=context -##bind namespace= -##bind script=script -##bind subpath=traverse_subpath -##parameters=country='', CNUF='', CIP=0 -##title= -## -# this script returns a complete EAN13 Code including key -# the parameters are -# country (string 1 car): country code -# CNUF (string 5 to 8 car): Code National Unifié Fabricant -# CIP (int): Code Interface Produit - -# ean_code = first_part (country+CNUF) + second_part (formatted CIF) + key - -ean_code = '' -fisrt_part ='' -second_part = '' -key = '' - -if len(country)==1 and len(CNUF)>=5 and len(CNUF)<=8 : - first_part = country + CNUF - second_part = '0'*(12-len(first_part)-len(str(CIP)))+str(CIP) - ean_code = first_part + second_part - -# compute the key - num_key = 0 - for i in range(6) : - num_key += int(ean_code[i*2]) - num_key += int(ean_code[i*2-1])*3 - - if divmod(num_key,10)[1] == 0 : - key = '0' - else : - key = str((divmod(num_key,10)[0]+1)*10-num_key) - -ean_code += key - -return ean_code diff --git a/product/Coramy/skins/coramy_erp5/object_action_list.py b/product/Coramy/skins/coramy_erp5/object_action_list.py deleted file mode 100755 index f3588708af..0000000000 --- a/product/Coramy/skins/coramy_erp5/object_action_list.py +++ /dev/null @@ -1,30 +0,0 @@ -## Script (Python) "object_action_list" -##bind container=container -##bind context=context -##bind namespace= -##bind script=script -##bind subpath=traverse_subpath -##parameters=selection_name='', max_nb=0 -##title= -## -# Retourne une liste d'objet correspondant à un selection -# si appelé sur un ERP5 Folder -# Retourne une liste à un seul objet (context) -# si appelé sur autre chose -# utile pour effectuer des actions (impression,...) -# que l'on souhaite appeler depuis une liste ou depuis un formulaire détaillé - -object_list = [] -request = context.REQUEST -if context.getMetaType() == 'ERP5 Folder' : - selection = context.portal_selections.getSelectionFor(selection_name,REQUEST=context.REQUEST) - object_list = map((lambda x:x.getObject()),selection(context=context)) -else : - object_list.append(context) - -# limitation du nombre d'objets en sortie -if max_nb <> 0 : - if len(object_list) > max_nb : - object_list = modele_list[0:max_nb] - -return object_list diff --git a/product/Coramy/skins/coramy_erp5/search_related.zsql b/product/Coramy/skins/coramy_erp5/search_related.zsql deleted file mode 100755 index 4754389291..0000000000 --- a/product/Coramy/skins/coramy_erp5/search_related.zsql +++ /dev/null @@ -1,17 +0,0 @@ -<dtml-comment> -title: -connection_id:MySQL -max_rows:1000 -max_cache:100 -cache_time:0 -class_name:ZSQLBrain -class_file:zsqlbrain.py -</dtml-comment> -<params>category_uid</params> -SELECT DISTINCT - catalog.uid, catalog.path -FROM - catalog, category -WHERE - catalog.uid = category.uid -AND category.category_uid = <dtml-sqlvar category_uid type="int"> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_erp5/sort_object_list.py b/product/Coramy/skins/coramy_erp5/sort_object_list.py deleted file mode 100755 index 9e0dad089a..0000000000 --- a/product/Coramy/skins/coramy_erp5/sort_object_list.py +++ /dev/null @@ -1,27 +0,0 @@ -## Script (Python) "sort_object_list" -##bind container=container -##bind context=context -##bind namespace= -##bind script=script -##bind subpath=traverse_subpath -##parameters=unordered_list=[], sort_order=() -##title= -## -# This script sorts the given list of objects - -def generic_sort(a,b): - result = 0 - for k,v in sort_order: - a_value = a.getProperty(k) - b_value = b.getProperty(k) - result = cmp(a_value,b_value) - if result: - if v in ('DESC', 'desc', 'descending', 'reverse'): - return -result - else: - return result - return result - -#unordered_list = map(lambda x: x.getObject(), unordered_list) -unordered_list.sort(generic_sort) -return unordered_list diff --git a/product/Coramy/skins/coramy_list_method/Delivery_zSearchResource.zsql b/product/Coramy/skins/coramy_list_method/Delivery_zSearchResource.zsql deleted file mode 100755 index e83d41e550..0000000000 --- a/product/Coramy/skins/coramy_list_method/Delivery_zSearchResource.zsql +++ /dev/null @@ -1,65 +0,0 @@ -<dtml-comment> -title: -connection_id:erp5_sql_connection -max_rows:1000 -max_cache:100 -cache_time:0 -class_name:ZSQLBrain -class_file:zsqlbrain.py -</dtml-comment> -<params>resource_id_list="" -variante_id_list="" -sort_on -portal_type</params> -SELECT DISTINCT catalog.id, catalog.uid, catalog.relative_url, catalog.path, catalog.Description, catalog.simulation_state, catalog.default_destination_title -FROM catalog, catalog AS line -<dtml-if expr="_.len(resource_id_list)>0"> -, catalog AS resource -, category AS cat1 -</dtml-if> -<dtml-if expr="_.len(variante_id_list)>0"> -, catalog as variante -, category AS cat2 -</dtml-if> - -WHERE line.parent_uid = catalog.uid - -<dtml-if expr="_.len(portal_type)>0"> -AND ( catalog.portal_type = "<dtml-var expr="portal_type[0]">" -<dtml-in prefix="loop" expr="_.range(_.len(portal_type)-1)"> -OR catalog.portal_type = "<dtml-var expr="portal_type[loop_item+1]">" -</dtml-in> -) -</dtml-if> - -<dtml-if expr="_.len(resource_id_list)>0"> -AND ( resource.id LIKE "<dtml-var expr="resource_id_list[0]">" -<dtml-in prefix="loop" expr="_.range(_.len(resource_id_list)-1)"> -OR resource.id LIKE "<dtml-var expr="resource_id_list[loop_item+1]">" -</dtml-in> -) -AND cat1.uid=line.uid -AND cat1.category_uid=resource.uid -AND cat1.base_category_uid=<dtml-var "portal_categories.resource.uid"> -</dtml-if> - -<dtml-if expr="_.len(variante_id_list)>0"> -AND ( variante.id LIKE "<dtml-var expr="variante_id_list[0]">" -<dtml-in prefix="loop" expr="_.range(_.len(variante_id_list)-1)"> -OR variante.id LIKE "<dtml-var expr="variante_id_list[loop_item+1]">" -</dtml-in> -) -AND ( -( cat2.uid=line.uid -AND cat2.category_uid=variante.uid -AND cat2.base_category_uid=<dtml-var "portal_categories.coloris.uid">) -OR -( cat2.uid=line.uid -AND cat2.category_uid=variante.uid -AND cat2.base_category_uid=<dtml-var "portal_categories.variante.uid">) -) -</dtml-if> - -<dtml-if sort_on> -ORDER BY <dtml-var sort_on> -</dtml-if> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_list_method/Organisation_zDefaultSearch.zsql b/product/Coramy/skins/coramy_list_method/Organisation_zDefaultSearch.zsql deleted file mode 100755 index 319625fa85..0000000000 --- a/product/Coramy/skins/coramy_list_method/Organisation_zDefaultSearch.zsql +++ /dev/null @@ -1,36 +0,0 @@ -<dtml-comment> -title: -connection_id:erp5_sql_connection -max_rows:1000 -max_cache:100 -cache_time:0 -class_name:ZSQLBrain -class_file:zsqlbrain.py -</dtml-comment> -<params>organisation_id_list -group_list</params> -SELECT DISTINCT organisation.id, organisation.relative_url, organisation.path, organisation.title -FROM catalog AS organisation -<dtml-if group_list> -, category AS cat1 -</dtml-if> - -WHERE organisation.portal_type = "Organisation" - -<dtml-if organisation_id_list> -AND ( organisation.id = "<dtml-var expr="organisation_id_list[0]">" -<dtml-in prefix="loop" expr="_.range(_.len(organisation_id_list)-1)"> -OR organisation.id = "<dtml-var expr="organisation_id_list[loop_item+1]">" -</dtml-in> -) -</dtml-if> - -<dtml-if group_list> -AND cat1.uid=organisation.uid -AND ( cat1.category_uid=<dtml-var expr="identify_category(base_category='group',category=group_list[0])"> -<dtml-in prefix="loop" expr="_.range(_.len(group_list)-1)"> -OR cat1.category_uid=<dtml-var expr="identify_category(base_category='cgroup',category=group_list[loop_item+1])"> -</dtml-in> -) -AND cat1.base_category_uid=<dtml-var "portal_categories.group.uid"> -</dtml-if> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_list_method/PieceTisse_zTest3.zsql b/product/Coramy/skins/coramy_list_method/PieceTisse_zTest3.zsql deleted file mode 100755 index a54089cd85..0000000000 --- a/product/Coramy/skins/coramy_list_method/PieceTisse_zTest3.zsql +++ /dev/null @@ -1,27 +0,0 @@ -<dtml-comment> -title: -connection_id:MySQL -max_rows:1000 -max_cache:100 -cache_time:0 -class_name: -class_file: -</dtml-comment> -<params></params> -SELECT - item.id, stock.uid, stock.quantity, category.uid as cat_uid -FROM - catalog AS item - -LEFT JOIN category -ON (category.category_uid=item.uid -AND category.base_category_uid = <dtml-var "portal_categories.aggregate.getUid()">) - -LEFT JOIN stock -ON (stock.uid = category.uid -AND stock.node_uid = <dtml-var "portal_categories.site.Stock_MP.Gravelines.getUid()"> -AND stock.quantity < 0 -) - -WHERE item.portal_type = "Piece Tissu" -AND item.id = "41347" \ No newline at end of file diff --git a/product/Coramy/skins/coramy_list_method/PieceTissu_searchConsumedList.zsql b/product/Coramy/skins/coramy_list_method/PieceTissu_searchConsumedList.zsql deleted file mode 100755 index 6ea2687418..0000000000 --- a/product/Coramy/skins/coramy_list_method/PieceTissu_searchConsumedList.zsql +++ /dev/null @@ -1,29 +0,0 @@ -<dtml-comment> -title: -connection_id:erp5_sql_connection -max_rows:100000 -max_cache:10 -cache_time:60 -class_name: -class_file: -</dtml-comment> -<params></params> -SELECT DISTINCT - distinct item.uid -FROM - catalog AS item - -LEFT JOIN category -ON (category.category_uid=item.uid -AND category.base_category_uid = <dtml-var "portal_categories.aggregate.getUid()">) - -LEFT JOIN stock -ON (stock.uid = category.uid) - -LEFT JOIN movement -ON (movement.uid = category.uid) - -WHERE item.portal_type = "Piece Tissu" -AND stock.node_uid = <dtml-var "portal_categories.site.Stock_MP.Gravelines.getUid()"> -AND stock.quantity < 0 -AND movement.inventory IS NULL \ No newline at end of file diff --git a/product/Coramy/skins/coramy_list_method/PieceTissu_searchRemainingList.zsql b/product/Coramy/skins/coramy_list_method/PieceTissu_searchRemainingList.zsql deleted file mode 100755 index a69187f37f..0000000000 --- a/product/Coramy/skins/coramy_list_method/PieceTissu_searchRemainingList.zsql +++ /dev/null @@ -1,18 +0,0 @@ -<dtml-comment> -title: -connection_id:erp5_sql_connection -max_rows:500 -max_cache:100 -cache_time:60 -class_name:ZSQLBrain -class_file:zsqlbrain.py -</dtml-comment> -<params></params> -SELECT - * -FROM - catalog -WHERE -portal_type = "Piece Tissu" -<dtml-in PieceTissu_searchConsumedList>AND uid <> <dtml-sqlvar uid type="int"> -</dtml-in> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_list_method/PieceTissu_test5.zsql b/product/Coramy/skins/coramy_list_method/PieceTissu_test5.zsql deleted file mode 100755 index d3c24f60b9..0000000000 --- a/product/Coramy/skins/coramy_list_method/PieceTissu_test5.zsql +++ /dev/null @@ -1,33 +0,0 @@ -<dtml-comment> -title: -connection_id:MySQL -max_rows:1000 -max_cache:100 -cache_time:0 -class_name: -class_file: -</dtml-comment> -<params></params> -SELECT DISTINCT - count(distinct item.uid) -FROM - catalog AS item - -LEFT JOIN category -ON (category.category_uid=item.uid -AND category.base_category_uid = <dtml-var "portal_categories.aggregate.getUid()">) - -LEFT JOIN movement -ON (movement.uid = category.uid) - -LEFT JOIN catalog AS delivery -ON (delivery.uid = movement.delivery_uid) - -LEFT JOIN stock -ON (stock.uid = category.uid -AND ((stock.node_uid = <dtml-var "portal_categories.site.Stock_MP.Gravelines.getUid()"> -AND stock.quantity < 0) -OR (delivery.portal_type <> "Production Packing List" AND delivery.portal_type <> "Movement MP" ))) - -WHERE item.portal_type = "Piece Tissu" -AND stock.uid IS NULL \ No newline at end of file diff --git a/product/Coramy/skins/coramy_list_method/PieceTissu_zGetAvailableItemList.zsql b/product/Coramy/skins/coramy_list_method/PieceTissu_zGetAvailableItemList.zsql deleted file mode 100755 index ecf7af6c2f..0000000000 --- a/product/Coramy/skins/coramy_list_method/PieceTissu_zGetAvailableItemList.zsql +++ /dev/null @@ -1,91 +0,0 @@ -<dtml-comment> -title: -connection_id:erp5_sql_connection -max_rows:1000 -max_cache:100 -cache_time:0 -class_name:ZSQLBrain -class_file:zsqlbrain.py -</dtml-comment> -<params>sort_on -resource_id_list="" -variante_id_list="" -id -default_source_title -default_source_reference</params> -SELECT DISTINCT - item.uid, item.id, item.path, item.Description, item.simulation_state, item.default_destination_title -FROM - catalog AS item - -LEFT JOIN category -ON (category.category_uid=item.uid -AND category.base_category_uid = <dtml-var "portal_categories.aggregate.getUid()">) - -LEFT JOIN stock -ON (stock.uid = category.uid) - -LEFT JOIN movement -ON (movement.uid = category.uid) - -LEFT JOIN movement AS next_movement -ON (next_movement.resource_uid = movement.resource_uid -AND next_movement.variation_text = movement.variation_text -AND next_movement.start_date > movement.start_date -AND not (next_movement.inventory is NULL)) - -<dtml-if expr="_.len(resource_id_list)>0"> -, catalog AS resource -, category AS cat1 -</dtml-if> -<dtml-if expr="_.len(variante_id_list)>0"> -, catalog as variante -, category AS cat2 -</dtml-if> - -WHERE - item.portal_type = "Piece Tissu" -AND ( stock.uid is NULL -OR ( stock.node_uid = <dtml-var "portal_categories.site.Stock_MP.Gravelines.getUid()"> -AND ( stock.quantity >= 0 -OR (stock.quantity < 0 -AND not (movement.inventory is NULL) ) ) ) ) -<dtml-in PieceTissu_searchConsumedList>AND item.uid <> <dtml-sqlvar uid type="int"> -</dtml-in> -AND next_movement.uid is NULL - -<dtml-if expr="_.len(resource_id_list)>0"> -AND ( resource.id LIKE "<dtml-var expr="resource_id_list[0]">" -<dtml-in prefix="loop" expr="_.range(_.len(resource_id_list)-1)"> -OR resource.id LIKE "<dtml-var expr="resource_id_list[loop_item+1]">" -</dtml-in> -) -AND cat1.uid=item.uid -AND cat1.category_uid=resource.uid -AND cat1.base_category_uid=<dtml-var "portal_categories.resource.uid"> -</dtml-if> - -<dtml-if expr="_.len(variante_id_list)>0"> -AND ( variante.id LIKE "<dtml-var expr="variante_id_list[0]">" -<dtml-in prefix="loop" expr="_.range(_.len(variante_id_list)-1)"> -OR variante.id LIKE "<dtml-var expr="variante_id_list[loop_item+1]">" -</dtml-in> -) -AND cat2.uid=item.uid -AND cat2.category_uid=variante.uid -AND cat2.base_category_uid=<dtml-var "portal_categories.coloris.uid"> -</dtml-if> - -<dtml-if id> -AND item.id LIKE <dtml-sqlvar id type="string"> -</dtml-if> -<dtml-if default_source_title> -AND item.default_source_title LIKE <dtml-sqlvar default_source_title type="string"> -</dtml-if> -<dtml-if default_source_reference> -AND item.default_source_reference LIKE <dtml-sqlvar default_source_reference type="string"> -</dtml-if> - -<dtml-if sort_on>ORDER BY - <dtml-var sort_on> -</dtml-if> diff --git a/product/Coramy/skins/coramy_list_method/PieceTissu_zGetAvailableItemList_OLD.zsql b/product/Coramy/skins/coramy_list_method/PieceTissu_zGetAvailableItemList_OLD.zsql deleted file mode 100755 index 4f4215e7c9..0000000000 --- a/product/Coramy/skins/coramy_list_method/PieceTissu_zGetAvailableItemList_OLD.zsql +++ /dev/null @@ -1,78 +0,0 @@ -<dtml-comment> -title: -connection_id:MySQL -max_rows:1000 -max_cache:100 -cache_time:0 -class_name:ZSQLBrain -class_file:zsqlbrain.py -</dtml-comment> -<params>sort_on -resource_id_list="" -variante_id_list="" -id -default_source_title -default_source_reference</params> -SELECT DISTINCT - item.uid, item.id, item.path, item.Description, item.simulation_state, item.default_destination_title -FROM - catalog AS item -<dtml-if expr="_.len(resource_id_list)>0"> -, catalog AS resource -, category AS cat1 -</dtml-if> -<dtml-if expr="_.len(variante_id_list)>0"> -, catalog as variante -, category AS cat2 -</dtml-if> - -LEFT JOIN category -ON (category.category_uid=item.uid -AND category.base_category_uid = <dtml-var "portal_categories.aggregate.getUid()">) - -LEFT JOIN stock -ON (stock.uid = category.uid) - -WHERE - item.portal_type = "Piece Tissu" - -AND stock.node_uid = <dtml-var "portal_categories.site.Stock_MP.Gravelines.getUid()"> -AND stock.quantity > 0 -<dtml-in PieceTissu_searchConsumedList>AND item.uid <> <dtml-sqlvar uid type="int"> -</dtml-in> - -<dtml-if expr="_.len(resource_id_list)>0"> -AND ( resource.id LIKE "<dtml-var expr="resource_id_list[0]">" -<dtml-in prefix="loop" expr="_.range(_.len(resource_id_list)-1)"> -OR resource.id LIKE "<dtml-var expr="resource_id_list[loop_item+1]">" -</dtml-in> -) -AND cat1.uid=item.uid -AND cat1.category_uid=resource.uid -AND cat1.base_category_uid=<dtml-var "portal_categories.resource.uid"> -</dtml-if> - -<dtml-if expr="_.len(variante_id_list)>0"> -AND ( variante.id LIKE "<dtml-var expr="variante_id_list[0]">" -<dtml-in prefix="loop" expr="_.range(_.len(variante_id_list)-1)"> -OR variante.id LIKE "<dtml-var expr="variante_id_list[loop_item+1]">" -</dtml-in> -) -AND cat2.uid=item.uid -AND cat2.category_uid=variante.uid -AND cat2.base_category_uid=<dtml-var "portal_categories.coloris.uid"> -</dtml-if> - -<dtml-if id> -AND item.id LIKE <dtml-sqlvar id type="string"> -</dtml-if> -<dtml-if default_source_title> -AND item.default_source_title LIKE <dtml-sqlvar default_source_title type="string"> -</dtml-if> -<dtml-if default_source_reference> -AND item.default_source_reference LIKE <dtml-sqlvar default_source_reference type="string"> -</dtml-if> - -<dtml-if sort_on>ORDER BY - <dtml-var sort_on> -</dtml-if> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_list_method/PieceTissu_zTest4.zsql b/product/Coramy/skins/coramy_list_method/PieceTissu_zTest4.zsql deleted file mode 100755 index 309a91719b..0000000000 --- a/product/Coramy/skins/coramy_list_method/PieceTissu_zTest4.zsql +++ /dev/null @@ -1,28 +0,0 @@ -<dtml-comment> -title: -connection_id:MySQL -max_rows:1000 -max_cache:100 -cache_time:0 -class_name: -class_file: -</dtml-comment> -<params></params> -SELECT DISTINCT - count(distinct item.uid) -FROM - catalog AS item - -LEFT JOIN category -ON (category.category_uid=item.uid -AND category.base_category_uid = <dtml-var "portal_categories.aggregate.getUid()">) - -LEFT JOIN stock -ON (stock.uid = category.uid -AND stock.node_uid = <dtml-var "portal_categories.site.Stock_MP.Gravelines.getUid()"> -AND stock.quantity < 0) - - -WHERE item.portal_type = "Piece Tissu" -AND category.uid IS NULL -AND item.id = "41347" \ No newline at end of file diff --git a/product/Coramy/skins/coramy_list_method/PieceTissu_zTestAvailableItemList.zsql b/product/Coramy/skins/coramy_list_method/PieceTissu_zTestAvailableItemList.zsql deleted file mode 100755 index 23029ad57f..0000000000 --- a/product/Coramy/skins/coramy_list_method/PieceTissu_zTestAvailableItemList.zsql +++ /dev/null @@ -1,52 +0,0 @@ -<dtml-comment> -title: -connection_id:MySQL -max_rows:1000 -max_cache:100 -cache_time:0 -class_name:ZSQLBrain -class_file:zsqlbrain.py -</dtml-comment> -<params></params> -SELECT DISTINCT - count(distinct item.uid) -FROM - catalog AS item - -LEFT JOIN category -ON (category.category_uid=item.uid -AND category.base_category_uid = <dtml-var "portal_categories.aggregate.getUid()">) - -LEFT JOIN stock -ON (stock.uid = category.uid -AND stock.node_uid = <dtml-var "portal_categories.site.Stock_MP.Gravelines.getUid()"> -AND stock.quantity < 0) - -LEFT JOIN stock AS stock_catalog -ON (stock.uid = stock_catalog.uid) - -LEFT JOIN category AS other_category -ON (other_category.category_uid=item.uid -AND other_category.base_category_uid = <dtml-var "portal_categories.aggregate.getUid()"> -AND other_category.uid <> category.uid) - -LEFT JOIN stock AS other_stock -ON (other_stock.uid = other_category.uid -AND NOT (other_stock.node_uid = <dtml-var "portal_categories.site.Stock_MP.Gravelines.getUid()"> -AND other_stock.quantity < 0)) - -LEFT JOIN category AS other_category2 -ON (other_category2.category_uid=item.uid -AND other_category2.base_category_uid = <dtml-var "portal_categories.aggregate.getUid()"> -AND other_category2.uid <> category.uid -AND other_category2.uid <> other_category.uid) - -LEFT JOIN stock AS other_stock2 -ON (other_stock2.uid = other_category.uid -AND NOT (other_stock2.node_uid = <dtml-var "portal_categories.site.Stock_MP.Gravelines.getUid()"> -AND other_stock2.quantity < 0)) - -WHERE item.portal_type = "Piece Tissu" -AND stock_catalog.uid IS NULL -AND other_stock.uid IS NULL -AND other_stock2.uid IS NULL diff --git a/product/Coramy/skins/coramy_list_method/PieceTissu_zTestAvailableItemList2.zsql b/product/Coramy/skins/coramy_list_method/PieceTissu_zTestAvailableItemList2.zsql deleted file mode 100755 index 0ac8c1722b..0000000000 --- a/product/Coramy/skins/coramy_list_method/PieceTissu_zTestAvailableItemList2.zsql +++ /dev/null @@ -1,49 +0,0 @@ -<dtml-comment> -title: -connection_id:MySQL -max_rows:1000 -max_cache:100 -cache_time:0 -class_name:ZSQLBrain -class_file:zsqlbrain.py -</dtml-comment> -<params></params> -SELECT DISTINCT - count(distinct item.uid) -FROM - catalog AS item - -LEFT JOIN category -ON (category.category_uid=item.uid -AND category.base_category_uid = <dtml-var "portal_categories.aggregate.getUid()">) - -LEFT JOIN stock -ON (stock.uid = category.uid -AND stock.node_uid = <dtml-var "portal_categories.site.Stock_MP.Gravelines.getUid()"> -AND stock.quantity < 0) - -LEFT JOIN category AS other_category -ON (other_category.category_uid=item.uid -AND other_category.base_category_uid = <dtml-var "portal_categories.aggregate.getUid()"> -AND category.uid <> other_category.uid) - -LEFT JOIN stock AS other_stock -ON (other_stock.uid = other_category.uid -AND other_stock.node_uid = <dtml-var "portal_categories.site.Stock_MP.Gravelines.getUid()"> -AND other_stock.quantity < 0) - -LEFT JOIN category AS other_category2 -ON (other_category.category_uid=item.uid -AND other_category.base_category_uid = <dtml-var "portal_categories.aggregate.getUid()"> -AND category.uid <> other_category2.uid -AND other_category.uid <> other_category2.uid) - -LEFT JOIN stock AS other_stock2 -ON (other_stock2.uid = other_category2.uid -AND other_stock2.node_uid = <dtml-var "portal_categories.site.Stock_MP.Gravelines.getUid()"> -AND other_stock2.quantity < 0) - -WHERE item.portal_type = "Piece Tissu" -AND stock.uid IS NULL -AND other_stock.uid IS NULL -AND other_stock2.uid IS NULL diff --git a/product/Coramy/skins/coramy_list_method/PurchaseOrder_zGetOrderableResourceList.zsql b/product/Coramy/skins/coramy_list_method/PurchaseOrder_zGetOrderableResourceList.zsql deleted file mode 100755 index 71732f8a34..0000000000 --- a/product/Coramy/skins/coramy_list_method/PurchaseOrder_zGetOrderableResourceList.zsql +++ /dev/null @@ -1,56 +0,0 @@ -<dtml-comment> -title: -connection_id:MySQL -max_rows:1000 -max_cache:100 -cache_time:0 -class_name:DeliveryListBrain -class_file:InventoryBrain.py -</dtml-comment> -<params>simulation_state:list -target_start_date -target_stop_date -query -node_title -resource_title -variation_text -sort_on -resource_tree</params> -SELECT - SUM(movement.target_quantity) as target_quantity, - movement.variation_text AS variation_text, - node.title AS node_title, - resource.title AS resource_title, - resource.uid AS resource_uid, - resource.relative_url AS resource_relative_url, - movement.target_start_date AS target_start_date, - movement.target_stop_date AS target_stop_date - <dtml-if query>, <dtml-sqlvar query type="string"> AS query </dtml-if> -FROM - catalog, movement, catalog AS resource, catalog AS node, catalog AS delivery <dtml-if query>, category </dtml-if> -WHERE - catalog.uid = movement.uid -AND movement.has_cell_content = 0 -AND node.uid = movement.source_uid -AND movement.delivery_uid = delivery.uid -AND movement.target_quantity <> 0.0 -AND delivery.portal_type = "Purchase Order" -AND movement.resource_uid = resource.uid -<dtml-if simulation_state> AND (<dtml-in simulation_state> catalog.simulation_state = <dtml-sqlvar sequence-item type="string"><dtml-if sequence-end><dtml-else> OR </dtml-if></dtml-in>) -</dtml-if><dtml-if target_start_date> AND movement.target_start_date < <dtml-sqlvar target_start_date type="string"> -</dtml-if><dtml-if target_stop_date> AND movement.target_stop_date < <dtml-sqlvar target_stop_date type="string"> -</dtml-if><dtml-if query> AND <dtml-if resource_tree>resource.uid = category.uid <dtml-else>movement.destination_uid = category.uid </dtml-if> -AND <dtml-var query> -</dtml-if><dtml-if node_title>AND node.title LIKE '%<dtml-var node_title>%' -</dtml-if><dtml-if resource_title>AND resource.title LIKE '%<dtml-var resource_title>%' -</dtml-if><dtml-if variation_text>AND variation_text LIKE '%<dtml-var variation_text>%' -</dtml-if> -GROUP BY - movement.resource_uid, movement.variation_text -<dtml-if sort_on> -ORDER BY - <dtml-var sort_on> -<dtml-else> -ORDER BY - movement.target_stop_date -</dtml-if> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_list_method/Resource_zGetAggregateList.zsql b/product/Coramy/skins/coramy_list_method/Resource_zGetAggregateList.zsql deleted file mode 100755 index 63b05745f8..0000000000 --- a/product/Coramy/skins/coramy_list_method/Resource_zGetAggregateList.zsql +++ /dev/null @@ -1,29 +0,0 @@ -<dtml-comment> -title: -connection_id:erp5_sql_connection -max_rows:750 -max_cache:100 -cache_time:0 -class_name:ZSQLBrain -class_file:zsqlbrain.py -</dtml-comment> -<params>explanation_uid -node_uid -section_uid -variation_text -resource_uid</params> -SELECT - catalog.* -FROM - catalog, movement, category, stock -WHERE - movement.uid = category.uid -AND category.category_uid = catalog.uid -AND category.base_category_uid = <dtml-var "portal_categories.aggregate.getUid()"> -AND stock.uid = movement.uid -AND movement.is_accountable = 1 -AND movement.resource_uid = <dtml-sqlvar resource_uid type="int"> -AND movement.delivery_uid = <dtml-sqlvar explanation_uid type="int"> -AND movement.variation_text = <dtml-sqlvar variation_text type="string"> -AND stock.node_uid = <dtml-sqlvar node_uid type="int"> -AND stock.section_uid = <dtml-sqlvar section_uid type="int"> diff --git a/product/Coramy/skins/coramy_list_method/SalesOrder_zSearchByClientGroup.zsql b/product/Coramy/skins/coramy_list_method/SalesOrder_zSearchByClientGroup.zsql deleted file mode 100755 index ca06d4b5cd..0000000000 --- a/product/Coramy/skins/coramy_list_method/SalesOrder_zSearchByClientGroup.zsql +++ /dev/null @@ -1,51 +0,0 @@ -<dtml-comment> -title: -connection_id:MySQL -max_rows:1000 -max_cache:100 -cache_time:0 -class_name:ZSQLBrain -class_file:zsqlbrain.py -</dtml-comment> -<params>state_list="" -group_list="" -sort_on</params> -SELECT DISTINCT catalog.id, catalog.uid, catalog.relative_url, catalog.path, catalog.Description, catalog.simulation_state, catalog.default_destination_title -FROM catalog -<dtml-if expr="_.len(group_list)>0 and not ('' in group_list)"> -, catalog AS organigramme -, category AS cat1 -</dtml-if> -<dtml-if expr="_.len(group_list)>0 and '' in group_list"> -LEFT JOIN category AS cat2 ON (cat2.uid=catalog.uid -AND cat2.base_category_uid=<dtml-var "portal_categories.group.uid">) -</dtml-if> - -WHERE catalog.portal_type = "Sales Order" - -<dtml-if expr="_.len(group_list)>0 and not ('' in group_list)"> -AND ( organigramme.title LIKE "<dtml-var expr="group_list[0]">" -<dtml-in prefix="loop" expr="_.range(_.len(group_list)-1)"> -OR organigramme.title LIKE "<dtml-var expr="group_list[loop_item+1]">" -</dtml-in> -) -AND cat1.uid=catalog.uid -AND cat1.category_uid=organigramme.uid -AND cat1.base_category_uid=<dtml-var "portal_categories.group.uid"> -</dtml-if> - -<dtml-if expr="_.len(state_list)>0"> -AND ( catalog.simulation_state = "<dtml-var expr="state_list[0]">" -<dtml-in prefix="loop" expr="_.range(_.len(state_list)-1)"> -OR catalog.simulation_state = "<dtml-var expr="state_list[loop_item+1]">" -</dtml-in> -) -</dtml-if> - -<dtml-if expr="_.len(group_list)>0 and '' in group_list"> -AND cat2.uid IS NULL -</dtml-if> - -<dtml-if sort_on> -ORDER BY <dtml-var sort_on> -</dtml-if> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_list_method/SalesPackingList_zSearchByClientGroup.zsql b/product/Coramy/skins/coramy_list_method/SalesPackingList_zSearchByClientGroup.zsql deleted file mode 100755 index ea9e7c6f83..0000000000 --- a/product/Coramy/skins/coramy_list_method/SalesPackingList_zSearchByClientGroup.zsql +++ /dev/null @@ -1,55 +0,0 @@ -<dtml-comment> -title: -connection_id:MySQL -max_rows:1000 -max_cache:100 -cache_time:0 -class_name:ZSQLBrain -class_file:zsqlbrain.py -</dtml-comment> -<params>state_list="" -group_list="" -sort_on</params> -SELECT DISTINCT catalog.id, catalog.uid, catalog.relative_url, catalog.path, catalog.Description, catalog.simulation_state, catalog.default_destination_title -FROM catalog, catalog AS catalog_order, category AS category_order -<dtml-if expr="_.len(group_list)>0 and not ('' in group_list)"> -, catalog AS organigramme -, category AS cat1 -</dtml-if> - -<dtml-if expr="_.len(group_list)>0 and '' in group_list"> -LEFT JOIN category AS cat2 ON (cat2.uid=order_catalog.uid -AND cat2.base_category_uid=<dtml-var "portal_categories.group.uid">) -</dtml-if> - -WHERE catalog.portal_type = "Sales Packing List" -AND category_order.uid = catalog.uid -AND category_order.base_category_uid=<dtml-var "portal_categories.causality.uid"> -AND category_order.category_uid = catalog_order.uid -AND catalog_order.portal_type = "Sales Order" -<dtml-if expr="_.len(group_list)>0 and not ('' in group_list)"> -AND ( organigramme.title LIKE "<dtml-var expr="group_list[0]">" -<dtml-in prefix="loop" expr="_.range(_.len(group_list)-1)"> -OR organigramme.title LIKE "<dtml-var expr="group_list[loop_item+1]">" -</dtml-in> -) -AND cat1.uid=catalog_order.uid -AND cat1.category_uid=organigramme.uid -AND cat1.base_category_uid=<dtml-var "portal_categories.group.uid"> -</dtml-if> - -<dtml-if expr="_.len(state_list)>0"> -AND ( catalog.simulation_state = "<dtml-var expr="state_list[0]">" -<dtml-in prefix="loop" expr="_.range(_.len(state_list)-1)"> -OR catalog.simulation_state = "<dtml-var expr="state_list[loop_item+1]">" -</dtml-in> -) -</dtml-if> - -<dtml-if expr="_.len(group_list)>0 and '' in group_list"> -AND cat2.uid IS NULL -</dtml-if> - -<dtml-if sort_on> -ORDER BY <dtml-var sort_on> -</dtml-if> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_manufacturing/PackingOrder_inventoryView.form b/product/Coramy/skins/coramy_manufacturing/PackingOrder_inventoryView.form deleted file mode 100755 index 691bd55fa3..0000000000 --- a/product/Coramy/skins/coramy_manufacturing/PackingOrder_inventoryView.form +++ /dev/null @@ -1,128 +0,0 @@ -<?xml version="1.0" encoding="iso-8859-1"?> - -<form> - <title>Productions</title> - <name>ProductionOrder_inventoryView</name> - <action></action> - <enctype></enctype> - <method>POST</method> - <pt>form_view</pt> - - <groups> - <group> - <title>left</title> - <fields> - - <field><id>my_id</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <max_length></max_length> - <required type="int">1</required> - <title>Id</title> - <truncate type="int">0</truncate> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>right</title> - <fields> - - </fields> - </group> - <group> - <title>center</title> - <fields> - - </fields> - </group> - <group> - <title>bottom</title> - <fields> - - <field><id>listbox</id> <type>ListBox</type> - <values> - <all_columns type="list">[]</all_columns> - <all_editable_columns type="list">[]</all_editable_columns> - <alternate_name></alternate_name> - <columns type="list">[('node_title', 'Stock'), ('section_title', 'Propri\xe9taire'), ('resource_relative_url', 'Composant'), ('variation_text', 'Variante'), ('quantity', 'Qt\xe9'), ('getCurrentInventory', 'Stock'), ('getAvailableInventory', 'Dispo'), ('getFutureInventory', 'Futur'), ('getQuantityUnit', 'Unit\xe9')]</columns> - <css_class></css_class> - <default></default> - <default_params type="list">[]</default_params> - <description></description> - <domain_root_list type="list">[('portal_categories/site/Stock_MP', 'Stocks MP'), ('portal_categories/site', 'Sites')]</domain_root_list> - <domain_tree type="int">0</domain_tree> - <editable_columns type="list">[]</editable_columns> - <external_validator></external_validator> - <global_attributes type="list">[]</global_attributes> - <hidden type="int">0</hidden> - <lines type="int">20</lines> - <list_action>Resource_inventoryView</list_action> - <list_method type="method">ProductionOrder_getAggregatedMaterialProductionList</list_method> - <meta_types type="list">[]</meta_types> - <portal_types type="list">[]</portal_types> - <report_root_list type="list">[]</report_root_list> - <report_tree type="int">0</report_tree> - <search type="int">0</search> - <search_columns type="list">[]</search_columns> - <select type="int">0</select> - <selection_name>resource_current_inventory</selection_name> - <sort type="list">[]</sort> - <stat_method></stat_method> - <title>Productions</title> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - </messages> - </field> - <field><id>current_inventory_chart</id> <type>ZGDChart</type> - <values> - <alternate_name></alternate_name> - <bg_transparent type="int">1</bg_transparent> - <chart_style>line_2d</chart_style> - <chart_title>Prévisions</chart_title> - <css_class></css_class> - <data_method>getInventoryHistoryChart</data_method> - <default></default> - <default_params type="list">[]</default_params> - <description></description> - <external_validator></external_validator> - <hidden type="int">0</hidden> - <selection_name>resource_current_inventory_chart</selection_name> - <title>Prévisions</title> - <x_title></x_title> - <y_title></y_title> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>hidden</title> - <fields> - - </fields> - </group> - </groups> -</form> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_manufacturing/PackingOrder_list.form b/product/Coramy/skins/coramy_manufacturing/PackingOrder_list.form deleted file mode 100755 index d9134652d5..0000000000 --- a/product/Coramy/skins/coramy_manufacturing/PackingOrder_list.form +++ /dev/null @@ -1,57 +0,0 @@ -<?xml version="1.0" encoding="iso-8859-1"?> - -<form> - <title>Liste des ordres de conditionnement</title> - <name>PackingOrder_list</name> - <action></action> - <enctype>multipart/form-data</enctype> - <method>POST</method> - <pt>form_list</pt> - - <groups> - <group> - <title>Default</title> - <fields> - - <field><id>listbox</id> <type>ListBox</type> - <values> - <all_columns type="list">[('id', 'OC'), ('Description', 'Description'), ('default_destination_section_title', 'Soci\xe9t\xe9'), ('default_source_title', 'Produit par'), ('default_destination_title', 'Livrer \xe0'), ('target_stop_date', 'Date livraison'), ('simulation_state', 'Etat'), ('discussion_state', 'Discussion')]</all_columns> - <all_editable_columns type="list">[]</all_editable_columns> - <alternate_name></alternate_name> - <columns type="list">[('id', 'OC'), ('Description', 'Description'), ('default_destination_section_title', 'Soci\xe9t\xe9'), ('default_source_title', 'Produit par'), ('default_destination_title', 'Livrer \xe0'), ('target_stop_date', 'Date livraison'), ('simulation_state', 'Etat'), ('discussion_state', 'Discussion')]</columns> - <css_class></css_class> - <default></default> - <default_params type="list">[('id', "''")]</default_params> - <description></description> - <domain_root_list type="list">[]</domain_root_list> - <domain_tree type="int">0</domain_tree> - <editable_columns type="list">[]</editable_columns> - <external_validator></external_validator> - <global_attributes type="list">[]</global_attributes> - <hidden type="int">0</hidden> - <lines type="int">30</lines> - <list_action>list</list_action> - <list_method type="method">portal_catalog</list_method> - <meta_types type="list">[]</meta_types> - <portal_types type="list">[('Packing Order', 'Packing Order')]</portal_types> - <report_root_list type="list">[]</report_root_list> - <report_tree type="int">0</report_tree> - <search type="int">1</search> - <search_columns type="list">[]</search_columns> - <select type="int">1</select> - <selection_name>packing_order_selection</selection_name> - <sort type="list">[('id', 'id')]</sort> - <stat_method></stat_method> - <title>Ordres de conditionnement</title> - </values> - <tales> - <list_method>python:here.getPortalObject().portal_skins.local_list_method[here.REQUEST.list_method_id]</list_method> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - </messages> - </field> - </fields> - </group> - </groups> -</form> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_manufacturing/PackingOrder_view.form b/product/Coramy/skins/coramy_manufacturing/PackingOrder_view.form deleted file mode 100755 index 8f61c64a5d..0000000000 --- a/product/Coramy/skins/coramy_manufacturing/PackingOrder_view.form +++ /dev/null @@ -1,741 +0,0 @@ -<?xml version="1.0" encoding="iso-8859-1"?> - -<form> - <title>Ordre de conditionnement</title> - <name>PackingOrder_view</name> - <action>base_edit</action> - <enctype></enctype> - <method>POST</method> - <pt>form_view</pt> - - <groups> - <group> - <title>left</title> - <fields> - - <field><id>my_id</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">10</display_width> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <max_length></max_length> - <required type="int">1</required> - <title>Ordre de fabrication</title> - <truncate type="int">0</truncate> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - <field><id>my_destination_section</id> <type>ListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <external_validator></external_validator> - <extra></extra> - <first_item type="int">0</first_item> - <hidden type="int">0</hidden> - <items type="list">[]</items> - <required type="int">0</required> - <size type="int">1</size> - <title>Société</title> - </values> - <tales> - <items>python:here.portal_categories.group.Coramy.getCategoryChildIdItemList(base=1,display_none_category=1)</items> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - <field><id>my_description</id> <type>TextAreaField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <external_validator></external_validator> - <extra></extra> - <height type="int">3</height> - <hidden type="int">0</hidden> - <max_length></max_length> - <max_linelength></max_linelength> - <max_lines></max_lines> - <required type="int">0</required> - <title>Description</title> - <width type="int">40</width> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_many_lines">You entered too many lines.</message> - <message name="line_too_long">A line was too long.</message> - <message name="too_long">You entered too many characters.</message> - </messages> - </field> - <field><id>my_date_emission</id> <type>DateTimeField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <date_only type="int">1</date_only> - <date_separator>/</date_separator> - <default_now type="int">0</default_now> - <description></description> - <external_validator></external_validator> - <hidden type="int">0</hidden> - <input_order>dmy</input_order> - <input_style>text</input_style> - <required type="int">0</required> - <time_separator>:</time_separator> - <title>OC émis le</title> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="not_datetime">You did not enter a valid date and time.</message> - <message name="datetime_out_of_range">The date and time you entered were out of range.</message> - </messages> - </field> - <field><id>my_commande_origine</id> <type>ListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <external_validator></external_validator> - <extra></extra> - <first_item type="int">0</first_item> - <hidden type="int">0</hidden> - <items type="list">[]</items> - <required type="int">0</required> - <size type="int">1</size> - <title>Support de l'OC</title> - </values> - <tales> - <items>here/portal_categories/commande_origine/getFormItemList</items> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - <field><id>my_destination_administration_person_title</id> <type>RelationStringField</type> - <values> - <alternate_name></alternate_name> - <base_category>destination_administration</base_category> - <catalog_index>Title</catalog_index> - <css_class></css_class> - <default></default> - <default_module>person</default_module> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <jump_method>base_jump_relation</jump_method> - <max_length></max_length> - <portal_type type="list">[('Person', 'Person')]</portal_type> - <required type="int">0</required> - <title>Gestionaire</title> - <truncate type="int">0</truncate> - <update_method>base_update_relation</update_method> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - <field><id>my_price_currency</id> <type>ListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <external_validator></external_validator> - <extra></extra> - <first_item type="int">0</first_item> - <hidden type="int">0</hidden> - <items type="list">[]</items> - <required type="int">0</required> - <size type="int">1</size> - <title>Devise</title> - </values> - <tales> - <items>python:[('','')]+map(lambda x:(x.id,'devise/%s' %x.id),here.devise.objectValues())</items> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - <field><id>my_incoterm</id> <type>ListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <external_validator></external_validator> - <extra></extra> - <first_item type="int">0</first_item> - <hidden type="int">0</hidden> - <items type="list">[]</items> - <required type="int">0</required> - <size type="int">1</size> - <title>Incoterm</title> - </values> - <tales> - <items>python:here.portal_categories.incoterm.getCategoryChildItemList(display_id = 'getTitle', display_none_category=1)</items> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - <field><id>my_delivery_mode</id> <type>ListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <external_validator></external_validator> - <extra></extra> - <first_item type="int">0</first_item> - <hidden type="int">0</hidden> - <items type="list">[]</items> - <required type="int">0</required> - <size type="int">1</size> - <title>Mode de livraison</title> - </values> - <tales> - <items>here/portal_categories/delivery_mode/getFormItemList</items> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>right</title> - <fields> - - <field><id>my_source_title</id> <type>RelationStringField</type> - <values> - <alternate_name></alternate_name> - <base_category>source</base_category> - <catalog_index>Title</catalog_index> - <css_class></css_class> - <default></default> - <default_module>organisation</default_module> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <jump_method>base_jump_relation</jump_method> - <max_length></max_length> - <portal_type type="list">[('Organisation', 'Organisation'), ('Category', 'Category')]</portal_type> - <required type="int">0</required> - <title>Produit par</title> - <truncate type="int">0</truncate> - <update_method>base_update_relation</update_method> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - <field><id>my_source_administration_title</id> <type>RelationStringField</type> - <values> - <alternate_name></alternate_name> - <base_category>source_administration</base_category> - <catalog_index>Title</catalog_index> - <css_class></css_class> - <default></default> - <default_module>person</default_module> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <jump_method>base_jump_relation</jump_method> - <max_length></max_length> - <portal_type type="list">[('Person', 'Person'), ('Organisation', 'Organisation'), ('Category', 'Category')]</portal_type> - <required type="int">0</required> - <title>Contact</title> - <truncate type="int">0</truncate> - <update_method>base_update_relation</update_method> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - <field><id>my_destination_title</id> <type>RelationStringField</type> - <values> - <alternate_name></alternate_name> - <base_category>destination</base_category> - <catalog_index>Title</catalog_index> - <css_class></css_class> - <default></default> - <default_module>organisation</default_module> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <jump_method>base_jump_relation</jump_method> - <max_length></max_length> - <portal_type type="list">[('Organisation', 'Organisation'), ('Category', 'Category')]</portal_type> - <required type="int">0</required> - <title>Livrer à</title> - <truncate type="int">0</truncate> - <update_method>base_update_relation</update_method> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - <field><id>my_target_start_date</id> <type>DateTimeField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <date_only type="int">1</date_only> - <date_separator>/</date_separator> - <default_now type="int">0</default_now> - <description></description> - <external_validator></external_validator> - <hidden type="int">0</hidden> - <input_order>dmy</input_order> - <input_style>text</input_style> - <required type="int">0</required> - <time_separator>:</time_separator> - <title>Date de coupe demandée</title> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="not_datetime">You did not enter a valid date and time.</message> - <message name="datetime_out_of_range">The date and time you entered were out of range.</message> - </messages> - </field> - <field><id>my_target_stop_date</id> <type>DateTimeField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <date_only type="int">1</date_only> - <date_separator>/</date_separator> - <default_now type="int">0</default_now> - <description></description> - <external_validator></external_validator> - <hidden type="int">0</hidden> - <input_order>dmy</input_order> - <input_style>text</input_style> - <required type="int">0</required> - <time_separator>:</time_separator> - <title>Date de livraison demandée</title> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="not_datetime">You did not enter a valid date and time.</message> - <message name="datetime_out_of_range">The date and time you entered were out of range.</message> - </messages> - </field> - <field><id>spacer</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">1</hidden> - <max_length></max_length> - <required type="int">0</required> - <title> </title> - <truncate type="int">0</truncate> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - <field><id>my_start_date</id> <type>DateTimeField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <date_only type="int">1</date_only> - <date_separator>/</date_separator> - <default_now type="int">0</default_now> - <description></description> - <external_validator></external_validator> - <hidden type="int">0</hidden> - <input_order>dmy</input_order> - <input_style>text</input_style> - <required type="int">0</required> - <time_separator>:</time_separator> - <title>Date de coupe confirmée</title> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="not_datetime">You did not enter a valid date and time.</message> - <message name="datetime_out_of_range">The date and time you entered were out of range.</message> - </messages> - </field> - <field><id>my_stop_date</id> <type>DateTimeField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <date_only type="int">1</date_only> - <date_separator>/</date_separator> - <default_now type="int">0</default_now> - <description></description> - <external_validator></external_validator> - <hidden type="int">0</hidden> - <input_order>dmy</input_order> - <input_style>text</input_style> - <required type="int">0</required> - <time_separator>:</time_separator> - <title>Date de livraison confirmée</title> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="not_datetime">You did not enter a valid date and time.</message> - <message name="datetime_out_of_range">The date and time you entered were out of range.</message> - </messages> - </field> - <field><id>order_state</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <max_length></max_length> - <required type="int">0</required> - <title>Etat</title> - <truncate type="int">0</truncate> - </values> - <tales> - <default>python:here.portal_workflow.getInfoFor(here, 'simulation_state')</default> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - <field><id>discussion_state</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <max_length></max_length> - <required type="int">0</required> - <title>Discussion</title> - <truncate type="int">0</truncate> - </values> - <tales> - <default>python:here.portal_workflow.getInfoFor(here, 'discussion_state')</default> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - <field><id>my_trade_condition_title</id> <type>RelationStringField</type> - <values> - <alternate_name></alternate_name> - <base_category>specialise</base_category> - <catalog_index>Title</catalog_index> - <css_class></css_class> - <default></default> - <default_module>condition_achat</default_module> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <jump_method>base_jump_relation</jump_method> - <max_length></max_length> - <portal_type type="list">[('Condition Achat', 'Condition Achat')]</portal_type> - <required type="int">0</required> - <title>Condition d'achat</title> - <truncate type="int">0</truncate> - <update_method>base_update_relation</update_method> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>center</title> - <fields> - - <field><id>my_comment</id> <type>TextAreaField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <external_validator></external_validator> - <extra></extra> - <height type="int">3</height> - <hidden type="int">0</hidden> - <max_length></max_length> - <max_linelength></max_linelength> - <max_lines></max_lines> - <required type="int">0</required> - <title>Commentaires</title> - <width type="int">80</width> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_many_lines">You entered too many lines.</message> - <message name="line_too_long">A line was too long.</message> - <message name="too_long">You entered too many characters.</message> - </messages> - </field> - <field><id>my_total_quantity</id> <type>FloatField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">10</display_width> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">1</hidden> - <required type="int">0</required> - <title>Quantité totale</title> - </values> - <tales> - <title>python:'Quantité totale : %.2f' % here.getTargetTotalQuantity()</title> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="not_float">You did not enter a floating point number.</message> - </messages> - </field> - <field><id>my_total_duration</id> <type>FloatField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">10</display_width> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">1</hidden> - <required type="int">0</required> - <title>Durée totale</title> - </values> - <tales> - <title>python:'Durée totale (h) : %.2f' % here.ProductionOrder_getTotalDuration()</title> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="not_float">You did not enter a floating point number.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>bottom</title> - <fields> - - <field><id>listbox</id> <type>ListBox</type> - <values> - <all_columns type="list">[('id', 'Ligne n\xb0'), ('resource_title', 'Produit'), ('ProductionOrderLine_getResourceState', 'Etat produit'), ('ProductionOrderLine_getResourceAccord', 'Accord technique'), ('ProductionOrderLine_getResourceInfosClient', 'Infos client'), ('total_quantity', 'Quantit\xe9 totale'), ('quantity_unit', 'Unit\xe9'), ('total_price', 'Montant total'), ('target_stop_date', 'Date livraison')]</all_columns> - <all_editable_columns type="list">[('quantity_unit', 'Unit')]</all_editable_columns> - <alternate_name></alternate_name> - <columns type="list">[('id', 'Ligne n\xb0'), ('resource_title', 'Produit'), ('ProductionOrderLine_getResourceState', 'Etat produit'), ('ProductionOrderLine_getResourceAccord', 'Accord technique'), ('ProductionOrderLine_getResourceInfosClient', 'Infos client'), ('total_quantity', 'Quantit\xe9 totale'), ('quantity_unit', 'Unit\xe9'), ('total_price', 'Montant total'), ('target_stop_date', 'Date livraison')]</columns> - <css_class></css_class> - <default></default> - <default_params type="list">[]</default_params> - <description></description> - <domain_root_list type="list">[]</domain_root_list> - <domain_tree type="int">0</domain_tree> - <editable_columns type="list">[('quantity_unit', 'Unit')]</editable_columns> - <external_validator></external_validator> - <global_attributes type="list">[]</global_attributes> - <hidden type="int">0</hidden> - <lines type="int">10</lines> - <list_action>list</list_action> - <list_method type="method">searchFolder</list_method> - <meta_types type="list">[]</meta_types> - <portal_types type="list">[('Packing Order Line', 'Packing Order Line')]</portal_types> - <report_root_list type="list">[]</report_root_list> - <report_tree type="int">0</report_tree> - <search type="int">0</search> - <search_columns type="list">[]</search_columns> - <select type="int">0</select> - <selection_name>purchase_order_line_selection</selection_name> - <sort type="list">[('id', 'id')]</sort> - <stat_method></stat_method> - <title>Lignes d'OC</title> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>hidden</title> - <fields> - - <field><id>listbox_quantity</id> <type>FloatField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">10</display_width> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <required type="int">0</required> - <title>Quantité</title> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="not_float">You did not enter a floating point number.</message> - </messages> - </field> - <field><id>listbox_quantity_unit</id> <type>ListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <external_validator></external_validator> - <extra></extra> - <first_item type="int">0</first_item> - <hidden type="int">0</hidden> - <items type="list">[]</items> - <required type="int">0</required> - <size type="int">1</size> - <title>Unité</title> - </values> - <tales> - <items>here/portal_categories/quantity_unit/getFormItemList</items> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - <field><id>listbox_price</id> <type>FloatField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">10</display_width> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <required type="int">0</required> - <title>Prix d'achat</title> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="not_float">You did not enter a floating point number.</message> - </messages> - </field> - </fields> - </group> - </groups> -</form> diff --git a/product/Coramy/skins/coramy_manufacturing/ProductionOrderLine_getResourceAccord.py b/product/Coramy/skins/coramy_manufacturing/ProductionOrderLine_getResourceAccord.py deleted file mode 100755 index 6d6cb03c12..0000000000 --- a/product/Coramy/skins/coramy_manufacturing/ProductionOrderLine_getResourceAccord.py +++ /dev/null @@ -1,21 +0,0 @@ -## Script (Python) "ProductionOrderLine_getResourceAccord" -##bind container=container -##bind context=context -##bind namespace= -##bind script=script -##bind subpath=traverse_subpath -##parameters= -##title= -## -try : - resource = context.getResourceValue() -except : - resource = None - -if resource is not None : - if context.portal_workflow.getInfoFor(resource, 'modele_state_accord_technique') == 'n' : - return 'Non' - else : - return 'Oui' -else : - return '' diff --git a/product/Coramy/skins/coramy_manufacturing/ProductionOrderLine_getResourceInfosClient.py b/product/Coramy/skins/coramy_manufacturing/ProductionOrderLine_getResourceInfosClient.py deleted file mode 100755 index 0c8813b6b5..0000000000 --- a/product/Coramy/skins/coramy_manufacturing/ProductionOrderLine_getResourceInfosClient.py +++ /dev/null @@ -1,21 +0,0 @@ -## Script (Python) "ProductionOrderLine_getResourceInfosClient" -##bind container=container -##bind context=context -##bind namespace= -##bind script=script -##bind subpath=traverse_subpath -##parameters= -##title= -## -try : - resource = context.getResourceValue() -except : - resource = None - -if resource is not None : - if context.portal_workflow.getInfoFor(resource, 'modele_state_infos_client') == 'n' : - return 'Non' - else : - return 'Oui' -else : - return '' diff --git a/product/Coramy/skins/coramy_manufacturing/ProductionOrderLine_getResourceState.py b/product/Coramy/skins/coramy_manufacturing/ProductionOrderLine_getResourceState.py deleted file mode 100755 index 49413ecf86..0000000000 --- a/product/Coramy/skins/coramy_manufacturing/ProductionOrderLine_getResourceState.py +++ /dev/null @@ -1,18 +0,0 @@ -## Script (Python) "ProductionOrderLine_getResourceState" -##bind container=container -##bind context=context -##bind namespace= -##bind script=script -##bind subpath=traverse_subpath -##parameters= -##title= -## -try : - resource = context.getResourceValue() -except : - resource = None - -if resource is not None : - return context.portal_workflow.getInfoFor(resource, 'modele_state') -else : - return '' diff --git a/product/Coramy/skins/coramy_manufacturing/ProductionOrder_aggregatedImmaterialConsumptionView.form b/product/Coramy/skins/coramy_manufacturing/ProductionOrder_aggregatedImmaterialConsumptionView.form deleted file mode 100755 index 6fa3548535..0000000000 --- a/product/Coramy/skins/coramy_manufacturing/ProductionOrder_aggregatedImmaterialConsumptionView.form +++ /dev/null @@ -1,140 +0,0 @@ -<?xml version="1.0"?> - -<form> - <title>Opérations</title> - <row_length>4</row_length> - <name>ProductionOrder_aggregatedImmaterialConsumptionView</name> - <pt>form_view</pt> - <action></action> - <method>POST</method> - <enctype></enctype> - <encoding>UTF-8</encoding> - <stored_encoding>ISO-8859-1</stored_encoding> - <unicode_mode>false</unicode_mode> - <groups> - <group> - <title>left</title> - <fields> - - <field><id>my_id</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <max_length></max_length> - <required type="int">1</required> - <title>Id</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>right</title> - <fields> - - </fields> - </group> - <group> - <title>center</title> - <fields> - - </fields> - </group> - <group> - <title>bottom</title> - <fields> - - <field><id>current_inventory_list_box</id> <type>ListBox</type> - <values> - <all_columns type="list">[]</all_columns> - <all_editable_columns type="list">[]</all_editable_columns> - <alternate_name></alternate_name> - <columns type="list">[('resource_relative_url', 'Op\xe9ration'), ('variation_text', 'Variante'), ('quantity', 'Conso'), ('getCurrentInventory', 'Stock'), ('getAvailableInventory', 'Dispo'), ('inventory', 'Futur'), ('getQuantityUnit', 'Unit\xe9')]</columns> - <css_class></css_class> - <default></default> - <default_params type="list">[]</default_params> - <description></description> - <domain_root_list type="list">[]</domain_root_list> - <domain_tree type="int">0</domain_tree> - <editable type="int">1</editable> - <editable_columns type="list">[]</editable_columns> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <global_attributes type="list">[]</global_attributes> - <hidden type="int">0</hidden> - <lines type="int">20</lines> - <list_action>ProductionOrder_aggregatedMaterialConsumptionView</list_action> - <list_method type="method">ProductionOrder_getAggregatedImmaterialConsumptionList</list_method> - <meta_types type="list">[]</meta_types> - <portal_types type="list">[]</portal_types> - <report_root_list type="list">[]</report_root_list> - <report_tree type="int">0</report_tree> - <search type="int">0</search> - <search_columns></search_columns> - <select type="int">0</select> - <selection_name>production_order_current_inventory_selection</selection_name> - <sort type="list">[]</sort> - <sort_columns></sort_columns> - <stat_method></stat_method> - <title>Opérations</title> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>hidden</title> - <fields> - - <field><id>current_inventory_chart</id> <type>ZGDChart</type> - <values> - <alternate_name></alternate_name> - <bg_transparent type="int">1</bg_transparent> - <chart_style>line_2d</chart_style> - <chart_title>Prévisions</chart_title> - <css_class></css_class> - <data_method>getInventoryHistoryChart</data_method> - <default></default> - <default_params type="list">[]</default_params> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <hidden type="int">0</hidden> - <selection_name>resource_current_inventory_chart</selection_name> - <title>Prévisions</title> - <x_title></x_title> - <y_title></y_title> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - </messages> - </field> - </fields> - </group> - </groups> -</form> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_manufacturing/ProductionOrder_aggregatedMaterialConsumptionView.form b/product/Coramy/skins/coramy_manufacturing/ProductionOrder_aggregatedMaterialConsumptionView.form deleted file mode 100755 index 8574834b84..0000000000 --- a/product/Coramy/skins/coramy_manufacturing/ProductionOrder_aggregatedMaterialConsumptionView.form +++ /dev/null @@ -1,140 +0,0 @@ -<?xml version="1.0"?> - -<form> - <title>Consommations</title> - <row_length>4</row_length> - <name>ProductionOrder_aggregatedMaterialConsumptionView</name> - <pt>form_view</pt> - <action></action> - <method>POST</method> - <enctype></enctype> - <encoding>UTF-8</encoding> - <stored_encoding>ISO-8859-1</stored_encoding> - <unicode_mode>false</unicode_mode> - <groups> - <group> - <title>left</title> - <fields> - - <field><id>my_id</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <max_length></max_length> - <required type="int">1</required> - <title>Id</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>right</title> - <fields> - - </fields> - </group> - <group> - <title>center</title> - <fields> - - </fields> - </group> - <group> - <title>bottom</title> - <fields> - - <field><id>current_inventory_list_box</id> <type>ListBox</type> - <values> - <all_columns type="list">[]</all_columns> - <all_editable_columns type="list">[]</all_editable_columns> - <alternate_name></alternate_name> - <columns type="list">[('resource_relative_url', 'Composant'), ('variation_text', 'Variante'), ('quantity', 'Conso'), ('getAvailableInventory', 'Dispo'), ('getCurrentInventory', 'Stock'), ('getInventoryAtDate', 'Pr\xe9vu'), ('getFutureInventory', 'Futur'), ('getQuantityUnit', 'Unit\xe9')]</columns> - <css_class></css_class> - <default></default> - <default_params type="list">[]</default_params> - <description></description> - <domain_root_list type="list">[('portal_categories/site/Stock_MP', 'Stocks MP'), ('portal_categories/site', 'Sites')]</domain_root_list> - <domain_tree type="int">1</domain_tree> - <editable type="int">1</editable> - <editable_columns type="list">[]</editable_columns> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <global_attributes type="list">[]</global_attributes> - <hidden type="int">0</hidden> - <lines type="int">30</lines> - <list_action>ProductionOrder_aggregatedMaterialConsumptionView</list_action> - <list_method type="method">ProductionOrder_getAggregatedMaterialConsumptionList</list_method> - <meta_types type="list">[]</meta_types> - <portal_types type="list">[]</portal_types> - <report_root_list type="list">[]</report_root_list> - <report_tree type="int">0</report_tree> - <search type="int">0</search> - <search_columns type="list">[]</search_columns> - <select type="int">0</select> - <selection_name>production_order_current_inventory_selection</selection_name> - <sort type="list">[]</sort> - <sort_columns></sort_columns> - <stat_method></stat_method> - <title>Consommations</title> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>hidden</title> - <fields> - - <field><id>current_inventory_chart</id> <type>ZGDChart</type> - <values> - <alternate_name></alternate_name> - <bg_transparent type="int">1</bg_transparent> - <chart_style>line_2d</chart_style> - <chart_title>Prévisions</chart_title> - <css_class></css_class> - <data_method>getInventoryHistoryChart</data_method> - <default></default> - <default_params type="list">[]</default_params> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <hidden type="int">0</hidden> - <selection_name>resource_current_inventory_chart</selection_name> - <title>Prévisions</title> - <x_title></x_title> - <y_title></y_title> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - </messages> - </field> - </fields> - </group> - </groups> -</form> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_manufacturing/ProductionOrder_buildDeliveryList.py b/product/Coramy/skins/coramy_manufacturing/ProductionOrder_buildDeliveryList.py deleted file mode 100755 index 3af772f771..0000000000 --- a/product/Coramy/skins/coramy_manufacturing/ProductionOrder_buildDeliveryList.py +++ /dev/null @@ -1,42 +0,0 @@ -## Script (Python) "ProductionOrder_buildDeliveryList" -##bind container=container -##bind context=context -##bind namespace= -##bind script=script -##bind subpath=traverse_subpath -##parameters= -##title=Build Deliveries for a Production Order -## -order = context - -# Get movement list for production -movement_list = context.ProductionOrder_getMaterialProductionMovementList() -root_group = context.portal_simulation.collectMovement(movement_list) -delivery_list = context.portal_simulation.buildDeliveryList(root_group) - -# Get movements for sourcing -movement_list = context.ProductionOrder_getMaterialSourcingMovementList() -root_group = context.portal_simulation.collectMovement(movement_list) -delivery_list += context.portal_simulation.buildDeliveryList(root_group) - -# Get movements for outcome -movement_list = context.getOrderRelatedMovementList() -root_group = context.portal_simulation.collectMovement(movement_list) -delivery_list += context.portal_simulation.buildDeliveryList(root_group) - -# what's the gestionaire of this order -user_name = '' -# are we on a production order ? -if order.getPortalType() == 'Production Order' : - try : - user_name = order.getDestinationAdministrationPersonTitle().replace(' ','_') - except : - user_name = '' - -for delivery in delivery_list : - # update the state of the created deliveries to 'confirmed' - delivery.confirm() - # update local_roles - delivery.assign_gestionaire_designe_roles(user_name = user_name) - -return map(lambda o:o.getRelativeUrl(), delivery_list) diff --git a/product/Coramy/skins/coramy_manufacturing/ProductionOrder_buildOrderList.py b/product/Coramy/skins/coramy_manufacturing/ProductionOrder_buildOrderList.py deleted file mode 100755 index 9690eeac06..0000000000 --- a/product/Coramy/skins/coramy_manufacturing/ProductionOrder_buildOrderList.py +++ /dev/null @@ -1,51 +0,0 @@ -## Script (Python) "ProductionOrder_buildOrderList" -##bind container=container -##bind context=context -##bind namespace= -##bind script=script -##bind subpath=traverse_subpath -##parameters= -##title= -## -if 1: - # Delete all proposed orders - for o in context.portal_catalog(simulation_state="auto_planned", parent_uid=[context.ordre_fabrication.getUid()]) : - realo = o.getObject() - realo.aq_parent.deleteContent(realo.getId()) - - # Empty Zero Stock - context.portal_simulation.zero_stock.deleteContent(context.portal_simulation.zero_stock.contentIds()) - - # Expand Zero Stock as many times as needed (1 or 2 for the Coramy case) - # for i in range(0,1): - context.portal_simulation.zero_stock.expand() - -# Collect movements in Zero Stock applied rule -zs_movement_list = context.portal_simulation.zero_stock.contentValues() - -# keep only movements with a Modele resource -movement_list = [] -for movement in zs_movement_list : - resource_value = movement.getResourceValue() - if resource_value is not None: - if resource_value.getPortalType() == 'Modele' : - movement_list.append(movement) - -# Parse movements into a root group -root_group = context.portal_simulation.collectMovement(movement_list) -order_list = context.portal_simulation.buildOrderList(root_group) - -# update produced orders -for order in order_list: - order.autoPlan() - order.purchase_order_apply_condition() - -# reEmpty Zero Stock because we don't want to see the zero_stock quantities in the columns future_stock -context.portal_simulation.zero_stock.deleteContent(context.portal_simulation.zero_stock.contentIds()) - -request = context.REQUEST -redirect_url = '%s/view?%s' % ( context.absolute_url() - , 'portal_status_message=%s+propositions+OF+créés.' % len(order_list) - ) - -request[ 'RESPONSE' ].redirect( redirect_url ) diff --git a/product/Coramy/skins/coramy_manufacturing/ProductionOrder_expand.py b/product/Coramy/skins/coramy_manufacturing/ProductionOrder_expand.py deleted file mode 100755 index 783b202217..0000000000 --- a/product/Coramy/skins/coramy_manufacturing/ProductionOrder_expand.py +++ /dev/null @@ -1,35 +0,0 @@ -## Script (Python) "ProductionOrder_expand" -##bind container=container -##bind context=context -##bind namespace= -##bind script=script -##bind subpath=traverse_subpath -##parameters=form_id='' -##title= -## -# Expands the applied rule associated with the production order - -of = context -request = context.REQUEST - -applied_rule_list = of.getCausalityRelatedValueList(portal_type="Applied Rule") -if len(applied_rule_list) == 0 : - redirect_url = '%s/%s?%s' % ( context.absolute_url() - , form_id - , 'portal_status_message=Impossible+OF+non+validé.' - ) -elif len(applied_rule_list) == 1 : - - # of.expand(applied_rule_id=applied_rule_list[0]) - of.edit() - redirect_url = '%s/%s?%s' % ( context.absolute_url() - , form_id - , 'portal_status_message=Besoins+recalculés.' - ) -else : - redirect_url = '%s/%s?%s' % ( context.absolute_url() - , form_id - , 'portal_status_message=Problème+de+calcul+des+besoins.' - ) - -request[ 'RESPONSE' ].redirect( redirect_url ) diff --git a/product/Coramy/skins/coramy_manufacturing/ProductionOrder_getDeliveryCellPrintList.py b/product/Coramy/skins/coramy_manufacturing/ProductionOrder_getDeliveryCellPrintList.py deleted file mode 100755 index d94be0ac36..0000000000 --- a/product/Coramy/skins/coramy_manufacturing/ProductionOrder_getDeliveryCellPrintList.py +++ /dev/null @@ -1,103 +0,0 @@ -## Script (Python) "ProductionOrder_getDeliveryCellPrintList" -##bind container=container -##bind context=context -##bind namespace= -##bind script=script -##bind subpath=traverse_subpath -##parameters= -##title= -## -order_line = context -resource = order_line.getResourceValue() -movement_list = [] -pretty_list = [] - -if resource <> None : - - if order_line.hasCellContent() : - raw_movement_list = order_line.contentValues(filter={'portal_type':'Delivery Cell'}) - movement_list = order_line.sort_object_list(unordered_list=raw_movement_list, sort_order = (('variation_text', 'ASC'),)) - else : - movement_list.append(order_line) - - for movement in movement_list : - - my_variation_base_category_list = movement.getVariationBaseCategoryList() - if 'coloris' in my_variation_base_category_list : - if len(movement.getColorisValueList()) > 0 : - coloris_object = movement.getColorisValueList()[0] - else : - coloris_object = None - else : - coloris_object = None - if 'morphologie' in my_variation_base_category_list : - if len(movement.getMorphologieValueList()) > 0 : - morphologie_object = movement.getMorphologieValueList()[0] - else : - morphologie_object = None - else : - morphologie_object = None - - line_resource = resource.getId() -# line_designation = resource.getDescription() - if movement.getColoris() is not None : - line_coloris = ['coloris/'+movement.getColoris()] - else : - line_coloris = [] - if movement.getTaille() is not None : - line_taille = ['taille/'+movement.getTaille()] - else : - line_taille = [] - if movement.getMorphologie() is not None : - line_morphologie = ['morphologie/'+movement.getMorphologie()] - else : - line_morphologie = [] - variation_list = line_coloris + line_morphologie + line_taille - - if morphologie_object is not None : - corresp_variation_list = [movement.getTaille()]+[morphologie_object.getMorphoType()] - else : - corresp_variation_list = [movement.getTaille()]+['value'] - - # find taille_client - line_taille_client = movement.Amount_getTailleClient() - -# correspondance_list = resource.getSpecialiseValueList(portal_type='Correspondance Tailles') -# if len(correspondance_list) == 1 : -# my_correspondance = correspondance_list[0] -# mapped_value_list = my_correspondance.objectValues() -# for mapped_value in mapped_value_list : -# if mapped_value.test(my_correspondance.asContext(categories=corresp_variation_list)) : -# line_taille_client = mapped_value.getProperty(key='taille_client') -# break - - try : - line_quantity = float(movement.getProperty(key='quantity')) - except : - line_quantity = 0 - - line_date = order_line.aq_parent.getStopDate() - - # find code_article - line_code_article = movement.Amount_getCodeArticleClient() - -# variated_reference_list = resource.contentValues(filter={'portal_type':'Variated Reference'}) -# # we search a variated_reference wich define 'code_article' -# my_variated_reference = None -# for variated_reference in variated_reference_list : -# if len(variated_reference.getMappedValuePropertyList()) <> 0 : -# if variated_reference.getMappedValuePropertyList()[0] == 'code_article' : -# my_variated_reference = variated_reference -# break -# if my_variated_reference is not None : -# mapped_value_list = my_variated_reference.objectValues() -# for mapped_value in mapped_value_list : -# if mapped_value.test(my_variated_reference.asContext(categories=variation_list)) : -# line_code_article = mapped_value.getProperty(key='code_article') -# break - - line_items = [line_resource,line_coloris,line_morphologie,line_taille, - line_taille_client,line_quantity,line_date,line_code_article] - pretty_list.append(line_items) - -return pretty_list diff --git a/product/Coramy/skins/coramy_manufacturing/ProductionOrder_getTotalDuration.py b/product/Coramy/skins/coramy_manufacturing/ProductionOrder_getTotalDuration.py deleted file mode 100755 index 872e21d961..0000000000 --- a/product/Coramy/skins/coramy_manufacturing/ProductionOrder_getTotalDuration.py +++ /dev/null @@ -1,15 +0,0 @@ -## Script (Python) "ProductionOrder_getTotalDuration" -##bind container=container -##bind context=context -##bind namespace= -##bind script=script -##bind subpath=traverse_subpath -##parameters=**kw -##title= -## -movement_list = context.getOrderRelatedMovementList() -movement_uid_list = map(lambda o:o.getUid(), movement_list) -if len(movement_uid_list) > 0 : - return context.ProductionOrder_zGetTotalDuration(order_related_movement_uid_list = movement_uid_list)[0].quantity/60 -else : - return 0 diff --git a/product/Coramy/skins/coramy_manufacturing/ProductionOrder_inventoryView.form b/product/Coramy/skins/coramy_manufacturing/ProductionOrder_inventoryView.form deleted file mode 100755 index eb68b74a4f..0000000000 --- a/product/Coramy/skins/coramy_manufacturing/ProductionOrder_inventoryView.form +++ /dev/null @@ -1,140 +0,0 @@ -<?xml version="1.0"?> - -<form> - <title>Productions</title> - <row_length>4</row_length> - <name>ProductionOrder_inventoryView</name> - <pt>form_view</pt> - <action></action> - <method>POST</method> - <enctype></enctype> - <encoding>UTF-8</encoding> - <stored_encoding>ISO-8859-1</stored_encoding> - <unicode_mode>false</unicode_mode> - <groups> - <group> - <title>left</title> - <fields> - - <field><id>my_id</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <max_length></max_length> - <required type="int">1</required> - <title>Id</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>right</title> - <fields> - - </fields> - </group> - <group> - <title>center</title> - <fields> - - </fields> - </group> - <group> - <title>bottom</title> - <fields> - - <field><id>listbox</id> <type>ListBox</type> - <values> - <all_columns type="list">[]</all_columns> - <all_editable_columns type="list">[]</all_editable_columns> - <alternate_name></alternate_name> - <columns type="list">[('node_title', 'Stock'), ('section_title', 'Propri\xe9taire'), ('resource_relative_url', 'Composant'), ('variation_text', 'Variante'), ('quantity', 'Qt\xe9'), ('getCurrentInventory', 'Stock'), ('getAvailableInventory', 'Dispo'), ('getFutureInventory', 'Futur'), ('getQuantityUnit', 'Unit\xe9')]</columns> - <css_class></css_class> - <default></default> - <default_params type="list">[]</default_params> - <description></description> - <domain_root_list type="list">[('portal_categories/site/Stock_MP', 'Stocks MP'), ('portal_categories/site', 'Sites')]</domain_root_list> - <domain_tree type="int">0</domain_tree> - <editable type="int">1</editable> - <editable_columns type="list">[]</editable_columns> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <global_attributes type="list">[]</global_attributes> - <hidden type="int">0</hidden> - <lines type="int">20</lines> - <list_action>Resource_inventoryView</list_action> - <list_method type="method">ProductionOrder_getAggregatedMaterialProductionList</list_method> - <meta_types type="list">[]</meta_types> - <portal_types type="list">[]</portal_types> - <report_root_list type="list">[]</report_root_list> - <report_tree type="int">0</report_tree> - <search type="int">0</search> - <search_columns type="list">[]</search_columns> - <select type="int">0</select> - <selection_name>resource_current_inventory</selection_name> - <sort type="list">[]</sort> - <sort_columns></sort_columns> - <stat_method></stat_method> - <title>Productions</title> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - </messages> - </field> - <field><id>current_inventory_chart</id> <type>ZGDChart</type> - <values> - <alternate_name></alternate_name> - <bg_transparent type="int">1</bg_transparent> - <chart_style>line_2d</chart_style> - <chart_title>Prévisions</chart_title> - <css_class></css_class> - <data_method>getInventoryHistoryChart</data_method> - <default></default> - <default_params type="list">[]</default_params> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <hidden type="int">0</hidden> - <selection_name>resource_current_inventory_chart</selection_name> - <title>Prévisions</title> - <x_title></x_title> - <y_title></y_title> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>hidden</title> - <fields> - - </fields> - </group> - </groups> -</form> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_manufacturing/ProductionOrder_zGetTotalDuration.zsql b/product/Coramy/skins/coramy_manufacturing/ProductionOrder_zGetTotalDuration.zsql deleted file mode 100755 index 6b3fef9878..0000000000 --- a/product/Coramy/skins/coramy_manufacturing/ProductionOrder_zGetTotalDuration.zsql +++ /dev/null @@ -1,38 +0,0 @@ -<dtml-comment> -title: -connection_id:erp5_sql_connection -max_rows:1000 -max_cache:100 -cache_time:0 -class_name:DeliveryListBrain -class_file:InventoryBrain.py -</dtml-comment> -<params>order_related_movement_uid_list:list</params> -SELECT - SUM(movement.target_quantity) as target_quantity, - SUM(movement.quantity) as quantity -FROM - catalog AS transformation_rule, - catalog AS resource, - category AS resource_category, - catalog, - stock, - catalog AS node, - catalog AS section, - movement -WHERE - transformation_rule.id = "default_transformation_rule" -AND node.uid = stock.node_uid -AND section.uid = stock.section_uid -AND stock.uid = catalog.uid -<dtml-if order_related_movement_uid_list> -AND (<dtml-in order_related_movement_uid_list>transformation_rule.parent_uid = <dtml-sqlvar sequence-item type="int"><dtml-if sequence-end><dtml-else> OR </dtml-if></dtml-in>) -</dtml-if> -AND catalog.parent_uid = transformation_rule.uid -AND movement.uid = catalog.uid -AND movement.resource_uid = resource.uid -AND resource.portal_type = "Category" -AND resource_category.uid = resource.uid -AND resource_category.category_uid = resource.uid -AND resource_category.base_category_uid = <dtml-var "portal_categories.operation.getUid()"> -AND resource.id <> "coupe" \ No newline at end of file diff --git a/product/Coramy/skins/coramy_manufacturing/ProductionPackingList_getProductionOrderDescription.py b/product/Coramy/skins/coramy_manufacturing/ProductionPackingList_getProductionOrderDescription.py deleted file mode 100755 index e30457a311..0000000000 --- a/product/Coramy/skins/coramy_manufacturing/ProductionPackingList_getProductionOrderDescription.py +++ /dev/null @@ -1,15 +0,0 @@ -## Script (Python) "ProductionPackingList_getProductionOrderDescription" -##bind container=container -##bind context=context -##bind namespace= -##bind script=script -##bind subpath=traverse_subpath -##parameters= -##title= -## -packing_list = context -order = context.getDefaultCausalityValue() -if order is not None : - return order.getDescription() -else : - return '' diff --git a/product/Coramy/skins/coramy_manufacturing/production_order_line_price_view.form b/product/Coramy/skins/coramy_manufacturing/production_order_line_price_view.form deleted file mode 100755 index 78da928acf..0000000000 --- a/product/Coramy/skins/coramy_manufacturing/production_order_line_price_view.form +++ /dev/null @@ -1,321 +0,0 @@ -<?xml version="1.0"?> - -<form> - <title>Ligne d'OF</title> - <row_length>4</row_length> - <name>production_order_line_price_quantity_view</name> - <pt>form_view</pt> - <action>base_edit</action> - <method>POST</method> - <enctype>multipart/form-data</enctype> - <encoding>UTF-8</encoding> - <stored_encoding>ISO-8859-1</stored_encoding> - <unicode_mode>false</unicode_mode> - <groups> - <group> - <title>Default</title> - <fields> - - <field><id>my_id</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">10</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <max_length></max_length> - <required type="int">1</required> - <title>Ligne n°</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>right</title> - <fields> - - </fields> - </group> - <group> - <title>center</title> - <fields> - - </fields> - </group> - <group> - <title>bottom</title> - <fields> - - <field><id>matrixbox</id> <type>MatrixBox</type> - <values> - <all_editable_attributes type="list">[('target_quantity', 'quantity'), ('price', 'price'), ('predicate_value', 'predicate_value')]</all_editable_attributes> - <alternate_name></alternate_name> - <cell_base_id>movement</cell_base_id> - <cell_range type="list">[]</cell_range> - <columns type="list">[('32', '32'), ('34', '34'), ('36', '36'), ('38', '38')]</columns> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <editable_attributes type="list">[('target_quantity', 'quantity'), ('price', 'price'), ('predicate_value', 'predicate_value'), ('variation_category_list', 'variation_category_list')]</editable_attributes> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <getter_method></getter_method> - <global_attributes type="list">[('domain_base_category_list', 'domain_base_category_list'), ('mapped_value_property_list', 'mapped_value_property_list'), ('predicate_operator', 'predicate_operator')]</global_attributes> - <hidden type="int">0</hidden> - <lines type="list">[('Bleu', 'Bleu'), ('Rouge', 'Rouge'), ('Verts', 'Verts')]</lines> - <setter_method></setter_method> - <tabs type="list">[('32', '32'), ('34', '34'), ('36', '36'), ('38', '38')]</tabs> - <title>matrixbox</title> - <update_cell_range type="int">1</update_cell_range> - </values> - <tales> - <columns>python:here.order_line_matrix_item_list(base_category_list = ('taille',), base=1)</columns> - <lines>python:here.order_line_matrix_item_list(base_category_list = ('coloris','variante'), base=1)</lines> - <tabs>python:here.order_line_matrix_item_list(base_category_list = ('taille','coloris','variante'), base=1, include=0)</tabs> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - </messages> - </field> - <field><id>domain_base_category_list</id> <type>LinesField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default type="list">[]</default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <height type="int">5</height> - <hidden type="int">1</hidden> - <max_length></max_length> - <max_linelength></max_linelength> - <max_lines></max_lines> - <required type="int">0</required> - <title>Valid Domain</title> - <unicode type="int">0</unicode> - <view_separator><br /> -</view_separator> - <whitespace_preserve type="int">0</whitespace_preserve> - <width type="int">40</width> - </values> - <tales> - <default>here/getVariationBaseCategoryList</default> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_many_lines">You entered too many lines.</message> - <message name="line_too_long">A line was too long.</message> - <message name="too_long">You entered too many characters.</message> - </messages> - </field> - <field><id>predicate_operator</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default>SUPERSET_OF</default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">1</hidden> - <max_length></max_length> - <required type="int">0</required> - <title>Operator</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - <field><id>mapped_value_property_list</id> <type>LinesField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default type="list">['target_quantity', 'price']</default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <height type="int">5</height> - <hidden type="int">1</hidden> - <max_length></max_length> - <max_linelength></max_linelength> - <max_lines></max_lines> - <required type="int">0</required> - <title>Modified categories</title> - <unicode type="int">0</unicode> - <view_separator><br /> -</view_separator> - <whitespace_preserve type="int">0</whitespace_preserve> - <width type="int">40</width> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_many_lines">You entered too many lines.</message> - <message name="line_too_long">A line was too long.</message> - <message name="too_long">You entered too many characters.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>hidden</title> - <fields> - - <field><id>matrixbox_predicate_value</id> <type>LinesField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default type="list">[]</default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <height type="int">5</height> - <hidden type="int">1</hidden> - <max_length></max_length> - <max_linelength></max_linelength> - <max_lines></max_lines> - <required type="int">0</required> - <title>matrixbox_predicate_value</title> - <unicode type="int">0</unicode> - <view_separator><br /> -</view_separator> - <whitespace_preserve type="int">0</whitespace_preserve> - <width type="int">40</width> - </values> - <tales> - <default>python:cell_index</default> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_many_lines">You entered too many lines.</message> - <message name="line_too_long">A line was too long.</message> - <message name="too_long">You entered too many characters.</message> - </messages> - </field> - <field><id>matrixbox_variation_category_list</id> <type>LinesField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default type="list">[]</default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <height type="int">5</height> - <hidden type="int">1</hidden> - <max_length></max_length> - <max_linelength></max_linelength> - <max_lines></max_lines> - <required type="int">0</required> - <title>matrixbox_predicate_value</title> - <unicode type="int">0</unicode> - <view_separator><br /> -</view_separator> - <whitespace_preserve type="int">0</whitespace_preserve> - <width type="int">40</width> - </values> - <tales> - <default>python:cell_index</default> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_many_lines">You entered too many lines.</message> - <message name="line_too_long">A line was too long.</message> - <message name="too_long">You entered too many characters.</message> - </messages> - </field> - <field><id>matrixbox_price</id> <type>FloatField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">10</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <required type="int">0</required> - <title>matrixbox_price</title> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <default>python:cell.getProperty('price')</default> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="not_float">You did not enter a floating point number.</message> - </messages> - </field> - <field><id>matrixbox_target_quantity</id> <type>FloatField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">10</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">1</hidden> - <required type="int">0</required> - <title>matrixbox_target_quantity</title> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <default>python:cell.getProperty('target_quantity')</default> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="not_float">You did not enter a floating point number.</message> - </messages> - </field> - </fields> - </group> - </groups> -</form> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_manufacturing/production_order_line_quantity_view.form b/product/Coramy/skins/coramy_manufacturing/production_order_line_quantity_view.form deleted file mode 100755 index 7c6c9b6970..0000000000 --- a/product/Coramy/skins/coramy_manufacturing/production_order_line_quantity_view.form +++ /dev/null @@ -1,321 +0,0 @@ -<?xml version="1.0"?> - -<form> - <title>Ligne d'OF</title> - <row_length>4</row_length> - <name>production_order_line_price_quantity_view</name> - <pt>form_view</pt> - <action>base_edit</action> - <method>POST</method> - <enctype>multipart/form-data</enctype> - <encoding>UTF-8</encoding> - <stored_encoding>ISO-8859-1</stored_encoding> - <unicode_mode>false</unicode_mode> - <groups> - <group> - <title>Default</title> - <fields> - - <field><id>my_id</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">10</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <max_length></max_length> - <required type="int">1</required> - <title>Ligne n°</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>right</title> - <fields> - - </fields> - </group> - <group> - <title>center</title> - <fields> - - </fields> - </group> - <group> - <title>bottom</title> - <fields> - - <field><id>matrixbox</id> <type>MatrixBox</type> - <values> - <all_editable_attributes type="list">[('target_quantity', 'target_quantity'), ('price', 'price'), ('predicate_value', 'predicate_value')]</all_editable_attributes> - <alternate_name></alternate_name> - <cell_base_id>movement</cell_base_id> - <cell_range type="list">[]</cell_range> - <columns type="list">[('32', '32'), ('34', '34'), ('36', '36'), ('38', '38')]</columns> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <editable_attributes type="list">[('target_quantity', 'target_quantity'), ('price', 'price'), ('predicate_value', 'predicate_value'), ('variation_category_list', 'variation_category_list')]</editable_attributes> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <getter_method></getter_method> - <global_attributes type="list">[('domain_base_category_list', 'domain_base_category_list'), ('mapped_value_property_list', 'mapped_value_property_list'), ('predicate_operator', 'predicate_operator')]</global_attributes> - <hidden type="int">0</hidden> - <lines type="list">[('Bleu', 'Bleu'), ('Rouge', 'Rouge'), ('Verts', 'Verts')]</lines> - <setter_method></setter_method> - <tabs type="list">[('32', '32'), ('34', '34'), ('36', '36'), ('38', '38')]</tabs> - <title>matrixbox</title> - <update_cell_range type="int">1</update_cell_range> - </values> - <tales> - <columns>python:here.order_line_matrix_item_list(base_category_list = ('taille',), base=1)</columns> - <lines>python:here.order_line_matrix_item_list(base_category_list = ('coloris','variante'), base=1)</lines> - <tabs>python:here.order_line_matrix_item_list(base_category_list = ('taille','coloris','variante'), base=1, include=0)</tabs> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - </messages> - </field> - <field><id>domain_base_category_list</id> <type>LinesField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default type="list">[]</default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <height type="int">5</height> - <hidden type="int">1</hidden> - <max_length></max_length> - <max_linelength></max_linelength> - <max_lines></max_lines> - <required type="int">0</required> - <title>Valid Domain</title> - <unicode type="int">0</unicode> - <view_separator><br /> -</view_separator> - <whitespace_preserve type="int">0</whitespace_preserve> - <width type="int">40</width> - </values> - <tales> - <default>here/getVariationBaseCategoryList</default> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_many_lines">You entered too many lines.</message> - <message name="line_too_long">A line was too long.</message> - <message name="too_long">You entered too many characters.</message> - </messages> - </field> - <field><id>predicate_operator</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default>SUPERSET_OF</default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">1</hidden> - <max_length></max_length> - <required type="int">0</required> - <title>Operator</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - <field><id>mapped_value_property_list</id> <type>LinesField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default type="list">['target_quantity', 'price']</default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <height type="int">5</height> - <hidden type="int">1</hidden> - <max_length></max_length> - <max_linelength></max_linelength> - <max_lines></max_lines> - <required type="int">0</required> - <title>Modified categories</title> - <unicode type="int">0</unicode> - <view_separator><br /> -</view_separator> - <whitespace_preserve type="int">0</whitespace_preserve> - <width type="int">40</width> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_many_lines">You entered too many lines.</message> - <message name="line_too_long">A line was too long.</message> - <message name="too_long">You entered too many characters.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>hidden</title> - <fields> - - <field><id>matrixbox_predicate_value</id> <type>LinesField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default type="list">[]</default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <height type="int">5</height> - <hidden type="int">1</hidden> - <max_length></max_length> - <max_linelength></max_linelength> - <max_lines></max_lines> - <required type="int">0</required> - <title>matrixbox_predicate_value</title> - <unicode type="int">0</unicode> - <view_separator><br /> -</view_separator> - <whitespace_preserve type="int">0</whitespace_preserve> - <width type="int">40</width> - </values> - <tales> - <default>python:cell_index</default> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_many_lines">You entered too many lines.</message> - <message name="line_too_long">A line was too long.</message> - <message name="too_long">You entered too many characters.</message> - </messages> - </field> - <field><id>matrixbox_variation_category_list</id> <type>LinesField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default type="list">[]</default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <height type="int">5</height> - <hidden type="int">1</hidden> - <max_length></max_length> - <max_linelength></max_linelength> - <max_lines></max_lines> - <required type="int">0</required> - <title>matrixbox_predicate_value</title> - <unicode type="int">0</unicode> - <view_separator><br /> -</view_separator> - <whitespace_preserve type="int">0</whitespace_preserve> - <width type="int">40</width> - </values> - <tales> - <default>python:cell_index</default> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_many_lines">You entered too many lines.</message> - <message name="line_too_long">A line was too long.</message> - <message name="too_long">You entered too many characters.</message> - </messages> - </field> - <field><id>matrixbox_target_quantity</id> <type>FloatField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">10</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <required type="int">0</required> - <title>matrixbox_target_quantity</title> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <default>python:cell.getProperty('target_quantity')</default> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="not_float">You did not enter a floating point number.</message> - </messages> - </field> - <field><id>matrixbox_price</id> <type>FloatField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">10</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">1</hidden> - <required type="int">0</required> - <title>matrixbox_price</title> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <default>python:cell.getProperty('price')</default> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="not_float">You did not enter a floating point number.</message> - </messages> - </field> - </fields> - </group> - </groups> -</form> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_manufacturing/production_order_line_view.form b/product/Coramy/skins/coramy_manufacturing/production_order_line_view.form deleted file mode 100755 index a622378517..0000000000 --- a/product/Coramy/skins/coramy_manufacturing/production_order_line_view.form +++ /dev/null @@ -1,528 +0,0 @@ -<?xml version="1.0"?> - -<form> - <title>Ligne d'OF</title> - <row_length>4</row_length> - <name>production_order_line_view</name> - <pt>form_view</pt> - <action>base_edit</action> - <method>POST</method> - <enctype>multipart/form-data</enctype> - <encoding>UTF-8</encoding> - <stored_encoding>ISO-8859-1</stored_encoding> - <unicode_mode>false</unicode_mode> - <groups> - <group> - <title>left</title> - <fields> - - <field><id>my_id</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">5</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <max_length></max_length> - <required type="int">1</required> - <title>Ligne n°</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - <field><id>my_description</id> <type>TextAreaField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <height type="int">2</height> - <hidden type="int">0</hidden> - <max_length></max_length> - <max_linelength></max_linelength> - <max_lines></max_lines> - <required type="int">0</required> - <title>Description</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - <width type="int">40</width> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_many_lines">You entered too many lines.</message> - <message name="line_too_long">A line was too long.</message> - <message name="too_long">You entered too many characters.</message> - </messages> - </field> - <field><id>my_resource_relative_url</id> <type>RelationStringField</type> - <values> - <alternate_name></alternate_name> - <base_category>resource</base_category> - <catalog_index>relative_url</catalog_index> - <css_class></css_class> - <default></default> - <default_module>modele</default_module> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">40</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <jump_method>base_jump_relation</jump_method> - <max_length></max_length> - <portal_type type="list">[('Composant', 'Composant'), ('Tissu', 'Tissu'), ('Modele', 'Modele'), ('Forme', 'Forme'), ('Vetement', 'Vetement'), ('Category', 'Category'), ('Gamme', 'Gamme'), ('Assortiment', 'Assortiment')]</portal_type> - <required type="int">0</required> - <title>Produit</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <update_method>base_update_relation</update_method> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - <field><id>my_variation_base_category_list</id> <type>MultiListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default type="list">[]</default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <extra_item></extra_item> - <hidden type="int">0</hidden> - <items type="list">[]</items> - <required type="int">0</required> - <size type="int">3</size> - <title>Axes variation</title> - <unicode type="int">0</unicode> - <view_separator><br /> -</view_separator> - </values> - <tales> - <items>here/getVariationRangeBaseCategoryList</items> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - <field><id>my_variation_category_list</id> <type>MultiListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default type="list">[]</default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <extra_item></extra_item> - <hidden type="int">0</hidden> - <items type="list">[]</items> - <required type="int">0</required> - <size type="int">8</size> - <title>Variantes</title> - <unicode type="int">0</unicode> - <view_separator><br /> -</view_separator> - </values> - <tales> - <items>here/getVariationRangeCategoryItemList</items> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>right</title> - <fields> - - <field><id>my_target_quantity</id> <type>FloatField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">10</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <required type="int">0</required> - <title>Quantité par défaut</title> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="not_float">You did not enter a floating point number.</message> - </messages> - </field> - <field><id>my_quantity_unit</id> <type>ListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <extra_item></extra_item> - <first_item type="int">0</first_item> - <hidden type="int">0</hidden> - <items type="list">[]</items> - <required type="int">0</required> - <size type="int">1</size> - <title>Unité</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <items>here/getQuantityUnitRangeItemList</items> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - <field><id>my_price</id> <type>FloatField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">10</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <required type="int">0</required> - <title>Prix par défaut</title> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="not_float">You did not enter a floating point number.</message> - </messages> - </field> - <field><id>spacer</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">1</hidden> - <max_length></max_length> - <required type="int">0</required> - <title> </title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - <field><id>my_target_start_date</id> <type>DateTimeField</type> - <values> - <allow_empty_time type="int">0</allow_empty_time> - <alternate_name></alternate_name> - <ampm_time_style type="int">0</ampm_time_style> - <css_class></css_class> - <date_only type="int">1</date_only> - <date_separator>/</date_separator> - <default_now type="int">0</default_now> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <hidden type="int">0</hidden> - <input_order>dmy</input_order> - <input_style>text</input_style> - <required type="int">0</required> - <time_separator>:</time_separator> - <title>Demandé au plus tôt le</title> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="not_datetime">You did not enter a valid date and time.</message> - <message name="datetime_out_of_range">The date and time you entered were out of range.</message> - </messages> - </field> - <field><id>my_target_stop_date</id> <type>DateTimeField</type> - <values> - <allow_empty_time type="int">0</allow_empty_time> - <alternate_name></alternate_name> - <ampm_time_style type="int">0</ampm_time_style> - <css_class></css_class> - <date_only type="int">1</date_only> - <date_separator>/</date_separator> - <default_now type="int">0</default_now> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <hidden type="int">0</hidden> - <input_order>dmy</input_order> - <input_style>text</input_style> - <required type="int">0</required> - <time_separator>:</time_separator> - <title>Demandé au plus tard le</title> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="not_datetime">You did not enter a valid date and time.</message> - <message name="datetime_out_of_range">The date and time you entered were out of range.</message> - </messages> - </field> - <field><id>spacer2</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">1</hidden> - <max_length></max_length> - <required type="int">0</required> - <title> </title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - <field><id>my_start_date</id> <type>DateTimeField</type> - <values> - <allow_empty_time type="int">0</allow_empty_time> - <alternate_name></alternate_name> - <ampm_time_style type="int">0</ampm_time_style> - <css_class></css_class> - <date_only type="int">1</date_only> - <date_separator>/</date_separator> - <default_now type="int">0</default_now> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <hidden type="int">0</hidden> - <input_order>dmy</input_order> - <input_style>text</input_style> - <required type="int">0</required> - <time_separator>:</time_separator> - <title>Confirmé au plus tôt le</title> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="not_datetime">You did not enter a valid date and time.</message> - <message name="datetime_out_of_range">The date and time you entered were out of range.</message> - </messages> - </field> - <field><id>my_stop_date</id> <type>DateTimeField</type> - <values> - <allow_empty_time type="int">0</allow_empty_time> - <alternate_name></alternate_name> - <ampm_time_style type="int">0</ampm_time_style> - <css_class></css_class> - <date_only type="int">1</date_only> - <date_separator>/</date_separator> - <default_now type="int">0</default_now> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <hidden type="int">0</hidden> - <input_order>dmy</input_order> - <input_style>text</input_style> - <required type="int">0</required> - <time_separator>:</time_separator> - <title>Confirmé au plus tard le</title> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="not_datetime">You did not enter a valid date and time.</message> - <message name="datetime_out_of_range">The date and time you entered were out of range.</message> - </messages> - </field> - <field><id>spacer3</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">1</hidden> - <max_length></max_length> - <required type="int">0</required> - <title> </title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - <field><id>my_target_total_quantity</id> <type>FloatField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">10</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">1</hidden> - <required type="int">0</required> - <title>Quantité totale</title> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <title>python:'Quantité totale : %.2f' % here.getTargetTotalQuantity()</title> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="not_float">You did not enter a floating point number.</message> - </messages> - </field> - <field><id>my_total_price</id> <type>FloatField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">10</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">1</hidden> - <required type="int">0</required> - <title>Montant total</title> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <title>python:'Montant total : %.2f' % here.getTotalPrice()</title> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="not_float">You did not enter a floating point number.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>center</title> - <fields> - - </fields> - </group> - <group> - <title>bottom</title> - <fields> - - </fields> - </group> - <group> - <title>hidden</title> - <fields> - - </fields> - </group> - </groups> -</form> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_manufacturing/production_order_list.form b/product/Coramy/skins/coramy_manufacturing/production_order_list.form deleted file mode 100755 index fdfea0e869..0000000000 --- a/product/Coramy/skins/coramy_manufacturing/production_order_list.form +++ /dev/null @@ -1,63 +0,0 @@ -<?xml version="1.0"?> - -<form> - <title>Liste des ordres de fabrication</title> - <row_length>4</row_length> - <name>production_order_list</name> - <pt>form_list</pt> - <action></action> - <method>POST</method> - <enctype>multipart/form-data</enctype> - <encoding>UTF-8</encoding> - <stored_encoding>ISO-8859-1</stored_encoding> - <unicode_mode>false</unicode_mode> - <groups> - <group> - <title>Default</title> - <fields> - - <field><id>listbox</id> <type>ListBox</type> - <values> - <all_columns type="list">[('id', 'OF'), ('Description', 'Description'), ('default_destination_section_title', 'Soci\xe9t\xe9'), ('default_source_title', 'Produit par'), ('default_destination_title', 'Livrer \xe0'), ('target_stop_date', 'Date livraison'), ('simulation_state', 'Etat'), ('discussion_state', 'Discussion')]</all_columns> - <all_editable_columns type="list">[]</all_editable_columns> - <alternate_name></alternate_name> - <columns type="list">[('id', 'OF'), ('Description', 'Description'), ('default_destination_section_title', 'Soci\xe9t\xe9'), ('default_source_title', 'Produit par'), ('default_destination_title', 'Livrer \xe0'), ('target_stop_date', 'Date livraison'), ('simulation_state', 'Etat'), ('discussion_state', 'Discussion')]</columns> - <css_class></css_class> - <default></default> - <default_params type="list">[('id', "''")]</default_params> - <description></description> - <domain_root_list type="list">[]</domain_root_list> - <domain_tree type="int">0</domain_tree> - <editable type="int">1</editable> - <editable_columns type="list">[]</editable_columns> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <global_attributes type="list">[]</global_attributes> - <hidden type="int">0</hidden> - <lines type="int">30</lines> - <list_action>list</list_action> - <list_method type="method">portal_catalog</list_method> - <meta_types type="list">[]</meta_types> - <portal_types type="list">[('Production Order', 'Production Order')]</portal_types> - <report_root_list type="list">[]</report_root_list> - <report_tree type="int">0</report_tree> - <search type="int">1</search> - <search_columns></search_columns> - <select type="int">1</select> - <selection_name>production_order_selection</selection_name> - <sort type="list">[('id', 'id')]</sort> - <sort_columns></sort_columns> - <stat_method></stat_method> - <title>Ordres de fabrication</title> - </values> - <tales> - <list_method>python:here.getPortalObject().portal_skins.local_list_method[here.REQUEST.list_method_id]</list_method> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - </messages> - </field> - </fields> - </group> - </groups> -</form> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_manufacturing/production_order_print.pt b/product/Coramy/skins/coramy_manufacturing/production_order_print.pt deleted file mode 100755 index 626f20cae9..0000000000 --- a/product/Coramy/skins/coramy_manufacturing/production_order_print.pt +++ /dev/null @@ -1,161 +0,0 @@ -<HTML> - <HEAD> - <meta http-equiv="content-type" content="text/html;charset=ISO-8859-1"> - <title tal:content="here/getTitle">Coramy</title> - <link rel=stylesheet type="text/css" href="mesure"> - </HEAD> - - <BODY tal:define="commercial python:here.getSourceAdministrationValue(portal_type=['Person']); - fournisseur python:here.getSourceValue(portal_type=['Organisation','Category']); - livraison python:here.getDestinationValue(portal_type= - ['Organisation','Category']); - totalizer python:[0]; - order_lines_list python:here.contentValues(filter={'portal_type': - 'Production Order Line'})"> - - <TABLE width="660" height="900" cellpadding="0" cellspacing="0"><!-- Tableau general --> - <TR> - <TD> - <TABLE border="0" width="100%" height="100%"> - <TR> - <TD> - <h2>Coramy</h2> - </TD> - <TD align="center"> - <h2><span tal:content="python:'Ordre de fabrication n° '+here.getId()"/></h2> - </TD> - <TD align="right"> - <span tal:content="python:'Emis le : '+str(here.getDateEmission())"/> - </TD> - </TR> - </TD> - </TR> - - <TR><!-- Espacement inter-tableaux --> - <TD height="15"/> - </TR> - - <TR height="10%"><!-- Infos --> - <TD> - <TABLE border="0" width="100%" height="100%"> - <TR> - <TD class="bold" nowrap>Livrer à</TD> - <TD nowrap> - <SPAN tal:condition="python:livraison<>None"> - <b><SPAN tal:content="python:modules['string'].capwords(livraison.getTitle())"/></b> - <br><SPAN tal:condition="python:livraison.getPortalType()<>'Category'"> - <SPAN tal:define="address_items python:modules['string']. - split(livraison.getDefaultAddress().asText(country='France'),'\n')"> - <SPAN tal:repeat="item address_items"> - <SPAN tal:content="item"/><br> - </SPAN> - </SPAN> - </SPAN> - </SPAN> - </TD> - <TD width="100%"> </TD> - <TD class="bold" nowrap>Produit par</TD> - <TD nowrap> - <SPAN tal:condition="python:fournisseur<>None"> - <b><SPAN tal:content="python:modules['string'].capwords(fournisseur.getTitle())"/></b> - </SPAN> - </TD> - </TR> - - </TABLE> - </TD> - </TR> - - - <TR><!-- Espacement inter-tableaux --> - <TD height="15"/> - </TR> - - <TR><!-- Tableau de lignes de commande --> - <TD valign="top"> - <TABLE border="2" width="100%"> - <TR> - <TD class="bold" align="center">Modèle</TD> - <TD class="bold" align="center" width="100%">Coloris</TD> - <TD class="bold" align="center">Morphologie</TD> - <TD class="bold" align="center">Taille Coramy</TD> - <TD class="bold" align="center">Taille client</TD> - <TD class="bold" align="center">Code client</TD> - <TD class="bold" align="center">Quantité</TD> - <TD class="bold" align="center">Date livraison</TD> - </TR> - <SPAN tal:repeat="order_line order_lines_list"> - <SPAN tal:define="delivery_cell_list python:order_line.ProductionOrder_getDeliveryCellPrintList()"> - <TR tal:repeat="delivery_cell delivery_cell_list"> - <TD nowrap tal:content="python:delivery_cell[0]" align="left"></TD> - - <TD nowrap tal:define="variantes_list python:delivery_cell[1]" align="left"> - <SPAN tal:repeat="variante variantes_list"> - <SPAN tal:condition="python:variante<>'value' and variante<>None"> - <SPAN tal:define="variante_items python:variante.split('/')"> - <SPAN tal:content="python:variante_items[len(variante_items)-1]"/><BR> - </SPAN> - </SPAN> - </SPAN> - </TD> - <TD nowrap tal:define="variantes_list python:delivery_cell[2]" align="left"> - <SPAN tal:repeat="variante variantes_list"> - <SPAN tal:condition="python:variante<>'value' and variante<>None"> - <SPAN tal:define="variante_items python:variante.split('/')"> - <SPAN tal:content="python:variante_items[len(variante_items)-1]"/><BR> - </SPAN> - </SPAN> - </SPAN> - </TD> - <TD nowrap tal:define="variantes_list python:delivery_cell[3]" align="left"> - <SPAN tal:repeat="variante variantes_list"> - <SPAN tal:condition="python:variante<>'value' and variante<>None"> - <SPAN tal:define="variante_items python:variante.split('/')"> - <SPAN tal:content="python:variante_items[len(variante_items)-1]"/><BR> - </SPAN> - </SPAN> - </SPAN> - </TD> - <TD nowrap tal:content="python:delivery_cell[4]" align="center"></TD> - <TD nowrap tal:content="python:delivery_cell[7]" align="center"></TD> - <TD tal:content="python: '%.0f' % delivery_cell[5]" align="right"></TD> - <TD tal:content="python:delivery_cell[6]" align="center"></TD> - <SPAN tal:define="toto python:order_line.PT_update_total_list(totalizer,[0],delivery_cell[5])"/> - </TR> - </SPAN> - </SPAN> - <TR> - <TD colspan="6" align="right">Total - </TD> - <TD align ="right"> - <b><span tal:content="python: '%.0f' %totalizer[0]"/></b> - <TD> - </TD> - </TR> - </TABLE> - </TD> - </TR> - - <TR tal:define="commentaires_list python:modules['string'].split(here.getComment(''),'\n')"><!-- Notes --> - <TD valign="top"> - <span tal:repeat="commentaires_item commentaires_list"> - <br> - <span tal:content="python:commentaires_item"/></span> - </TD> - </TR> - - <TR><!-- Espacement inter-tableaux --> - <TD height="15"/> - </TR> - - <TR> - <TD height="90%"/> - </TR> - <TR> - <TD align="center">Coramy - 5 bis, rue Denis Cordonnier - 59820 Gravelines (FRANCE)<br>Tél. : + 33 (0) 3 28 51 91 51 - Fax : + 33 (0) 3 28 23 34 96 - <p class="Copy">S.A.S. au capital de 435.200 € - T.V.A. FR 67 611 750 274 - R.C. Dunkerque 611 750 274 - SIRET 611 750 274 00023 - CNUF 15971</p> - </TD> - </TR> - </TABLE> - </BODY> -</HTML> diff --git a/product/Coramy/skins/coramy_manufacturing/production_order_view.form b/product/Coramy/skins/coramy_manufacturing/production_order_view.form deleted file mode 100755 index af553e78bb..0000000000 --- a/product/Coramy/skins/coramy_manufacturing/production_order_view.form +++ /dev/null @@ -1,853 +0,0 @@ -<?xml version="1.0"?> - -<form> - <title>Ordre de fabrication</title> - <row_length>4</row_length> - <name>production_order_view</name> - <pt>form_view</pt> - <action>base_edit</action> - <method>POST</method> - <enctype></enctype> - <encoding>UTF-8</encoding> - <stored_encoding>ISO-8859-1</stored_encoding> - <unicode_mode>false</unicode_mode> - <groups> - <group> - <title>left</title> - <fields> - - <field><id>my_id</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">10</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <max_length></max_length> - <required type="int">1</required> - <title>Ordre de fabrication</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - <field><id>my_destination_section</id> <type>ListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <extra_item></extra_item> - <first_item type="int">0</first_item> - <hidden type="int">0</hidden> - <items type="list">[]</items> - <required type="int">0</required> - <size type="int">1</size> - <title>Société</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <items>python:here.portal_categories.group.Coramy.getCategoryChildIdItemList(base=1,display_none_category=1)</items> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - <field><id>my_description</id> <type>TextAreaField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <height type="int">3</height> - <hidden type="int">0</hidden> - <max_length></max_length> - <max_linelength></max_linelength> - <max_lines></max_lines> - <required type="int">0</required> - <title>Description</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - <width type="int">40</width> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_many_lines">You entered too many lines.</message> - <message name="line_too_long">A line was too long.</message> - <message name="too_long">You entered too many characters.</message> - </messages> - </field> - <field><id>my_date_emission</id> <type>DateTimeField</type> - <values> - <allow_empty_time type="int">0</allow_empty_time> - <alternate_name></alternate_name> - <ampm_time_style type="int">0</ampm_time_style> - <css_class></css_class> - <date_only type="int">1</date_only> - <date_separator>/</date_separator> - <default_now type="int">0</default_now> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <hidden type="int">0</hidden> - <input_order>dmy</input_order> - <input_style>text</input_style> - <required type="int">0</required> - <time_separator>:</time_separator> - <title>OF émis le</title> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="not_datetime">You did not enter a valid date and time.</message> - <message name="datetime_out_of_range">The date and time you entered were out of range.</message> - </messages> - </field> - <field><id>my_commande_origine</id> <type>ListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <extra_item></extra_item> - <first_item type="int">0</first_item> - <hidden type="int">0</hidden> - <items type="list">[]</items> - <required type="int">0</required> - <size type="int">1</size> - <title>Support de l'OF</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <items>here/portal_categories/commande_origine/getFormItemList</items> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - <field><id>my_destination_administration_person_title</id> <type>RelationStringField</type> - <values> - <alternate_name></alternate_name> - <base_category>destination_administration</base_category> - <catalog_index>Title</catalog_index> - <css_class></css_class> - <default></default> - <default_module>person</default_module> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <jump_method>base_jump_relation</jump_method> - <max_length></max_length> - <portal_type type="list">[('Person', 'Person')]</portal_type> - <required type="int">0</required> - <title>Gestionaire</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <update_method>base_update_relation</update_method> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - <field><id>my_price_currency</id> <type>ListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <extra_item></extra_item> - <first_item type="int">0</first_item> - <hidden type="int">0</hidden> - <items type="list">[]</items> - <required type="int">0</required> - <size type="int">1</size> - <title>Devise</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <items>python:[('','')]+map(lambda x:(x.id,'devise/%s' %x.id),here.devise.objectValues())</items> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - <field><id>my_incoterm</id> <type>ListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <extra_item></extra_item> - <first_item type="int">0</first_item> - <hidden type="int">0</hidden> - <items type="list">[]</items> - <required type="int">0</required> - <size type="int">1</size> - <title>Incoterm</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <items>python:here.portal_categories.incoterm.getCategoryChildItemList(display_id = 'getTitle', display_none_category=1)</items> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - <field><id>my_delivery_mode</id> <type>ListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <extra_item></extra_item> - <first_item type="int">0</first_item> - <hidden type="int">0</hidden> - <items type="list">[]</items> - <required type="int">0</required> - <size type="int">1</size> - <title>Mode de livraison</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <items>here/portal_categories/delivery_mode/getFormItemList</items> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>right</title> - <fields> - - <field><id>my_source_title</id> <type>RelationStringField</type> - <values> - <alternate_name></alternate_name> - <base_category>source</base_category> - <catalog_index>Title</catalog_index> - <css_class></css_class> - <default></default> - <default_module>organisation</default_module> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <jump_method>base_jump_relation</jump_method> - <max_length></max_length> - <portal_type type="list">[('Organisation', 'Organisation'), ('Category', 'Category')]</portal_type> - <required type="int">0</required> - <title>Produit par</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <update_method>base_update_relation</update_method> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - <field><id>my_source_administration_title</id> <type>RelationStringField</type> - <values> - <alternate_name></alternate_name> - <base_category>source_administration</base_category> - <catalog_index>Title</catalog_index> - <css_class></css_class> - <default></default> - <default_module>person</default_module> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <jump_method>base_jump_relation</jump_method> - <max_length></max_length> - <portal_type type="list">[('Person', 'Person'), ('Organisation', 'Organisation'), ('Category', 'Category')]</portal_type> - <required type="int">0</required> - <title>Contact</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <update_method>base_update_relation</update_method> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - <field><id>my_destination_title</id> <type>RelationStringField</type> - <values> - <alternate_name></alternate_name> - <base_category>destination</base_category> - <catalog_index>Title</catalog_index> - <css_class></css_class> - <default></default> - <default_module>organisation</default_module> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <jump_method>base_jump_relation</jump_method> - <max_length></max_length> - <portal_type type="list">[('Organisation', 'Organisation'), ('Category', 'Category')]</portal_type> - <required type="int">0</required> - <title>Livrer à </title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <update_method>base_update_relation</update_method> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - <field><id>my_target_start_date</id> <type>DateTimeField</type> - <values> - <allow_empty_time type="int">0</allow_empty_time> - <alternate_name></alternate_name> - <ampm_time_style type="int">0</ampm_time_style> - <css_class></css_class> - <date_only type="int">1</date_only> - <date_separator>/</date_separator> - <default_now type="int">0</default_now> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <hidden type="int">0</hidden> - <input_order>dmy</input_order> - <input_style>text</input_style> - <required type="int">0</required> - <time_separator>:</time_separator> - <title>Date de coupe demandée</title> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="not_datetime">You did not enter a valid date and time.</message> - <message name="datetime_out_of_range">The date and time you entered were out of range.</message> - </messages> - </field> - <field><id>my_target_stop_date</id> <type>DateTimeField</type> - <values> - <allow_empty_time type="int">0</allow_empty_time> - <alternate_name></alternate_name> - <ampm_time_style type="int">0</ampm_time_style> - <css_class></css_class> - <date_only type="int">1</date_only> - <date_separator>/</date_separator> - <default_now type="int">0</default_now> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <hidden type="int">0</hidden> - <input_order>dmy</input_order> - <input_style>text</input_style> - <required type="int">0</required> - <time_separator>:</time_separator> - <title>Date de livraison demandée</title> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="not_datetime">You did not enter a valid date and time.</message> - <message name="datetime_out_of_range">The date and time you entered were out of range.</message> - </messages> - </field> - <field><id>spacer</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">1</hidden> - <max_length></max_length> - <required type="int">0</required> - <title> </title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - <field><id>my_start_date</id> <type>DateTimeField</type> - <values> - <allow_empty_time type="int">0</allow_empty_time> - <alternate_name></alternate_name> - <ampm_time_style type="int">0</ampm_time_style> - <css_class></css_class> - <date_only type="int">1</date_only> - <date_separator>/</date_separator> - <default_now type="int">0</default_now> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <hidden type="int">0</hidden> - <input_order>dmy</input_order> - <input_style>text</input_style> - <required type="int">0</required> - <time_separator>:</time_separator> - <title>Date de coupe confirmée</title> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="not_datetime">You did not enter a valid date and time.</message> - <message name="datetime_out_of_range">The date and time you entered were out of range.</message> - </messages> - </field> - <field><id>my_stop_date</id> <type>DateTimeField</type> - <values> - <allow_empty_time type="int">0</allow_empty_time> - <alternate_name></alternate_name> - <ampm_time_style type="int">0</ampm_time_style> - <css_class></css_class> - <date_only type="int">1</date_only> - <date_separator>/</date_separator> - <default_now type="int">0</default_now> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <hidden type="int">0</hidden> - <input_order>dmy</input_order> - <input_style>text</input_style> - <required type="int">0</required> - <time_separator>:</time_separator> - <title>Date de livraison confirmée</title> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="not_datetime">You did not enter a valid date and time.</message> - <message name="datetime_out_of_range">The date and time you entered were out of range.</message> - </messages> - </field> - <field><id>order_state</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <max_length></max_length> - <required type="int">0</required> - <title>Etat</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <default>python:here.portal_workflow.getInfoFor(here, 'simulation_state')</default> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - <field><id>discussion_state</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <max_length></max_length> - <required type="int">0</required> - <title>Discussion</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <default>python:here.portal_workflow.getInfoFor(here, 'discussion_state')</default> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - <field><id>my_trade_condition_title</id> <type>RelationStringField</type> - <values> - <alternate_name></alternate_name> - <base_category>specialise</base_category> - <catalog_index>Title</catalog_index> - <css_class></css_class> - <default></default> - <default_module>condition_achat</default_module> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <jump_method>base_jump_relation</jump_method> - <max_length></max_length> - <portal_type type="list">[('Condition Achat', 'Condition Achat')]</portal_type> - <required type="int">0</required> - <title>Condition d'achat</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <update_method>base_update_relation</update_method> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>center</title> - <fields> - - <field><id>my_comment</id> <type>TextAreaField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <height type="int">3</height> - <hidden type="int">0</hidden> - <max_length></max_length> - <max_linelength></max_linelength> - <max_lines></max_lines> - <required type="int">0</required> - <title>Commentaires</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - <width type="int">80</width> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_many_lines">You entered too many lines.</message> - <message name="line_too_long">A line was too long.</message> - <message name="too_long">You entered too many characters.</message> - </messages> - </field> - <field><id>my_total_quantity</id> <type>FloatField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">10</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">1</hidden> - <required type="int">0</required> - <title>Quantité totale</title> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <title>python:'Quantité totale : %.2f' % here.getTargetTotalQuantity()</title> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="not_float">You did not enter a floating point number.</message> - </messages> - </field> - <field><id>my_total_duration</id> <type>FloatField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">10</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">1</hidden> - <required type="int">0</required> - <title>Durée totale</title> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <title>python:'Durée totale (h) : %.2f' % here.ProductionOrder_getTotalDuration()</title> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="not_float">You did not enter a floating point number.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>bottom</title> - <fields> - - <field><id>listbox</id> <type>ListBox</type> - <values> - <all_columns type="list">[('id', 'Ligne n\xb0'), ('resource_title', 'Produit'), ('ProductionOrderLine_getResourceState', 'Etat produit'), ('ProductionOrderLine_getResourceAccord', 'Accord technique'), ('ProductionOrderLine_getResourceInfosClient', 'Infos client'), ('total_quantity', 'Quantit\xe9 totale'), ('quantity_unit', 'Unit\xe9'), ('total_price', 'Montant total'), ('target_stop_date', 'Date livraison')]</all_columns> - <all_editable_columns type="list">[('quantity_unit', 'Unit')]</all_editable_columns> - <alternate_name></alternate_name> - <columns type="list">[('id', 'Ligne n\xb0'), ('resource_title', 'Produit'), ('ProductionOrderLine_getResourceState', 'Etat produit'), ('ProductionOrderLine_getResourceAccord', 'Accord technique'), ('ProductionOrderLine_getResourceInfosClient', 'Infos client'), ('total_quantity', 'Quantit\xe9 totale'), ('quantity_unit', 'Unit\xe9'), ('total_price', 'Montant total'), ('target_stop_date', 'Date livraison')]</columns> - <css_class></css_class> - <default></default> - <default_params type="list">[]</default_params> - <description></description> - <domain_root_list type="list">[]</domain_root_list> - <domain_tree type="int">0</domain_tree> - <editable type="int">1</editable> - <editable_columns type="list">[('quantity_unit', 'Unit')]</editable_columns> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <global_attributes type="list">[]</global_attributes> - <hidden type="int">0</hidden> - <lines type="int">10</lines> - <list_action>list</list_action> - <list_method type="method">searchFolder</list_method> - <meta_types type="list">[]</meta_types> - <portal_types type="list">[('Production Order Line', 'Production Order Line')]</portal_types> - <report_root_list type="list">[]</report_root_list> - <report_tree type="int">0</report_tree> - <search type="int">0</search> - <search_columns></search_columns> - <select type="int">0</select> - <selection_name>purchase_order_line_selection</selection_name> - <sort type="list">[('id', 'id')]</sort> - <sort_columns></sort_columns> - <stat_method></stat_method> - <title>Lignes d'OF</title> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>hidden</title> - <fields> - - <field><id>listbox_quantity</id> <type>FloatField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">10</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <required type="int">0</required> - <title>Quantité</title> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="not_float">You did not enter a floating point number.</message> - </messages> - </field> - <field><id>listbox_quantity_unit</id> <type>ListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <extra_item></extra_item> - <first_item type="int">0</first_item> - <hidden type="int">0</hidden> - <items type="list">[]</items> - <required type="int">0</required> - <size type="int">1</size> - <title>Unité</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <items>here/portal_categories/quantity_unit/getFormItemList</items> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - <field><id>listbox_price</id> <type>FloatField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">10</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <required type="int">0</required> - <title>Prix d'achat</title> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="not_float">You did not enter a floating point number.</message> - </messages> - </field> - </fields> - </group> - </groups> -</form> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_manufacturing/production_packing_list_aggregated_view.form b/product/Coramy/skins/coramy_manufacturing/production_packing_list_aggregated_view.form deleted file mode 100755 index 737813f6ba..0000000000 --- a/product/Coramy/skins/coramy_manufacturing/production_packing_list_aggregated_view.form +++ /dev/null @@ -1,647 +0,0 @@ -<?xml version="1.0"?> - -<form> - <title>Livraison fabrication</title> - <row_length>4</row_length> - <name>production_packing_list_view</name> - <pt>form_view</pt> - <action>base_edit</action> - <method>POST</method> - <enctype>multipart/form-data</enctype> - <encoding>UTF-8</encoding> - <stored_encoding>ISO-8859-1</stored_encoding> - <unicode_mode>false</unicode_mode> - <groups> - <group> - <title>left</title> - <fields> - - <field><id>my_id</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">10</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <max_length></max_length> - <required type="int">1</required> - <title>N° livraison</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - <field><id>my_destination_section</id> <type>ListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <extra_item></extra_item> - <first_item type="int">0</first_item> - <hidden type="int">0</hidden> - <items type="list">[]</items> - <required type="int">0</required> - <size type="int">1</size> - <title>Société</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <items>python:here.portal_categories.group.Coramy.getCategoryChildIdItemList(base=1,display_none_category=1)</items> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - <field><id>my_destination_administration_person_title</id> <type>RelationStringField</type> - <values> - <alternate_name></alternate_name> - <base_category>destination_administration</base_category> - <catalog_index>Title</catalog_index> - <css_class></css_class> - <default></default> - <default_module>person</default_module> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <jump_method>base_jump_relation</jump_method> - <max_length></max_length> - <portal_type type="list">[('Person', 'Person')]</portal_type> - <required type="int">0</required> - <title>Gestionaire</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <update_method>base_update_relation</update_method> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <default>python:here.getCausalityValue(portal_type="Sales Order").getDestinationAdministrationPersonTitle()</default> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - <field><id>my_incoterm</id> <type>ListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <extra_item></extra_item> - <first_item type="int">0</first_item> - <hidden type="int">0</hidden> - <items type="list">[]</items> - <required type="int">0</required> - <size type="int">1</size> - <title>Incoterm</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <items>python:here.portal_categories.incoterm.getCategoryChildItemList(display_id = 'getTitle', display_none_category=1)</items> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - <field><id>my_delivery_mode</id> <type>ListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <extra_item></extra_item> - <first_item type="int">0</first_item> - <hidden type="int">0</hidden> - <items type="list">[]</items> - <required type="int">0</required> - <size type="int">1</size> - <title>Mode de livraison</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <items>here/portal_categories/delivery_mode/getFormItemList</items> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>right</title> - <fields> - - <field><id>my_causality_id</id> <type>RelationStringField</type> - <values> - <alternate_name></alternate_name> - <base_category>causality</base_category> - <catalog_index>id</catalog_index> - <css_class></css_class> - <default></default> - <default_module>ordre_fabrication</default_module> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">10</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <jump_method>base_jump_relation</jump_method> - <max_length></max_length> - <portal_type type="list">[('Production Order', 'Production Order')]</portal_type> - <required type="int">0</required> - <title>N° OF</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <update_method>base_update_relation</update_method> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - <field><id>my_source_title</id> <type>RelationStringField</type> - <values> - <alternate_name></alternate_name> - <base_category>source</base_category> - <catalog_index>Title</catalog_index> - <css_class></css_class> - <default></default> - <default_module>organisation</default_module> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <jump_method>base_jump_relation</jump_method> - <max_length></max_length> - <portal_type type="list">[('Organisation', 'Organisation'), ('Category', 'Category')]</portal_type> - <required type="int">0</required> - <title>Expédié par</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <update_method>base_update_relation</update_method> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - <field><id>my_destination_title</id> <type>RelationStringField</type> - <values> - <alternate_name></alternate_name> - <base_category>destination</base_category> - <catalog_index>Title</catalog_index> - <css_class></css_class> - <default></default> - <default_module>organisation</default_module> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <jump_method>base_jump_relation</jump_method> - <max_length></max_length> - <portal_type type="list">[('Organisation', 'Organisation'), ('Category', 'Category')]</portal_type> - <required type="int">0</required> - <title>Livré à </title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <update_method>base_update_relation</update_method> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - <field><id>my_start_date</id> <type>DateTimeField</type> - <values> - <allow_empty_time type="int">0</allow_empty_time> - <alternate_name></alternate_name> - <ampm_time_style type="int">0</ampm_time_style> - <css_class></css_class> - <date_only type="int">1</date_only> - <date_separator>/</date_separator> - <default_now type="int">0</default_now> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <hidden type="int">1</hidden> - <input_order>dmy</input_order> - <input_style>text</input_style> - <required type="int">0</required> - <time_separator>:</time_separator> - <title>Prévu au plus tôt le</title> - </values> - <tales> - <title>python:'Prévu au plus tôt le : %s' % here.getStartDate()</title> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="not_datetime">You did not enter a valid date and time.</message> - <message name="datetime_out_of_range">The date and time you entered were out of range.</message> - </messages> - </field> - <field><id>my_target_start_date</id> <type>DateTimeField</type> - <values> - <allow_empty_time type="int">0</allow_empty_time> - <alternate_name></alternate_name> - <ampm_time_style type="int">0</ampm_time_style> - <css_class></css_class> - <date_only type="int">1</date_only> - <date_separator>/</date_separator> - <default_now type="int">0</default_now> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <hidden type="int">0</hidden> - <input_order>dmy</input_order> - <input_style>text</input_style> - <required type="int">0</required> - <time_separator>:</time_separator> - <title>Livré au plus tôt le</title> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="not_datetime">You did not enter a valid date and time.</message> - <message name="datetime_out_of_range">The date and time you entered were out of range.</message> - </messages> - </field> - <field><id>my_stop_date</id> <type>DateTimeField</type> - <values> - <allow_empty_time type="int">0</allow_empty_time> - <alternate_name></alternate_name> - <ampm_time_style type="int">0</ampm_time_style> - <css_class></css_class> - <date_only type="int">1</date_only> - <date_separator>/</date_separator> - <default_now type="int">0</default_now> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <hidden type="int">1</hidden> - <input_order>dmy</input_order> - <input_style>text</input_style> - <required type="int">0</required> - <time_separator>:</time_separator> - <title>Prévu au plus tard le</title> - </values> - <tales> - <title>python:'Prévu au plus tard le : %s' % here.getStopDate()</title> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="not_datetime">You did not enter a valid date and time.</message> - <message name="datetime_out_of_range">The date and time you entered were out of range.</message> - </messages> - </field> - <field><id>my_target_stop_date</id> <type>DateTimeField</type> - <values> - <allow_empty_time type="int">0</allow_empty_time> - <alternate_name></alternate_name> - <ampm_time_style type="int">0</ampm_time_style> - <css_class></css_class> - <date_only type="int">1</date_only> - <date_separator>/</date_separator> - <default_now type="int">0</default_now> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <hidden type="int">0</hidden> - <input_order>dmy</input_order> - <input_style>text</input_style> - <required type="int">0</required> - <time_separator>:</time_separator> - <title>Livré au plus tard le</title> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="not_datetime">You did not enter a valid date and time.</message> - <message name="datetime_out_of_range">The date and time you entered were out of range.</message> - </messages> - </field> - <field><id>delivery_state</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <max_length></max_length> - <required type="int">0</required> - <title>Etat</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <default>python:here.portal_workflow.getInfoFor(here, 'simulation_state')</default> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>center</title> - <fields> - - <field><id>my_comment</id> <type>TextAreaField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <height type="int">3</height> - <hidden type="int">0</hidden> - <max_length></max_length> - <max_linelength></max_linelength> - <max_lines></max_lines> - <required type="int">0</required> - <title>Commentaires</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - <width type="int">80</width> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_many_lines">You entered too many lines.</message> - <message name="line_too_long">A line was too long.</message> - <message name="too_long">You entered too many characters.</message> - </messages> - </field> - <field><id>my_total_quantity</id> <type>FloatField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">10</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">1</hidden> - <required type="int">0</required> - <title>Objectif quantité</title> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <title>python:'Objectif quantité : %.2f' % here.getTotalQuantity()</title> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="not_float">You did not enter a floating point number.</message> - </messages> - </field> - <field><id>my_target_total_quantity</id> <type>FloatField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">10</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">1</hidden> - <required type="int">0</required> - <title>Quantité</title> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <title>python:'Quantité : %.2f' % here.getTargetTotalQuantity()</title> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="not_float">You did not enter a floating point number.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>bottom</title> - <fields> - - <field><id>listbox</id> <type>ListBox</type> - <values> - <all_columns type="list">[('id', 'Ligne n\xb0'), ('resource_title', 'Mod\xe8le'), ('total_quantity', 'Objectif quantit\xe9'), ('target_total_quantity', 'Quantit\xe9'), ('quantity_unit', 'Unit\xe9')]</all_columns> - <all_editable_columns type="list">[('quantity_unit', 'Unit')]</all_editable_columns> - <alternate_name></alternate_name> - <columns type="list">[('id', 'Ligne n\xb0'), ('resource_title', 'Mod\xe8le'), ('total_quantity', 'Objectif quantit\xe9'), ('target_total_quantity', 'Quantit\xe9'), ('quantity_unit', 'Unit\xe9')]</columns> - <css_class></css_class> - <default></default> - <default_params type="list">[]</default_params> - <description></description> - <domain_root_list type="list">[]</domain_root_list> - <domain_tree type="int">0</domain_tree> - <editable type="int">1</editable> - <editable_columns type="list">[('quantity_unit', 'Unit')]</editable_columns> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <global_attributes type="list">[]</global_attributes> - <hidden type="int">0</hidden> - <lines type="int">10</lines> - <list_action>list</list_action> - <list_method type="method">searchFolder</list_method> - <meta_types type="list">[]</meta_types> - <portal_types type="list">[('Production Packing List Line', 'Production Packing List Line')]</portal_types> - <report_root_list type="list">[]</report_root_list> - <report_tree type="int">0</report_tree> - <search type="int">0</search> - <search_columns></search_columns> - <select type="int">0</select> - <selection_name>production_packing_list_line_selection</selection_name> - <sort type="list">[('id', 'id')]</sort> - <sort_columns></sort_columns> - <stat_method></stat_method> - <title>Ligne de livraison</title> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>hidden</title> - <fields> - - <field><id>listbox_quantity</id> <type>FloatField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">10</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <required type="int">0</required> - <title>Quantité</title> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="not_float">You did not enter a floating point number.</message> - </messages> - </field> - <field><id>listbox_quantity_unit</id> <type>ListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <extra_item></extra_item> - <first_item type="int">0</first_item> - <hidden type="int">0</hidden> - <items type="list">[]</items> - <required type="int">0</required> - <size type="int">1</size> - <title>Unité</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <items>here/portal_categories/quantity_unit/getFormItemList</items> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - <field><id>listbox_price</id> <type>FloatField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">10</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <required type="int">0</required> - <title>Prix de vente</title> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="not_float">You did not enter a floating point number.</message> - </messages> - </field> - </fields> - </group> - </groups> -</form> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_manufacturing/production_packing_list_list.form b/product/Coramy/skins/coramy_manufacturing/production_packing_list_list.form deleted file mode 100755 index 29410f254e..0000000000 --- a/product/Coramy/skins/coramy_manufacturing/production_packing_list_list.form +++ /dev/null @@ -1,63 +0,0 @@ -<?xml version="1.0"?> - -<form> - <title>Liste de livraisons fabrication</title> - <row_length>4</row_length> - <name>production_packing_list_list</name> - <pt>form_list</pt> - <action></action> - <method>POST</method> - <enctype></enctype> - <encoding>UTF-8</encoding> - <stored_encoding>ISO-8859-1</stored_encoding> - <unicode_mode>false</unicode_mode> - <groups> - <group> - <title>Default</title> - <fields> - - <field><id>listbox</id> <type>ListBox</type> - <values> - <all_columns type="list">[('id', 'Livraison'), ('default_causality_id', 'OF'), ('default_destination_section_title', 'Soci\xe9t\xe9'), ('default_source_title', 'Exp\xe9di\xe9 par'), ('default_destination_title', 'Livrer \xe0'), ('target_start_date', "Date d'exp\xe9dition"), ('target_stop_date', 'Date de livraison'), ('causality_state', 'Coh\xe9rence'), ('simulation_state', 'Etat')]</all_columns> - <all_editable_columns type="list">[]</all_editable_columns> - <alternate_name></alternate_name> - <columns type="list">[('id', 'Livraison'), ('default_causality_id', 'OF'), ('ProductionPackingList_getProductionOrderDescription', 'Description'), ('default_destination_section_title', 'Soci\xe9t\xe9'), ('default_source_title', 'Exp\xe9di\xe9 par'), ('default_destination_title', 'Livrer \xe0'), ('target_start_date', "Date d'exp\xe9dition"), ('target_stop_date', 'Date de livraison'), ('causality_state', 'Coh\xe9rence'), ('simulation_state', 'Etat')]</columns> - <css_class></css_class> - <default></default> - <default_params type="list">[]</default_params> - <description></description> - <domain_root_list type="list">[]</domain_root_list> - <domain_tree type="int">0</domain_tree> - <editable type="int">1</editable> - <editable_columns type="list">[]</editable_columns> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <global_attributes type="list">[]</global_attributes> - <hidden type="int">0</hidden> - <lines type="int">30</lines> - <list_action>list</list_action> - <list_method type="method">portal_catalog</list_method> - <meta_types type="list">[]</meta_types> - <portal_types type="list">[('Production Packing List', 'Production Packing List')]</portal_types> - <report_root_list type="list">[]</report_root_list> - <report_tree type="int">0</report_tree> - <search type="int">1</search> - <search_columns type="list">[]</search_columns> - <select type="int">1</select> - <selection_name>production_packing_list_selection</selection_name> - <sort type="list">[('id', 'id')]</sort> - <sort_columns></sort_columns> - <stat_method></stat_method> - <title>Livraisons de fabrication</title> - </values> - <tales> - <list_method>python:here.getPortalObject().portal_skins.local_list_method[here.REQUEST.list_method_id]</list_method> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - </messages> - </field> - </fields> - </group> - </groups> -</form> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_manufacturing/production_packing_list_print.pt b/product/Coramy/skins/coramy_manufacturing/production_packing_list_print.pt deleted file mode 100755 index 4fa98b5457..0000000000 --- a/product/Coramy/skins/coramy_manufacturing/production_packing_list_print.pt +++ /dev/null @@ -1,137 +0,0 @@ -<HTML> - <HEAD> - <meta http-equiv="content-type" content="text/html;charset=ISO-8859-1"> - <title tal:content="here/getTitle">Coramy</title> - <link rel=stylesheet type="text/css" href="modele_catalog_c"> - </HEAD> - - <BODY bgcolor="#ffffff" tal:define="delivery_list python:here.object_action_list(selection_name='production_packing_list_selection',max_nb=10)"> -<TABLE tal:repeat="delivery delivery_list" width="660" height="955" cellpadding="0" cellspacing="0" class="PageA4"> - <TABLE width="660" height="900" cellpadding="0" cellspacing="0" - tal:define="fournisseur python:delivery.getSourceValue(portal_type=['Organisation','Category']); - livraison python:delivery.getDestinationValue(portal_type= - ['Organisation','Category']); - grand_total python:[0]; - order_lines python:delivery.contentValues(filter={'portal_type': - 'Production Packing List Line'}); - order_lines_list python:delivery.sort_object_list(unordered_list=order_lines,sort_order = (('resource', 'ASC'),))"><!-- Tableau general --> - <TR> - <TD> - <TABLE border="0" width="100%" height="100%"> - <TR> - <TD valign="top"> - <h2>Coramy</h2> - </TD> - <TD align="center"> - <h2>Livraison fabrication n° <span tal:content="python:delivery.getId()"/></h2> - <h2>OF n° <span tal:content="python:delivery.getDefaultCausalityId()"/></h2> - </TD> - <TD valign="top" align="right"> - <span tal:content="python:'Expédiée le : '+str(delivery.getStartDate())"/> - </TD> - </TR> - </TD> - </TR> - - <TR><!-- Espacement inter-tableaux --> - <TD height="15"/> - </TR> - - <TR height="10%"><!-- Infos --> - <TD> - <TABLE border="0" width="100%" height="100%"> - <TR> - <TD nowrap class="bold">Expédié par </TD> - <TD nowrap> - <SPAN tal:condition="python:fournisseur<>None"> - <b><SPAN tal:content="python:modules['string'].capwords(fournisseur.getTitle())"/></b> - </SPAN> - </TD> - <TD width="100%"> </TD> - <TD nowrap class="bold">Livrer à </TD> - <TD nowrap> - <SPAN tal:condition="python:livraison<>None"> - <b><SPAN tal:content="python:modules['string'].capwords(livraison.getTitle())"/></b> - <br><SPAN tal:condition="python:livraison.getPortalType()<>'Category'"> - <SPAN tal:define="address_items python:modules['string']. - split(livraison.getDefaultAddress().asText(country='France'),'\n')"> - <SPAN tal:repeat="item address_items"> - <SPAN tal:content="item"/><br> - </SPAN> - </SPAN> - </SPAN> - </SPAN> - </TD> - </TR> - - </TABLE> - </TD> - </TR> - - - <TR><!-- Espacement inter-tableaux --> - <TD height="15"/> - </TR> - - <TR><!-- Tableau de lignes de commande --> - <TD valign="top"> - <TABLE border="2" width="100%"> - <TR> - <TD class="bold" align="center">Code interne</TD> - <TD class="bold" align="center">Type composant</TD> - <TD class="bold" align="center">Fournisseur</TD> - <TD class="bold" align="center" width="100%">Désignation</TD> - <TD class="bold" align="center">Variantes</TD> - <TD class="bold" align="center">Quantité</TD> - <TD class="bold" align="center">Unité</TD> - </TR> - <SPAN tal:repeat="order_line order_lines_list"> - <SPAN tal:define="delivery_cell_list python:order_line.getDeliveryCellPrintList()"> - <TR tal:repeat="delivery_cell delivery_cell_list"> - <TD tal:content="python:delivery_cell[1]" align="left"></TD> - <TD nowrap tal:content="python:delivery_cell[9]" align="left"></TD> - <TD tal:content="python:delivery_cell[10]" align="left"></TD> - <TD tal:content="python:delivery_cell[2]" align="left"></TD> - <TD nowrap tal:define="variantes_list python:delivery_cell[3]" align="left"> - <SPAN tal:repeat="variante variantes_list"> - <SPAN tal:condition="python:variante<>'value' and variante<>None"> - <SPAN tal:define="variante_items python:variante.split('/')"> - <SPAN tal:content="python:variante_items[len(variante_items)-1]"/><BR> - </SPAN> - </SPAN> - </SPAN> - </TD> - <TD tal:content="python: '%.0f' % delivery_cell[4]" align="right"></TD> - <TD tal:content="python:delivery_cell[5]" align="left"></TD> - - </TR> - </SPAN> - </SPAN> - </TABLE> - </TD> - </TR> - - <TR tal:define="commentaires_list python:modules['string'].split(delivery.getComment(''),'\n')"><!-- Notes --> - <TD valign="top"> - <span tal:repeat="commentaires_item commentaires_list"> - <br> - <span tal:content="python:commentaires_item"/></span> - </TD> - </TR> - - <TR><!-- Espacement inter-tableaux --> - <TD height="15"/> - </TR> - - <TR> - <TD height="90%"/> - </TR> - <TR> - <TD align="center">Coramy - 5 bis, rue Denis Cordonnier - 59820 Gravelines (FRANCE)<br>Tél. : + 33 (0) 3 28 51 91 51 - Fax : + 33 (0) 3 28 23 34 96 - <p class="Copy">S.A.S. au capital de 435.200 € - T.V.A. FR 67 611 750 274 - R.C. Dunkerque 611 750 274 - SIRET 611 750 274 00023 - CNUF 15971</p> - </TD> - </TR> - </TABLE> -</TABLE> - </BODY> -</HTML> diff --git a/product/Coramy/skins/coramy_manufacturing/production_packing_list_view.form b/product/Coramy/skins/coramy_manufacturing/production_packing_list_view.form deleted file mode 100755 index 7db302a026..0000000000 --- a/product/Coramy/skins/coramy_manufacturing/production_packing_list_view.form +++ /dev/null @@ -1,680 +0,0 @@ -<?xml version="1.0"?> - -<form> - <title>Livraison fabrication</title> - <row_length>4</row_length> - <name>production_packing_list_view</name> - <pt>form_view</pt> - <action>base_edit</action> - <method>POST</method> - <enctype>multipart/form-data</enctype> - <encoding>UTF-8</encoding> - <stored_encoding>ISO-8859-1</stored_encoding> - <unicode_mode>false</unicode_mode> - <groups> - <group> - <title>left</title> - <fields> - - <field><id>my_id</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">10</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <max_length></max_length> - <required type="int">1</required> - <title>N° livraison</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - <field><id>my_destination_section</id> <type>ListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <extra_item></extra_item> - <first_item type="int">0</first_item> - <hidden type="int">0</hidden> - <items type="list">[]</items> - <required type="int">0</required> - <size type="int">1</size> - <title>Société</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <items>python:here.portal_categories.group.Coramy.getCategoryChildIdItemList(base=1,display_none_category=1)</items> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - <field><id>my_destination_administration_person_title</id> <type>RelationStringField</type> - <values> - <alternate_name></alternate_name> - <base_category>destination_administration</base_category> - <catalog_index>Title</catalog_index> - <css_class></css_class> - <default></default> - <default_module>person</default_module> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <jump_method>base_jump_relation</jump_method> - <max_length></max_length> - <portal_type type="list">[('Person', 'Person')]</portal_type> - <required type="int">0</required> - <title>Gestionaire</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <update_method>base_update_relation</update_method> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <default>python:here.getCausalityValue(portal_type="Production Order").getDestinationAdministrationPersonTitle()</default> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - <field><id>my_incoterm</id> <type>ListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <extra_item></extra_item> - <first_item type="int">0</first_item> - <hidden type="int">0</hidden> - <items type="list">[]</items> - <required type="int">0</required> - <size type="int">1</size> - <title>Incoterm</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <items>python:here.portal_categories.incoterm.getCategoryChildItemList(display_id = 'getTitle', display_none_category=1)</items> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - <field><id>my_delivery_mode</id> <type>ListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <extra_item></extra_item> - <first_item type="int">0</first_item> - <hidden type="int">0</hidden> - <items type="list">[]</items> - <required type="int">0</required> - <size type="int">1</size> - <title>Mode de livraison</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <items>here/portal_categories/delivery_mode/getFormItemList</items> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>right</title> - <fields> - - <field><id>my_causality_id</id> <type>RelationStringField</type> - <values> - <alternate_name></alternate_name> - <base_category>causality</base_category> - <catalog_index>id</catalog_index> - <css_class></css_class> - <default></default> - <default_module>ordre_fabrication</default_module> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">10</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <jump_method>base_jump_relation</jump_method> - <max_length></max_length> - <portal_type type="list">[('Production Order', 'Production Order')]</portal_type> - <required type="int">0</required> - <title>N° OF</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <update_method>base_update_relation</update_method> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - <field><id>my_source_title</id> <type>RelationStringField</type> - <values> - <alternate_name></alternate_name> - <base_category>source</base_category> - <catalog_index>Title</catalog_index> - <css_class></css_class> - <default></default> - <default_module>organisation</default_module> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <jump_method>base_jump_relation</jump_method> - <max_length></max_length> - <portal_type type="list">[('Organisation', 'Organisation'), ('Category', 'Category')]</portal_type> - <required type="int">0</required> - <title>Expédié par</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <update_method>base_update_relation</update_method> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - <field><id>my_destination_title</id> <type>RelationStringField</type> - <values> - <alternate_name></alternate_name> - <base_category>destination</base_category> - <catalog_index>Title</catalog_index> - <css_class></css_class> - <default></default> - <default_module>organisation</default_module> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <jump_method>base_jump_relation</jump_method> - <max_length></max_length> - <portal_type type="list">[('Organisation', 'Organisation'), ('Category', 'Category')]</portal_type> - <required type="int">0</required> - <title>Livré à </title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <update_method>base_update_relation</update_method> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - <field><id>my_start_date</id> <type>DateTimeField</type> - <values> - <allow_empty_time type="int">0</allow_empty_time> - <alternate_name></alternate_name> - <ampm_time_style type="int">0</ampm_time_style> - <css_class></css_class> - <date_only type="int">1</date_only> - <date_separator>/</date_separator> - <default_now type="int">0</default_now> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <hidden type="int">1</hidden> - <input_order>dmy</input_order> - <input_style>text</input_style> - <required type="int">0</required> - <time_separator>:</time_separator> - <title>Date d'expédition prévue</title> - </values> - <tales> - <title>python:'Eexpédition prévue le : %s' % here.getStartDate()</title> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="not_datetime">You did not enter a valid date and time.</message> - <message name="datetime_out_of_range">The date and time you entered were out of range.</message> - </messages> - </field> - <field><id>my_target_start_date</id> <type>DateTimeField</type> - <values> - <allow_empty_time type="int">0</allow_empty_time> - <alternate_name></alternate_name> - <ampm_time_style type="int">0</ampm_time_style> - <css_class></css_class> - <date_only type="int">1</date_only> - <date_separator>/</date_separator> - <default_now type="int">0</default_now> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <hidden type="int">0</hidden> - <input_order>dmy</input_order> - <input_style>text</input_style> - <required type="int">0</required> - <time_separator>:</time_separator> - <title>Date d'expédition</title> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="not_datetime">You did not enter a valid date and time.</message> - <message name="datetime_out_of_range">The date and time you entered were out of range.</message> - </messages> - </field> - <field><id>my_stop_date</id> <type>DateTimeField</type> - <values> - <allow_empty_time type="int">0</allow_empty_time> - <alternate_name></alternate_name> - <ampm_time_style type="int">0</ampm_time_style> - <css_class></css_class> - <date_only type="int">1</date_only> - <date_separator>/</date_separator> - <default_now type="int">0</default_now> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <hidden type="int">1</hidden> - <input_order>dmy</input_order> - <input_style>text</input_style> - <required type="int">0</required> - <time_separator>:</time_separator> - <title>Date de livraison prévue</title> - </values> - <tales> - <title>python:'Livraison prévue le : %s' % here.getStopDate()</title> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="not_datetime">You did not enter a valid date and time.</message> - <message name="datetime_out_of_range">The date and time you entered were out of range.</message> - </messages> - </field> - <field><id>my_target_stop_date</id> <type>DateTimeField</type> - <values> - <allow_empty_time type="int">0</allow_empty_time> - <alternate_name></alternate_name> - <ampm_time_style type="int">0</ampm_time_style> - <css_class></css_class> - <date_only type="int">1</date_only> - <date_separator>/</date_separator> - <default_now type="int">0</default_now> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <hidden type="int">0</hidden> - <input_order>dmy</input_order> - <input_style>text</input_style> - <required type="int">0</required> - <time_separator>:</time_separator> - <title>Date de livraison</title> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="not_datetime">You did not enter a valid date and time.</message> - <message name="datetime_out_of_range">The date and time you entered were out of range.</message> - </messages> - </field> - <field><id>delivery_state</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <max_length></max_length> - <required type="int">0</required> - <title>Etat</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <default>python:here.portal_workflow.getInfoFor(here, 'simulation_state')</default> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>center</title> - <fields> - - <field><id>my_comment</id> <type>TextAreaField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <height type="int">3</height> - <hidden type="int">0</hidden> - <max_length></max_length> - <max_linelength></max_linelength> - <max_lines></max_lines> - <required type="int">0</required> - <title>Commentaires</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - <width type="int">80</width> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_many_lines">You entered too many lines.</message> - <message name="line_too_long">A line was too long.</message> - <message name="too_long">You entered too many characters.</message> - </messages> - </field> - <field><id>my_total_quantity</id> <type>FloatField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">10</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">1</hidden> - <required type="int">0</required> - <title>Objectif quantité</title> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <title>python:'Objectif quantité : %.2f' % here.getTotalQuantity()</title> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="not_float">You did not enter a floating point number.</message> - </messages> - </field> - <field><id>my_target_total_quantity</id> <type>FloatField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">10</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">1</hidden> - <required type="int">0</required> - <title>Quantité</title> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <title>python:'Quantité : %.2f' % here.getTargetTotalQuantity()</title> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="not_float">You did not enter a floating point number.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>bottom</title> - <fields> - - <field><id>listbox</id> <type>ListBox</type> - <values> - <all_columns type="list">[('resource_title', 'Produit'), ('variation_text', 'Variantes'), ('quantity', 'Objectif quantit\xe9'), ('target_quantity', 'Quantit\xe9'), ('item_id_list', 'Lots associ\xe9s'), ('quantity_unit', 'Unit\xe9')]</all_columns> - <all_editable_columns type="list">[]</all_editable_columns> - <alternate_name></alternate_name> - <columns type="list">[('resource_title', 'Produit'), ('variation_text', 'Variantes'), ('getPurchaseDeliveryCellSourceReference', 'R\xe9f. fournisseur'), ('getDeliveryCellResourceSourceTitle', 'Fournisseur'), ('quantity', 'Objectif quantit\xe9'), ('target_quantity', 'Quantit\xe9'), ('item_id_list', 'Lots associ\xe9s'), ('quantity_unit', 'Unit\xe9')]</columns> - <css_class></css_class> - <default></default> - <default_params type="list">[]</default_params> - <description></description> - <domain_root_list type="list">[]</domain_root_list> - <domain_tree type="int">0</domain_tree> - <editable type="int">1</editable> - <editable_columns type="list">[('target_quantity', 'target_quantity'), ('item_id_list', 'item_id_list')]</editable_columns> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <global_attributes type="list">[]</global_attributes> - <hidden type="int">0</hidden> - <lines type="int">100</lines> - <list_action>folder_contents</list_action> - <list_method type="method">Delivery_zGetCellList</list_method> - <meta_types type="list">[]</meta_types> - <portal_types type="list">[]</portal_types> - <report_root_list type="list">[]</report_root_list> - <report_tree type="int">0</report_tree> - <search type="int">0</search> - <search_columns type="list">[]</search_columns> - <select type="int">0</select> - <selection_name>delivery_cells_selection</selection_name> - <sort type="list">[('variation_text', 'variation_text')]</sort> - <sort_columns></sort_columns> - <stat_method></stat_method> - <title>Lignes de livraison</title> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>hidden</title> - <fields> - - <field><id>listbox_item_id_list</id> <type>LinesField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default type="list">[]</default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <height type="int">2</height> - <hidden type="int">0</hidden> - <max_length></max_length> - <max_linelength></max_linelength> - <max_lines></max_lines> - <required type="int">0</required> - <title>Pièces en stock</title> - <unicode type="int">0</unicode> - <view_separator><br /> -</view_separator> - <whitespace_preserve type="int">0</whitespace_preserve> - <width type="int">8</width> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_many_lines">You entered too many lines.</message> - <message name="line_too_long">A line was too long.</message> - <message name="too_long">You entered too many characters.</message> - </messages> - </field> - <field><id>listbox_price</id> <type>FloatField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">10</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <required type="int">0</required> - <title>Price</title> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="not_float">You did not enter a floating point number.</message> - </messages> - </field> - <field><id>listbox_target_quantity</id> <type>FloatField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">10</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <required type="int">0</required> - <title>Inventory</title> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="not_float">You did not enter a floating point number.</message> - </messages> - </field> - <field><id>listbox_quantity_unit</id> <type>ListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <extra_item></extra_item> - <first_item type="int">0</first_item> - <hidden type="int">0</hidden> - <items type="list">[]</items> - <required type="int">0</required> - <size type="int">1</size> - <title>Unité</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <items>here/portal_categories/quantity_unit/getFormItemList</items> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - </fields> - </group> - </groups> -</form> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_manufacturing/production_report_aggregated_view.form b/product/Coramy/skins/coramy_manufacturing/production_report_aggregated_view.form deleted file mode 100755 index ef42e71056..0000000000 --- a/product/Coramy/skins/coramy_manufacturing/production_report_aggregated_view.form +++ /dev/null @@ -1,613 +0,0 @@ -<?xml version="1.0"?> - -<form> - <title>Livraison fabrication</title> - <row_length>4</row_length> - <name>production_packing_list_view</name> - <pt>form_view</pt> - <action>base_edit</action> - <method>POST</method> - <enctype>multipart/form-data</enctype> - <encoding>UTF-8</encoding> - <stored_encoding>ISO-8859-1</stored_encoding> - <unicode_mode>false</unicode_mode> - <groups> - <group> - <title>left</title> - <fields> - - <field><id>my_id</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">10</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <max_length></max_length> - <required type="int">1</required> - <title>N° livraison</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - <field><id>my_destination_section</id> <type>ListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <extra_item></extra_item> - <first_item type="int">0</first_item> - <hidden type="int">0</hidden> - <items type="list">[]</items> - <required type="int">0</required> - <size type="int">1</size> - <title>Société</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <items>python:here.portal_categories.group.Coramy.getCategoryChildIdItemList(base=1,display_none_category=1)</items> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - <field><id>my_destination_administration_person_title</id> <type>RelationStringField</type> - <values> - <alternate_name></alternate_name> - <base_category>destination_administration</base_category> - <catalog_index>Title</catalog_index> - <css_class></css_class> - <default></default> - <default_module>person</default_module> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <jump_method>base_jump_relation</jump_method> - <max_length></max_length> - <portal_type type="list">[('Person', 'Person')]</portal_type> - <required type="int">0</required> - <title>Gestionaire</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <update_method>base_update_relation</update_method> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <default>python:here.getCausalityValue(portal_type="Sales Order").getDestinationAdministrationPersonTitle()</default> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - <field><id>my_incoterm</id> <type>ListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <extra_item></extra_item> - <first_item type="int">0</first_item> - <hidden type="int">0</hidden> - <items type="list">[]</items> - <required type="int">0</required> - <size type="int">1</size> - <title>Incoterm</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <items>python:here.portal_categories.incoterm.getCategoryChildItemList(display_id = 'getTitle', display_none_category=1)</items> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - <field><id>my_delivery_mode</id> <type>ListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <extra_item></extra_item> - <first_item type="int">0</first_item> - <hidden type="int">0</hidden> - <items type="list">[]</items> - <required type="int">0</required> - <size type="int">1</size> - <title>Mode de livraison</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <items>here/portal_categories/delivery_mode/getFormItemList</items> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>right</title> - <fields> - - <field><id>my_causality_id</id> <type>RelationStringField</type> - <values> - <alternate_name></alternate_name> - <base_category>causality</base_category> - <catalog_index>id</catalog_index> - <css_class></css_class> - <default></default> - <default_module>commande_vente</default_module> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">10</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <jump_method>base_jump_relation</jump_method> - <max_length></max_length> - <portal_type type="list">[('Sales Order', 'Sales Order')]</portal_type> - <required type="int">0</required> - <title>N° commande</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <update_method>base_update_relation</update_method> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - <field><id>my_source_title</id> <type>RelationStringField</type> - <values> - <alternate_name></alternate_name> - <base_category>source</base_category> - <catalog_index>Title</catalog_index> - <css_class></css_class> - <default></default> - <default_module>organisation</default_module> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <jump_method>base_jump_relation</jump_method> - <max_length></max_length> - <portal_type type="list">[('Organisation', 'Organisation'), ('Category', 'Category')]</portal_type> - <required type="int">0</required> - <title>Produit par</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <update_method>base_update_relation</update_method> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - <field><id>my_start_date</id> <type>DateTimeField</type> - <values> - <allow_empty_time type="int">0</allow_empty_time> - <alternate_name></alternate_name> - <ampm_time_style type="int">0</ampm_time_style> - <css_class></css_class> - <date_only type="int">1</date_only> - <date_separator>/</date_separator> - <default_now type="int">0</default_now> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <hidden type="int">1</hidden> - <input_order>dmy</input_order> - <input_style>text</input_style> - <required type="int">0</required> - <time_separator>:</time_separator> - <title>Prévu au plus tôt le</title> - </values> - <tales> - <title>python:'Prévu au plus tôt le : %s' % here.getStartDate()</title> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="not_datetime">You did not enter a valid date and time.</message> - <message name="datetime_out_of_range">The date and time you entered were out of range.</message> - </messages> - </field> - <field><id>my_target_start_date</id> <type>DateTimeField</type> - <values> - <allow_empty_time type="int">0</allow_empty_time> - <alternate_name></alternate_name> - <ampm_time_style type="int">0</ampm_time_style> - <css_class></css_class> - <date_only type="int">1</date_only> - <date_separator>/</date_separator> - <default_now type="int">0</default_now> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <hidden type="int">0</hidden> - <input_order>dmy</input_order> - <input_style>text</input_style> - <required type="int">0</required> - <time_separator>:</time_separator> - <title>Livré au plus tôt le</title> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="not_datetime">You did not enter a valid date and time.</message> - <message name="datetime_out_of_range">The date and time you entered were out of range.</message> - </messages> - </field> - <field><id>my_stop_date</id> <type>DateTimeField</type> - <values> - <allow_empty_time type="int">0</allow_empty_time> - <alternate_name></alternate_name> - <ampm_time_style type="int">0</ampm_time_style> - <css_class></css_class> - <date_only type="int">1</date_only> - <date_separator>/</date_separator> - <default_now type="int">0</default_now> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <hidden type="int">1</hidden> - <input_order>dmy</input_order> - <input_style>text</input_style> - <required type="int">0</required> - <time_separator>:</time_separator> - <title>Prévu au plus tard le</title> - </values> - <tales> - <title>python:'Prévu au plus tard le : %s' % here.getStopDate()</title> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="not_datetime">You did not enter a valid date and time.</message> - <message name="datetime_out_of_range">The date and time you entered were out of range.</message> - </messages> - </field> - <field><id>my_target_stop_date</id> <type>DateTimeField</type> - <values> - <allow_empty_time type="int">0</allow_empty_time> - <alternate_name></alternate_name> - <ampm_time_style type="int">0</ampm_time_style> - <css_class></css_class> - <date_only type="int">1</date_only> - <date_separator>/</date_separator> - <default_now type="int">0</default_now> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <hidden type="int">0</hidden> - <input_order>dmy</input_order> - <input_style>text</input_style> - <required type="int">0</required> - <time_separator>:</time_separator> - <title>Livré au plus tard le</title> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="not_datetime">You did not enter a valid date and time.</message> - <message name="datetime_out_of_range">The date and time you entered were out of range.</message> - </messages> - </field> - <field><id>delivery_state</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <max_length></max_length> - <required type="int">0</required> - <title>Etat</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <default>python:here.portal_workflow.getInfoFor(here, 'simulation_state')</default> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>center</title> - <fields> - - <field><id>my_comment</id> <type>TextAreaField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <height type="int">3</height> - <hidden type="int">0</hidden> - <max_length></max_length> - <max_linelength></max_linelength> - <max_lines></max_lines> - <required type="int">0</required> - <title>Commentaires</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - <width type="int">80</width> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_many_lines">You entered too many lines.</message> - <message name="line_too_long">A line was too long.</message> - <message name="too_long">You entered too many characters.</message> - </messages> - </field> - <field><id>my_total_quantity</id> <type>FloatField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">10</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">1</hidden> - <required type="int">0</required> - <title>Objectif quantité</title> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <title>python:'Objectif quantité : %.2f' % here.getTotalQuantity()</title> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="not_float">You did not enter a floating point number.</message> - </messages> - </field> - <field><id>my_target_total_quantity</id> <type>FloatField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">10</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">1</hidden> - <required type="int">0</required> - <title>Quantité</title> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <title>python:'Quantité : %.2f' % here.getTargetTotalQuantity()</title> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="not_float">You did not enter a floating point number.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>bottom</title> - <fields> - - <field><id>listbox</id> <type>ListBox</type> - <values> - <all_columns type="list">[('id', 'Ligne n\xb0'), ('resource_title', 'Mod\xe8le'), ('total_quantity', 'Objectif quantit\xe9'), ('target_total_quantity', 'Quantit\xe9'), ('quantity_unit', 'Unit\xe9')]</all_columns> - <all_editable_columns type="list">[('quantity_unit', 'Unit')]</all_editable_columns> - <alternate_name></alternate_name> - <columns type="list">[('id', 'Ligne n\xb0'), ('resource_title', 'Mod\xe8le'), ('total_quantity', 'Objectif quantit\xe9'), ('target_total_quantity', 'Quantit\xe9'), ('quantity_unit', 'Unit\xe9')]</columns> - <css_class></css_class> - <default></default> - <default_params type="list">[]</default_params> - <description></description> - <domain_root_list type="list">[]</domain_root_list> - <domain_tree type="int">0</domain_tree> - <editable type="int">1</editable> - <editable_columns type="list">[('quantity_unit', 'Unit')]</editable_columns> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <global_attributes type="list">[]</global_attributes> - <hidden type="int">0</hidden> - <lines type="int">10</lines> - <list_action>list</list_action> - <list_method type="method">searchFolder</list_method> - <meta_types type="list">[]</meta_types> - <portal_types type="list">[('Production Report Component', 'Production Report Component'), ('Production Report Operation', 'Production Report Operation')]</portal_types> - <report_root_list type="list">[]</report_root_list> - <report_tree type="int">0</report_tree> - <search type="int">0</search> - <search_columns></search_columns> - <select type="int">0</select> - <selection_name>sales_packing_list_line_selection</selection_name> - <sort type="list">[('id', 'id')]</sort> - <sort_columns></sort_columns> - <stat_method></stat_method> - <title>Ligne de livraison</title> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>hidden</title> - <fields> - - <field><id>listbox_quantity</id> <type>FloatField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">10</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <required type="int">0</required> - <title>Quantité</title> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="not_float">You did not enter a floating point number.</message> - </messages> - </field> - <field><id>listbox_quantity_unit</id> <type>ListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <extra_item></extra_item> - <first_item type="int">0</first_item> - <hidden type="int">0</hidden> - <items type="list">[]</items> - <required type="int">0</required> - <size type="int">1</size> - <title>Unité</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <items>here/portal_categories/quantity_unit/getFormItemList</items> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - <field><id>listbox_price</id> <type>FloatField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">10</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <required type="int">0</required> - <title>Prix de vente</title> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="not_float">You did not enter a floating point number.</message> - </messages> - </field> - </fields> - </group> - </groups> -</form> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_manufacturing/production_report_list.form b/product/Coramy/skins/coramy_manufacturing/production_report_list.form deleted file mode 100755 index 6f966e2168..0000000000 --- a/product/Coramy/skins/coramy_manufacturing/production_report_list.form +++ /dev/null @@ -1,63 +0,0 @@ -<?xml version="1.0"?> - -<form> - <title>Liste de rapports fabrication</title> - <row_length>4</row_length> - <name>production_report_list</name> - <pt>form_list</pt> - <action></action> - <method>POST</method> - <enctype></enctype> - <encoding>UTF-8</encoding> - <stored_encoding>ISO-8859-1</stored_encoding> - <unicode_mode>false</unicode_mode> - <groups> - <group> - <title>Default</title> - <fields> - - <field><id>listbox</id> <type>ListBox</type> - <values> - <all_columns type="list">[('id', 'Rapport'), ('default_causality_id', 'OF'), ('default_destination_section_title', 'Soci\xe9t\xe9'), ('default_source_title', 'Produit par'), ('stop_date', 'Pr\xe9vu avant le'), ('target_stop_date', 'Livr\xe9 avant le'), ('simulation_state', 'Etat')]</all_columns> - <all_editable_columns type="list">[]</all_editable_columns> - <alternate_name></alternate_name> - <columns type="list">[('id', 'Rapport'), ('default_causality_id', 'OF'), ('default_destination_section_title', 'Soci\xe9t\xe9'), ('default_source_title', 'Produit par'), ('stop_date', 'Pr\xe9vu avant le'), ('target_stop_date', 'Livr\xe9 avant le'), ('simulation_state', 'Etat')]</columns> - <css_class></css_class> - <default></default> - <default_params type="list">[]</default_params> - <description></description> - <domain_root_list type="list">[]</domain_root_list> - <domain_tree type="int">0</domain_tree> - <editable type="int">1</editable> - <editable_columns type="list">[]</editable_columns> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <global_attributes type="list">[]</global_attributes> - <hidden type="int">0</hidden> - <lines type="int">30</lines> - <list_action>list</list_action> - <list_method type="method">portal_catalog</list_method> - <meta_types type="list">[]</meta_types> - <portal_types type="list">[('Production Report', 'Production Report')]</portal_types> - <report_root_list type="list">[]</report_root_list> - <report_tree type="int">0</report_tree> - <search type="int">1</search> - <search_columns></search_columns> - <select type="int">1</select> - <selection_name>production_report_selection</selection_name> - <sort type="list">[('id', 'id')]</sort> - <sort_columns></sort_columns> - <stat_method></stat_method> - <title>Rapports de fabrication</title> - </values> - <tales> - <list_method>python:here.getPortalObject().portal_skins.local_list_method[here.REQUEST.list_method_id]</list_method> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - </messages> - </field> - </fields> - </group> - </groups> -</form> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_manufacturing/production_report_view.form b/product/Coramy/skins/coramy_manufacturing/production_report_view.form deleted file mode 100755 index 02774999db..0000000000 --- a/product/Coramy/skins/coramy_manufacturing/production_report_view.form +++ /dev/null @@ -1,705 +0,0 @@ -<?xml version="1.0"?> - -<form> - <title>Rapport fabrication</title> - <row_length>4</row_length> - <name>production_report_view</name> - <pt>form_view</pt> - <action>base_edit</action> - <method>POST</method> - <enctype>multipart/form-data</enctype> - <encoding>UTF-8</encoding> - <stored_encoding>ISO-8859-1</stored_encoding> - <unicode_mode>false</unicode_mode> - <groups> - <group> - <title>left</title> - <fields> - - <field><id>my_id</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">10</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <max_length></max_length> - <required type="int">1</required> - <title>N° rapport</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - <field><id>my_destination_section</id> <type>ListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <extra_item></extra_item> - <first_item type="int">0</first_item> - <hidden type="int">0</hidden> - <items type="list">[]</items> - <required type="int">0</required> - <size type="int">1</size> - <title>Société</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <items>python:here.portal_categories.group.Coramy.getCategoryChildIdItemList(base=1,display_none_category=1)</items> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - <field><id>my_destination_administration_person_title</id> <type>RelationStringField</type> - <values> - <alternate_name></alternate_name> - <base_category>destination_administration</base_category> - <catalog_index>Title</catalog_index> - <css_class></css_class> - <default></default> - <default_module>person</default_module> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <jump_method>base_jump_relation</jump_method> - <max_length></max_length> - <portal_type type="list">[('Person', 'Person')]</portal_type> - <required type="int">0</required> - <title>Gestionaire</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <update_method>base_update_relation</update_method> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <default>python:here.getCausalityValue(portal_type="Purchase Order").getDestinationAdministrationPersonTitle()</default> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - <field><id>my_incoterm</id> <type>ListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <extra_item></extra_item> - <first_item type="int">0</first_item> - <hidden type="int">0</hidden> - <items type="list">[]</items> - <required type="int">0</required> - <size type="int">1</size> - <title>Incoterm</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <items>python:here.portal_categories.incoterm.getCategoryChildItemList(display_id = 'getTitle', display_none_category=1)</items> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - <field><id>my_delivery_mode</id> <type>ListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <extra_item></extra_item> - <first_item type="int">0</first_item> - <hidden type="int">0</hidden> - <items type="list">[]</items> - <required type="int">0</required> - <size type="int">1</size> - <title>Mode de livraison</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <items>here/portal_categories/delivery_mode/getFormItemList</items> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>right</title> - <fields> - - <field><id>my_causality_id</id> <type>RelationStringField</type> - <values> - <alternate_name></alternate_name> - <base_category>causality</base_category> - <catalog_index>id</catalog_index> - <css_class></css_class> - <default></default> - <default_module>commande_vente</default_module> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">10</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <jump_method>base_jump_relation</jump_method> - <max_length></max_length> - <portal_type type="list">[('Sales Order', 'Sales Order')]</portal_type> - <required type="int">0</required> - <title>N° commande</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <update_method>base_update_relation</update_method> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - <field><id>my_source_title</id> <type>RelationStringField</type> - <values> - <alternate_name></alternate_name> - <base_category>source</base_category> - <catalog_index>Title</catalog_index> - <css_class></css_class> - <default></default> - <default_module>organisation</default_module> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <jump_method>base_jump_relation</jump_method> - <max_length></max_length> - <portal_type type="list">[('Organisation', 'Organisation'), ('Category', 'Category')]</portal_type> - <required type="int">0</required> - <title>Produit par</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <update_method>base_update_relation</update_method> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - <field><id>my_destination_title</id> <type>RelationStringField</type> - <values> - <alternate_name></alternate_name> - <base_category>destination</base_category> - <catalog_index>Title</catalog_index> - <css_class></css_class> - <default></default> - <default_module>organisation</default_module> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <jump_method>base_jump_relation</jump_method> - <max_length></max_length> - <portal_type type="list">[('Organisation', 'Organisation'), ('Category', 'Category')]</portal_type> - <required type="int">0</required> - <title>Livré à </title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <update_method>base_update_relation</update_method> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - <field><id>my_start_date</id> <type>DateTimeField</type> - <values> - <allow_empty_time type="int">0</allow_empty_time> - <alternate_name></alternate_name> - <ampm_time_style type="int">0</ampm_time_style> - <css_class></css_class> - <date_only type="int">1</date_only> - <date_separator>/</date_separator> - <default_now type="int">0</default_now> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <hidden type="int">1</hidden> - <input_order>dmy</input_order> - <input_style>text</input_style> - <required type="int">0</required> - <time_separator>:</time_separator> - <title>Prévu au plus tôt le</title> - </values> - <tales> - <title>python:'Prévu au plus tôt le : %s' % here.getStartDate()</title> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="not_datetime">You did not enter a valid date and time.</message> - <message name="datetime_out_of_range">The date and time you entered were out of range.</message> - </messages> - </field> - <field><id>my_target_start_date</id> <type>DateTimeField</type> - <values> - <allow_empty_time type="int">0</allow_empty_time> - <alternate_name></alternate_name> - <ampm_time_style type="int">0</ampm_time_style> - <css_class></css_class> - <date_only type="int">1</date_only> - <date_separator>/</date_separator> - <default_now type="int">0</default_now> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <hidden type="int">0</hidden> - <input_order>dmy</input_order> - <input_style>text</input_style> - <required type="int">0</required> - <time_separator>:</time_separator> - <title>Livré au plus tôt le</title> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="not_datetime">You did not enter a valid date and time.</message> - <message name="datetime_out_of_range">The date and time you entered were out of range.</message> - </messages> - </field> - <field><id>my_stop_date</id> <type>DateTimeField</type> - <values> - <allow_empty_time type="int">0</allow_empty_time> - <alternate_name></alternate_name> - <ampm_time_style type="int">0</ampm_time_style> - <css_class></css_class> - <date_only type="int">1</date_only> - <date_separator>/</date_separator> - <default_now type="int">0</default_now> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <hidden type="int">1</hidden> - <input_order>dmy</input_order> - <input_style>text</input_style> - <required type="int">0</required> - <time_separator>:</time_separator> - <title>Prévu au plus tard le</title> - </values> - <tales> - <title>python:'Prévu au plus tard le : %s' % here.getStopDate()</title> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="not_datetime">You did not enter a valid date and time.</message> - <message name="datetime_out_of_range">The date and time you entered were out of range.</message> - </messages> - </field> - <field><id>my_target_stop_date</id> <type>DateTimeField</type> - <values> - <allow_empty_time type="int">0</allow_empty_time> - <alternate_name></alternate_name> - <ampm_time_style type="int">0</ampm_time_style> - <css_class></css_class> - <date_only type="int">1</date_only> - <date_separator>/</date_separator> - <default_now type="int">0</default_now> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <hidden type="int">0</hidden> - <input_order>dmy</input_order> - <input_style>text</input_style> - <required type="int">0</required> - <time_separator>:</time_separator> - <title>Livré au plus tard le</title> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="not_datetime">You did not enter a valid date and time.</message> - <message name="datetime_out_of_range">The date and time you entered were out of range.</message> - </messages> - </field> - <field><id>delivery_state</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <max_length></max_length> - <required type="int">0</required> - <title>Etat</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <default>python:here.portal_workflow.getInfoFor(here, 'simulation_state')</default> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>center</title> - <fields> - - <field><id>my_comment</id> <type>TextAreaField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <height type="int">3</height> - <hidden type="int">0</hidden> - <max_length></max_length> - <max_linelength></max_linelength> - <max_lines></max_lines> - <required type="int">0</required> - <title>Commentaires</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - <width type="int">80</width> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_many_lines">You entered too many lines.</message> - <message name="line_too_long">A line was too long.</message> - <message name="too_long">You entered too many characters.</message> - </messages> - </field> - <field><id>my_total_quantity</id> <type>FloatField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">10</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">1</hidden> - <required type="int">0</required> - <title>Objectif quantité</title> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <title>python:'Objectif quantité : %.2f' % here.getTotalQuantity()</title> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="not_float">You did not enter a floating point number.</message> - </messages> - </field> - <field><id>my_target_total_quantity</id> <type>FloatField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">10</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">1</hidden> - <required type="int">0</required> - <title>Quantité</title> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <title>python:'Quantité : %.2f' % here.getTargetTotalQuantity()</title> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="not_float">You did not enter a floating point number.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>bottom</title> - <fields> - - <field><id>listbox</id> <type>ListBox</type> - <values> - <all_columns type="list">[('resource_title', 'Produit'), ('variation_text', 'Variantes'), ('getPurchaseDeliveryCellSourceReference', 'R\xe9f. fournisseur'), ('production_quantity', 'Production'), ('consumption_quantity', 'Consommation'), ('quantity_unit', 'Unit\xe9'), ('price', 'Prix'), ('item_id_list', 'Lots associ\xe9s')]</all_columns> - <all_editable_columns type="list">[]</all_editable_columns> - <alternate_name></alternate_name> - <columns type="list">[('resource_title', 'Produit'), ('variation_text', 'Variantes'), ('getPurchaseDeliveryCellSourceReference', 'R\xe9f. fournisseur'), ('production_quantity', 'Production'), ('consumption_quantity', 'Consommation'), ('quantity_unit', 'Unit\xe9'), ('price', 'Prix'), ('item_id_list', 'Lots associ\xe9s')]</columns> - <css_class></css_class> - <default></default> - <default_params type="list">[]</default_params> - <description></description> - <domain_root_list type="list">[]</domain_root_list> - <domain_tree type="int">0</domain_tree> - <editable type="int">1</editable> - <editable_columns type="list">[('production_quantity', 'production_quantity'), ('consumption_quantity', 'consumption_quantity'), ('price', 'price'), ('item_id_list', 'item_id_list'), ('quantity_unit', 'quantity_unit')]</editable_columns> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <global_attributes type="list">[]</global_attributes> - <hidden type="int">0</hidden> - <lines type="int">100</lines> - <list_action>folder_contents</list_action> - <list_method type="method">Delivery_zGetCellList</list_method> - <meta_types type="list">[]</meta_types> - <portal_types type="list">[]</portal_types> - <report_root_list type="list">[]</report_root_list> - <report_tree type="int">0</report_tree> - <search type="int">0</search> - <search_columns></search_columns> - <select type="int">0</select> - <selection_name>delivery_cells_selection</selection_name> - <sort type="list">[('variation_text', 'variation_text')]</sort> - <sort_columns></sort_columns> - <stat_method></stat_method> - <title>Lignes de production/consommation</title> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>hidden</title> - <fields> - - <field><id>listbox_item_id_list</id> <type>LinesField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default type="list">[]</default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <height type="int">2</height> - <hidden type="int">0</hidden> - <max_length></max_length> - <max_linelength></max_linelength> - <max_lines></max_lines> - <required type="int">0</required> - <title>Pièces en stock</title> - <unicode type="int">0</unicode> - <view_separator><br /> -</view_separator> - <whitespace_preserve type="int">0</whitespace_preserve> - <width type="int">20</width> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_many_lines">You entered too many lines.</message> - <message name="line_too_long">A line was too long.</message> - <message name="too_long">You entered too many characters.</message> - </messages> - </field> - <field><id>listbox_price</id> <type>FloatField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">10</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <required type="int">0</required> - <title>Price</title> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="not_float">You did not enter a floating point number.</message> - </messages> - </field> - <field><id>listbox_quantity_unit</id> <type>ListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <extra_item></extra_item> - <first_item type="int">0</first_item> - <hidden type="int">0</hidden> - <items type="list">[]</items> - <required type="int">0</required> - <size type="int">1</size> - <title>Unité</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <items>here/portal_categories/quantity_unit/getFormItemList</items> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - <field><id>listbox_production_quantity</id> <type>FloatField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">10</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <required type="int">0</required> - <title>Production</title> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="not_float">You did not enter a floating point number.</message> - </messages> - </field> - <field><id>listbox_consumption_quantity</id> <type>FloatField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">10</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <required type="int">0</required> - <title>Production</title> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="not_float">You did not enter a floating point number.</message> - </messages> - </field> - </fields> - </group> - </groups> -</form> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_mrp/ActivityTool_activateAssetPriceUpdate.py b/product/Coramy/skins/coramy_mrp/ActivityTool_activateAssetPriceUpdate.py deleted file mode 100755 index 8000fe4555..0000000000 --- a/product/Coramy/skins/coramy_mrp/ActivityTool_activateAssetPriceUpdate.py +++ /dev/null @@ -1,60 +0,0 @@ -## Script (Python) "ActivityTool_activateAssetPriceUpdate" -##bind container=container -##bind context=context -##bind namespace= -##bind script=script -##bind subpath=traverse_subpath -##parameters= -##title= -## -# Retrieve all resources and commit select -pf_resource_list = context.SimulationTool_zGetResourceList(portal_type=['Modele', 'Assortiment']) -mp_resource_list = context.SimulationTool_zGetResourceList(portal_type=['Tissu', 'Composant']) -context.portal_simulation.commitTransaction() - -# Create a new active_process -active_process = context.portal_activities.newActiveProcess(title="Calcul de valorisation du stock") - -# Activate updateAssetPrice for PF -commit = 100 -for b in list(pf_resource_list)[0:] : - relative_url = b.relative_url - variation_text = b.variation_text - if relative_url not in (None, ''): - if variation_text not in (None, '') or b.portal_type != 'Modele': - print "##Calculate price for %s %s" % (b.relative_url, b.variation_text) - result = context.portal_simulation.activate(activity='SQLQueue', priority=3, active_process=active_process).updateAssetPrice( - relative_url, variation_text, "group/Coramy", "site/Stock_PF" ) - #print repr(result) - else: - print "###Error variation for %s" % relative_url - #commit = commit -1 - #if commit == 0: - # # Commit from time to time - # context.portal_simulation.commitTransaction() - # commit = 100 - else: - print "###Error unknow resource '%s'" % b.relative_url - -# Activate updateAssetPrice for MP -commit = 100 -for b in list(mp_resource_list)[0:] : - relative_url = b.relative_url - variation_text = b.variation_text - if relative_url not in (None, ''): - if variation_text not in (None,): - print "##Calculate price for %s %s" % (b.relative_url, b.variation_text) - result = context.portal_simulation.activate(activity='SQLQueue', priority=3, active_process=active_process).updateAssetPrice( - relative_url, variation_text, "group/Coramy", "site/Stock_MP" ) - #print repr(result) - else: - print "###Error variation for %s" % relative_url - #commit = commit -1 - #if commit == 0: - # # Commit from time to time - # context.portal_simulation.commitTransaction() - # commit = 100 - else: - print "###Error unknow resource '%s'" % b.relative_url - -return printed diff --git a/product/Coramy/skins/coramy_mrp/ERP5Site_futureCoramyInventoryView.form b/product/Coramy/skins/coramy_mrp/ERP5Site_futureCoramyInventoryView.form deleted file mode 100755 index 99f79a4e5a..0000000000 --- a/product/Coramy/skins/coramy_mrp/ERP5Site_futureCoramyInventoryView.form +++ /dev/null @@ -1,140 +0,0 @@ -<?xml version="1.0"?> - -<form> - <title>Resource Inventory</title> - <row_length>4</row_length> - <name>Resource_inventoryView</name> - <pt>form_view</pt> - <action></action> - <method>POST</method> - <enctype></enctype> - <encoding>UTF-8</encoding> - <stored_encoding>ISO-8859-1</stored_encoding> - <unicode_mode>false</unicode_mode> - <groups> - <group> - <title>left</title> - <fields> - - <field><id>my_id</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <max_length></max_length> - <required type="int">1</required> - <title>Id</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>right</title> - <fields> - - </fields> - </group> - <group> - <title>center</title> - <fields> - - </fields> - </group> - <group> - <title>bottom</title> - <fields> - - <field><id>current_inventory_list_box</id> <type>ListBox</type> - <values> - <all_columns type="list">[]</all_columns> - <all_editable_columns type="list">[]</all_editable_columns> - <alternate_name></alternate_name> - <columns type="list">[('section_title', 'Propri\xe9taire'), ('resource_title', 'Composant'), ('variation_text', 'Variante'), ('inventory', 'Quantit\xe9')]</columns> - <css_class></css_class> - <default></default> - <default_params type="list">[]</default_params> - <description></description> - <domain_root_list type="list">[]</domain_root_list> - <domain_tree type="int">0</domain_tree> - <editable type="int">1</editable> - <editable_columns type="list">[]</editable_columns> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <global_attributes type="list">[]</global_attributes> - <hidden type="int">0</hidden> - <lines type="int">20</lines> - <list_action>Delivery_inventoryView</list_action> - <list_method type="method">ERP5Site_getCoramyFutureInventoryList</list_method> - <meta_types type="list">[]</meta_types> - <portal_types type="list">[]</portal_types> - <report_root_list type="list">[]</report_root_list> - <report_tree type="int">0</report_tree> - <search type="int">0</search> - <search_columns></search_columns> - <select type="int">0</select> - <selection_name>base_coramy_future_inventory</selection_name> - <sort type="list">[]</sort> - <sort_columns></sort_columns> - <stat_method></stat_method> - <title>Stock futur par variantes</title> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>hidden</title> - <fields> - - <field><id>current_inventory_chart</id> <type>ZGDChart</type> - <values> - <alternate_name></alternate_name> - <bg_transparent type="int">1</bg_transparent> - <chart_style>pie_3d</chart_style> - <chart_title>Excédents Actuels</chart_title> - <css_class></css_class> - <data_method>Resource_getChartCurrentInventoryList</data_method> - <default></default> - <default_params type="list">[]</default_params> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <hidden type="int">0</hidden> - <selection_name>resource_current_inventory_chart</selection_name> - <title>Excédents Actuels</title> - <x_title></x_title> - <y_title></y_title> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - </messages> - </field> - </fields> - </group> - </groups> -</form> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_mrp/ERP5Site_getAssetList.py b/product/Coramy/skins/coramy_mrp/ERP5Site_getAssetList.py deleted file mode 100755 index 6275fd50e8..0000000000 --- a/product/Coramy/skins/coramy_mrp/ERP5Site_getAssetList.py +++ /dev/null @@ -1,62 +0,0 @@ -## Script (Python) "ERP5Site_getAssetList" -##bind container=container -##bind context=context -##bind namespace= -##bind script=script -##bind subpath=traverse_subpath -##parameters=group_by_node=0, group_by_section=0, group_by_variation=0 -##title= -## -request = context.REQUEST -stock_MP = 0 -stock_PF = 1 - -if stock_MP == 1 : - inventory_list = context.Resource_zGetStockMPInventoryList(calculate_asset=1, - node_category='site/Stock_MP', section_category='group/Coramy', - group_by_node=group_by_node, group_by_section=group_by_section, - group_by_variation=group_by_variation, - simulation_state=['delivered', 'started', 'stopped', 'invoiced','planned','getting_ready','confirmed','ready', 'ordered']) - print "%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s" % ('Nature composant', 'Code composant', 'Variante', 'Quantite', 'Prix unitaire', 'Montant total', 'Type composant', 'Fournisseur') - for b in inventory_list: - if b.inventory <> 0 : - amount_object = b.getObject() - if amount_object is not None : - unit_price = amount_object.Amount_getSupplierPrice() - else : - unit_price = 0 - # AS SOON AS POSSIBLE asset_price should be given by b.asset_price an not unit_price*b.inventory - if group_by_variation: - print "%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s" % (b.resource_relative_url.split('/')[0], b.resource_relative_url.split('/')[-1], b.variation_text.replace('\n', '-'), - str(b.inventory).replace('.',','), str(unit_price).replace('.',','), str(unit_price*b.inventory).replace('.',','), b.type_title, b.source_title) - else: - print "%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s" % (b.resource_relative_url.split('/')[0], b.resource_relative_url.split('/')[-1], '', - str(b.inventory).replace('.',','), str(unit_price).replace('.',','), str(unit_price*b.inventory).replace('.',','), b.type_title, b.source_title) - -if stock_PF == 1 : - inventory_list = context.Resource_zGetStockPFInventoryList(calculate_asset=1, - node_category='site/Stock_PF', section_category='group/Coramy', collection_url='collection/2004/DIM', - group_by_node=group_by_node, group_by_section=group_by_section, - group_by_variation=group_by_variation, to_date = "2003/11/30", - section_uid=context.portal_categories.group.Coramy.uid, - simulation_state=['delivered', 'started', 'stopped', 'invoiced']) # FOR FUTURE INVNETORY add ,'planned','getting_ready','confirmed','ready', 'ordered' - print "%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s" % ('Nature produit', 'Code produit', 'Variantes', 'Quantite', 'Prix unitaire', 'Montant total', 'Famille', 'Client') - for b in inventory_list: - if b.inventory <> 0 : - amount_object = b.getObject() - if amount_object is not None : - try : - pri = amount_object.Amount_getPri() - except : - pri = -99 - else : - pri = 0 - if group_by_variation: - print "%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s" % (b.resource_relative_url.split('/')[0], b.resource_relative_url.split('/')[-1], b.variation_text.replace('\n', '-'), - str(b.inventory).replace('.',','), str(pri).replace('.',','), str(b.inventory*pri).replace('.',','), b.famille_title, b.destination_title, b.section_title) - else: - print "%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s" % (b.resource_relative_url.split('/')[0], b.resource_relative_url.split('/')[-1], '', - str(b.inventory).replace('.',','), str(pri).replace('.',','), str(b.inventory*pri).replace('.',','), b.famille_title, b.destination_title, b.section_title) - -request.RESPONSE.setHeader('Content-Type','application/text') -return printed diff --git a/product/Coramy/skins/coramy_mrp/ERP5Site_getCoramyFutureInventoryList.py b/product/Coramy/skins/coramy_mrp/ERP5Site_getCoramyFutureInventoryList.py deleted file mode 100755 index b58875dece..0000000000 --- a/product/Coramy/skins/coramy_mrp/ERP5Site_getCoramyFutureInventoryList.py +++ /dev/null @@ -1,10 +0,0 @@ -## Script (Python) "ERP5Site_getCoramyFutureInventoryList" -##bind container=container -##bind context=context -##bind namespace= -##bind script=script -##bind subpath=traverse_subpath -##parameters=**kw -##title= -## -return context.ERP5Site_zGetCoramyFutureInventoryList(**kw) diff --git a/product/Coramy/skins/coramy_mrp/ERP5Site_getGroupFutureInventoryList.py b/product/Coramy/skins/coramy_mrp/ERP5Site_getGroupFutureInventoryList.py deleted file mode 100755 index de538610b8..0000000000 --- a/product/Coramy/skins/coramy_mrp/ERP5Site_getGroupFutureInventoryList.py +++ /dev/null @@ -1,10 +0,0 @@ -## Script (Python) "ERP5Site_getGroupFutureInventoryList" -##bind container=container -##bind context=context -##bind namespace= -##bind script=script -##bind subpath=traverse_subpath -##parameters=**kw -##title= -## -return context.ERP5Site_getCoramyFutureInventoryList(**kw) diff --git a/product/Coramy/skins/coramy_mrp/ERP5Site_transferOfProperty.py b/product/Coramy/skins/coramy_mrp/ERP5Site_transferOfProperty.py deleted file mode 100755 index 8fd454a63c..0000000000 --- a/product/Coramy/skins/coramy_mrp/ERP5Site_transferOfProperty.py +++ /dev/null @@ -1,112 +0,0 @@ -## Script (Python) "ERP5Site_transferOfProperty" -##bind container=container -##bind context=context -##bind namespace= -##bind script=script -##bind subpath=traverse_subpath -##parameters=to_date -##title= -## -## Warnings: -## Prints, but never reads 'printed' variable. -## -from Products.ERP5.Document import newTempMovement -from DateTime import DateTime - -# Stock sourcing states -source_state_list = ('delivered', 'started', 'stopped', 'invoiced') -coef_marge_coramy = 1.35 - -# Default date -now_date = DateTime(DateTime().Date()) -to_date = "2003/10/31" - -# Get inventory list -inventory_list = context.Resource_zGetStockPFInventoryList(calculate_asset=1, - node_category='site/Stock_PF', section_category='group/Coramy', - collection_url='collection/2004/DIM', - group_by_node=0, group_by_section=1, - group_by_variation=1, to_date=to_date, - section_uid=context.portal_categories.group.Coramy.uid, - simulation_state=source_state_list) - -# Commit SQL -context.portal_simulation.commitTransaction() - -# build a dictionnary of quantity, variation -quantity_dict = {} -price_dict = {} -variation_dict = {} -for inventory_item in inventory_list: - movement = inventory_item.getObject() - if movement is not None: - key = (inventory_item.resource_relative_url, tuple(movement.getVariationCategoryList())) - if not (key in quantity_dict.keys()) : - quantity_dict[key] = {} - price_dict[key] = {} - quantity_dict[key][inventory_item.section_title] = inventory_item.inventory - price_dict[key][inventory_item.section_title] = movement.Amount_getPri()*coef_marge_coramy - variation_dict[key] = movement.getVariationCategoryList() - - else: - pass - #LOG('WARNING',0,'None movement found') - -# Find out which are the movements to create -to_create = [] -for key in quantity_dict.keys() : - section_list = quantity_dict[key].keys() - if 'Coramy' in section_list : - if quantity_dict[key]['Coramy'] > 0 : - to_create.append(key) - -movement_list = [] - -new_id = 0 -# Create movements which are needed -for relative_url, variation_category_list in to_create: - # CHECK IF EXISTING ID - key = (relative_url, variation_category_list) - new_id += 1 - movement = newTempMovement( context.portal_simulation , str(new_id) ) - movement.edit( resource=relative_url ) - movement.setVariationCategoryList( variation_category_list ) - resource = movement.getResourceValue() - - if resource is not None: - # Only order existing resources - stop_date = to_date - - if resource.getPortalType() in ('Modele', 'Assortiment'): - source = 'site/Stock_PF/Gravelines' - source_section = 'group/Coramy' - destination_section = 'group/Coramy/BLS' - destination = 'site/Stock_PF/Gravelines' - else: - source = source_section = resource.getSource() - destination_section = 'group/Coramy' - destination = 'site/Stock_MP/Gravelines' - movement.edit(target_quantity = quantity_dict[key]['Coramy'], - price = price_dict[key]['Coramy'], - target_start_date = stop_date, - target_stop_date = stop_date, - source = source, - source_section = source_section, - destination_section = destination_section, - destination = destination, - quantity_unit = resource.getDefaultQuantityUnit()) - print "Order %s %s quantity: %s" % (movement.getResource(), movement.getVariationText(), movement.getNetConvertedTargetQuantity()) - movement_list.append(movement) - -# Build Deliveries -root_group = context.portal_simulation.collectMovement(movement_list) -delivery_list = context.portal_simulation.buildDeliveryList(root_group) - -# Update deliveries -for delivery in delivery_list : - # update the state of the created deliveries to 'confirmed' - delivery.confirm() - # update local_roles - delivery.assign_gestionaire_designe_roles(user_name = '') - -return delivery_list diff --git a/product/Coramy/skins/coramy_mrp/ERP5Site_zGetCoramyFutureInventoryList.zsql b/product/Coramy/skins/coramy_mrp/ERP5Site_zGetCoramyFutureInventoryList.zsql deleted file mode 100755 index 3442390c78..0000000000 --- a/product/Coramy/skins/coramy_mrp/ERP5Site_zGetCoramyFutureInventoryList.zsql +++ /dev/null @@ -1,32 +0,0 @@ -<dtml-comment> -title: -connection_id:erp5_sql_connection -max_rows:1000 -max_cache:100 -cache_time:0 -class_name:ZSQLBrain -class_file:zsqlbrain.py -</dtml-comment> -<params>before_date -</params> -SELECT - SUM(stock.quantity) as inventory, - section.title AS section_title, - resource.title AS resource_title, - MAX(movement_line.path) as path, - movement.variation_text AS variation_text -FROM - catalog, movement, stock, catalog as section, catalog as resource, catalog as movement_line -WHERE - catalog.uid = movement.uid -AND catalog.uid = stock.uid -AND movement.is_accountable = 1 -AND movement_line.uid = movement.uid -AND section.uid = stock.section_uid -AND movement.resource_uid = resource.uid -AND section.relative_url='group/Coramy' -<dtml-if before_date>AND movement.start_date < <dtml-sqlvar before_date type="string"> -</dtml-if>GROUP BY - movement.variation_text -ORDER BY - inventory DESC \ No newline at end of file diff --git a/product/Coramy/skins/coramy_mrp/InventoryLine_matrixItemList.py b/product/Coramy/skins/coramy_mrp/InventoryLine_matrixItemList.py deleted file mode 100755 index 22669166d9..0000000000 --- a/product/Coramy/skins/coramy_mrp/InventoryLine_matrixItemList.py +++ /dev/null @@ -1,41 +0,0 @@ -## Script (Python) "InventoryLine_matrixItemList" -##bind container=container -##bind context=context -##bind namespace= -##bind script=script -##bind subpath=traverse_subpath -##parameters=base_category_list=[], base=1, include=1 -##title= -## -clist = [] -variation_category_list=[] - -if include == 1 : - for category in context.getVariationBaseCategoryList(): - if category in base_category_list : - variation_category_list.append(category) -else : - for category in context.getVariationBaseCategoryList(): - if not category in base_category_list : - variation_category_list.append(category) - -for base_category in variation_category_list : - if base_category in ('coloris','morphologie','variante'): - raw_list = context.getResourceValue().getVariationRangeCategoryItemList(base_category, base=0) - value_list = [] - title_list = [] - for item in raw_list : - title_list.append(item[0]) - value_list.append(base_category+'/'+item[1]) - for index in range(len(title_list)) : - clist += [(value_list[index],title_list[index])] - else : - title_list = context.getResourceValue().getCategoryMembershipList(base_category, base=0) - value_list = context.getResourceValue().getCategoryMembershipList(base_category, base=base) - for index in range(len(title_list)) : - clist += [(value_list[index],title_list[index])] - -if len(clist)==0 : - clist.append((None,None)) - -return clist diff --git a/product/Coramy/skins/coramy_mrp/InventoryLine_zGetTotal.zsql b/product/Coramy/skins/coramy_mrp/InventoryLine_zGetTotal.zsql deleted file mode 100755 index 4cda8c0d79..0000000000 --- a/product/Coramy/skins/coramy_mrp/InventoryLine_zGetTotal.zsql +++ /dev/null @@ -1,16 +0,0 @@ -<dtml-comment> -title: -connection_id:erp5_sql_connection -max_rows:1000 -max_cache:100 -cache_time:0 -class_name: -class_file: -</dtml-comment> -<params>uid</params> -SELECT SUM(quantity) AS total_inventory, SUM(target_quantity) AS target_total_inventory -FROM catalog, movement -WHERE -catalog.parent_uid = <dtml-sqlvar uid type="int"> -AND -catalog.uid = movement.uid \ No newline at end of file diff --git a/product/Coramy/skins/coramy_mrp/InventoryMP_fastAddLine.py b/product/Coramy/skins/coramy_mrp/InventoryMP_fastAddLine.py deleted file mode 100755 index 4185e70362..0000000000 --- a/product/Coramy/skins/coramy_mrp/InventoryMP_fastAddLine.py +++ /dev/null @@ -1,63 +0,0 @@ -## Script (Python) "InventoryMP_fastAddLine" -##bind container=container -##bind context=context -##bind namespace= -##bind script=script -##bind subpath=traverse_subpath -##parameters=product_reference_list=[], supplier_list=[] -##title=Add Lines to an Inventory -## -from Products.Formulator.Errors import ValidationError, FormValidationError - -inventory_line_portal_type = "Inventory MP Line" -product_list = [] -request=context.REQUEST - -try: - - if product_reference_list <> '' : - product_list += product_reference_list - - elif len(supplier_list) > 0 : - product_raw_list = context.Resource_sqlResourceSupplierSearch(supplier_title_list=supplier_list) - for product_item in product_raw_list : - product_list.append(product_item.title) - - for line_product in product_list : - - new_id = str(context.generateNewId()) - context.portal_types.constructContent(type_name=inventory_line_portal_type, - container=context, - id=new_id) - resource_list = context.portal_catalog(title=line_product, portal_type=('Tissu','Composant'), Title=line_product) - if len(resource_list) > 0: - resource_value = resource_list[0].getObject() - if resource_value is not None: - - if resource_value.getPortalType() == 'Tissu' : - my_variation_base_category_list = ['coloris'] - elif resource_value.getPortalType() == 'Composant' : - my_variation_base_category_list = ['variante'] - else : - my_variation_base_category_list = [] - - context[new_id].edit(description=line_product , - resource_value = resource_value, - variation_base_category_list = my_variation_base_category_list ) -# my_variation_category_list = [] -# for category_tuple in context[new_id].getVariationRangeCategoryItemList() : -# my_variation_category_list.append(category_tuple[0]) -# context[new_id].setVariationCategoryList(my_variation_category_list) - else: - context[new_id].edit(description=line_product) - context.Folder_reindexAll() -except FormValidationError, validation_errors: - redirect_url = '%s/view?%s' % ( context.absolute_url() - , 'portal_status_message=La+saisie+a+échoué.' - ) -else: - redirect_url = '%s/view?%s' % ( context.absolute_url() - , 'portal_status_message=Data+Updated.' - ) - -request[ 'RESPONSE' ].redirect( redirect_url ) diff --git a/product/Coramy/skins/coramy_mrp/InventoryMP_fastInputForm.form b/product/Coramy/skins/coramy_mrp/InventoryMP_fastInputForm.form deleted file mode 100755 index 8c3f32c393..0000000000 --- a/product/Coramy/skins/coramy_mrp/InventoryMP_fastInputForm.form +++ /dev/null @@ -1,84 +0,0 @@ -<?xml version="1.0"?> - -<form> - <title>Saisie rapide</title> - <row_length>4</row_length> - <name>Inventory Fast Input</name> - <pt>form_dialog</pt> - <action>InventoryMP_fastAddLine</action> - <method>POST</method> - <enctype>multipart/form-data</enctype> - <encoding>UTF-8</encoding> - <stored_encoding>ISO-8859-1</stored_encoding> - <unicode_mode>false</unicode_mode> - <groups> - <group> - <title>left</title> - <fields> - - <field><id>my_supplier_list</id> <type>MultiListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default type="list">[]</default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <extra_item></extra_item> - <hidden type="int">0</hidden> - <items type="list">[]</items> - <required type="int">0</required> - <size type="int">5</size> - <title>Fournisseurs</title> - <unicode type="int">0</unicode> - <view_separator><br /> -</view_separator> - </values> - <tales> - <items>python:here.Resource_getSupplierItemList()</items> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - <field><id>my_product_reference_list</id> <type>LinesField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default type="list">[]</default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <height type="int">15</height> - <hidden type="int">0</hidden> - <max_length></max_length> - <max_linelength></max_linelength> - <max_lines></max_lines> - <required type="int">0</required> - <title>Produits à inventorier</title> - <unicode type="int">0</unicode> - <view_separator><br /> -</view_separator> - <whitespace_preserve type="int">0</whitespace_preserve> - <width type="int">80</width> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_many_lines">You entered too many lines.</message> - <message name="line_too_long">A line was too long.</message> - <message name="too_long">You entered too many characters.</message> - </messages> - </field> - </fields> - </group> - </groups> -</form> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_mrp/InventoryPF_fastAddLine.py b/product/Coramy/skins/coramy_mrp/InventoryPF_fastAddLine.py deleted file mode 100755 index 59efad52ca..0000000000 --- a/product/Coramy/skins/coramy_mrp/InventoryPF_fastAddLine.py +++ /dev/null @@ -1,56 +0,0 @@ -## Script (Python) "InventoryPF_fastAddLine" -##bind container=container -##bind context=context -##bind namespace= -##bind script=script -##bind subpath=traverse_subpath -##parameters=product_reference_list=[], supplier_list=[] -##title=Add Lines to an Inventory -## -from Products.Formulator.Errors import ValidationError, FormValidationError - -inventory_line_portal_type = "Inventory PF Line" -product_list = [] -request=context.REQUEST - -try: - - if product_reference_list <> '' : - product_list += product_reference_list - - for line_product in product_list : - - new_id = str(context.generateNewId()) - context.portal_types.constructContent(type_name=inventory_line_portal_type, - container=context, - id=new_id) - resource_list = context.portal_catalog(title=line_product, portal_type=('Modele','Assortiment'), Title=line_product) - if len(resource_list) > 0: - resource_value = resource_list[0].getObject() - if resource_value is not None: - - if resource_value.getPortalType() == 'Modele' : - my_variation_base_category_list = ['coloris'] - else : - my_variation_base_category_list = [] - - context[new_id].edit(description=line_product , - resource_value = resource_value, - variation_base_category_list = my_variation_base_category_list ) -# my_variation_category_list = [] -# for category_tuple in context[new_id].getVariationRangeCategoryItemList() : -# my_variation_category_list.append(category_tuple[0]) -# context[new_id].setVariationCategoryList(my_variation_category_list) - else: - context[new_id].edit(description=line_product) - context.Folder_reindexAll() -except FormValidationError, validation_errors: - redirect_url = '%s/view?%s' % ( context.absolute_url() - , 'portal_status_message=La+saisie+a+échoué.' - ) -else: - redirect_url = '%s/view?%s' % ( context.absolute_url() - , 'portal_status_message=Data+Updated.' - ) - -request[ 'RESPONSE' ].redirect( redirect_url ) diff --git a/product/Coramy/skins/coramy_mrp/InventoryPF_fastInputForm.form b/product/Coramy/skins/coramy_mrp/InventoryPF_fastInputForm.form deleted file mode 100755 index aa0c6fe983..0000000000 --- a/product/Coramy/skins/coramy_mrp/InventoryPF_fastInputForm.form +++ /dev/null @@ -1,55 +0,0 @@ -<?xml version="1.0"?> - -<form> - <title>Saisie rapide</title> - <row_length>4</row_length> - <name>Inventory Fast Input</name> - <pt>form_dialog</pt> - <action>InventoryPF_fastAddLine</action> - <method>POST</method> - <enctype>multipart/form-data</enctype> - <encoding>UTF-8</encoding> - <stored_encoding>ISO-8859-1</stored_encoding> - <unicode_mode>false</unicode_mode> - <groups> - <group> - <title>left</title> - <fields> - - <field><id>my_product_reference_list</id> <type>LinesField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default type="list">[]</default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <height type="int">15</height> - <hidden type="int">0</hidden> - <max_length></max_length> - <max_linelength></max_linelength> - <max_lines></max_lines> - <required type="int">0</required> - <title>Produits à inventorier</title> - <unicode type="int">0</unicode> - <view_separator><br /> -</view_separator> - <whitespace_preserve type="int">0</whitespace_preserve> - <width type="int">80</width> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_many_lines">You entered too many lines.</message> - <message name="line_too_long">A line was too long.</message> - <message name="too_long">You entered too many characters.</message> - </messages> - </field> - </fields> - </group> - </groups> -</form> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_mrp/Inventory_inventoriateLocatedPieceTissu.py b/product/Coramy/skins/coramy_mrp/Inventory_inventoriateLocatedPieceTissu.py deleted file mode 100755 index d459e0c145..0000000000 --- a/product/Coramy/skins/coramy_mrp/Inventory_inventoriateLocatedPieceTissu.py +++ /dev/null @@ -1,39 +0,0 @@ -## Script (Python) "Inventory_inventoriateLocatedPieceTissu" -##bind container=container -##bind context=context -##bind namespace= -##bind script=script -##bind subpath=traverse_subpath -##parameters= -##title= -## -request = context.REQUEST -item_list = context.zGetLocatedPieceTissuList() -cr = '\r' -tab = '\t' -report = "Inventaire"+tab+"Resource_variantée"+tab+"Liste de pièces"+cr -item_dict = {} - -for item in item_list : - if not item.resource in item_dict.keys() : - item_dict[item.resource] = {} - if not item.variation in item_dict[item.resource].keys() : - item_dict[item.resource][item.variation] = [] - item_dict[item.resource][item.variation].append(item.id) - -for resource_key in item_dict.keys() : - for variation_key in item_dict[resource_key].keys() : - movement_list = context.Resource_zGetInventoryMovementList(resource_relative_url=resource_key,variation_relative_url=variation_key) - if len(movement_list) == 0 : - report += "pas d'inventaire"+tab+variation_key+tab+str(item_dict[resource_key][variation_key])+cr - else : - movement = movement_list[0].getObject() - if movement is not None : - movement.setItemIdList(item_dict[resource_key][variation_key]) - report += movement.getRelativeUrl()+tab+variation_key+tab+str(item_dict[resource_key][variation_key])+cr - else: - report += "None"+tab+variation_key+tab+str(item_dict[resource_key][variation_key])+cr - -request.RESPONSE.setHeader('Content-Type','application/text') - -return report diff --git a/product/Coramy/skins/coramy_mrp/Inventory_launchTissuInventoryBuilder.py b/product/Coramy/skins/coramy_mrp/Inventory_launchTissuInventoryBuilder.py deleted file mode 100755 index 0a27dc6297..0000000000 --- a/product/Coramy/skins/coramy_mrp/Inventory_launchTissuInventoryBuilder.py +++ /dev/null @@ -1,22 +0,0 @@ -## Script (Python) "Inventory_launchTissuInventoryBuilder" -##bind container=container -##bind context=context -##bind namespace= -##bind script=script -##bind subpath=traverse_subpath -##parameters= -##title= -## -request = context.REQUEST -supplier_list = context.zGetTissuSupplierList() -cr = '\r' -tab = '\t' -report = "Création d'inventaires en cours pour :" + cr - -for supplier_item in supplier_list : - supplier = supplier_item.getObject() - if supplier is not None : - supplier.activate().Inventory_tissuInventoryBuilder(supplier_list=[supplier.getTitle(),]) - report += supplier.getTitle()+cr - -return report diff --git a/product/Coramy/skins/coramy_mrp/Inventory_lookupPrice.py b/product/Coramy/skins/coramy_mrp/Inventory_lookupPrice.py deleted file mode 100755 index 3533d4496b..0000000000 --- a/product/Coramy/skins/coramy_mrp/Inventory_lookupPrice.py +++ /dev/null @@ -1,10 +0,0 @@ -## Script (Python) "Inventory_lookupPrice" -##bind container=container -##bind context=context -##bind namespace= -##bind script=script -##bind subpath=traverse_subpath -##parameters= -##title= -## -return 2.0 diff --git a/product/Coramy/skins/coramy_mrp/Inventory_tissuInventoryBuilder.py b/product/Coramy/skins/coramy_mrp/Inventory_tissuInventoryBuilder.py deleted file mode 100755 index 57b27225fb..0000000000 --- a/product/Coramy/skins/coramy_mrp/Inventory_tissuInventoryBuilder.py +++ /dev/null @@ -1,63 +0,0 @@ -## Script (Python) "Inventory_tissuInventoryBuilder" -##bind container=container -##bind context=context -##bind namespace= -##bind script=script -##bind subpath=traverse_subpath -##parameters=product_reference_list=[], supplier_list=[] -##title=Add Lines to an Inventory -## -inventory_line_portal_type = "Inventory MP Line" -product_list = [] - -if len(product_reference_list) > 0 : - product_list += product_reference_list - supplier_list = [''] - -elif len(supplier_list) > 0 : - product_raw_list = context.Resource_sqlResourceSupplierSearch(supplier_title_list=supplier_list) - for product_item in product_raw_list : - product_list.append(product_item.title) - -if len(product_list) > 0 : - # build the inventory - inventory_module = context.getPortalObject().inventaire_mp - for supplier in supplier_list : - # create inventory - new_inventory_id = str(inventory_module.generateNewId()) - my_categories = ['destination/site/Stock_MP/Gravelines','destination_section/group/Coramy'] - context.portal_types.constructContent(type_name = 'Inventory MP', - container = inventory_module, - id = new_inventory_id, - description = supplier, - start_date = DateTime(), - categories = my_categories) - inventory = inventory_module[new_inventory_id] - -for line_product in product_list : - - new_id = str(inventory.generateNewId()) - inventory.portal_types.constructContent(type_name=inventory_line_portal_type, - container=inventory, - id=new_id) - inventory_line = inventory[new_id] - resource_list = context.portal_catalog(id=line_product, portal_type='Tissu') - if len(resource_list) > 0: - resource_value = resource_list[0].getObject() - if resource_value is not None: - - if resource_value.getPortalType() == 'Tissu' : - my_variation_base_category_list = ['coloris'] - else : - my_variation_base_category_list = [] - - inventory_line.edit(description=line_product , - resource_value = resource_value, - variation_base_category_list = my_variation_base_category_list) - my_variation_category_list = [] - for category_tuple in inventory_line.getVariationRangeCategoryItemList() : - my_variation_category_list.append(category_tuple[0]) - inventory_line.setVariationCategoryList(my_variation_category_list) - - else: - inventory_line.edit(description=line_product) diff --git a/product/Coramy/skins/coramy_mrp/MovementMP_fastInput.py b/product/Coramy/skins/coramy_mrp/MovementMP_fastInput.py deleted file mode 100755 index 2473b765ff..0000000000 --- a/product/Coramy/skins/coramy_mrp/MovementMP_fastInput.py +++ /dev/null @@ -1,63 +0,0 @@ -## Script (Python) "MovementMP_fastInput" -##bind container=container -##bind context=context -##bind namespace= -##bind script=script -##bind subpath=traverse_subpath -##parameters=product_reference_list=[], supplier_list=[] -##title=Add Lines to a movement -## -from Products.Formulator.Errors import ValidationError, FormValidationError - -inventory_line_portal_type = "Movement MP Line" -product_list = [] -request=context.REQUEST - -try: - - if product_reference_list <> '' : - product_list += product_reference_list - - if len(supplier_list) > 0 : - product_raw_list = context.Resource_sqlResourceSupplierSearch(supplier_title_list=supplier_list) - for product_item in product_raw_list : - product_list.append(product_item.title) - - for line_product in product_list : - - new_id = str(context.generateNewId()) - context.portal_types.constructContent(type_name=inventory_line_portal_type, - container=context, - id=new_id) - resource_list = context.portal_catalog(title=line_product, portal_type=('Tissu','Composant'), Title=line_product) - if len(resource_list) > 0: - resource_value = resource_list[0].getObject() - if resource_value is not None: - - if resource_value.getPortalType() == 'Tissu' : - my_variation_base_category_list = ['coloris'] - elif resource_value.getPortalType() == 'Composant' : - my_variation_base_category_list = ['variante'] - else : - my_variation_base_category_list = [] - - context[new_id].edit(description=line_product , - resource_value = resource_value, - variation_base_category_list = my_variation_base_category_list ) -# my_variation_category_list = [] -# for category_tuple in context[new_id].getVariationRangeCategoryItemList() : -# my_variation_category_list.append(category_tuple[0]) -# context[new_id].setVariationCategoryList(my_variation_category_list) - else: - context[new_id].edit(description=line_product) - context.Folder_reindexAll() -except FormValidationError, validation_errors: - redirect_url = '%s/view?%s' % ( context.absolute_url() - , 'portal_status_message=La+saisie+a+échoué.' - ) -else: - redirect_url = '%s/view?%s' % ( context.absolute_url() - , 'portal_status_message=Data+Updated.' - ) - -request[ 'RESPONSE' ].redirect( redirect_url ) diff --git a/product/Coramy/skins/coramy_mrp/MovementMP_fastInputForm.form b/product/Coramy/skins/coramy_mrp/MovementMP_fastInputForm.form deleted file mode 100755 index fc5205c442..0000000000 --- a/product/Coramy/skins/coramy_mrp/MovementMP_fastInputForm.form +++ /dev/null @@ -1,84 +0,0 @@ -<?xml version="1.0"?> - -<form> - <title>Saisie rapide</title> - <row_length>4</row_length> - <name>Movement Fast Input</name> - <pt>form_dialog</pt> - <action>MovementMP_fastInput</action> - <method>POST</method> - <enctype>multipart/form-data</enctype> - <encoding>UTF-8</encoding> - <stored_encoding>ISO-8859-1</stored_encoding> - <unicode_mode>false</unicode_mode> - <groups> - <group> - <title>left</title> - <fields> - - <field><id>my_supplier_list</id> <type>MultiListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default type="list">[]</default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <extra_item></extra_item> - <hidden type="int">0</hidden> - <items type="list">[]</items> - <required type="int">0</required> - <size type="int">5</size> - <title>Fournisseurs</title> - <unicode type="int">0</unicode> - <view_separator><br /> -</view_separator> - </values> - <tales> - <items>python:here.Resource_getSupplierItemList()</items> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - <field><id>my_product_reference_list</id> <type>LinesField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default type="list">[]</default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <height type="int">15</height> - <hidden type="int">0</hidden> - <max_length></max_length> - <max_linelength></max_linelength> - <max_lines></max_lines> - <required type="int">0</required> - <title>Produits à mouvementer</title> - <unicode type="int">0</unicode> - <view_separator><br /> -</view_separator> - <whitespace_preserve type="int">0</whitespace_preserve> - <width type="int">80</width> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_many_lines">You entered too many lines.</message> - <message name="line_too_long">A line was too long.</message> - <message name="too_long">You entered too many characters.</message> - </messages> - </field> - </fields> - </group> - </groups> -</form> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_mrp/MovementPF_fastInput.py b/product/Coramy/skins/coramy_mrp/MovementPF_fastInput.py deleted file mode 100755 index 4685a6a942..0000000000 --- a/product/Coramy/skins/coramy_mrp/MovementPF_fastInput.py +++ /dev/null @@ -1,56 +0,0 @@ -## Script (Python) "MovementPF_fastInput" -##bind container=container -##bind context=context -##bind namespace= -##bind script=script -##bind subpath=traverse_subpath -##parameters=product_reference_list=[], supplier_list=[] -##title=Add Lines to a movement -## -from Products.Formulator.Errors import ValidationError, FormValidationError - -inventory_line_portal_type = "Movement PF Line" -product_list = [] -request=context.REQUEST - -try: - - if product_reference_list <> '' : - product_list += product_reference_list - - for line_product in product_list : - - new_id = str(context.generateNewId()) - context.portal_types.constructContent(type_name=inventory_line_portal_type, - container=context, - id=new_id) - resource_list = context.portal_catalog(title=line_product, portal_type=('Modele','Assortiment'), Title=line_product) - if len(resource_list) > 0: - resource_value = resource_list[0].getObject() - if resource_value is not None: - - if resource_value.getPortalType() == 'Modele' : - my_variation_base_category_list = ['coloris'] - else : - my_variation_base_category_list = [] - - context[new_id].edit(description=line_product , - resource_value = resource_value, - variation_base_category_list = my_variation_base_category_list ) -# my_variation_category_list = [] -# for category_tuple in context[new_id].getVariationRangeCategoryItemList() : -# my_variation_category_list.append(category_tuple[0]) -# context[new_id].setVariationCategoryList(my_variation_category_list) - else: - context[new_id].edit(description=line_product) - context.Folder_reindexAll() -except FormValidationError, validation_errors: - redirect_url = '%s/view?%s' % ( context.absolute_url() - , 'portal_status_message=La+saisie+a+échoué.' - ) -else: - redirect_url = '%s/view?%s' % ( context.absolute_url() - , 'portal_status_message=Data+Updated.' - ) - -request[ 'RESPONSE' ].redirect( redirect_url ) diff --git a/product/Coramy/skins/coramy_mrp/MovementPF_fastInputForm.form b/product/Coramy/skins/coramy_mrp/MovementPF_fastInputForm.form deleted file mode 100755 index 7af459da76..0000000000 --- a/product/Coramy/skins/coramy_mrp/MovementPF_fastInputForm.form +++ /dev/null @@ -1,55 +0,0 @@ -<?xml version="1.0"?> - -<form> - <title>Saisie rapide</title> - <row_length>4</row_length> - <name>Movement Fast Input</name> - <pt>form_dialog</pt> - <action>MovementPF_fastInput</action> - <method>POST</method> - <enctype>multipart/form-data</enctype> - <encoding>UTF-8</encoding> - <stored_encoding>ISO-8859-1</stored_encoding> - <unicode_mode>false</unicode_mode> - <groups> - <group> - <title>left</title> - <fields> - - <field><id>my_product_reference_list</id> <type>LinesField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default type="list">[]</default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <height type="int">15</height> - <hidden type="int">0</hidden> - <max_length></max_length> - <max_linelength></max_linelength> - <max_lines></max_lines> - <required type="int">0</required> - <title>Produits à mouvementer</title> - <unicode type="int">0</unicode> - <view_separator><br /> -</view_separator> - <whitespace_preserve type="int">0</whitespace_preserve> - <width type="int">80</width> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_many_lines">You entered too many lines.</message> - <message name="line_too_long">A line was too long.</message> - <message name="too_long">You entered too many characters.</message> - </messages> - </field> - </fields> - </group> - </groups> -</form> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_mrp/Movement_list.form b/product/Coramy/skins/coramy_mrp/Movement_list.form deleted file mode 100755 index 471403ba73..0000000000 --- a/product/Coramy/skins/coramy_mrp/Movement_list.form +++ /dev/null @@ -1,62 +0,0 @@ -<?xml version="1.0"?> - -<form> - <title>Liste des commandes</title> - <row_length>4</row_length> - <name>order_list</name> - <pt>form_list</pt> - <action></action> - <method>POST</method> - <enctype>multipart/form-data</enctype> - <encoding>UTF-8</encoding> - <stored_encoding>ISO-8859-1</stored_encoding> - <unicode_mode>false</unicode_mode> - <groups> - <group> - <title>Default</title> - <fields> - - <field><id>listbox</id> <type>ListBox</type> - <values> - <all_columns type="list">[('id', 'Commande'), ('default_destination_section_title', 'Destination Section'), ('resource_title', 'Resource'), ('simulation_state', 'Etat')]</all_columns> - <all_editable_columns type="list">[]</all_editable_columns> - <alternate_name></alternate_name> - <columns type="list">[('id', 'Commande'), ('default_destination_section_title', 'Destination Section'), ('resource_title', 'Resource'), ('simulation_state', 'Etat')]</columns> - <css_class></css_class> - <default></default> - <default_params type="list">[('id', "''")]</default_params> - <description></description> - <domain_root_list type="list">[]</domain_root_list> - <domain_tree type="int">0</domain_tree> - <editable type="int">1</editable> - <editable_columns type="list">[]</editable_columns> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <global_attributes type="list">[]</global_attributes> - <hidden type="int">0</hidden> - <lines type="int">30</lines> - <list_action>list</list_action> - <list_method type="method">portal_catalog</list_method> - <meta_types type="list">[]</meta_types> - <portal_types type="list">[('Simulation Movement', 'Simulation Movement')]</portal_types> - <report_root_list type="list">[]</report_root_list> - <report_tree type="int">0</report_tree> - <search type="int">1</search> - <search_columns></search_columns> - <select type="int">1</select> - <selection_name>movement_selection</selection_name> - <sort type="list">[('id', 'id')]</sort> - <sort_columns></sort_columns> - <stat_method></stat_method> - <title>Commandes</title> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - </messages> - </field> - </fields> - </group> - </groups> -</form> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_mrp/PieceTissu_fastInput.py b/product/Coramy/skins/coramy_mrp/PieceTissu_fastInput.py deleted file mode 100755 index 1ded3b86b4..0000000000 --- a/product/Coramy/skins/coramy_mrp/PieceTissu_fastInput.py +++ /dev/null @@ -1,117 +0,0 @@ -## Script (Python) "PieceTissu_fastInput" -##bind container=container -##bind context=context -##bind namespace= -##bind script=script -##bind subpath=traverse_subpath -##parameters=piece_tissu_list -##title= -## -# creates Piece Tissu items -from Products.Formulator.Errors import ValidationError, FormValidationError - -text_list = context.PieceTissu_fastInputList()[0] - -if context.getPortalType() == 'Piece Tissu' : # we create a sub_item - my_container = context -else : # we create a master_item - my_container = context.getPortalObject().piece_tissu - -my_quantity = None -request = context.REQUEST -compteur = 0 -created_item_id_list = [] - -try : - - for line in piece_tissu_list : - - if line.find(text_list[0]) <> (-1) : # quantity - # create previous item - # first check if needed if quantity compatible with parent_item - if my_quantity is not None and my_container.getPortalType() == 'Piece Tissu' : - if my_quantity >= my_container.getRemainingQuantity() : - my_quantity = None - if my_quantity is not None : - compteur += 1 - new_id = str(my_container.generateNewId(default = 40000)) - my_container.portal_types.constructContent(type_name = 'Piece Tissu', - container = my_container, - quantity = my_quantity, - laize_utile = my_laize_utile, - source_reference = my_source_reference, - bain_teinture = my_bain_teinture, - comment = my_comment, - id=new_id) - if context.getPortalType() == 'Delivery Cell' or context.getPortalType() == 'Inventory Cell' : - my_container[new_id].edit(resource_value = context.getResource(), - source_value = context.getSource(), - variation_category_list = context.getVariationCategoryList()) - my_container[new_id].flushActivity(invoke=1) - # print label - my_container[new_id].PieceTissu_printMetoLabel() - created_item_id_list.append(new_id) - - # initialize new piece - my_quantity = None - my_laize_utile = None - my_source_reference = None - my_bain_teinture = None - my_comment = None - - # find quantity value - input_items = line.split('_:') - if len(input_items) > 1 : - if input_items[1] <> '' : - my_quantity = float(input_items[1].replace(',','.')) - else : - break - - elif line.find(text_list[1]) <> (-1) : # laize_utile - input_items = line.split('_:') - if len(input_items) > 1 : - if input_items[1] <> '' : - my_laize_utile = float(input_items[1].replace(',','.')) - - elif line.find(text_list[2]) <> (-1) : # no fournisseur - input_items = line.split('_:') - if len(input_items) > 1 : - if input_items[1] <> '' : - my_source_reference = input_items[1] - - elif line.find(text_list[3]) <> (-1) : # bain teinture - input_items = line.split('_:') - if len(input_items) > 1 : - if input_items[1] <> '' : - my_bain_teinture = input_items[1] - - elif line.find(text_list[4]) <> (-1) : # comment - input_items = line.split('_:') - if len(input_items) > 1 : - if input_items[1] <> '' : - my_comment = input_items[1] - - # if we create items on a delivery cell or inventory cell - # we update item_id_list or produced_item_id_list - if context.getPortalType() == 'Delivery Cell' or context.getPortalType() == 'Inventory Cell' : - if context.aq_parent.getPortalType() in ('Movement MP Line', 'Movement PF Line') or context.getPortalType() in ('Movement MP Line', 'Movement PF Line'): - if context.getItemIdList() is not None : - context.setProducedItemIdList(created_item_id_list+context.getItemIdList()) - else : - context.setProducedItemIdList(created_item_id_list) - else: - if context.getItemIdList() is not None : - context.setItemIdList(created_item_id_list+context.getItemIdList()) - else : - context.setItemIdList(created_item_id_list) - -except FormValidationError, validation_errors: - redirect_url = '%s/view?%s' % ( context.absolute_url() - , 'portal_status_message=La+saisie+a+échoué.' - ) -else: - redirect_url = '%s/view?%s' % ( context.absolute_url() - , 'portal_status_message=%s+pièces+créées.' % compteur - ) - -request[ 'RESPONSE' ].redirect( redirect_url ) diff --git a/product/Coramy/skins/coramy_mrp/PieceTissu_fastInputFieldRender.py b/product/Coramy/skins/coramy_mrp/PieceTissu_fastInputFieldRender.py deleted file mode 100755 index 4d879d3be0..0000000000 --- a/product/Coramy/skins/coramy_mrp/PieceTissu_fastInputFieldRender.py +++ /dev/null @@ -1,19 +0,0 @@ -## Script (Python) "PieceTissu_fastInputFieldRender" -##bind container=container -##bind context=context -##bind namespace= -##bind script=script -##bind subpath=traverse_subpath -##parameters= -##title= -## -fast_input_list = context.PieceTissu_fastInputList()[0] -formatted_text = [] - -for i in range (11) : - formatted_text.append( 'Piece n° '+str(i+1)) - for text in fast_input_list : - formatted_text.append(text+':') - formatted_text.append('') - -return formatted_text diff --git a/product/Coramy/skins/coramy_mrp/PieceTissu_fastInputForm.form b/product/Coramy/skins/coramy_mrp/PieceTissu_fastInputForm.form deleted file mode 100755 index e41e00ca4a..0000000000 --- a/product/Coramy/skins/coramy_mrp/PieceTissu_fastInputForm.form +++ /dev/null @@ -1,56 +0,0 @@ -<?xml version="1.0"?> - -<form> - <title>Saisie rapide</title> - <row_length>4</row_length> - <name>PieceTissu_fastInputForm</name> - <pt>form_dialog</pt> - <action>PieceTissu_fastInput</action> - <method>POST</method> - <enctype>multipart/form-data</enctype> - <encoding>UTF-8</encoding> - <stored_encoding>ISO-8859-1</stored_encoding> - <unicode_mode>false</unicode_mode> - <groups> - <group> - <title>left</title> - <fields> - - <field><id>my_piece_tissu_list</id> <type>LinesField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default type="list">[]</default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <height type="int">25</height> - <hidden type="int">0</hidden> - <max_length></max_length> - <max_linelength></max_linelength> - <max_lines></max_lines> - <required type="int">0</required> - <title>Pièces à créer</title> - <unicode type="int">0</unicode> - <view_separator><br /> -</view_separator> - <whitespace_preserve type="int">0</whitespace_preserve> - <width type="int">80</width> - </values> - <tales> - <default>python:here.PieceTissu_fastInputFieldRender()</default> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_many_lines">You entered too many lines.</message> - <message name="line_too_long">A line was too long.</message> - <message name="too_long">You entered too many characters.</message> - </messages> - </field> - </fields> - </group> - </groups> -</form> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_mrp/PieceTissu_fastInputList.py b/product/Coramy/skins/coramy_mrp/PieceTissu_fastInputList.py deleted file mode 100755 index e2b1565aaa..0000000000 --- a/product/Coramy/skins/coramy_mrp/PieceTissu_fastInputList.py +++ /dev/null @@ -1,15 +0,0 @@ -## Script (Python) "PieceTissu_fastInputList" -##bind container=container -##bind context=context -##bind namespace= -##bind script=script -##bind subpath=traverse_subpath -##parameters= -##title= -## -text_list = ['Quantité (m)_______________', 'Laize utile (cm)___________', 'N° fournisseur_____________', 'N° de bain de teinture_____', 'Commentaires______________'] -property_list = ['quantity', 'laize_utile', 'source_reference', 'bain_teinture', 'comment'] - -fast_input_list =[text_list,property_list] - -return fast_input_list diff --git a/product/Coramy/skins/coramy_mrp/PieceTissu_fastInputLocation.py b/product/Coramy/skins/coramy_mrp/PieceTissu_fastInputLocation.py deleted file mode 100755 index f5b29f7184..0000000000 --- a/product/Coramy/skins/coramy_mrp/PieceTissu_fastInputLocation.py +++ /dev/null @@ -1,42 +0,0 @@ -## Script (Python) "PieceTissu_fastInputLocation" -##bind container=container -##bind context=context -##bind namespace= -##bind script=script -##bind subpath=traverse_subpath -##parameters=id_and_location_list=[] -##title= -## -# updates location property for all given items -from Products.Formulator.Errors import ValidationError, FormValidationError - -request = context.REQUEST -compteur = 0 - -try : - - item_nb = int(len(id_and_location_list)/2) - for i in range(item_nb) : - item_result_list = context.portal_catalog(id = str(int(id_and_location_list[i*2])), portal_type="Piece Tissu") - try : - item = item_result_list[0].getObject() - location = id_and_location_list[i*2+1] - except : - item = None - location = None - - if item is not None and location is not None : - item.setLocation(location) - item.flushActivity(invoke=1) - compteur += 1 - -except FormValidationError, validation_errors: - redirect_url = '%s/view?%s' % ( context.absolute_url() - , 'portal_status_message=La+saisie+a+échoué.' - ) -else: - redirect_url = '%s/view?%s' % ( context.absolute_url() - , 'portal_status_message=%s+emplacements+mis+à+jour.' % compteur - ) - -request[ 'RESPONSE' ].redirect( redirect_url ) diff --git a/product/Coramy/skins/coramy_mrp/PieceTissu_fastInputLocationForm.form b/product/Coramy/skins/coramy_mrp/PieceTissu_fastInputLocationForm.form deleted file mode 100755 index cda571dfb3..0000000000 --- a/product/Coramy/skins/coramy_mrp/PieceTissu_fastInputLocationForm.form +++ /dev/null @@ -1,55 +0,0 @@ -<?xml version="1.0"?> - -<form> - <title>Saisir emplacements</title> - <row_length>4</row_length> - <name>PieceTissu_fastInputLocationForm</name> - <pt>form_dialog</pt> - <action>PieceTissu_fastInputLocation</action> - <method>POST</method> - <enctype>multipart/form-data</enctype> - <encoding>UTF-8</encoding> - <stored_encoding>ISO-8859-1</stored_encoding> - <unicode_mode>false</unicode_mode> - <groups> - <group> - <title>left</title> - <fields> - - <field><id>my_id_and_location_list</id> <type>LinesField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default type="list">[]</default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <height type="int">25</height> - <hidden type="int">0</hidden> - <max_length></max_length> - <max_linelength></max_linelength> - <max_lines></max_lines> - <required type="int">0</required> - <title>Pièces et emplacements</title> - <unicode type="int">0</unicode> - <view_separator><br /> -</view_separator> - <whitespace_preserve type="int">0</whitespace_preserve> - <width type="int">80</width> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_many_lines">You entered too many lines.</message> - <message name="line_too_long">A line was too long.</message> - <message name="too_long">You entered too many characters.</message> - </messages> - </field> - </fields> - </group> - </groups> -</form> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_mrp/PieceTissu_fastInputRetour.py b/product/Coramy/skins/coramy_mrp/PieceTissu_fastInputRetour.py deleted file mode 100755 index 9ca4f74bbc..0000000000 --- a/product/Coramy/skins/coramy_mrp/PieceTissu_fastInputRetour.py +++ /dev/null @@ -1,111 +0,0 @@ -## Script (Python) "PieceTissu_fastInputRetour" -##bind container=container -##bind context=context -##bind namespace= -##bind script=script -##bind subpath=traverse_subpath -##parameters=id_and_weight_list=[] -##title= -## -# updates location property for all given items -from Products.Formulator.Errors import ValidationError, FormValidationError - -request = context.REQUEST -compteur = 0 -error_item_list = [] - -try : - - item_nb = int(len(id_and_weight_list)/2) - for i in range(item_nb) : - item_result_list = context.portal_catalog(id = str(int(id_and_weight_list[i*2])), portal_type="Piece Tissu") - try : - item = item_result_list[0].getObject() - except : - item = None - try : - weight = float(id_and_weight_list[i*2+1].replace(',','.')) - except : - weight = None - - if item is not None : - if weight is not None : - # find the delivery_cell_movements in relation with the item - cell_movement_list = item.getAggregateRelatedValueList(portal_type=['Delivery Cell','Inventory Cell']) - # keep only production movements and outgoing movements - movement_list = [] - for movement in cell_movement_list : - if movement.aq_parent.getPortalType() == 'Production Packing List Line' : - movement_list.append(movement) - elif movement.aq_parent.getPortalType() == 'Movement MP Line' and movement.getConsumptionQuantity() > 0 : - movement_list.append(movement) - # add Production packing List Line movements in relation with the item - movement_list+=item.getAggregateRelatedValueList(portal_type=['Production packing List Line']) - - # movement_list should contain only one movement - if len(movement_list) == 1 : - aggregated_item_list = movement_list[0].getAggregateValueList() - new_aggregated_item_id_list = [] - for aggregate_item in aggregated_item_list : - if aggregate_item.getId() <> item.getId() : - new_aggregated_item_id_list.append(aggregate_item.getId()) - - # now build the new item - # first compute the quantity of the new item - try : - tissu = item.getResourceValue() - quantity = item.getRemainingQuantity()-(weight/((tissu.getLaizeTotale()/100)*(tissu.getBaseWeight()/1000))) - except : - quantity = 0 - - if quantity < 0 : - error_item_list.append(id_and_weight_list[i*2]+'(quantité trop importante)') - elif not quantity in (0, 0.0, '0') : - # create the new item - new_id = str(item.generateNewId(default = 40000)) - item.portal_types.constructContent(type_name = 'Piece Tissu', - container = item, - quantity = quantity, - laize_utile = item.getLaizeUtile(), - source_reference = item.getSourceReference(), - bain_teinture = item.getBainTeinture(), - id=new_id) - item[new_id].flushActivity(invoke=1) - - # reset location on returned item - item.edit(location='') - - # append new_id to new_aggregate_item_id_list and build relation with movement - new_aggregated_item_id_list.append(new_id) - if movement_list[0].aq_parent.getPortalType() in ('Movement MP Line', 'Movement PF Line') or movement_list[0].getPortalType() in ('Movement MP Line', 'Movement PF Line') : - movement_list[0].setConsumedItemIdList(new_aggregated_item_id_list) - else : - movement_list[0].setItemIdList(new_aggregated_item_id_list) - compteur += 1 - else : - error_item_list.append(id_and_weight_list[i*2]+'(conversion kg mètre impossible)') - else : - error_item_list.append(id_and_weight_list[i*2]+'(non sortie ou plusieurs sorties)') - else : - error_item_list.append(id_and_weight_list[i*2]+'(quantité mal définie)') - else : - error_item_list.append(id_and_weight_list[i*2]+'(inconnue)') - -except FormValidationError, validation_errors: - redirect_url = '%s/view?%s' % ( context.absolute_url() - , 'portal_status_message=La+saisie+a+échoué.' - ) -else: - if len(error_item_list) == 0 : # no errors - redirect_url = '%s/view?%s' % ( context.absolute_url() - , 'portal_status_message=%s+pièces+créées.' % compteur - ) - else : - pretty_error_list = '' - for error_item in error_item_list : - pretty_error_list += error_item + ' ' - redirect_url = '%s/view?%s' % ( context.absolute_url() - , 'portal_status_message=%s+pièces+créées.+Problèmes+:+%s.' % (compteur, - pretty_error_list)) - -request[ 'RESPONSE' ].redirect( redirect_url ) diff --git a/product/Coramy/skins/coramy_mrp/PieceTissu_fastInputRetourForm.form b/product/Coramy/skins/coramy_mrp/PieceTissu_fastInputRetourForm.form deleted file mode 100755 index 0e0c1576cd..0000000000 --- a/product/Coramy/skins/coramy_mrp/PieceTissu_fastInputRetourForm.form +++ /dev/null @@ -1,55 +0,0 @@ -<?xml version="1.0"?> - -<form> - <title>Saisir les retours</title> - <row_length>4</row_length> - <name>PieceTissu_fastInputRetourForm</name> - <pt>form_dialog</pt> - <action>PieceTissu_fastInputRetour</action> - <method>POST</method> - <enctype>multipart/form-data</enctype> - <encoding>UTF-8</encoding> - <stored_encoding>ISO-8859-1</stored_encoding> - <unicode_mode>false</unicode_mode> - <groups> - <group> - <title>left</title> - <fields> - - <field><id>my_id_and_weight_list</id> <type>LinesField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default type="list">[]</default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <height type="int">25</height> - <hidden type="int">0</hidden> - <max_length></max_length> - <max_linelength></max_linelength> - <max_lines></max_lines> - <required type="int">0</required> - <title>Pièces et poids</title> - <unicode type="int">0</unicode> - <view_separator><br /> -</view_separator> - <whitespace_preserve type="int">0</whitespace_preserve> - <width type="int">80</width> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_many_lines">You entered too many lines.</message> - <message name="line_too_long">A line was too long.</message> - <message name="too_long">You entered too many characters.</message> - </messages> - </field> - </fields> - </group> - </groups> -</form> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_mrp/PieceTissu_importFile.py b/product/Coramy/skins/coramy_mrp/PieceTissu_importFile.py deleted file mode 100755 index c9d173da5d..0000000000 --- a/product/Coramy/skins/coramy_mrp/PieceTissu_importFile.py +++ /dev/null @@ -1,86 +0,0 @@ -## Script (Python) "PieceTissu_importFile" -##bind container=container -##bind context=context -##bind namespace= -##bind script=script -##bind subpath=traverse_subpath -##parameters=import_file, **kw -##title= -## -# import des pièces de tissu depuis Cognis -# format de fichier attendu -# id, code tissu Cognis, coloris, no fournisseur, qté, laize, no bain, emplacement, commentaires - -request = context.REQUEST -file_line_list = import_file.readlines() -item_module = context.getPortalObject().piece_tissu - -for file_line in file_line_list : - sub_line_list = file_line.split('\r') - for sub_line in sub_line_list : - if sub_line != '': - - # create a new item - line_item_list = sub_line.split('\t') - - # recup Id - if len(line_item_list) > 0 : - my_id = line_item_list[0] - else : - my_id = str(item_module .generateNewId()) - - # recup reference_fournisseur - if len(line_item_list) > 3 : - my_source_reference = line_item_list[3] - else : - my_source_reference = None - - # recup quantité - if len(line_item_list) > 4 : - my_quantity = float(line_item_list[4].replace(',','.')) - else : - my_quantity = None - - # recup laize utile - if len(line_item_list) > 5 : - my_laize_utile = float(line_item_list[5].replace(',','.')) - else : - my_laize_utile = None - - # recup no bain teinture - if len(line_item_list) > 6 : - my_bain_teinture = line_item_list[6] - else : - my_bain_teinture = None - - # recup emplacement - if len(line_item_list) > 7 : - my_location = line_item_list[7] - else : - my_location = None - - # recup commentaires - if len(line_item_list) > 8 : - my_comment = 'ancien code : '+line_item_list[1]+' '+line_item_list[2]+'\r'+''.join(line_item_list[7:]) - else : - my_comment = None - -# print my_id, my_source_reference, my_quantity, my_laize_utile, my_location - context.portal_types.constructContent(type_name = 'Piece Tissu', - container = item_module, - id = my_id, - source_reference = my_source_reference, - quantity = my_quantity, - laize_utile = my_laize_utile, - bain_teinture = my_bain_teinture, - location = my_location, - comment = my_comment ) - item_module[my_id].flushActivity(invoke=1) - -#return printed - -redirect_url = '%s?%s' % ( item_module.absolute_url() - , 'portal_status_message=%s+pièces+de+tissu+créées.' % len(sub_line_list) - ) - -request[ 'RESPONSE' ].redirect( redirect_url ) diff --git a/product/Coramy/skins/coramy_mrp/PieceTissu_importForm.form b/product/Coramy/skins/coramy_mrp/PieceTissu_importForm.form deleted file mode 100755 index bc671d1055..0000000000 --- a/product/Coramy/skins/coramy_mrp/PieceTissu_importForm.form +++ /dev/null @@ -1,49 +0,0 @@ -<?xml version="1.0"?> - -<form> - <title>Importer</title> - <row_length>4</row_length> - <name>PieceTissu_importForm</name> - <pt>form_dialog</pt> - <action>PieceTissu_importFile</action> - <method>POST</method> - <enctype>multipart/form-data</enctype> - <encoding>UTF-8</encoding> - <stored_encoding>ISO-8859-1</stored_encoding> - <unicode_mode>false</unicode_mode> - <groups> - <group> - <title>Default</title> - <fields> - - <field><id>my_import_file</id> <type>FileField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">40</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <title>Fichier à importer</title> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>hidden</title> - <fields> - - </fields> - </group> - </groups> -</form> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_mrp/PieceTissu_movementListView.form b/product/Coramy/skins/coramy_mrp/PieceTissu_movementListView.form deleted file mode 100755 index 68822cf7a1..0000000000 --- a/product/Coramy/skins/coramy_mrp/PieceTissu_movementListView.form +++ /dev/null @@ -1,345 +0,0 @@ -<?xml version="1.0" encoding="iso-8859-1"?> - -<form> - <title>Pièce de tissu</title> - <name>item_tissu_view</name> - <action>base_edit</action> - <enctype></enctype> - <method>POST</method> - <pt>form_view</pt> - - <groups> - <group> - <title>left</title> - <fields> - - <field><id>my_id</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">10</display_width> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <max_length></max_length> - <required type="int">1</required> - <title>N° de pièce</title> - <truncate type="int">0</truncate> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - <field><id>my_resource_id</id> <type>RelationStringField</type> - <values> - <alternate_name></alternate_name> - <base_category>resource</base_category> - <catalog_index>id</catalog_index> - <css_class></css_class> - <default></default> - <default_module>tissu</default_module> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <jump_method>base_jump_relation</jump_method> - <max_length></max_length> - <portal_type type="list">[('Tissu', 'Tissu')]</portal_type> - <required type="int">0</required> - <title>Tissu</title> - <truncate type="int">0</truncate> - <update_method>base_update_relation</update_method> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - <field><id>my_variation_category_list</id> <type>ListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <external_validator></external_validator> - <extra></extra> - <first_item type="int">0</first_item> - <hidden type="int">0</hidden> - <items type="list">[]</items> - <required type="int">0</required> - <size type="int">1</size> - <title>Coloris</title> - </values> - <tales> - <default>python:here.getVariationCategoryList()[0]</default> - <items>python:[('','')]+here.getVariationRangeCategoryItemList()</items> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - <field><id>my_laize_utile</id> <type>FloatField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <required type="int">0</required> - <title>Laize utile (cm)</title> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="not_float">You did not enter a floating point number.</message> - </messages> - </field> - <field><id>my_location</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <max_length></max_length> - <required type="int">0</required> - <title>Emplacement</title> - <truncate type="int">0</truncate> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>right</title> - <fields> - - <field><id>my_source_title</id> <type>RelationStringField</type> - <values> - <alternate_name></alternate_name> - <base_category>source</base_category> - <catalog_index>title</catalog_index> - <css_class></css_class> - <default></default> - <default_module>organisation</default_module> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <jump_method>base_jump_relation</jump_method> - <max_length></max_length> - <portal_type type="list">[('Organisation', 'Organisation'), ('Category', 'Category')]</portal_type> - <required type="int">0</required> - <title>Fournisseur</title> - <truncate type="int">0</truncate> - <update_method>base_update_relation</update_method> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - <field><id>my_source_reference</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <max_length></max_length> - <required type="int">0</required> - <title>N° pièce fournisseur</title> - <truncate type="int">0</truncate> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - <field><id>my_bain_teinture</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <max_length></max_length> - <required type="int">0</required> - <title>N° bain teinture</title> - <truncate type="int">0</truncate> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - <field><id>my_quantity</id> <type>FloatField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">10</display_width> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <required type="int">0</required> - <title>Quantité initiale</title> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="not_float">You did not enter a floating point number.</message> - </messages> - </field> - <field><id>my_remaining_quantity</id> <type>FloatField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">10</display_width> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <required type="int">0</required> - <title>Quantité restante</title> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="not_float">You did not enter a floating point number.</message> - </messages> - </field> - <field><id>my_quantity_unit</id> <type>ListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <external_validator></external_validator> - <extra></extra> - <first_item type="int">0</first_item> - <hidden type="int">0</hidden> - <items type="list">[]</items> - <required type="int">0</required> - <size type="int">1</size> - <title>Unité</title> - </values> - <tales> - <items>here/getQuantityUnitRangeItemList</items> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>center</title> - <fields> - - </fields> - </group> - <group> - <title>bottom</title> - <fields> - - <field><id>listbox</id> <type>ListBox</type> - <values> - <all_columns type="list">[]</all_columns> - <all_editable_columns type="list">[]</all_editable_columns> - <alternate_name></alternate_name> - <columns type="list">[('relative_url', 'Mouvement'), ('portal_type', 'Type'), ('start_date', 'Date exp\xe9dition'), ('source_title', 'Exp\xe9diteur'), ('stop_date', 'Date Livraison'), ('destination_title', 'Destinataire'), ('quantity', 'Quantit\xe9')]</columns> - <css_class></css_class> - <default></default> - <default_params type="list">[('id', "''")]</default_params> - <description></description> - <domain_root_list type="list">[]</domain_root_list> - <domain_tree type="int">0</domain_tree> - <editable_columns type="list">[]</editable_columns> - <external_validator></external_validator> - <global_attributes type="list">[]</global_attributes> - <hidden type="int">0</hidden> - <lines type="int">10</lines> - <list_action>list</list_action> - <list_method type="method">PieceTissu_zGetAggregateRelatedMovementList</list_method> - <meta_types type="list">[]</meta_types> - <portal_types type="list">[]</portal_types> - <report_root_list type="list">[]</report_root_list> - <report_tree type="int">0</report_tree> - <search type="int">0</search> - <search_columns type="list">[]</search_columns> - <select type="int">0</select> - <selection_name>item_related_delivery_selection</selection_name> - <sort type="list">[]</sort> - <stat_method></stat_method> - <title>Mouvements</title> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - </messages> - </field> - </fields> - </group> - </groups> -</form> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_mrp/PieceTissu_printMetoLabel.py b/product/Coramy/skins/coramy_mrp/PieceTissu_printMetoLabel.py deleted file mode 100755 index a0e753326a..0000000000 --- a/product/Coramy/skins/coramy_mrp/PieceTissu_printMetoLabel.py +++ /dev/null @@ -1,52 +0,0 @@ -## Script (Python) "PieceTissu_printMetoLabel" -##bind container=container -##bind context=context -##bind namespace= -##bind script=script -##bind subpath=traverse_subpath -##parameters= -##title= -## -from Products.Coramy.MetoAPI import selectMeter, startFormat, setDecoration, setPrintSpeed, setPaperSpeed, setPixel, setTemparature, setNumber, endFormat, printText, printLine, printFrame - -raw_string = '' -item = context -printer_name = 'Meto_XS40' - -try : - item_id = item.getResourceValue().getTitle() - title_items = item.getColoris().split('/') - if len(title_items) > 0 : - item_title = title_items[len(title_items)-1][0:min(len(title_items[len(title_items)-1]),12)] - else : - item_title = '' -except : - item_id = ' ' - item_title = ' ' -item_code = item.getId() -item_code = '0'*(6-len(item_code))+item_code - -# Printing protocol starts here -# first set some parameters -raw_string += selectMeter() -#raw_string += setDecoration(1) -raw_string += startFormat() -raw_string += setPrintSpeed() -raw_string += setPaperSpeed() -raw_string += setPixel() -raw_string += setTemparature() - -# then design the label -raw_string += printText(1, "9", 1, 1, 4, 10, 20, item_id, 10) -raw_string += printText(1, "9", 1, 1, 3, 2, 14, item_title, 10) -raw_string += printText(1, "d", 8, 2, 80, 4, 5, item_code, 10) -raw_string += printText(4, "d", 8, 2, 80, 36, 5, item_code, 10) -raw_string += printText(1, "9", 1, 1, 3, 7, 1, item_code, 10) -raw_string += printText(4, "9", 1, 1, 3, 40, 9, item_code, 10) - -# set the quentity to print -raw_string += setNumber() -raw_string += endFormat() - -# send data to printer -context.sendRawToCups(printer_name, raw_string) diff --git a/product/Coramy/skins/coramy_mrp/PieceTissu_resetTargetQuantityOnUnaggregatedMovementList.py b/product/Coramy/skins/coramy_mrp/PieceTissu_resetTargetQuantityOnUnaggregatedMovementList.py deleted file mode 100755 index 50c0a85b98..0000000000 --- a/product/Coramy/skins/coramy_mrp/PieceTissu_resetTargetQuantityOnUnaggregatedMovementList.py +++ /dev/null @@ -1,15 +0,0 @@ -## Script (Python) "PieceTissu_resetTargetQuantityOnUnaggregatedMovementList" -##bind container=container -##bind context=context -##bind namespace= -##bind script=script -##bind subpath=traverse_subpath -##parameters=delivery_uid -##title= -## -movement_list = context.PieceTissu_zGetUnaggregatedTissuMovementList(uid=delivery_uid) - -for movement_item in movement_list : - movement = movement_item.getObject() - if movement is not None: - movement.Movement_resetTargetQuantity() diff --git a/product/Coramy/skins/coramy_mrp/PieceTissu_searchByResource.form b/product/Coramy/skins/coramy_mrp/PieceTissu_searchByResource.form deleted file mode 100755 index 05cdccf723..0000000000 --- a/product/Coramy/skins/coramy_mrp/PieceTissu_searchByResource.form +++ /dev/null @@ -1,170 +0,0 @@ -<?xml version="1.0"?> - -<form> - <title>Rechercher</title> - <row_length>4</row_length> - <name>PieceTissu_searchResource</name> - <pt>form_view_dialog</pt> - <action>Base_searchHandler</action> - <method>POST</method> - <enctype></enctype> - <encoding>UTF-8</encoding> - <stored_encoding>ISO-8859-1</stored_encoding> - <unicode_mode>false</unicode_mode> - <groups> - <group> - <title>left</title> - <fields> - - <field><id>my_resource_id_list</id> <type>LinesField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default type="list">[]</default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <height type="int">5</height> - <hidden type="int">0</hidden> - <max_length></max_length> - <max_linelength></max_linelength> - <max_lines></max_lines> - <required type="int">0</required> - <title>Tissus</title> - <unicode type="int">0</unicode> - <view_separator><br /> -</view_separator> - <whitespace_preserve type="int">0</whitespace_preserve> - <width type="int">40</width> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_many_lines">You entered too many lines.</message> - <message name="line_too_long">A line was too long.</message> - <message name="too_long">You entered too many characters.</message> - </messages> - </field> - <field><id>my_reset</id> <type>CheckBoxField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default type="int">1</default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <title>Recherche globale</title> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - </messages> - </field> - <field><id>my_list_form_id</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">1</hidden> - <max_length></max_length> - <required type="int">0</required> - <title></title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <default>python:here.REQUEST.form_id</default> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - <field><id>my_list_method_id</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default>PieceTissu_zGetAvailableItemList</default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">1</hidden> - <max_length></max_length> - <required type="int">0</required> - <title>x</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>right</title> - <fields> - - <field><id>my_variante_id_list</id> <type>LinesField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default type="list">[]</default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <height type="int">5</height> - <hidden type="int">0</hidden> - <max_length></max_length> - <max_linelength></max_linelength> - <max_lines></max_lines> - <required type="int">0</required> - <title>Coloris</title> - <unicode type="int">0</unicode> - <view_separator><br /> -</view_separator> - <whitespace_preserve type="int">0</whitespace_preserve> - <width type="int">40</width> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_many_lines">You entered too many lines.</message> - <message name="line_too_long">A line was too long.</message> - <message name="too_long">You entered too many characters.</message> - </messages> - </field> - </fields> - </group> - </groups> -</form> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_mrp/PieceTissu_updateResourceAfterInventory.py b/product/Coramy/skins/coramy_mrp/PieceTissu_updateResourceAfterInventory.py deleted file mode 100755 index 9ebbd11ab5..0000000000 --- a/product/Coramy/skins/coramy_mrp/PieceTissu_updateResourceAfterInventory.py +++ /dev/null @@ -1,33 +0,0 @@ -## Script (Python) "PieceTissu_updateResourceAfterInventory" -##bind container=container -##bind context=context -##bind namespace= -##bind script=script -##bind subpath=traverse_subpath -##parameters= -##title= -## -item_list = context.PieceTissu_zGetInventorized() -compteur = 0 - -for item in item_list : - compteur+=1 - item_object = item.getObject() - if item_object is not None: - movement_list = item_object.getAggregateRelatedValueList() - if len(movement_list) == 1 : - movement = movement_list[0] - item_object.edit(resource_value = movement.getResource(), - source_value = movement.getResourceValue().getSource(), - variation_category_list = movement.getVariationCategoryList()) -# if movement.getColoris() is not None : -# print str(item_object.getId())+' : '+str(movement.getResource())+" "+str(movement.getColoris())+" "+str(movement.getResourceValue().getSource()) -# else : -# print str(item_object.getId())+' : '+str(movement.getResource())+" "+str(movement.getVariante())+" "+str(movement.getResourceValue().getSource()) - else : - print str(item_object.getId())+' : Problème' - else : - print str(item)+' : Problème' - -print str(compteur) -return printed diff --git a/product/Coramy/skins/coramy_mrp/PieceTissu_zGetAggregateRelatedMovementList.zsql b/product/Coramy/skins/coramy_mrp/PieceTissu_zGetAggregateRelatedMovementList.zsql deleted file mode 100755 index 186c6c44bf..0000000000 --- a/product/Coramy/skins/coramy_mrp/PieceTissu_zGetAggregateRelatedMovementList.zsql +++ /dev/null @@ -1,24 +0,0 @@ -<dtml-comment> -title: -connection_id:MySQL -max_rows:100000 -max_cache:100 -cache_time:0 -class_name:ZSQLBrain -class_file:zsqlbrain.py -</dtml-comment> -<params>uid</params> -SELECT DISTINCT delivery.relative_url, delivery.path, delivery.portal_type, movement.start_date, movement.quantity, movement.inventory, movement.stop_date, source_node.title as source_title, destination_node.title as destination_title -FROM catalog, catalog as piece_tissu, catalog as delivery, category, movement -LEFT JOIN catalog as source_node ON source_node.uid = movement.source_uid -LEFT JOIN catalog as destination_node ON destination_node.uid = movement.destination_uid -WHERE catalog.uid=category.uid -AND piece_tissu.uid = category.category_uid -AND piece_tissu.portal_type = "Piece Tissu" -AND category.base_category_uid = <dtml-var "portal_categories.aggregate.uid"> -AND movement.uid = catalog.uid -AND delivery.uid = movement.delivery_uid -<dtml-if uid> -AND piece_tissu.uid = <dtml-sqlvar uid type="int"> -</dtml-if> -ORDER BY movement.stop_date DESC, movement.start_date DESC \ No newline at end of file diff --git a/product/Coramy/skins/coramy_mrp/PieceTissu_zGetInventorized.zsql b/product/Coramy/skins/coramy_mrp/PieceTissu_zGetInventorized.zsql deleted file mode 100755 index 62b70ed717..0000000000 --- a/product/Coramy/skins/coramy_mrp/PieceTissu_zGetInventorized.zsql +++ /dev/null @@ -1,21 +0,0 @@ -<dtml-comment> -title: -connection_id:erp5_sql_connection -max_rows:1000 -max_cache:100 -cache_time:0 -class_name:ZSQLBrain -class_file:zsqlbrain.py -</dtml-comment> -<params></params> -SELECT - item.uid, item.Id, item.path, item.Description -FROM - catalog AS item, category -WHERE - item.portal_type = "Piece Tissu" -AND - category.category_uid = item.uid -AND - category.base_category_uid = <dtml-var "portal_categories.aggregate.uid"> - diff --git a/product/Coramy/skins/coramy_mrp/PieceTissu_zGetUnaggregatedTissuMovementList.zsql b/product/Coramy/skins/coramy_mrp/PieceTissu_zGetUnaggregatedTissuMovementList.zsql deleted file mode 100755 index 57f6a7a134..0000000000 --- a/product/Coramy/skins/coramy_mrp/PieceTissu_zGetUnaggregatedTissuMovementList.zsql +++ /dev/null @@ -1,23 +0,0 @@ -<dtml-comment> -title: -connection_id:MySQL -max_rows:100000 -max_cache:100 -cache_time:0 -class_name:ZSQLBrain -class_file:zsqlbrain.py -</dtml-comment> -<params>uid</params> -SELECT DISTINCT catalog.relative_url, catalog.path -FROM catalog, catalog as resource, catalog as delivery, movement -LEFT JOIN category -ON (category.uid=movement.uid -AND category.base_category_uid = <dtml-var "portal_categories.aggregate.uid">) -WHERE movement.uid = catalog.uid -AND movement.target_quantity <> 0 -AND category.uid IS NULL -AND movement.is_accountable = 1 -AND resource.uid = movement.resource_uid -AND resource.portal_type = "Tissu" -AND delivery.uid = movement.delivery_uid -AND delivery.uid = <dtml-var uid> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_mrp/PortalSimulation_activateRequirementList.py b/product/Coramy/skins/coramy_mrp/PortalSimulation_activateRequirementList.py deleted file mode 100755 index a1f0c2187c..0000000000 --- a/product/Coramy/skins/coramy_mrp/PortalSimulation_activateRequirementList.py +++ /dev/null @@ -1,48 +0,0 @@ -## Script (Python) "PortalSimulation_activateRequirementList" -##bind container=container -##bind context=context -##bind namespace= -##bind script=script -##bind subpath=traverse_subpath -##parameters= -##title= -## -if 1: - # Erase existing auto_planned - order_list = context.portal_catalog(simulation_state="auto_planned", parent_uid=[context.ordre_fabrication.getUid()]) - order_id_list = map(lambda x:x.id,order_list) - object_id_list = context.ordre_fabrication.objectIds() - order_id_list = filter(lambda x: x in object_id_list, order_id_list) - context.ordre_fabrication.deleteContent(order_id_list) - - order_list = context.portal_catalog(simulation_state="auto_planned", parent_uid=[context.commande_achat.getUid()]) - order_id_list = map(lambda x:x.id,order_list) - object_id_list = context.commande_achat.objectIds() - order_id_list = filter(lambda x: x in object_id_list, order_id_list) - context.commande_achat.deleteContent(order_id_list) - -#return "Done" - -# Stock sourcing states -source_state_list = ('auto_planned', 'planned', 'ordered', 'confirmed', 'getting_ready', 'ready', 'started', 'stopped', 'delivered', 'invoiced') -#source_state_list = None - -# Get inventory list -inventory_list = context.SimulationTool_getGroupFutureInventoryList(simulation_state=source_state_list) -# Commit SQL -# context.portal_simulation.commitTransaction() - -# Call PortalSimulation_buildRequirementOrder for each missing resource -for inventory_item in inventory_list: - if inventory_item.inventory < 0 and inventory_item.inventory is not None: - # We should use a queue here rather than a dict - OVERKILL - movement = inventory_item.getObject() - if movement is not None: - resource = movement.getResourceValue() - if resource is not None: - if resource.getPortalType() != "Assortiment": - # Only source negative stock - print "Activate Build Order for %s for missing quantity %s" % (inventory_item.resource_relative_url, inventory_item.inventory) - resource.activate(priority=2).PortalSimulation_buildRequirementOrder(resource=inventory_item.resource_relative_url) - -return printed diff --git a/product/Coramy/skins/coramy_mrp/PortalSimulation_buildRequirementOrder.py b/product/Coramy/skins/coramy_mrp/PortalSimulation_buildRequirementOrder.py deleted file mode 100755 index 050d304273..0000000000 --- a/product/Coramy/skins/coramy_mrp/PortalSimulation_buildRequirementOrder.py +++ /dev/null @@ -1,95 +0,0 @@ -## Script (Python) "PortalSimulation_buildRequirementOrder" -##bind container=container -##bind context=context -##bind namespace= -##bind script=script -##bind subpath=traverse_subpath -##parameters=resource=None -##title= -## -from Products.ERP5.Document import newTempMovement -from DateTime import DateTime - -# Stock sourcing states -source_state_list = ('auto_planned', 'planned', 'ordered', 'confirmed', 'getting_ready', 'ready', 'delivered', 'started', 'stopped', 'invoiced') -#source_state_list = None - -# Default date -now_date = DateTime(DateTime().Date()) - -# Get inventory list -inventory_list = context.SimulationTool_getGroupFutureInventoryList(resource=resource, simulation_state=source_state_list) -# Commit SQL -context.portal_simulation.commitTransaction() - -# First, find out which resources are missing -# and build a dictionnary of quantity, variation -quantity_dict = {} -variation_dict = {} -for inventory_item in inventory_list: - if inventory_item.inventory < 0 and inventory_item.inventory is not None: - # Only source negative stock - movement = inventory_item.getObject() - if movement is not None: - key = (inventory_item.resource_relative_url, tuple(movement.getVariationCategoryList())) - quantity_dict[key] = - inventory_item.inventory - variation_dict[key] = movement.getVariationCategoryList() - else: - pass - #LOG('ZeroStockRule WARNING',0,'None movement found') - -# Commit SQL -context.portal_simulation.commitTransaction() - -# A list of resources to create -to_create = quantity_dict.keys() -movement_list = [] - -new_id = 0 -# Create movements which are needed -for relative_url, variation_category_list in to_create: - # CHECK IF EXISTING ID - key = (relative_url, variation_category_list) - new_id += 1 - movement = newTempMovement( context.portal_simulation , str(new_id) ) - movement.edit( resource=relative_url ) - movement.setVariationCategoryList( variation_category_list ) - resource = movement.getResourceValue() - - if resource is not None: - # Only order existing resources - stop_date = resource.getNextNegativeInventoryDate(variation_text = movement.getVariationText()) - if stop_date is None: # This happens if we have a negative stock already - stop_date = now_date - - if resource.getPortalType() in ('Modele',): - source = 'site/Piquage' - source_section = 'group/Coramy' - destination_section = 'group/Coramy' - destination = 'site/Stock_PF/Gravelines' - else: - source = source_section = resource.getSource() - destination_section = 'group/Coramy' - destination = 'site/Stock_MP/Gravelines' - movement.edit(target_quantity = quantity_dict[key], - target_start_date = stop_date, - target_stop_date = stop_date, - source = source, - source_section = source_section, - destination_section = destination_section, - destination = destination, - quantity_unit = resource.getDefaultQuantityUnit()) - print "Order %s %s quantity: %s" % (movement.getResource(), movement.getVariationText(), movement.getNetConvertedTargetQuantity()) - movement_list.append(movement) - -# Build Order -root_group = context.portal_simulation.collectMovement(movement_list) -order_list = context.portal_simulation.buildOrderList(root_group) - -# Update orders -for order in order_list: - print "Confirm Order %s" % order.getRelativeUrl() - order.autoPlan() - order.purchase_order_apply_condition() - -return printed diff --git a/product/Coramy/skins/coramy_mrp/PortalSimulation_fixDeliveryRule.py b/product/Coramy/skins/coramy_mrp/PortalSimulation_fixDeliveryRule.py deleted file mode 100755 index dd061c0e25..0000000000 --- a/product/Coramy/skins/coramy_mrp/PortalSimulation_fixDeliveryRule.py +++ /dev/null @@ -1,37 +0,0 @@ -## Script (Python) "PortalSimulation_fixDeliveryRule" -##bind container=container -##bind context=context -##bind namespace= -##bind script=script -##bind subpath=traverse_subpath -##parameters= -##title= -## -delivery_id = {} -delivery_list = [] - -for m in context.objectValues(): - id = '_'.join(m.getId().split('_')[0:4]) - if m.getDelivery() is not None: - delivery = m.getDeliveryValue() - delivery_id[id] = m.getDelivery() - else: - delivery_list.append(m) - m.setOrder(delivery_id[id]) - print "%s %s %s" % (id, m.getRelativeUrl(), delivery_id[id]) - - -# Build deliveries -movement_group = context.portal_simulation.collectMovement(delivery_list) -delivery_list = context.portal_simulation.buildDeliveryList(movement_group) - -# Change workflow state -for new_delivery in delivery_list : - # Copy local roles - for k, v in delivery.get_local_roles(): - new_delivery.manage_addLocalRoles(k,v) - # update the state of the created deliveries to 'confirmed' - #new_delivery.confirm() - print "Created delivery %s" % new_delivery.getId() - -return printed diff --git a/product/Coramy/skins/coramy_mrp/PortalSimulation_updateAssetPrice.py b/product/Coramy/skins/coramy_mrp/PortalSimulation_updateAssetPrice.py deleted file mode 100755 index be9f9b0049..0000000000 --- a/product/Coramy/skins/coramy_mrp/PortalSimulation_updateAssetPrice.py +++ /dev/null @@ -1,25 +0,0 @@ -## Script (Python) "PortalSimulation_updateAssetPrice" -##bind container=container -##bind context=context -##bind namespace= -##bind script=script -##bind subpath=traverse_subpath -##parameters= -##title= -## -active_process = context.portal_activities.newActiveProcess(title="Calcul test de valorisation du stock") - -result = context.portal_simulation.activate(activity='SQLQueue', priority=3, active_process = active_process ).updateAssetPrice( - "modele/417P401", - """coloris/modele/417P401/1_espace_stuc -taille/enfant/10 ans""", - "group/Coramy", - "site/Stock_PF" - ) - -#for i in result: -# print ' '.join(map(lambda x:str(x), i)) -print repr(result) - - -return printed diff --git a/product/Coramy/skins/coramy_mrp/ProductionOrder_getAggregatedConsumptionList.py b/product/Coramy/skins/coramy_mrp/ProductionOrder_getAggregatedConsumptionList.py deleted file mode 100755 index faf5210669..0000000000 --- a/product/Coramy/skins/coramy_mrp/ProductionOrder_getAggregatedConsumptionList.py +++ /dev/null @@ -1,14 +0,0 @@ -## Script (Python) "ProductionOrder_getAggregatedConsumptionList" -##bind container=container -##bind context=context -##bind namespace= -##bind script=script -##bind subpath=traverse_subpath -##parameters=**kw -##title= -## -movement_list = context.getOrderRelatedMovementList() -movement_uid_list = map(lambda o:o.getUid(), movement_list) -result = context.ProductionOrder_zGetAggregatedMaterialConsumptionList(order_related_movement_uid_list = movement_uid_list) -result += context.ProductionOrder_zGetAggregatedImmaterialConsumptionList(order_related_movement_uid_list = movement_uid_list) -return result diff --git a/product/Coramy/skins/coramy_mrp/ProductionOrder_getAggregatedImmaterialConsumptionList.py b/product/Coramy/skins/coramy_mrp/ProductionOrder_getAggregatedImmaterialConsumptionList.py deleted file mode 100755 index 97fe3e245b..0000000000 --- a/product/Coramy/skins/coramy_mrp/ProductionOrder_getAggregatedImmaterialConsumptionList.py +++ /dev/null @@ -1,15 +0,0 @@ -## Script (Python) "ProductionOrder_getAggregatedImmaterialConsumptionList" -##bind container=container -##bind context=context -##bind namespace= -##bind script=script -##bind subpath=traverse_subpath -##parameters=**kw -##title= -## -movement_list = context.getOrderRelatedMovementList() -movement_uid_list = map(lambda o:o.getUid(), movement_list) -if len(movement_uid_list) > 0 : - return context.ProductionOrder_zGetAggregatedImmaterialConsumptionList(order_related_movement_uid_list = movement_uid_list) -else : - return [] diff --git a/product/Coramy/skins/coramy_mrp/ProductionOrder_getAggregatedMaterialConsumptionList.py b/product/Coramy/skins/coramy_mrp/ProductionOrder_getAggregatedMaterialConsumptionList.py deleted file mode 100755 index 7510c6c377..0000000000 --- a/product/Coramy/skins/coramy_mrp/ProductionOrder_getAggregatedMaterialConsumptionList.py +++ /dev/null @@ -1,17 +0,0 @@ -## Script (Python) "ProductionOrder_getAggregatedMaterialConsumptionList" -##bind container=container -##bind context=context -##bind namespace= -##bind script=script -##bind subpath=traverse_subpath -##parameters=**kw -##title= -## -movement_list = context.getOrderRelatedMovementList() -movement_uid_list = map(lambda o:o.getUid(), movement_list) -if len(movement_uid_list) > 0 : - return context.ProductionOrder_zGetAggregatedMaterialConsumptionList(order_related_movement_uid_list = movement_uid_list, - query=kw.get('query', None), - at_date=context.getStartDate().Date()) -else : - return [] diff --git a/product/Coramy/skins/coramy_mrp/ProductionOrder_getAggregatedMaterialProductionList.py b/product/Coramy/skins/coramy_mrp/ProductionOrder_getAggregatedMaterialProductionList.py deleted file mode 100755 index 9ce5da45fc..0000000000 --- a/product/Coramy/skins/coramy_mrp/ProductionOrder_getAggregatedMaterialProductionList.py +++ /dev/null @@ -1,12 +0,0 @@ -## Script (Python) "ProductionOrder_getAggregatedMaterialProductionList" -##bind container=container -##bind context=context -##bind namespace= -##bind script=script -##bind subpath=traverse_subpath -##parameters=**kw -##title= -## -movement_list = context.getOrderRelatedMovementList() -movement_uid_list = map(lambda o:o.getUid(), movement_list) -return context.ProductionOrder_zGetAggregatedMaterialProductionList(order_related_movement_uid_list = movement_uid_list) diff --git a/product/Coramy/skins/coramy_mrp/ProductionOrder_getAggregatedMaterialSourcingList.py b/product/Coramy/skins/coramy_mrp/ProductionOrder_getAggregatedMaterialSourcingList.py deleted file mode 100755 index 1bf0ef529b..0000000000 --- a/product/Coramy/skins/coramy_mrp/ProductionOrder_getAggregatedMaterialSourcingList.py +++ /dev/null @@ -1,12 +0,0 @@ -## Script (Python) "ProductionOrder_getAggregatedMaterialSourcingList" -##bind container=container -##bind context=context -##bind namespace= -##bind script=script -##bind subpath=traverse_subpath -##parameters=**kw -##title= -## -movement_list = context.getOrderRelatedMovementList() -movement_uid_list = map(lambda o:o.getUid(), movement_list) -return map(lambda o: o.getRelativeUrl(), context.ProductionOrder_zGetAggregatedMaterialSourcingList(order_related_movement_uid_list = movement_uid_list)) diff --git a/product/Coramy/skins/coramy_mrp/ProductionOrder_getConsumptionList.py b/product/Coramy/skins/coramy_mrp/ProductionOrder_getConsumptionList.py deleted file mode 100755 index 99080d8b77..0000000000 --- a/product/Coramy/skins/coramy_mrp/ProductionOrder_getConsumptionList.py +++ /dev/null @@ -1,14 +0,0 @@ -## Script (Python) "ProductionOrder_getConsumptionList" -##bind container=container -##bind context=context -##bind namespace= -##bind script=script -##bind subpath=traverse_subpath -##parameters=**kw -##title= -## -movement_list = context.getOrderRelatedMovementList() -movement_uid_list = map(lambda o:o.getUid(), movement_list) -result = context.ProductionOrder_zGetMaterialConsumptionList(order_related_movement_uid_list = movement_uid_list) -result += context.ProductionOrder_zGetImmaterialConsumptionList(order_related_movement_uid_list = movement_uid_list) -return result diff --git a/product/Coramy/skins/coramy_mrp/ProductionOrder_getMaterialConsumptionList.py b/product/Coramy/skins/coramy_mrp/ProductionOrder_getMaterialConsumptionList.py deleted file mode 100755 index 233a0f786e..0000000000 --- a/product/Coramy/skins/coramy_mrp/ProductionOrder_getMaterialConsumptionList.py +++ /dev/null @@ -1,12 +0,0 @@ -## Script (Python) "ProductionOrder_getMaterialConsumptionList" -##bind container=container -##bind context=context -##bind namespace= -##bind script=script -##bind subpath=traverse_subpath -##parameters=**kw -##title= -## -movement_list = context.getOrderRelatedMovementList() -movement_uid_list = map(lambda o:o.getUid(), movement_list) -return context.ProductionOrder_zGetMaterialConsumptionList(order_related_movement_uid_list = movement_uid_list) diff --git a/product/Coramy/skins/coramy_mrp/ProductionOrder_getMaterialProductionMovementList.py b/product/Coramy/skins/coramy_mrp/ProductionOrder_getMaterialProductionMovementList.py deleted file mode 100755 index 9e94fc0f54..0000000000 --- a/product/Coramy/skins/coramy_mrp/ProductionOrder_getMaterialProductionMovementList.py +++ /dev/null @@ -1,12 +0,0 @@ -## Script (Python) "ProductionOrder_getMaterialProductionMovementList" -##bind container=container -##bind context=context -##bind namespace= -##bind script=script -##bind subpath=traverse_subpath -##parameters=**kw -##title= -## -movement_list = context.getOrderRelatedMovementList() -movement_uid_list = map(lambda o:o.getUid(), movement_list) -return map(lambda o: o.getObject(), context.ProductionOrder_zGetMaterialProductionMovementList(order_related_movement_uid_list = movement_uid_list)) diff --git a/product/Coramy/skins/coramy_mrp/ProductionOrder_getMaterialSourcingMovementList.py b/product/Coramy/skins/coramy_mrp/ProductionOrder_getMaterialSourcingMovementList.py deleted file mode 100755 index 233e8d2071..0000000000 --- a/product/Coramy/skins/coramy_mrp/ProductionOrder_getMaterialSourcingMovementList.py +++ /dev/null @@ -1,12 +0,0 @@ -## Script (Python) "ProductionOrder_getMaterialSourcingMovementList" -##bind container=container -##bind context=context -##bind namespace= -##bind script=script -##bind subpath=traverse_subpath -##parameters=**kw -##title= -## -movement_list = context.getOrderRelatedMovementList() -movement_uid_list = map(lambda o:o.getUid(), movement_list) -return map(lambda o: o.getObject(), context.ProductionOrder_zGetMaterialSourcingMovementList(order_related_movement_uid_list = movement_uid_list)) diff --git a/product/Coramy/skins/coramy_mrp/ProductionOrder_zGetAggregatedImmaterialConsumptionList.zsql b/product/Coramy/skins/coramy_mrp/ProductionOrder_zGetAggregatedImmaterialConsumptionList.zsql deleted file mode 100755 index df55c76935..0000000000 --- a/product/Coramy/skins/coramy_mrp/ProductionOrder_zGetAggregatedImmaterialConsumptionList.zsql +++ /dev/null @@ -1,50 +0,0 @@ -<dtml-comment> -title: -connection_id:erp5_sql_connection -max_rows:1000 -max_cache:100 -cache_time:0 -class_name:DeliveryListBrain -class_file:InventoryBrain.py -</dtml-comment> -<params>order_related_movement_uid_list:list</params> -SELECT - resource.uid, - resource.path, - SUM(movement.target_quantity) as target_quantity, - SUM(movement.quantity) as quantity, - node.title AS node_title, - node.relative_url AS node_relative_url, - section.title AS section_title, - section.relative_url AS section_relative_url, - resource.title AS resource_title, - resource.uid AS resource_uid, - resource.relative_url AS resource_relative_url, - movement.variation_text AS variation_text, - catalog.simulation_state AS simulation_state -FROM - catalog AS transformation_rule, - catalog AS resource, - category AS resource_category, - catalog, - stock, - catalog AS node, - catalog AS section, - movement -WHERE - transformation_rule.id = "default_transformation_rule" -AND node.uid = stock.node_uid -AND section.uid = stock.section_uid -AND stock.uid = catalog.uid -<dtml-if order_related_movement_uid_list> -AND (<dtml-in order_related_movement_uid_list>transformation_rule.parent_uid = <dtml-sqlvar sequence-item type="int"><dtml-if sequence-end><dtml-else> OR </dtml-if></dtml-in>) -</dtml-if> -AND catalog.parent_uid = transformation_rule.uid -AND movement.uid = catalog.uid -AND movement.resource_uid = resource.uid -AND resource.portal_type = "Category" -AND resource_category.uid = resource.uid -AND resource_category.category_uid = resource.uid -AND resource_category.base_category_uid = <dtml-var "portal_categories.operation.getUid()"> -GROUP BY - resource.uid, movement.variation_text \ No newline at end of file diff --git a/product/Coramy/skins/coramy_mrp/ProductionOrder_zGetAggregatedMaterialConsumptionList.zsql b/product/Coramy/skins/coramy_mrp/ProductionOrder_zGetAggregatedMaterialConsumptionList.zsql deleted file mode 100755 index bd43ef04ec..0000000000 --- a/product/Coramy/skins/coramy_mrp/ProductionOrder_zGetAggregatedMaterialConsumptionList.zsql +++ /dev/null @@ -1,54 +0,0 @@ -<dtml-comment> -title: -connection_id:erp5_sql_connection -max_rows:1000 -max_cache:100 -cache_time:0 -class_name:DeliveryListBrain -class_file:InventoryBrain.py -</dtml-comment> -<params>order_related_movement_uid_list:list -query -at_date</params> -SELECT - resource.uid, - resource.path, - SUM(movement.target_quantity) as target_quantity, - SUM(movement.quantity) as quantity, - node.title AS node_title, - node.relative_url AS node_relative_url, - section.title AS section_title, - section.relative_url AS section_relative_url, - resource.title AS resource_title, - resource.uid AS resource_uid, - resource.relative_url AS resource_relative_url, - movement.variation_text AS variation_text, - catalog.simulation_state AS simulation_state -<dtml-if at_date>,<dtml-sqlvar at_date type="string" > as at_date -</dtml-if> -<dtml-if query>,<dtml-sqlvar query type="string"> as query -</dtml-if> -FROM - catalog AS transformation_rule, - catalog AS resource, - catalog, - stock, - catalog AS node, - catalog AS section, - movement -WHERE - transformation_rule.id = "default_transformation_rule" -AND node.uid = stock.node_uid -AND section.uid = stock.section_uid -AND stock.uid = catalog.uid -<dtml-if order_related_movement_uid_list> -AND (<dtml-in order_related_movement_uid_list>transformation_rule.parent_uid = <dtml-sqlvar sequence-item type="int"><dtml-if sequence-end><dtml-else> OR </dtml-if></dtml-in>) -</dtml-if> -AND catalog.parent_uid = transformation_rule.uid -AND movement.uid = catalog.uid -AND movement.resource_uid = resource.uid -AND (resource.portal_type = "Composant" OR resource.portal_type = "Tissu") -GROUP BY - resource.uid, movement.variation_text -ORDER BY - resource.title, movement.variation_text \ No newline at end of file diff --git a/product/Coramy/skins/coramy_mrp/ProductionOrder_zGetAggregatedMaterialProductionList.zsql b/product/Coramy/skins/coramy_mrp/ProductionOrder_zGetAggregatedMaterialProductionList.zsql deleted file mode 100755 index dd91a5b606..0000000000 --- a/product/Coramy/skins/coramy_mrp/ProductionOrder_zGetAggregatedMaterialProductionList.zsql +++ /dev/null @@ -1,46 +0,0 @@ -<dtml-comment> -title: -connection_id:erp5_sql_connection -max_rows:1000 -max_cache:100 -cache_time:0 -class_name:DeliveryListBrain -class_file:InventoryBrain.py -</dtml-comment> -<params>order_related_movement_uid_list:list</params> -SELECT - resource.uid, - resource.path, - SUM(movement.target_quantity) as target_quantity, - SUM(movement.quantity) as quantity, - node.title AS node_title, - node.relative_url AS node_relative_url, - section.title AS section_title, - section.relative_url AS section_relative_url, - resource.title AS resource_title, - resource.uid AS resource_uid, - resource.relative_url AS resource_relative_url, - movement.variation_text AS variation_text, - catalog.simulation_state AS simulation_state -FROM - catalog AS transformation_rule, - catalog AS resource, - catalog, - stock, - catalog AS node, - catalog AS section, - movement -WHERE - transformation_rule.id = "default_transformation_rule" -AND node.uid = stock.node_uid -AND section.uid = stock.section_uid -AND stock.uid = catalog.uid -AND (<dtml-in order_related_movement_uid_list>transformation_rule.parent_uid = <dtml-sqlvar sequence-item type="int"><dtml-if sequence-end><dtml-else> OR </dtml-if></dtml-in>) -AND catalog.parent_uid = transformation_rule.uid -AND movement.uid = catalog.uid -AND movement.resource_uid = resource.uid -AND (resource.portal_type = "Modele") -GROUP BY - resource.uid, movement.variation_text -ORDER BY - resource.title, movement.variation_text \ No newline at end of file diff --git a/product/Coramy/skins/coramy_mrp/ProductionOrder_zGetAggregatedMaterialSourcingList.zsql b/product/Coramy/skins/coramy_mrp/ProductionOrder_zGetAggregatedMaterialSourcingList.zsql deleted file mode 100755 index 14fc92f7fa..0000000000 --- a/product/Coramy/skins/coramy_mrp/ProductionOrder_zGetAggregatedMaterialSourcingList.zsql +++ /dev/null @@ -1,49 +0,0 @@ -<dtml-comment> -title: -connection_id:erp5_sql_connection -max_rows:1000 -max_cache:100 -cache_time:0 -class_name:DeliveryListBrain -class_file:InventoryBrain.py -</dtml-comment> -<params>order_related_movement_uid_list:list</params> -SELECT - resource.uid, - resource.path, - SUM(movement.target_quantity) as target_quantity, - SUM(movement.quantity) as quantity, - node.title AS node_title, - node.relative_url AS node_relative_url, - section.title AS section_title, - section.relative_url AS section_relative_url, - resource.title AS resource_title, - resource.uid AS resource_uid, - resource.relative_url AS resource_relative_url, - movement.variation_text AS variation_text, - catalog.simulation_state AS simulation_state -FROM - catalog AS transformation_rule, - catalog AS consumed, - catalog AS transformation_sourcing_rule, - catalog AS resource, - catalog, - stock, - catalog AS node, - catalog AS section, - movement -WHERE - transformation_rule.id = "default_transformation_rule" -AND transformation_sourcing_rule.id = "default_transformation_sourcing_rule" -AND node.uid = stock.node_uid -AND section.uid = stock.section_uid -AND stock.uid = catalog.uid -AND (<dtml-in order_related_movement_uid_list>transformation_rule.parent_uid = <dtml-sqlvar sequence-item type="int"><dtml-if sequence-end><dtml-else> OR </dtml-if></dtml-in>) -AND catalog.parent_uid = transformation_sourcing_rule.uid -AND transformation_sourcing_rule.parent_uid = consumed.uid -AND consumed.parent_uid = transformation_rule.uid -AND movement.uid = catalog.uid -AND movement.resource_uid = resource.uid -AND (resource.portal_type = "Composant" OR resource.portal_type = "Tissu") -GROUP BY - resource.uid, movement.variation_text diff --git a/product/Coramy/skins/coramy_mrp/ProductionOrder_zGetConsumptionList.zsql b/product/Coramy/skins/coramy_mrp/ProductionOrder_zGetConsumptionList.zsql deleted file mode 100755 index c3aefc7517..0000000000 --- a/product/Coramy/skins/coramy_mrp/ProductionOrder_zGetConsumptionList.zsql +++ /dev/null @@ -1,52 +0,0 @@ -<dtml-comment> -title: -connection_id:erp5_sql_connection -max_rows:1000 -max_cache:100 -cache_time:0 -class_name:InventoryListBrain -class_file:InventoryBrain.py -</dtml-comment> -<params>order_related_movement_uid_list:list</params> -SELECT - catalog.uid, - catalog.path, - movement.target_quantity, - movement.quantity, - movement.source_uid, - movement.destination_uid, - movement.start_date, - movement.stop_date, - movement.target_start_date, - movement.target_stop_date, - movement.variation_text, - resource.relative_url, - resource.id, - resource.title, - node.title AS node_title, - node.relative_url AS node_relative_url, - section.title AS section_title, - section.relative_url AS section_relative_url, - resource.title AS resource_title, - resource.uid AS resource_uid, - resource.relative_url AS resource_relative_url, - movement.variation_text AS variation_text, - catalog.simulation_state AS simulation_state -FROM - catalog, - stock, - catalog AS transformation_rule, - catalog AS resource, - catalog AS node, - catalog AS section, - movement -WHERE - transformation_rule.id = "default_transformation_rule" -AND node.uid = stock.node_uid -AND section.uid = stock.section_uid -AND (<dtml-in order_related_movement_uid_list>transformation_rule.parent_uid = <dtml-sqlvar sequence-item type="int"><dtml-if sequence-end><dtml-else> OR </dtml-if></dtml-in>) -AND catalog.parent_uid = transformation_rule.uid -AND movement.uid = catalog.uid -AND stock.uid = catalog.uid -AND movement.resource_uid = resource.uid -AND (resource.portal_type = "Composant" OR resource.portal_type = "Tissu") diff --git a/product/Coramy/skins/coramy_mrp/ProductionOrder_zGetConsumptionMovementList.zsql b/product/Coramy/skins/coramy_mrp/ProductionOrder_zGetConsumptionMovementList.zsql deleted file mode 100755 index 808bf51153..0000000000 --- a/product/Coramy/skins/coramy_mrp/ProductionOrder_zGetConsumptionMovementList.zsql +++ /dev/null @@ -1,24 +0,0 @@ -<dtml-comment> -title: -connection_id:erp5_sql_connection -max_rows:1000 -max_cache:100 -cache_time:0 -class_name:DeliveryListBrain -class_file:InventoryBrain.py -</dtml-comment> -<params>order_related_movement_uid_list:list</params> -SELECT - catalog.* -FROM - catalog AS transformation_rule, - catalog AS resource, - catalog, - movement -WHERE - transformation_rule.id = "default_transformation_rule" -AND (<dtml-in order_related_movement_uid_list>transformation_rule.parent_uid = <dtml-sqlvar sequence-item type="int"><dtml-if sequence-end><dtml-else> OR </dtml-if></dtml-in>) -AND catalog.parent_uid = transformation_rule.uid -AND movement.uid = catalog.uid -AND movement.resource_uid = resource.uid -AND (resource.portal_type = "Composant" OR resource.portal_type = "Tissu" OR resource.portal_type = "Category") \ No newline at end of file diff --git a/product/Coramy/skins/coramy_mrp/ProductionOrder_zGetImmaterialConsumptionList.zsql b/product/Coramy/skins/coramy_mrp/ProductionOrder_zGetImmaterialConsumptionList.zsql deleted file mode 100755 index a5472a9b00..0000000000 --- a/product/Coramy/skins/coramy_mrp/ProductionOrder_zGetImmaterialConsumptionList.zsql +++ /dev/null @@ -1,42 +0,0 @@ -<dtml-comment> -title: -connection_id:erp5_sql_connection -max_rows:1000 -max_cache:100 -cache_time:0 -class_name: -class_file: -</dtml-comment> -<params>order_related_movement_uid_list:list</params> -SELECT - catalog.uid, - catalog.path, - movement.target_quantity, - movement.quantity, - movement.source_uid, - movement.destination_uid, - movement.start_date, - movement.stop_date, - movement.target_start_date, - movement.target_stop_date, - movement.variation_text, - resource.relative_url, - resource.id, - resource.uid AS resource_uid, - resource.Title -FROM - catalog AS transformation_rule, - catalog AS resource, - catalog, - category AS resource_category, - movement -WHERE - transformation_rule.id = "default_transformation_rule" -AND (<dtml-in order_related_movement_uid_list>transformation_rule.parent_uid = <dtml-sqlvar sequence-item type="int"><dtml-if sequence-last><dtml-else> OR </dtml-if></dtml-in>) -AND catalog.parent_uid = transformation_rule.uid -AND movement.uid = catalog.uid -AND movement.resource_uid = resource.uid -AND resource.portal_type = "Category" -AND resource_category.uid = resource.uid -AND resource_category.category_uid = resource.uid -AND resource_category.base_category_uid = <dtml-var "portal_categories.operation.getUid()"> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_mrp/ProductionOrder_zGetMaterialConsumptionList.zsql b/product/Coramy/skins/coramy_mrp/ProductionOrder_zGetMaterialConsumptionList.zsql deleted file mode 100755 index c3aefc7517..0000000000 --- a/product/Coramy/skins/coramy_mrp/ProductionOrder_zGetMaterialConsumptionList.zsql +++ /dev/null @@ -1,52 +0,0 @@ -<dtml-comment> -title: -connection_id:erp5_sql_connection -max_rows:1000 -max_cache:100 -cache_time:0 -class_name:InventoryListBrain -class_file:InventoryBrain.py -</dtml-comment> -<params>order_related_movement_uid_list:list</params> -SELECT - catalog.uid, - catalog.path, - movement.target_quantity, - movement.quantity, - movement.source_uid, - movement.destination_uid, - movement.start_date, - movement.stop_date, - movement.target_start_date, - movement.target_stop_date, - movement.variation_text, - resource.relative_url, - resource.id, - resource.title, - node.title AS node_title, - node.relative_url AS node_relative_url, - section.title AS section_title, - section.relative_url AS section_relative_url, - resource.title AS resource_title, - resource.uid AS resource_uid, - resource.relative_url AS resource_relative_url, - movement.variation_text AS variation_text, - catalog.simulation_state AS simulation_state -FROM - catalog, - stock, - catalog AS transformation_rule, - catalog AS resource, - catalog AS node, - catalog AS section, - movement -WHERE - transformation_rule.id = "default_transformation_rule" -AND node.uid = stock.node_uid -AND section.uid = stock.section_uid -AND (<dtml-in order_related_movement_uid_list>transformation_rule.parent_uid = <dtml-sqlvar sequence-item type="int"><dtml-if sequence-end><dtml-else> OR </dtml-if></dtml-in>) -AND catalog.parent_uid = transformation_rule.uid -AND movement.uid = catalog.uid -AND stock.uid = catalog.uid -AND movement.resource_uid = resource.uid -AND (resource.portal_type = "Composant" OR resource.portal_type = "Tissu") diff --git a/product/Coramy/skins/coramy_mrp/ProductionOrder_zGetMaterialProductionMovementList.zsql b/product/Coramy/skins/coramy_mrp/ProductionOrder_zGetMaterialProductionMovementList.zsql deleted file mode 100755 index be46996be7..0000000000 --- a/product/Coramy/skins/coramy_mrp/ProductionOrder_zGetMaterialProductionMovementList.zsql +++ /dev/null @@ -1,24 +0,0 @@ -<dtml-comment> -title: -connection_id:erp5_sql_connection -max_rows:1000 -max_cache:100 -cache_time:0 -class_name:DeliveryListBrain -class_file:InventoryBrain.py -</dtml-comment> -<params>order_related_movement_uid_list:list</params> -SELECT - catalog.* -FROM - catalog AS transformation_rule, - catalog AS resource, - catalog, - movement -WHERE - transformation_rule.id = "default_transformation_rule" -AND (<dtml-in order_related_movement_uid_list>transformation_rule.parent_uid = <dtml-sqlvar sequence-item type="int"><dtml-if sequence-end><dtml-else> OR </dtml-if></dtml-in>) -AND catalog.parent_uid = transformation_rule.uid -AND movement.uid = catalog.uid -AND movement.resource_uid = resource.uid -AND (resource.portal_type = "Modele" OR resource.portal_type = "Composant" OR resource.portal_type = "Tissu" OR resource.portal_type = "Category") \ No newline at end of file diff --git a/product/Coramy/skins/coramy_mrp/ProductionOrder_zGetMaterialSourcingMovementList.zsql b/product/Coramy/skins/coramy_mrp/ProductionOrder_zGetMaterialSourcingMovementList.zsql deleted file mode 100755 index 004aed92ab..0000000000 --- a/product/Coramy/skins/coramy_mrp/ProductionOrder_zGetMaterialSourcingMovementList.zsql +++ /dev/null @@ -1,28 +0,0 @@ -<dtml-comment> -title: -connection_id:erp5_sql_connection -max_rows:1000 -max_cache:100 -cache_time:0 -class_name:DeliveryListBrain -class_file:InventoryBrain.py -</dtml-comment> -<params>order_related_movement_uid_list:list</params> -SELECT - catalog.* -FROM - catalog AS transformation_rule, - catalog AS consumed, - catalog AS transformation_sourcing_rule, - catalog AS resource, - catalog, - movement -WHERE - transformation_rule.id = "default_transformation_rule" -AND (<dtml-in order_related_movement_uid_list>transformation_rule.parent_uid = <dtml-sqlvar sequence-item type="int"><dtml-if sequence-end><dtml-else> OR </dtml-if></dtml-in>) -AND consumed.parent_uid = transformation_rule.uid -AND transformation_sourcing_rule.parent_uid = consumed.uid -AND catalog.parent_uid = transformation_sourcing_rule.uid -AND movement.uid = catalog.uid -AND movement.resource_uid = resource.uid -AND (resource.portal_type = "Composant" OR resource.portal_type = "Tissu") diff --git a/product/Coramy/skins/coramy_mrp/Resource_getChartCurrentInventoryList.py b/product/Coramy/skins/coramy_mrp/Resource_getChartCurrentInventoryList.py deleted file mode 100755 index 4059651331..0000000000 --- a/product/Coramy/skins/coramy_mrp/Resource_getChartCurrentInventoryList.py +++ /dev/null @@ -1,13 +0,0 @@ -## Script (Python) "Resource_getChartCurrentInventoryList" -##bind container=container -##bind context=context -##bind namespace= -##bind script=script -##bind subpath=traverse_subpath -##parameters= -##title= -## -from DateTime import DateTime -result = map(lambda x:(x[0], x[1]), context.Resource_zGetChartInventoryList(to_date=DateTime(),resource_uid=context.getUid())) -result = filter(lambda x: x[1] > 0, result) -return result diff --git a/product/Coramy/skins/coramy_mrp/Resource_getChartFutureHistoryList.py b/product/Coramy/skins/coramy_mrp/Resource_getChartFutureHistoryList.py deleted file mode 100755 index 779b5678bb..0000000000 --- a/product/Coramy/skins/coramy_mrp/Resource_getChartFutureHistoryList.py +++ /dev/null @@ -1,57 +0,0 @@ -## Script (Python) "Resource_getChartFutureHistoryList" -##bind container=container -##bind context=context -##bind namespace= -##bind script=script -##bind subpath=traverse_subpath -##parameters=from_date=None, to_date=None, node_uid=None, section_uid=None, **kw -##title= -## -from DateTime import DateTime -# context is the resource which we call this method on -resource = context - -# Initialize some parameters which we do not know yet where to get from -# XXX TO BE DONE TO CONVERT OBJECTS / URLS to UIDS -if from_date is None: from_date =DateTime() -if to_date is None: to_date = from_date + 365 - -# Get the inventory at from_date -if from_date is not None: - initial_inventory_list = resource.Resource_zGetInventoryList(resource_uid = resource.getUid(), - to_date = from_date, node_uid = node_uid, section_uid=section_uid, **kw) - if len(initial_inventory_list) > 0: - initial_inventory_list = initial_quantity_list[0].inventory - else: - initial_inventory = 0.0 -else: - initial_inventory = 0.0 - -# Get the movement history -quantity_history_list = resource.Resource_zGetMovementHistoryList(resource_uid = resource.getUid(), - from_date = from_date, to_date=to_date, node_uid = node_uid, section_uid=section_uid, **kw) - -# Calculate the integral -result = [] -current_date = from_date -has_quantity_item = 0 -for quantity_item in quantity_history_list: - has_quantity_item = 1 - if quantity_item.start_date != current_date and current_date is not None: - result += [(current_date,initial_inventory)] - if quantity_item.start_date != current_date: - current_date = quantity_item.start_date - initial_inventory += quantity_item.quantity -if has_quantity_item: - result += [(current_date,initial_inventory)] - -result += [result[-1]] -new_result=[] -i = 1 -while from_date < to_date: - new_result += [(from_date.Date() , result[i-1][1])] - while from_date > result[i][0] and i < (len(result)-1): - i+=1 - from_date += 1 - -return new_result diff --git a/product/Coramy/skins/coramy_mrp/Resource_getChartInventoryList.py b/product/Coramy/skins/coramy_mrp/Resource_getChartInventoryList.py deleted file mode 100755 index c960a3b6bd..0000000000 --- a/product/Coramy/skins/coramy_mrp/Resource_getChartInventoryList.py +++ /dev/null @@ -1,12 +0,0 @@ -## Script (Python) "Resource_getChartInventoryList" -##bind container=container -##bind context=context -##bind namespace= -##bind script=script -##bind subpath=traverse_subpath -##parameters= -##title= -## -result = map(lambda x:(x[0], x[1]), context.Resource_zGetChartInventoryList(resource_uid=context.getUid())) -result = filter(lambda x: x[1] > 0, result) -return result diff --git a/product/Coramy/skins/coramy_mrp/Resource_getCurrentInventoryList.py b/product/Coramy/skins/coramy_mrp/Resource_getCurrentInventoryList.py deleted file mode 100755 index cc7abe95a0..0000000000 --- a/product/Coramy/skins/coramy_mrp/Resource_getCurrentInventoryList.py +++ /dev/null @@ -1,11 +0,0 @@ -## Script (Python) "Resource_getCurrentInventoryList" -##bind container=container -##bind context=context -##bind namespace= -##bind script=script -##bind subpath=traverse_subpath -##parameters=**kw -##title= -## -from DateTime import DateTime -return context.Resource_zGetInventoryList(resource_uid = context.getUid(), to_date = DateTime(), **kw) diff --git a/product/Coramy/skins/coramy_mrp/Resource_getFutureGlobalInventory.py b/product/Coramy/skins/coramy_mrp/Resource_getFutureGlobalInventory.py deleted file mode 100755 index da7430fc87..0000000000 --- a/product/Coramy/skins/coramy_mrp/Resource_getFutureGlobalInventory.py +++ /dev/null @@ -1,11 +0,0 @@ -## Script (Python) "Resource_getFutureGlobalInventory" -##bind container=container -##bind context=context -##bind namespace= -##bind script=script -##bind subpath=traverse_subpath -##parameters=section_uid=None, **kw -##title= -## -from DateTime import DateTime -return context.Resource_zGetGlobalInventoryList(resource_uid = context.getUid(), metanode="group/coramy", **kw)[0].inventory diff --git a/product/Coramy/skins/coramy_mrp/Resource_getFutureHistoryList.py b/product/Coramy/skins/coramy_mrp/Resource_getFutureHistoryList.py deleted file mode 100755 index 1716ec53d1..0000000000 --- a/product/Coramy/skins/coramy_mrp/Resource_getFutureHistoryList.py +++ /dev/null @@ -1,45 +0,0 @@ -## Script (Python) "Resource_getFutureHistoryList" -##bind container=container -##bind context=context -##bind namespace= -##bind script=script -##bind subpath=traverse_subpath -##parameters=from_date=None, to_date=None, node_uid=None, section_uid=None, **kw -##title= -## -# context is the resource which we call this method on -resource = context - -# Initialize some parameters which we do not know yet where to get from -# XXX TO BE DONE TO CONVERT OBJECTS / URLS to UIDS - -# Get the inventory at from_date -if from_date is not None: - initial_inventory_list = resource.Resource_zGetInventoryList(resource_uid = resource.getUid(), - to_date = from_date, node_uid = node_uid, section_uid=section_uid, **kw) - if len(initial_inventory_list) > 0: - initial_inventory_list = initial_quantity_list[0].inventory - else: - initial_inventory = 0.0 -else: - initial_inventory = 0.0 - -# Get the movement history -quantity_history_list = resource.Resource_zGetMovementHistoryList(resource_uid = resource.getUid(), - from_date = from_date, to_date=to_date, node_uid = node_uid, section_uid=section_uid, **kw) - -# Calculate the integral -result = [] -current_date = from_date -has_quantity_item = 0 -for quantity_item in quantity_history_list: - has_quantity_item = 1 - if quantity_item.start_date != current_date and current_date is not None: - result = [{'start_date': current_date, 'inventory': initial_inventory}] - if quantity_item.start_date != current_date: - current_date = quantity_item.start_date - initial_inventory += quantity_item.quantity -if has_quantity_item: - result += [ {'start_date': current_date, 'inventory': initial_inventory} ] - -return result diff --git a/product/Coramy/skins/coramy_mrp/Resource_getFutureInventoryList.py b/product/Coramy/skins/coramy_mrp/Resource_getFutureInventoryList.py deleted file mode 100755 index d393dea85a..0000000000 --- a/product/Coramy/skins/coramy_mrp/Resource_getFutureInventoryList.py +++ /dev/null @@ -1,11 +0,0 @@ -## Script (Python) "Resource_getFutureInventoryList" -##bind container=container -##bind context=context -##bind namespace= -##bind script=script -##bind subpath=traverse_subpath -##parameters=**kw -##title= -## -from DateTime import DateTime -return context.Resource_zGetInventoryList(resource_uid = context.getUid(), **kw) diff --git a/product/Coramy/skins/coramy_mrp/Resource_getInventoryHistoryChart.py b/product/Coramy/skins/coramy_mrp/Resource_getInventoryHistoryChart.py deleted file mode 100755 index 3a35fdf760..0000000000 --- a/product/Coramy/skins/coramy_mrp/Resource_getInventoryHistoryChart.py +++ /dev/null @@ -1,65 +0,0 @@ -## Script (Python) "Resource_getInventoryHistoryChart" -##bind container=container -##bind context=context -##bind namespace= -##bind script=script -##bind subpath=traverse_subpath -##parameters=resource_uid=None, variation_text=None, from_date=None, to_date=None, **kw -##title= -## -# Adapt dates -if from_date is None: from_date =DateTime() -if to_date is None: to_date = from_date + 365 - -# Get the movement history -inventory_history_list = context.Resource_getInventoryHistoryList(resource_uid=resource_uid, - variation_text=variation_text, from_date=from_date, to_date=to_date, **kw) - -# Create table of dates -table = {} -date = DateTime(from_date.Date()) -while date < to_date: - table[date.Date()] = {} # one value per (resource, variation) - date = date + 1 - -# Fill existing variables and define resource_list -resource_dict = {} -for inventory in inventory_history_list: - key = (inventory['resource_relative_url'], inventory['variation_text']) - table[inventory['stop_date'].Date()][key] = \ - inventory['inventory'] - resource_dict[key] = 1 - -resource_list = resource_dict.keys() -resource_list.sort() - -# Fill holes -date = DateTime((from_date + 1).Date()) -while date < to_date: - current_date_key = date.Date() - previous_date_key = (date - 1).Date() - for resource_key in resource_list: - if not table[previous_date_key].has_key(resource_key): - # This should not happen - table[previous_date_key][resource_key] = None - if not table[current_date_key].has_key(resource_key): - table[current_date_key][resource_key] = table[previous_date_key][resource_key] - date = date + 1 - -# Build List -date = DateTime(from_date.Date()) -result = [] -while date < to_date: - current_date_key = date.Date() - item = [current_date_key] - for resource_key in resource_list: - try: - item += [table[current_date_key][resource_key]] - except: - print str(resource_key) - print current_date_key - return printed - result += [item] - date = date + 1 - -return result diff --git a/product/Coramy/skins/coramy_mrp/Resource_getInventoryHistoryList.py b/product/Coramy/skins/coramy_mrp/Resource_getInventoryHistoryList.py deleted file mode 100755 index f232c5c04e..0000000000 --- a/product/Coramy/skins/coramy_mrp/Resource_getInventoryHistoryList.py +++ /dev/null @@ -1,51 +0,0 @@ -## Script (Python) "Resource_getInventoryHistoryList" -##bind container=container -##bind context=context -##bind namespace= -##bind script=script -##bind subpath=traverse_subpath -##parameters=resource_uid=None, variation_text=None, from_date=None, to_date=None, **kw -##title= -## -# Get the movement history -# BEWARE: if called in context of portal_categories, will include id 'resource' in context -quantity_history_list = context.Resource_zGetMovementHistoryList(resource_uid=resource_uid, - variation_text=variation_text, from_date=from_date, to_date=to_date, **kw) - -# Calculate the integral as a list of tuples (date, resource, variation, inventory) -# Init integral -result = [] -initial_inventory = {} # one value for each resource variation -current_date = {} # one value for each resource variation -last_movement = {} -initial_date = None -if from_date is not None: initial_date = from_date -for quantity_item in quantity_history_list: - if initial_date is None: initial_date = quantity_item.stop_date - key = (quantity_item.resource_uid, quantity_item.variation_text) - # Do we have a quantity ? - if not initial_inventory.has_key(key): - # Calculate inventory at initial_date - inventory = context.Resource_zGetInventory(resource_uid=[quantity_item.resource_uid], - to_date=initial_date,variation_text=quantity_item.variation_text, **kw) - if len(initial_inventory) > 0: - inventory = inventory[0].inventory - if inventory is None: inventory = 0.0 # There are no movements at this time - else: - inventory = 0.0 - initial_inventory[key] = inventory - current_date[key] = initial_date - if quantity_item.stop_date != current_date[key]: - result += [{'stop_date': current_date[key], 'resource_relative_url': quantity_item.resource_relative_url, - 'variation_text':quantity_item.variation_text, 'inventory': initial_inventory[key]}] - current_date[key] = quantity_item.stop_date - if quantity_item.quantity is not None: - initial_inventory[key] = initial_inventory[key] + quantity_item.quantity - last_movement[key] = quantity_item - -for key in initial_inventory.keys(): - quantity_item = last_movement[key] - result += [{'stop_date': current_date[key], 'resource_relative_url': quantity_item.resource_relative_url, - 'variation_text':quantity_item.variation_text, 'inventory': initial_inventory[key]}] - -return result diff --git a/product/Coramy/skins/coramy_mrp/Resource_getInventoryList.py b/product/Coramy/skins/coramy_mrp/Resource_getInventoryList.py deleted file mode 100755 index 516a811d2c..0000000000 --- a/product/Coramy/skins/coramy_mrp/Resource_getInventoryList.py +++ /dev/null @@ -1,10 +0,0 @@ -## Script (Python) "Resource_getInventoryList" -##bind container=container -##bind context=context -##bind namespace= -##bind script=script -##bind subpath=traverse_subpath -##parameters=**kw -##title= -## -return context.Resource_zGetInventoryList(resource_uid = context.getUid(), **kw) diff --git a/product/Coramy/skins/coramy_mrp/Resource_zGetChartInventoryList.zsql b/product/Coramy/skins/coramy_mrp/Resource_zGetChartInventoryList.zsql deleted file mode 100755 index a0619aa68c..0000000000 --- a/product/Coramy/skins/coramy_mrp/Resource_zGetChartInventoryList.zsql +++ /dev/null @@ -1,35 +0,0 @@ -<dtml-comment> -title: -connection_id:erp5_sql_connection -max_rows:1000 -max_cache:100 -cache_time:0 -class_name:ZSQLBrain -class_file:zsqlbrain.py -</dtml-comment> -<params>resource_uid -before_date -node_uid -section_uid -variation_text</params> -SELECT - section.title AS section_title, - SUM(stock.quantity) as inventory -FROM - catalog, movement, stock, catalog as node, catalog as section, catalog as resource -WHERE - catalog.uid = movement.uid -AND catalog.uid = stock.uid -<dtml-if resource_uid>AND movement.resource_uid = <dtml-sqlvar resource_uid type="int"> -</dtml-if>AND movement.is_accountable = 1 -AND node.uid = stock.node_uid -AND section.uid = stock.node_uid -AND movement.resource_uid = <dtml-sqlvar resource_uid type="int"> -<dtml-if before_date>AND movement.start_date < <dtml-sqlvar before_date type="string"> -</dtml-if><dtml-if node_uid>AND stock.node_uid = <dtml-sqlvar node_uid type="int"> -</dtml-if><dtml-if section_uid>AND stock.section_uid = <dtml-sqlvar section_uid type="int"> -</dtml-if><dtml-if variation_text>AND movement.variation_text = <dtml-sqlvar variation_text type="string"> -</dtml-if>GROUP BY - stock.section_uid, resource_uid -ORDER BY - inventory DESC \ No newline at end of file diff --git a/product/Coramy/skins/coramy_mrp/Resource_zGetInventory.zsql b/product/Coramy/skins/coramy_mrp/Resource_zGetInventory.zsql deleted file mode 100755 index a9b9a1d307..0000000000 --- a/product/Coramy/skins/coramy_mrp/Resource_zGetInventory.zsql +++ /dev/null @@ -1,75 +0,0 @@ -<dtml-comment> -title: -connection_id:erp5_sql_connection -max_rows:1000 -max_cache:100 -cache_time:0 -class_name:InventoryBrain -class_file:InventoryBrain.py -</dtml-comment> -<params>resource_uid:list -resource:list -from_date -to_date -node -section -node_uid -section_uid -variation_text=None -node_category -section_category -resource_category -omit_simulation -omit_input -omit_output -simulation_state -query</params> -SELECT - SUM(stock.quantity) AS inventory, - SUM(stock.quantity) AS quantity, - COUNT(DISTINCT node.title) AS node_title, - COUNT(DISTINCT node.relative_url) AS node_relative_url, - COUNT(DISTINCT section.title) AS section_title, - COUNT(DISTINCT section.relative_url) AS section_relative_url, - COUNT(DISTINCT resource.title) AS resource_title, - COUNT(DISTINCT resource.relative_url) AS resource_relative_url, - COUNT(DISTINCT movement.variation_text) AS variation_text, - MAX(stock.resource_uid) AS resource_uid -FROM - movement - LEFT JOIN catalog ON (movement.uid = catalog.uid) - LEFT JOIN stock ON (movement.uid = stock.uid) - , catalog AS node, catalog AS section, catalog AS resource <dtml-if node_category>, catalog AS node_c, catalog AS node_bc, category AS node_membership </dtml-if> <dtml-if section_category>, catalog AS section_c, catalog AS section_bc, category AS section_membership</dtml-if> <dtml-if resource_category>, catalog AS resource_c, catalog AS resource_bc, category AS resource_membership </dtml-if> <dtml-if query>, category </dtml-if> -WHERE - 1 = 1 -<dtml-if resource>AND (<dtml-in resource> resource.relative_url = <dtml-sqlvar sequence-item type="string"><dtml-if sequence-end><dtml-else> OR </dtml-if></dtml-in>) -</dtml-if><dtml-if resource_uid>AND (<dtml-in resource_uid> movement.resource_uid = <dtml-sqlvar sequence-item type="int"><dtml-if sequence-end><dtml-else> OR </dtml-if></dtml-in>) -</dtml-if><dtml-if "variation_text is not None">AND movement.variation_text = <dtml-sqlvar variation_text type="string"> -</dtml-if>AND movement.is_accountable = 1 -AND node.uid = stock.node_uid -AND section.uid = stock.section_uid -AND stock.resource_uid = resource.uid -<dtml-if from_date>AND movement.stop_date >= <dtml-sqlvar from_date type="string"> -</dtml-if><dtml-if to_date>AND movement.stop_date < <dtml-sqlvar to_date type="string"> -</dtml-if><dtml-if node_uid>AND stock.node_uid = <dtml-sqlvar node_uid type="int"> -</dtml-if><dtml-if section_uid>AND stock.section_uid = <dtml-sqlvar section_uid type="int"> -</dtml-if><dtml-if node>AND node.relative_url = <dtml-sqlvar node type="string"> -</dtml-if><dtml-if section>AND section.relative_url = <dtml-sqlvar section type="string"> -</dtml-if><dtml-if node_category>AND node_c.relative_url = <dtml-sqlvar node_category type="string"> -AND node_membership.category_uid = node_c.uid -AND node_membership.base_category_uid = node_bc.uid -AND node_membership.uid = node.uid -</dtml-if><dtml-if section_category>AND section_c.relative_url = <dtml-sqlvar section_category type="string"> -AND section_membership.category_uid = section_c.uid -AND section_membership.base_category_uid = section_bc.uid -AND section_membership.uid = section.uid -</dtml-if><dtml-if resource_category>AND resource_c.relative_url = <dtml-sqlvar resource_category type="string"> -AND resource_membership.category_uid = resource_c.uid -AND resource_membership.base_category_uid = resource_bc.uid -AND resource_membership.uid = resource.uid -</dtml-if><dtml-if omit_simulation>AND catalog.portal_type != "Simulation Movement" -</dtml-if><dtml-if omit_input>AND stock.quantity < 0 AND movement.source_uid <> movement.destination_uid -</dtml-if><dtml-if omit_output>AND stock.quantity > 0 AND movement.source_uid <> movement.destination_uid -</dtml-if><dtml-if simulation_state>AND (<dtml-in simulation_state> catalog.simulation_state = <dtml-sqlvar sequence-item type="string"><dtml-if sequence-end><dtml-else> OR </dtml-if></dtml-in>) -</dtml-if><dtml-if query>AND category.uid = node.uid -AND <dtml-var query></dtml-if> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_mrp/Resource_zGetInventoryList.zsql b/product/Coramy/skins/coramy_mrp/Resource_zGetInventoryList.zsql deleted file mode 100755 index 43b224e4d7..0000000000 --- a/product/Coramy/skins/coramy_mrp/Resource_zGetInventoryList.zsql +++ /dev/null @@ -1,90 +0,0 @@ -<dtml-comment> -title: -connection_id:erp5_sql_connection -max_rows:20000 -max_cache:100 -cache_time:0 -class_name:InventoryListBrain -class_file:InventoryBrain.py -</dtml-comment> -<params>resource_uid:list -resource:list -from_date -to_date -node_uid -section_uid -node -section -variation_text="XXX_marker" -node_category -section_category -resource_category -omit_simulation -omit_input -omit_output -simulation_state -query -calculate_asset:int=0 -group_by_node=1 -group_by_section=1 -group_by_variation=1</params> -SELECT - SUM(stock.quantity) AS inventory, - <dtml-if "calculate_asset != 0"> SUM(stock.total_asset_price) AS asset_price, </dtml-if> - node.title AS node_title, - node.relative_url AS node_relative_url, - section.title AS section_title, - section.relative_url AS section_relative_url, - resource.title AS resource_title, - resource.relative_url AS resource_relative_url, - resource.uid AS resource_uid, - movement.variation_text AS variation_text, - MAX(catalog.path) AS path, - <dtml-sqlvar group_by_node type="int"> AS group_by_node, - <dtml-sqlvar group_by_section type="int"> AS group_by_section, - <dtml-sqlvar group_by_variation type="int"> AS group_by_variation - <dtml-if section_category>, <dtml-sqlvar section_category type="string"> AS section_category </dtml-if> - <dtml-if node_category>, <dtml-sqlvar node_category type="string"> AS node_category </dtml-if> -FROM - movement -LEFT JOIN catalog AS resource ON (movement.resource_uid = resource.uid) -LEFT JOIN catalog ON (catalog.uid = movement.uid) -LEFT JOIN stock ON (stock.uid = movement.uid) -LEFT JOIN catalog AS node ON (stock.node_uid = node.uid) -LEFT JOIN catalog AS section ON (stock.section_uid = section.uid) - <dtml-if node_category>, catalog AS node_c, catalog AS node_bc, category AS node_membership </dtml-if> <dtml-if section_category>, catalog AS section_c, catalog AS section_bc, category AS section_membership</dtml-if> <dtml-if resource_category>, catalog AS resource_c, catalog AS resource_bc, category AS resource_membership </dtml-if> <dtml-if query>, category </dtml-if> -WHERE - 1 = 1 -<dtml-if resource>AND (<dtml-in resource> resource.relative_url = <dtml-sqlvar sequence-item type="string"><dtml-if sequence-end><dtml-else> OR </dtml-if></dtml-in>) -</dtml-if><dtml-if resource_uid>AND (<dtml-in resource_uid> movement.resource_uid = <dtml-sqlvar sequence-item type="int"><dtml-if sequence-end><dtml-else> OR </dtml-if></dtml-in>) -</dtml-if>AND movement.is_accountable = 1 -<dtml-if from_date>AND movement.stop_date >= <dtml-sqlvar from_date type="string"> -</dtml-if><dtml-if to_date>AND movement.stop_date < <dtml-sqlvar to_date type="string"> -</dtml-if><dtml-if node_uid>AND stock.node_uid = <dtml-sqlvar node_uid type="int"> -</dtml-if><dtml-if section_uid>AND stock.section_uid = <dtml-sqlvar section_uid type="int"> -</dtml-if><dtml-if "variation_text <> 'XXX_marker'">AND movement.variation_text = <dtml-sqlvar variation_text type="string"> -</dtml-if><dtml-if node>AND node.relative_url = <dtml-sqlvar node type="string"> -</dtml-if><dtml-if section>AND section.relative_url = <dtml-sqlvar section type="string"> -</dtml-if><dtml-if node_category>AND node_c.relative_url = <dtml-sqlvar node_category type="string"> -AND node_membership.category_uid = node_c.uid -AND node_membership.base_category_uid = node_bc.uid -AND node_membership.uid = node.uid -</dtml-if><dtml-if section_category>AND section_c.relative_url = <dtml-sqlvar section_category type="string"> -AND section_membership.category_uid = section_c.uid -AND section_membership.base_category_uid = section_bc.uid -AND section_membership.uid = section.uid -</dtml-if><dtml-if resource_category>AND resource_c.relative_url = <dtml-sqlvar resource_category type="string"> -AND resource_membership.category_uid = resource_c.uid -AND resource_membership.base_category_uid = resource_bc.uid -AND resource_membership.uid = resource.uid -</dtml-if><dtml-if omit_simulation>AND catalog.portal_type != "Simulation Movement" -</dtml-if><dtml-if omit_input>AND stock.quantity < 0 -</dtml-if><dtml-if omit_output>AND stock.quantity > 0 -</dtml-if><dtml-if simulation_state>AND (<dtml-in simulation_state> catalog.simulation_state = <dtml-sqlvar sequence-item type="string"><dtml-if sequence-end><dtml-else> OR </dtml-if></dtml-in>) -</dtml-if><dtml-if query>AND category.uid = node.uid -AND <dtml-var query></dtml-if> -GROUP BY - <dtml-if group_by_node>stock.node_uid, </dtml-if><dtml-if group_by_section>stock.section_uid, </dtml-if>movement.resource_uid<dtml-if group_by_variation>, movement.variation_text</dtml-if> - -ORDER BY - node.title, resource.title, movement.variation_text diff --git a/product/Coramy/skins/coramy_mrp/Resource_zGetInventoryMovementList.zsql b/product/Coramy/skins/coramy_mrp/Resource_zGetInventoryMovementList.zsql deleted file mode 100755 index f86299acff..0000000000 --- a/product/Coramy/skins/coramy_mrp/Resource_zGetInventoryMovementList.zsql +++ /dev/null @@ -1,32 +0,0 @@ -<dtml-comment> -title: -connection_id:MySQL -max_rows:1000 -max_cache:100 -cache_time:0 -class_name:ZSQLBrain -class_file:zsqlbrain.py -</dtml-comment> -<params>resource_relative_url -variation_relative_url</params> -SELECT inventory_cell.relative_url, inventory_cell.path, movement.start_date, movement.stop_date -FROM movement, catalog as inventory_cell, catalog as resource, catalog as variation, category as cat1, category as cat2, catalog as delivery, catalog as inventory_line - -WHERE inventory_cell.portal_type = "Inventory Cell" -AND inventory_cell.uid = movement.uid -AND movement.resource_uid = resource.uid -AND resource.relative_url = "<dtml-var resource_relative_url>" -AND variation.relative_url = "<dtml-var variation_relative_url>" -AND delivery.portal_type = "Inventory MP" -AND delivery.uid = movement.delivery_uid -AND inventory_cell.parent_uid = inventory_line.uid - -AND cat2.uid = inventory_cell.uid -AND cat2.base_category_uid = <dtml-var "portal_categories.coloris.uid"> -AND cat2.category_uid = variation.uid - -AND cat1.uid = inventory_line.uid -AND cat1.base_category_uid = <dtml-var "portal_categories.resource.uid"> -AND cat1.category_uid = resource.uid - -ORDER BY movement.stop_date DESC, movement.start_date DESC \ No newline at end of file diff --git a/product/Coramy/skins/coramy_mrp/Resource_zGetMovementHistoryList.zsql b/product/Coramy/skins/coramy_mrp/Resource_zGetMovementHistoryList.zsql deleted file mode 100755 index d427aa2136..0000000000 --- a/product/Coramy/skins/coramy_mrp/Resource_zGetMovementHistoryList.zsql +++ /dev/null @@ -1,90 +0,0 @@ -<dtml-comment> -title: -connection_id:erp5_sql_connection -max_rows:1000 -max_cache:100 -cache_time:0 -class_name:InventoryListBrain -class_file:InventoryBrain.py -</dtml-comment> -<params>resource_uid:list -resource:list -from_date -to_date -node_uid -section_uid -node -section -variation_text=None -node_category -section_category -resource_category -simulation_state -query -omit_input -omit_output -omit_simulation</params> -SELECT - catalog.path as path, - catalog.uid as uid, - catalog.relative_url as relative_url, - movement.start_date AS start_date, - movement.stop_date AS stop_date, - movement.source_uid AS source_uid, - movement.destination_uid AS destination_uid, - movement.price AS price, - movement.total_price AS total_price, - SUM(stock.quantity) AS quantity, - node.uid AS node_uid, - node.title AS node_title, - node.relative_url AS node_relative_url, - section.uid AS section_uid, - section.title AS section_title, - section.relative_url AS section_relative_url, - resource.title AS resource_title, - resource.uid AS resource_uid, - resource.relative_url AS resource_relative_url, - movement.variation_text AS variation_text, - movement.delivery_uid AS explanation_uid, - catalog.simulation_state AS simulation_state -FROM - movement - LEFT JOIN catalog ON (movement.uid = catalog.uid) - LEFT JOIN stock ON (movement.uid = stock.uid), - catalog AS node, catalog AS section, catalog AS resource <dtml-if node_category>, catalog AS node_c, catalog AS node_bc, category AS node_membership </dtml-if> <dtml-if section_category>, catalog AS section_c, catalog AS section_bc, category AS section_membership</dtml-if> <dtml-if resource_category>, catalog AS resource_c, catalog AS resource_bc, category AS resource_membership </dtml-if> <dtml-if query>, category </dtml-if> -WHERE - catalog.uid = movement.uid -AND catalog.uid = stock.uid -AND node.uid = stock.node_uid -AND section.uid = stock.section_uid -AND movement.resource_uid = resource.uid -<dtml-if resource>AND (<dtml-in resource> resource.relative_url = <dtml-sqlvar sequence-item type="string"><dtml-if sequence-end><dtml-else> OR </dtml-if></dtml-in>) -</dtml-if><dtml-if resource_uid>AND (<dtml-in resource_uid> movement.resource_uid = <dtml-sqlvar sequence-item type="int"><dtml-if sequence-end><dtml-else> OR </dtml-if></dtml-in>) -</dtml-if>AND movement.is_accountable = 1 -<dtml-if node_uid>AND stock.node_uid = <dtml-sqlvar node_uid type="int"> -</dtml-if><dtml-if section_uid>AND stock.section_uid = <dtml-sqlvar section_uid type="int"> -</dtml-if><dtml-if from_date>AND movement.stop_date >= <dtml-sqlvar from_date type="string"> -</dtml-if><dtml-if to_date>AND movement.stop_date < <dtml-sqlvar to_date type="string"> -</dtml-if><dtml-if "variation_text is not None">AND movement.variation_text = <dtml-sqlvar variation_text type="string"> -</dtml-if><dtml-if omit_simulation>AND catalog.portal_type != "Simulation Movement" -</dtml-if><dtml-if omit_input>AND stock.quantity < 0 AND movement.source_uid <> movement.destination_uid -</dtml-if><dtml-if omit_output>AND stock.quantity > 0 AND movement.source_uid <> movement.destination_uid -</dtml-if><dtml-if node_category>AND node_c.relative_url = <dtml-sqlvar node_category type="string"> -AND node_membership.category_uid = node_c.uid -AND node_membership.base_category_uid = node_bc.uid -AND node_membership.uid = node.uid -</dtml-if><dtml-if section_category>AND section_c.relative_url = <dtml-sqlvar section_category type="string"> -AND section_membership.category_uid = section_c.uid -AND section_membership.base_category_uid = section_bc.uid -AND section_membership.uid = section.uid -</dtml-if><dtml-if resource_category>AND resource_c.relative_url = <dtml-sqlvar resource_category type="string"> -AND resource_membership.category_uid = resource_c.uid -AND resource_membership.base_category_uid = resource_bc.uid -AND resource_membership.uid = resource.uid -</dtml-if><dtml-if simulation_state>AND (<dtml-in simulation_state> catalog.simulation_state = <dtml-sqlvar sequence-item type="string"><dtml-if sequence-end><dtml-else> OR </dtml-if></dtml-in>) -</dtml-if><dtml-if query>AND category.uid = node.uid -AND <dtml-var query></dtml-if> -GROUP BY - movement.delivery_uid, resource.uid, movement.variation_text, node.uid, section.uid, catalog.simulation_state -ORDER BY - movement.start_date, node.title, resource.title, movement.quantity \ No newline at end of file diff --git a/product/Coramy/skins/coramy_mrp/Resource_zGetStockMPInventoryList.zsql b/product/Coramy/skins/coramy_mrp/Resource_zGetStockMPInventoryList.zsql deleted file mode 100755 index 55fa4e260b..0000000000 --- a/product/Coramy/skins/coramy_mrp/Resource_zGetStockMPInventoryList.zsql +++ /dev/null @@ -1,94 +0,0 @@ -<dtml-comment> -title: -connection_id:MySQL -max_rows:20000 -max_cache:100 -cache_time:0 -class_name:InventoryListBrain -class_file:InventoryBrain.py -</dtml-comment> -<params>resource_uid:list -resource:list -from_date -to_date -node_uid -section_uid -node -section -variation_text="XXX_marker" -node_category -section_category -resource_category -omit_simulation -omit_input -omit_output -simulation_state -query -calculate_asset:int=0 -group_by_node:int=1 -group_by_section:int=1 -group_by_variation:int=1</params> -SELECT - SUM(stock.quantity) AS inventory, - <dtml-if "calculate_asset != 0"> SUM(stock.total_asset_price) AS asset_price, </dtml-if> - node.title AS node_title, - node.relative_url AS node_relative_url, - section.title AS section_title, - section.relative_url AS section_relative_url, - resource.title AS resource_title, - resource.relative_url AS resource_relative_url, - resource.uid AS resource_uid, - movement.variation_text AS variation_text, - type_compo.title AS type_title, - resource.default_source_title AS source_title, - MAX(catalog.path) AS path -FROM - movement -LEFT JOIN catalog AS resource ON (movement.resource_uid = resource.uid) -LEFT JOIN category as cat_type_compo ON (cat_type_compo.uid = resource.uid -AND cat_type_compo.category_strict_membership = 1 -AND ( cat_type_compo.base_category_uid = <dtml-var "portal_categories.type_composant.uid"> -OR cat_type_compo.base_category_uid = <dtml-var "portal_categories.motif.uid"> ) ) -LEFT JOIN catalog AS type_compo ON (type_compo.uid = cat_type_compo.category_uid) -LEFT JOIN catalog ON (catalog.uid = movement.uid) -LEFT JOIN stock ON (stock.uid = movement.uid) -LEFT JOIN catalog AS node ON (stock.node_uid = node.uid) -LEFT JOIN catalog AS section ON (stock.section_uid = section.uid) - <dtml-if node_category>, catalog AS node_c, catalog AS node_bc, category AS node_membership </dtml-if> <dtml-if section_category>, catalog AS section_c, catalog AS section_bc, category AS section_membership</dtml-if> <dtml-if resource_category>, catalog AS resource_c, catalog AS resource_bc, category AS resource_membership </dtml-if> <dtml-if query>, category </dtml-if> -WHERE - 1 = 1 -<dtml-if resource>AND (<dtml-in resource> resource.relative_url = <dtml-sqlvar sequence-item type="string"><dtml-if sequence-end><dtml-else> OR </dtml-if></dtml-in>) -</dtml-if><dtml-if resource_uid>AND (<dtml-in resource_uid> movement.resource_uid = <dtml-sqlvar sequence-item type="int"><dtml-if sequence-end><dtml-else> OR </dtml-if></dtml-in>) -</dtml-if>AND movement.is_accountable = 1 -<dtml-if from_date>AND movement.stop_date >= <dtml-sqlvar from_date type="string"> -</dtml-if><dtml-if to_date>AND movement.stop_date < <dtml-sqlvar to_date type="string"> -</dtml-if><dtml-if node_uid>AND stock.node_uid = <dtml-sqlvar node_uid type="int"> -</dtml-if><dtml-if section_uid>AND stock.section_uid = <dtml-sqlvar section_uid type="int"> -</dtml-if><dtml-if "variation_text <> 'XXX_marker'">AND movement.variation_text = <dtml-sqlvar variation_text type="string"> -</dtml-if><dtml-if node>AND node.relative_url = <dtml-sqlvar node type="string"> -</dtml-if><dtml-if section>AND section.relative_url = <dtml-sqlvar section type="string"> -</dtml-if><dtml-if node_category>AND node_c.relative_url = <dtml-sqlvar node_category type="string"> -AND node_membership.category_uid = node_c.uid -AND node_membership.base_category_uid = node_bc.uid -AND node_membership.uid = node.uid -</dtml-if><dtml-if section_category>AND section_c.relative_url = <dtml-sqlvar section_category type="string"> -AND section_membership.category_uid = section_c.uid -AND section_membership.base_category_uid = section_bc.uid -AND section_membership.uid = section.uid -</dtml-if><dtml-if resource_category>AND resource_c.relative_url = <dtml-sqlvar resource_category type="string"> -AND resource_membership.category_uid = resource_c.uid -AND resource_membership.base_category_uid = resource_bc.uid -AND resource_membership.uid = resource.uid -</dtml-if><dtml-if omit_simulation>AND catalog.portal_type != "Simulation Movement" -</dtml-if><dtml-if omit_input>AND stock.quantity < 0 -</dtml-if><dtml-if omit_output>AND stock.quantity > 0 -</dtml-if><dtml-if simulation_state>AND (<dtml-in simulation_state> catalog.simulation_state = <dtml-sqlvar sequence-item type="string"><dtml-if sequence-end><dtml-else> OR </dtml-if></dtml-in>) -</dtml-if><dtml-if query>AND category.uid = node.uid -AND <dtml-var query></dtml-if> -AND catalog.uid is not NULL -AND resource.uid is not NULL -GROUP BY - <dtml-if group_by_node>stock.node_uid, </dtml-if><dtml-if group_by_section>stock.section_uid, </dtml-if>movement.resource_uid<dtml-if group_by_variation>, movement.variation_text</dtml-if> - -ORDER BY - node.title, resource.title, movement.variation_text \ No newline at end of file diff --git a/product/Coramy/skins/coramy_mrp/Resource_zGetStockPFInventoryList.zsql b/product/Coramy/skins/coramy_mrp/Resource_zGetStockPFInventoryList.zsql deleted file mode 100755 index d9eac64665..0000000000 --- a/product/Coramy/skins/coramy_mrp/Resource_zGetStockPFInventoryList.zsql +++ /dev/null @@ -1,102 +0,0 @@ -<dtml-comment> -title: -connection_id:MySQL -max_rows:20000 -max_cache:100 -cache_time:0 -class_name:InventoryListBrain -class_file:InventoryBrain.py -</dtml-comment> -<params>resource_uid:list -resource:list -from_date -to_date -node_uid -section_uid -node -section -variation_text="XXX_marker" -node_category -section_category -resource_category -omit_simulation -omit_input -omit_output -simulation_state -query -calculate_asset:int=0 -group_by_node:int=1 -group_by_section:int=1 -group_by_variation:int=1 -collection_url</params> -SELECT - SUM(stock.quantity) AS inventory, - <dtml-if "calculate_asset != 0"> SUM(stock.total_asset_price) AS asset_price, </dtml-if> - node.title AS node_title, - node.relative_url AS node_relative_url, - section.title AS section_title, - section.relative_url AS section_relative_url, - resource.title AS resource_title, - resource.relative_url AS resource_relative_url, - resource.uid AS resource_uid, - movement.variation_text AS variation_text, - famille.title AS famille_title, - resource.default_destination_title as destination_title, - MAX(catalog.path) AS path -FROM - movement -LEFT JOIN catalog AS resource ON (movement.resource_uid = resource.uid) -<dtml-if collection_url> -LEFT JOIN catalog AS my_collection ON (my_collection.relative_url = "<dtml-var collection_url>") -LEFT JOIN category as cat_collection ON (cat_collection.uid = resource.uid -AND cat_collection.category_uid = my_collection.uid -AND cat_collection.base_category_uid = <dtml-var "portal_categories.collection.uid"> ) -</dtml-if> -LEFT JOIN category as cat_famille ON ( cat_famille.uid = resource.uid -AND cat_famille.category_strict_membership = 1 -AND cat_famille.base_category_uid = <dtml-var "portal_categories.eip.uid"> ) -LEFT JOIN catalog AS famille ON (famille.uid = cat_famille.category_uid) -LEFT JOIN catalog ON (catalog.uid = movement.uid) -LEFT JOIN stock ON (stock.uid = movement.uid) -LEFT JOIN catalog AS node ON (stock.node_uid = node.uid) -LEFT JOIN catalog AS section ON (stock.section_uid = section.uid) - <dtml-if node_category>, catalog AS node_c, catalog AS node_bc, category AS node_membership </dtml-if> <dtml-if section_category>, catalog AS section_c, catalog AS section_bc, category AS section_membership</dtml-if> <dtml-if resource_category>, catalog AS resource_c, catalog AS resource_bc, category AS resource_membership </dtml-if> <dtml-if query>, category </dtml-if> -WHERE - 1 = 1 -<dtml-if resource>AND (<dtml-in resource> resource.relative_url = <dtml-sqlvar sequence-item type="string"><dtml-if sequence-end><dtml-else> OR </dtml-if></dtml-in>) -</dtml-if><dtml-if resource_uid>AND (<dtml-in resource_uid> movement.resource_uid = <dtml-sqlvar sequence-item type="int"><dtml-if sequence-end><dtml-else> OR </dtml-if></dtml-in>) -</dtml-if>AND movement.is_accountable = 1 -<dtml-if from_date>AND movement.stop_date >= <dtml-sqlvar from_date type="string"> -</dtml-if><dtml-if to_date>AND movement.stop_date < <dtml-sqlvar to_date type="string"> -</dtml-if><dtml-if node_uid>AND stock.node_uid = <dtml-sqlvar node_uid type="int"> -</dtml-if><dtml-if section_uid>AND stock.section_uid = <dtml-sqlvar section_uid type="int"> -</dtml-if><dtml-if "variation_text <> 'XXX_marker'">AND movement.variation_text = <dtml-sqlvar variation_text type="string"> -</dtml-if><dtml-if node>AND node.relative_url = <dtml-sqlvar node type="string"> -</dtml-if><dtml-if section>AND section.relative_url = <dtml-sqlvar section type="string"> -</dtml-if><dtml-if node_category>AND node_c.relative_url = <dtml-sqlvar node_category type="string"> -AND node_membership.category_uid = node_c.uid -AND node_membership.base_category_uid = node_bc.uid -AND node_membership.uid = node.uid -</dtml-if><dtml-if section_category>AND section_c.relative_url = <dtml-sqlvar section_category type="string"> -AND section_membership.category_uid = section_c.uid -AND section_membership.base_category_uid = section_bc.uid -AND section_membership.uid = section.uid -</dtml-if><dtml-if resource_category>AND resource_c.relative_url = <dtml-sqlvar resource_category type="string"> -AND resource_membership.category_uid = resource_c.uid -AND resource_membership.base_category_uid = resource_bc.uid -AND resource_membership.uid = resource.uid -</dtml-if><dtml-if omit_simulation>AND catalog.portal_type != "Simulation Movement" -</dtml-if><dtml-if omit_input>AND stock.quantity < 0 -</dtml-if><dtml-if omit_output>AND stock.quantity > 0 -</dtml-if><dtml-if simulation_state>AND (<dtml-in simulation_state> catalog.simulation_state = <dtml-sqlvar sequence-item type="string"><dtml-if sequence-end><dtml-else> OR </dtml-if></dtml-in>) -</dtml-if><dtml-if query>AND category.uid = node.uid -AND <dtml-var query></dtml-if> -<dtml-if collection_url> -AND cat_collection.uid is not NULL -</dtml-if> -AND catalog.uid is not NULL -GROUP BY - <dtml-if group_by_node>stock.node_uid, </dtml-if><dtml-if group_by_section>stock.section_uid, </dtml-if>movement.resource_uid<dtml-if group_by_variation>, movement.variation_text</dtml-if> - -ORDER BY - node.title, resource.title, movement.variation_text \ No newline at end of file diff --git a/product/Coramy/skins/coramy_mrp/SimulationTool_activateRequirementList.py b/product/Coramy/skins/coramy_mrp/SimulationTool_activateRequirementList.py deleted file mode 100755 index 65ff498622..0000000000 --- a/product/Coramy/skins/coramy_mrp/SimulationTool_activateRequirementList.py +++ /dev/null @@ -1,59 +0,0 @@ -## Script (Python) "SimulationTool_activateRequirementList" -##bind container=container -##bind context=context -##bind namespace= -##bind script=script -##bind subpath=traverse_subpath -##parameters= -##title= -## -if 1: - # Erase existing auto_planned - order_list = context.portal_catalog(simulation_state="auto_planned", parent_uid=[context.ordre_fabrication.getUid()]) - order_id_list = map(lambda x:x.id,order_list) - object_id_list = context.ordre_fabrication.objectIds() - order_id_list = filter(lambda x: x in object_id_list, order_id_list) - context.ordre_fabrication.deleteContent(order_id_list) - - order_list = context.portal_catalog(simulation_state="auto_planned", parent_uid=[context.commande_achat.getUid()]) - order_id_list = map(lambda x:x.id,order_list) - object_id_list = context.commande_achat.objectIds() - order_id_list = filter(lambda x: x in object_id_list, order_id_list) - context.commande_achat.deleteContent(order_id_list) - -#return "Done" - -def activateNodeSection(node_category, section_category): - # Stock sourcing states - source_state_list = ('auto_planned', 'planned', 'ordered', 'confirmed', 'getting_ready', 'ready', 'started', 'stopped', 'delivered', 'invoiced') - #source_state_list = None - result = '' - # Get inventory list - #inventory_list = context.SimulationTool_getGroupFutureInventoryList(simulation_state=source_state_list) - inventory_list = context.Resource_zGetInventoryList(simulation_state=source_state_list, - node_category="site/Stock_MP", - section_category="group/Coramy", - group_by_variation=1) - # Commit SQL - # context.portal_simulation.commitTransaction() - - # Call PortalSimulation_buildRequirementOrder for each missing resource - for inventory_item in inventory_list: - if inventory_item.inventory < 0 and inventory_item.inventory is not None: - # We should use a queue here rather than a dict - OVERKILL - movement = inventory_item.getObject() - if movement is not None: - resource = movement.getResourceValue() - if resource is not None: - if resource.getPortalType() != "Assortiment": - # Only source negative stock - result = result + "Activate Build Order for %s for missing quantity %s" % (inventory_item.resource_relative_url, inventory_item.inventory) - resource.activate(priority=5).SimulationTool_buildRequirementOrder(resource=inventory_item.resource_relative_url, - node_category=node_category, section_category=section_category ) - return result - - -print activateNodeSection("site/Stock_MP", "group/Coramy") -print activateNodeSection("site/Stock_PF", "group/Coramy") - -return printed diff --git a/product/Coramy/skins/coramy_mrp/SimulationTool_buildRequirementOrder.py b/product/Coramy/skins/coramy_mrp/SimulationTool_buildRequirementOrder.py deleted file mode 100755 index 64c583df0b..0000000000 --- a/product/Coramy/skins/coramy_mrp/SimulationTool_buildRequirementOrder.py +++ /dev/null @@ -1,122 +0,0 @@ -## Script (Python) "SimulationTool_buildRequirementOrder" -##bind container=container -##bind context=context -##bind namespace= -##bind script=script -##bind subpath=traverse_subpath -##parameters=resource=None,node_category=None,section_category=None -##title= -## -from Products.ERP5.Document import newTempMovement -from DateTime import DateTime - -# Stock sourcing states -source_state_list = ('auto_planned', 'planned', 'ordered', 'confirmed', 'getting_ready', 'ready', 'delivered', 'started', 'stopped', 'invoiced') -#source_state_list = None - -# Default date -now_date = DateTime(DateTime().Date()) - -# Get inventory list -#inventory_list = context.SimulationTool_getGroupFutureInventoryList(resource=resource, simulation_state=source_state_list) -inventory_list = context.Resource_zGetInventoryList(resource=[resource], - simulation_state=source_state_list, - node_category=node_category, - section_category=section_category, - group_by_variation=1) -# Commit SQL -context.portal_simulation.commitTransaction() - -# First, find out which resources are missing -# and build a dictionnary of quantity, variation -quantity_dict = {} -variation_dict = {} -for inventory_item in inventory_list: - if inventory_item.inventory < 0 and inventory_item.inventory is not None: - # Only source negative stock - movement = inventory_item.getObject() - if movement is not None: - key = (inventory_item.resource_relative_url, tuple(movement.getVariationCategoryList())) - quantity_dict[key] = - inventory_item.inventory - variation_dict[key] = movement.getVariationCategoryList() - else: - pass - #LOG('ZeroStockRule WARNING',0,'None movement found') - -# Commit SQL -context.portal_simulation.commitTransaction() - -# A list of resources to create -to_create = quantity_dict.keys() -variated_movement_list = [] -movement_list = [] - -new_id = 0 -# Create movements which are needed -for relative_url, variation_category_list in to_create: - # CHECK IF EXISTING ID - key = (relative_url, variation_category_list) - new_id += 1 - movement = newTempMovement( context.portal_simulation , str(new_id) ) - movement.edit( resource=relative_url ) - movement.setVariationCategoryList( variation_category_list ) - resource = movement.getResourceValue() - - if resource is not None: - # Only order existing resources - stop_date = resource.getNextNegativeInventoryDate(variation_text = movement.getVariationText()) - if stop_date is None: # This happens if we have a negative stock already - stop_date = now_date - - if resource.getPortalType() in ('Modele',): - source = 'site/Piquage' - source_section = 'group/Coramy' - destination_section = 'group/Coramy' - destination = 'site/Stock_PF/Gravelines' - else: - source = source_section = resource.getSource() - destination_section = 'group/Coramy' - destination = 'site/Stock_MP/Gravelines' - movement.edit(target_quantity = quantity_dict[key], - target_start_date = stop_date, - target_stop_date = stop_date, - source = source, - source_section = source_section, - destination_section = destination_section, - destination = destination, - quantity_unit = resource.getDefaultQuantityUnit()) - print "Order %s %s quantity: %s" % (movement.getResource(), movement.getVariationText(), movement.getNetConvertedTargetQuantity()) - if movement.getVariationText() == "": - movement_list.append(movement) - else: - variated_movement_list.append(movement) - -# Build Order for non variated items -root_group = context.portal_simulation.collectMovement(movement_list) -order_list = context.portal_simulation.buildOrderList(root_group) -# Build Order for variated items -root_group = context.portal_simulation.collectMovement(variated_movement_list) -variated_order_list = context.portal_simulation.buildOrderList(root_group) - -# Update orders -for order in order_list + variated_order_list: - print "Confirm Order %s" % order.getRelativeUrl() - order.autoPlan() - order.purchase_order_apply_condition() - # Set local_roles - # what's the gestionaire of this order - user_name = '' - # are we on a sales order or puchase order ? - if order.getPortalType() == 'Sales Order' : - user_name = order.getSourceAdministrationTitle().replace(' ','_') - elif order.getPortalType() == 'Purchase Order' : - # This is an error probably XXX - user_name = order.getDestinationAdministrationPersonTitle() - if user_name is not None: - user_name = user_name.replace(' ','_') - if user_name in (None,'',' ','_') : - user_name = "AnimatriceAppros" - # update local_roles - order.assign_gestionaire_designe_roles(user_name = user_name) - -return printed diff --git a/product/Coramy/skins/coramy_mrp/SimulationTool_getCoramyFutureInventoryList.py b/product/Coramy/skins/coramy_mrp/SimulationTool_getCoramyFutureInventoryList.py deleted file mode 100755 index 3366cb381b..0000000000 --- a/product/Coramy/skins/coramy_mrp/SimulationTool_getCoramyFutureInventoryList.py +++ /dev/null @@ -1,10 +0,0 @@ -## Script (Python) "SimulationTool_getCoramyFutureInventoryList" -##bind container=container -##bind context=context -##bind namespace= -##bind script=script -##bind subpath=traverse_subpath -##parameters=**kw -##title= -## -return context.SimulationTool_zGetCoramyFutureInventoryList(**kw) diff --git a/product/Coramy/skins/coramy_mrp/SimulationTool_getGroupFutureInventoryList.py b/product/Coramy/skins/coramy_mrp/SimulationTool_getGroupFutureInventoryList.py deleted file mode 100755 index 8d4362593c..0000000000 --- a/product/Coramy/skins/coramy_mrp/SimulationTool_getGroupFutureInventoryList.py +++ /dev/null @@ -1,10 +0,0 @@ -## Script (Python) "SimulationTool_getGroupFutureInventoryList" -##bind container=container -##bind context=context -##bind namespace= -##bind script=script -##bind subpath=traverse_subpath -##parameters=**kw -##title= -## -return context.SimulationTool_getCoramyFutureInventoryList(**kw) diff --git a/product/Coramy/skins/coramy_mrp/SimulationTool_updateInventory.py b/product/Coramy/skins/coramy_mrp/SimulationTool_updateInventory.py deleted file mode 100755 index 08b4864906..0000000000 --- a/product/Coramy/skins/coramy_mrp/SimulationTool_updateInventory.py +++ /dev/null @@ -1,15 +0,0 @@ -## Script (Python) "SimulationTool_updateInventory" -##bind container=container -##bind context=context -##bind namespace= -##bind script=script -##bind subpath=traverse_subpath -##parameters= -##title= -## -for b in context.SimulationTool_zGetSortedInventoryList(): - print "#### Indexing Inventory %s ####" % b.relative_url - o = b.getObject() - if o is not None: o.activate(priority=4).recursiveImmediateReindexObject() - -return printed diff --git a/product/Coramy/skins/coramy_mrp/SimulationTool_zGetCoramyFutureInventoryList.zsql b/product/Coramy/skins/coramy_mrp/SimulationTool_zGetCoramyFutureInventoryList.zsql deleted file mode 100755 index 4d8687dd1d..0000000000 --- a/product/Coramy/skins/coramy_mrp/SimulationTool_zGetCoramyFutureInventoryList.zsql +++ /dev/null @@ -1,41 +0,0 @@ -<dtml-comment> -title: -connection_id:erp5_sql_connection -max_rows:100000 -max_cache:100 -cache_time:0 -class_name:ZSQLBrain -class_file:zsqlbrain.py -</dtml-comment> -<params>to_date -resource -simulation_state:list</params> -SELECT - SUM(stock.quantity) as inventory, - section.title AS section_title, - resource.title AS resource_title, - resource.relative_url AS resource_relative_url, - MAX(movement_line.path) as path, - movement.variation_text AS variation_text -FROM - catalog, movement, stock, catalog as section, category as node_category, category as section_category, catalog as resource, catalog as movement_line -WHERE - catalog.uid = movement.uid -AND catalog.uid = stock.uid -AND movement.is_accountable = 1 -AND movement_line.uid = movement.uid -AND movement.resource_uid = resource.uid -AND stock.section_uid = section.uid -AND section_category.category_uid=<dtml-var "portal_categories.group.Coramy.getUid()"> -AND stock.section_uid = section_category.uid -AND (node_category.category_uid=<dtml-var "portal_categories.site.Stock_MP.getUid()"> -OR node_category.category_uid=<dtml-var "portal_categories.site.Stock_PF.getUid()">) -AND stock.node_uid = node_category.uid -<dtml-if resource>AND resource.relative_url = <dtml-sqlvar resource type="string"> -</dtml-if><dtml-if to_date> AND movement.stop_date < <dtml-sqlvar to_date type="string"> -</dtml-if><dtml-if simulation_state> AND (<dtml-in simulation_state> catalog.simulation_state = <dtml-sqlvar sequence-item type="string"><dtml-if sequence-end><dtml-else> OR </dtml-if></dtml-in>) -</dtml-if> -GROUP BY - resource.uid, movement.variation_text -ORDER BY - inventory \ No newline at end of file diff --git a/product/Coramy/skins/coramy_mrp/SimulationTool_zGetResourceList.zsql b/product/Coramy/skins/coramy_mrp/SimulationTool_zGetResourceList.zsql deleted file mode 100755 index 92c4f7b49b..0000000000 --- a/product/Coramy/skins/coramy_mrp/SimulationTool_zGetResourceList.zsql +++ /dev/null @@ -1,21 +0,0 @@ -<dtml-comment> -title: -connection_id:MySQL -max_rows:100000 -max_cache:0 -cache_time:0 -class_name: -class_file: -</dtml-comment> -<params>portal_type:list</params> -SELECT DISTINCT - catalog.relative_url AS relative_url, - catalog.portal_type AS portal_type, - movement.variation_text AS variation_text -FROM - movement, catalog -WHERE - catalog.uid = movement.resource_uid -AND movement.is_accountable = 1 -<dtml-if portal_type>AND (<dtml-in portal_type> catalog.portal_type = <dtml-sqlvar sequence-item type="string"><dtml-if sequence-end><dtml-else> OR </dtml-if></dtml-in> -) </dtml-if> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_mrp/ZeroStock_buildOrderList.py b/product/Coramy/skins/coramy_mrp/ZeroStock_buildOrderList.py deleted file mode 100755 index 4022508e06..0000000000 --- a/product/Coramy/skins/coramy_mrp/ZeroStock_buildOrderList.py +++ /dev/null @@ -1,61 +0,0 @@ -## Script (Python) "ZeroStock_buildOrderList" -##bind container=container -##bind context=context -##bind namespace= -##bind script=script -##bind subpath=traverse_subpath -##parameters= -##title= -## -return context.portal_simulation.zero_stock.deleteContent(context.portal_simulation.zero_stock.contentIds()) - -if 0: - # Delete all proposed orders - #production_list = context.portal_catalog(simulation_state="auto_planned", parent_uid=[context.ordre_fabrication.getUid()]) - #context.ordre_fabrication.deleteContent(map(lambda b:b.id, production_list)) - buy_list = context.portal_catalog(simulation_state="auto_planned", parent_uid=[context.commande_achat.getUid()]) - #return map(lambda b:b.id, buy_list) - #context.commande_achat.deleteContent(map(lambda b:b.id, buy_list)) - - # Empty Zero Stock - context.portal_simulation.zero_stock.deleteContent(context.portal_simulation.zero_stock.contentIds()) - - context.portal_simulation.commitTransaction() # Release any SQL locks - - # Expand Zero Stock as many times as needed (1 or 2 for the Coramy case) - # for i in range(0,1): - context.portal_simulation.portal_simulation.zero_stock.expand() - -# Collect movements in Zero Stock applied rule -zs_movement_list = context.portal_simulation.zero_stock.contentValues() -#return len(zs_movement_list ) -#context.portal_simulation.commitTransaction() # Release any SQL locks - -# keep only movements with a Modele resource -movement_list = [] -for movement in zs_movement_list: - resource_value = movement.getResourceValue() - if resource_value is not None: - movement_list.append(movement) - -# Parse movements into a root group -root_group = context.portal_simulation.collectMovement(movement_list) -order_list = context.portal_simulation.buildOrderList(root_group) - -# update produced orders -for order in order_list: - order.autoPlan() - order.purchase_order_apply_condition() - -context.portal_simulation.commitTransaction() # Release any SQL locks -return "Done" - -# reEmpty Zero Stock because we don't want to see the zero_stock quantities in the columns future_stock -context.portal_simulation.zero_stock.deleteContent(context.portal_simulation.zero_stock.contentIds()) - -request = context.REQUEST -redirect_url = '%s/view?%s' % ( context.absolute_url() - , 'portal_status_message=%s+propositions+OF+créés.' % len(order_list) - ) - -request[ 'RESPONSE' ].redirect( redirect_url ) diff --git a/product/Coramy/skins/coramy_mrp/inventory_MP_list.form b/product/Coramy/skins/coramy_mrp/inventory_MP_list.form deleted file mode 100755 index b98671b9a0..0000000000 --- a/product/Coramy/skins/coramy_mrp/inventory_MP_list.form +++ /dev/null @@ -1,62 +0,0 @@ -<?xml version="1.0"?> - -<form> - <title>Liste d'inventaires MP</title> - <row_length>4</row_length> - <name>inventory_list</name> - <pt>form_list</pt> - <action></action> - <method>POST</method> - <enctype></enctype> - <encoding>UTF-8</encoding> - <stored_encoding>ISO-8859-1</stored_encoding> - <unicode_mode>false</unicode_mode> - <groups> - <group> - <title>Default</title> - <fields> - - <field><id>listbox</id> <type>ListBox</type> - <values> - <all_columns type="list">[('id', 'Inventaire'), ('Description', 'Description'), ('default_destination_section_title', 'Soci\xe9t\xe9'), ('default_destination', 'Magasin'), ('start_date', "Date d'inventaire")]</all_columns> - <all_editable_columns type="list">[]</all_editable_columns> - <alternate_name></alternate_name> - <columns type="list">[('id', 'Inventaire'), ('Description', 'Description'), ('default_destination_section_title', 'Soci\xe9t\xe9'), ('default_destination', 'Magasin'), ('start_date', "Date d'inventaire")]</columns> - <css_class></css_class> - <default></default> - <default_params type="list">[]</default_params> - <description></description> - <domain_root_list type="list">[]</domain_root_list> - <domain_tree type="int">0</domain_tree> - <editable type="int">1</editable> - <editable_columns type="list">[]</editable_columns> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <global_attributes type="list">[]</global_attributes> - <hidden type="int">0</hidden> - <lines type="int">30</lines> - <list_action>list</list_action> - <list_method type="method">searchFolder</list_method> - <meta_types type="list">[]</meta_types> - <portal_types type="list">[('Inventory MP', 'Inventory MP')]</portal_types> - <report_root_list type="list">[]</report_root_list> - <report_tree type="int">0</report_tree> - <search type="int">1</search> - <search_columns></search_columns> - <select type="int">1</select> - <selection_name>inventory_selection</selection_name> - <sort type="list">[('id', 'id')]</sort> - <sort_columns></sort_columns> - <stat_method></stat_method> - <title>Inventaires</title> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - </messages> - </field> - </fields> - </group> - </groups> -</form> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_mrp/inventory_MP_view.form b/product/Coramy/skins/coramy_mrp/inventory_MP_view.form deleted file mode 100755 index acf1942a23..0000000000 --- a/product/Coramy/skins/coramy_mrp/inventory_MP_view.form +++ /dev/null @@ -1,344 +0,0 @@ -<?xml version="1.0"?> - -<form> - <title>Inventaire</title> - <row_length>4</row_length> - <name>inventory_view</name> - <pt>form_view</pt> - <action>base_edit</action> - <method>POST</method> - <enctype></enctype> - <encoding>UTF-8</encoding> - <stored_encoding>ISO-8859-1</stored_encoding> - <unicode_mode>false</unicode_mode> - <groups> - <group> - <title>left</title> - <fields> - - <field><id>my_id</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">10</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <max_length></max_length> - <required type="int">1</required> - <title>Inventaire n°</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - <field><id>my_start_date</id> <type>DateTimeField</type> - <values> - <allow_empty_time type="int">0</allow_empty_time> - <alternate_name></alternate_name> - <ampm_time_style type="int">0</ampm_time_style> - <css_class></css_class> - <date_only type="int">0</date_only> - <date_separator>/</date_separator> - <default_now type="int">0</default_now> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <hidden type="int">0</hidden> - <input_order>dmy</input_order> - <input_style>text</input_style> - <required type="int">1</required> - <time_separator>:</time_separator> - <title>Date d'inventaire</title> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="not_datetime">You did not enter a valid date and time.</message> - <message name="datetime_out_of_range">The date and time you entered were out of range.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>right</title> - <fields> - - <field><id>my_destination_section</id> <type>ListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <extra_item></extra_item> - <first_item type="int">0</first_item> - <hidden type="int">0</hidden> - <items type="list">[]</items> - <required type="int">1</required> - <size type="int">1</size> - <title>Société</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <items>python:here.portal_categories.group.Coramy.getCategoryChildIdItemList(base=1,display_none_category=1)</items> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - <field><id>my_destination</id> <type>ListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <extra_item></extra_item> - <first_item type="int">0</first_item> - <hidden type="int">0</hidden> - <items type="list">[]</items> - <required type="int">1</required> - <size type="int">1</size> - <title>Magasin</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <items>python:here.portal_categories.site.Stock_MP.getCategoryChildIdItemList(base=1,display_none_category=1)</items> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>center</title> - <fields> - - <field><id>my_description</id> <type>TextAreaField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <height type="int">4</height> - <hidden type="int">0</hidden> - <max_length></max_length> - <max_linelength></max_linelength> - <max_lines></max_lines> - <required type="int">0</required> - <title>Description</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - <width type="int">80</width> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_many_lines">You entered too many lines.</message> - <message name="line_too_long">A line was too long.</message> - <message name="too_long">You entered too many characters.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>bottom</title> - <fields> - - <field><id>listbox</id> <type>ListBox</type> - <values> - <all_columns type="list">[]</all_columns> - <all_editable_columns type="list">[]</all_editable_columns> - <alternate_name></alternate_name> - <columns type="list">[('resource_title', 'Produit'), ('variation_text', 'Variantes'), ('getPurchaseDeliveryCellSourceReference', 'R\xe9f. fournisseur'), ('inventory', 'Inventaire'), ('price', 'Prix'), ('quantity_unit', 'Unit\xe9'), ('item_id_list', 'Lots en stock')]</columns> - <css_class></css_class> - <default></default> - <default_params type="list">[]</default_params> - <description></description> - <domain_root_list type="list">[]</domain_root_list> - <domain_tree type="int">0</domain_tree> - <editable type="int">1</editable> - <editable_columns type="list">[('inventory', 'inventory'), ('price', 'price'), ('item_id_list', 'item_id_list'), ('quantity_unit', 'quantity_unit')]</editable_columns> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <global_attributes type="list">[]</global_attributes> - <hidden type="int">0</hidden> - <lines type="int">20</lines> - <list_action>folder_contents</list_action> - <list_method type="method">Delivery_zGetCellList</list_method> - <meta_types type="list">[]</meta_types> - <portal_types type="list">[]</portal_types> - <report_root_list type="list">[]</report_root_list> - <report_tree type="int">0</report_tree> - <search type="int">0</search> - <search_columns type="list">[]</search_columns> - <select type="int">0</select> - <selection_name>inventory_cells_selection</selection_name> - <sort type="list">[('variation_text', 'variation_text')]</sort> - <sort_columns></sort_columns> - <stat_method></stat_method> - <title>Lignes d'inventaire</title> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>hidden</title> - <fields> - - <field><id>listbox_inventory</id> <type>FloatField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">10</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <required type="int">0</required> - <title>Inventory</title> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="not_float">You did not enter a floating point number.</message> - </messages> - </field> - <field><id>listbox_item_id_list</id> <type>LinesField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default type="list">[]</default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <height type="int">2</height> - <hidden type="int">0</hidden> - <max_length></max_length> - <max_linelength></max_linelength> - <max_lines></max_lines> - <required type="int">0</required> - <title>Lots en stock</title> - <unicode type="int">0</unicode> - <view_separator><br /> -</view_separator> - <whitespace_preserve type="int">0</whitespace_preserve> - <width type="int">20</width> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_many_lines">You entered too many lines.</message> - <message name="line_too_long">A line was too long.</message> - <message name="too_long">You entered too many characters.</message> - </messages> - </field> - <field><id>listbox_price</id> <type>FloatField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">10</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <required type="int">0</required> - <title>Price</title> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="not_float">You did not enter a floating point number.</message> - </messages> - </field> - <field><id>listbox_quantity_unit</id> <type>ListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <extra_item></extra_item> - <first_item type="int">0</first_item> - <hidden type="int">0</hidden> - <items type="list">[]</items> - <required type="int">0</required> - <size type="int">1</size> - <title>Unité</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <items>here/portal_categories/quantity_unit/getFormItemList</items> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - </fields> - </group> - </groups> -</form> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_mrp/inventory_PF_list.form b/product/Coramy/skins/coramy_mrp/inventory_PF_list.form deleted file mode 100755 index ede3632541..0000000000 --- a/product/Coramy/skins/coramy_mrp/inventory_PF_list.form +++ /dev/null @@ -1,62 +0,0 @@ -<?xml version="1.0"?> - -<form> - <title>Liste d'inventaires PF</title> - <row_length>4</row_length> - <name>inventory_PF_list</name> - <pt>form_list</pt> - <action></action> - <method>POST</method> - <enctype></enctype> - <encoding>UTF-8</encoding> - <stored_encoding>ISO-8859-1</stored_encoding> - <unicode_mode>false</unicode_mode> - <groups> - <group> - <title>Default</title> - <fields> - - <field><id>listbox</id> <type>ListBox</type> - <values> - <all_columns type="list">[('id', 'Inventaire'), ('Description', 'Description'), ('default_destination_section_title', 'Soci\xe9t\xe9'), ('default_destination', 'Magasin'), ('start_date', "Date d'inventaire")]</all_columns> - <all_editable_columns type="list">[]</all_editable_columns> - <alternate_name></alternate_name> - <columns type="list">[('id', 'Inventaire'), ('Description', 'Description'), ('default_destination_section_title', 'Soci\xe9t\xe9'), ('default_destination', 'Magasin'), ('start_date', "Date d'inventaire")]</columns> - <css_class></css_class> - <default></default> - <default_params type="list">[]</default_params> - <description></description> - <domain_root_list type="list">[]</domain_root_list> - <domain_tree type="int">0</domain_tree> - <editable type="int">1</editable> - <editable_columns type="list">[]</editable_columns> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <global_attributes type="list">[]</global_attributes> - <hidden type="int">0</hidden> - <lines type="int">30</lines> - <list_action>list</list_action> - <list_method type="method">searchFolder</list_method> - <meta_types type="list">[]</meta_types> - <portal_types type="list">[('Inventory PF', 'Inventory PF')]</portal_types> - <report_root_list type="list">[]</report_root_list> - <report_tree type="int">0</report_tree> - <search type="int">1</search> - <search_columns></search_columns> - <select type="int">1</select> - <selection_name>inventory_selection</selection_name> - <sort type="list">[('id', 'id')]</sort> - <sort_columns></sort_columns> - <stat_method></stat_method> - <title>Inventaires</title> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - </messages> - </field> - </fields> - </group> - </groups> -</form> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_mrp/inventory_PF_view.form b/product/Coramy/skins/coramy_mrp/inventory_PF_view.form deleted file mode 100755 index 2e5cd76439..0000000000 --- a/product/Coramy/skins/coramy_mrp/inventory_PF_view.form +++ /dev/null @@ -1,344 +0,0 @@ -<?xml version="1.0"?> - -<form> - <title>Inventaire</title> - <row_length>4</row_length> - <name>inventory_view</name> - <pt>form_view</pt> - <action>base_edit</action> - <method>POST</method> - <enctype></enctype> - <encoding>UTF-8</encoding> - <stored_encoding>ISO-8859-1</stored_encoding> - <unicode_mode>false</unicode_mode> - <groups> - <group> - <title>left</title> - <fields> - - <field><id>my_id</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">10</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <max_length></max_length> - <required type="int">1</required> - <title>Inventaire n°</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - <field><id>my_start_date</id> <type>DateTimeField</type> - <values> - <allow_empty_time type="int">0</allow_empty_time> - <alternate_name></alternate_name> - <ampm_time_style type="int">0</ampm_time_style> - <css_class></css_class> - <date_only type="int">0</date_only> - <date_separator>/</date_separator> - <default_now type="int">0</default_now> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <hidden type="int">0</hidden> - <input_order>dmy</input_order> - <input_style>text</input_style> - <required type="int">1</required> - <time_separator>:</time_separator> - <title>Date d'inventaire</title> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="not_datetime">You did not enter a valid date and time.</message> - <message name="datetime_out_of_range">The date and time you entered were out of range.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>right</title> - <fields> - - <field><id>my_destination_section</id> <type>ListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <extra_item></extra_item> - <first_item type="int">0</first_item> - <hidden type="int">0</hidden> - <items type="list">[]</items> - <required type="int">1</required> - <size type="int">1</size> - <title>Société</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <items>python:here.portal_categories.group.Coramy.getCategoryChildIdItemList(base=1,display_none_category=1)</items> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - <field><id>my_destination</id> <type>ListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <extra_item></extra_item> - <first_item type="int">0</first_item> - <hidden type="int">0</hidden> - <items type="list">[]</items> - <required type="int">1</required> - <size type="int">1</size> - <title>Magasin</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <items>python:here.portal_categories.site.Stock_PF.getCategoryChildIdItemList(base=1,display_none_category=1)</items> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>center</title> - <fields> - - <field><id>my_description</id> <type>TextAreaField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <height type="int">4</height> - <hidden type="int">0</hidden> - <max_length></max_length> - <max_linelength></max_linelength> - <max_lines></max_lines> - <required type="int">0</required> - <title>Description</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - <width type="int">80</width> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_many_lines">You entered too many lines.</message> - <message name="line_too_long">A line was too long.</message> - <message name="too_long">You entered too many characters.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>bottom</title> - <fields> - - <field><id>listbox</id> <type>ListBox</type> - <values> - <all_columns type="list">[]</all_columns> - <all_editable_columns type="list">[]</all_editable_columns> - <alternate_name></alternate_name> - <columns type="list">[('resource_title', 'Produit'), ('variation_text', 'Variantes'), ('getPurchaseDeliveryCellSourceReference', 'R\xe9f. fournisseur'), ('inventory', 'Inventaire'), ('price', 'Prix'), ('quantity_unit', 'Unit\xe9'), ('item_id_list', 'Lots en stock')]</columns> - <css_class></css_class> - <default></default> - <default_params type="list">[]</default_params> - <description></description> - <domain_root_list type="list">[]</domain_root_list> - <domain_tree type="int">0</domain_tree> - <editable type="int">1</editable> - <editable_columns type="list">[('inventory', 'inventory'), ('price', 'price'), ('item_id_list', 'item_id_list'), ('quantity_unit', 'quantity_unit')]</editable_columns> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <global_attributes type="list">[]</global_attributes> - <hidden type="int">0</hidden> - <lines type="int">100</lines> - <list_action>folder_contents</list_action> - <list_method type="method">Delivery_zGetCellList</list_method> - <meta_types type="list">[]</meta_types> - <portal_types type="list">[]</portal_types> - <report_root_list type="list">[]</report_root_list> - <report_tree type="int">0</report_tree> - <search type="int">0</search> - <search_columns></search_columns> - <select type="int">0</select> - <selection_name>inventory_cells_selection</selection_name> - <sort type="list">[('variation_text', 'variation_text')]</sort> - <sort_columns></sort_columns> - <stat_method></stat_method> - <title>Lignes d'inventaire</title> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>hidden</title> - <fields> - - <field><id>listbox_inventory</id> <type>FloatField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">10</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <required type="int">0</required> - <title>Inventory</title> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="not_float">You did not enter a floating point number.</message> - </messages> - </field> - <field><id>listbox_item_id_list</id> <type>LinesField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default type="list">[]</default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <height type="int">2</height> - <hidden type="int">0</hidden> - <max_length></max_length> - <max_linelength></max_linelength> - <max_lines></max_lines> - <required type="int">0</required> - <title>Lots en stock</title> - <unicode type="int">0</unicode> - <view_separator><br /> -</view_separator> - <whitespace_preserve type="int">0</whitespace_preserve> - <width type="int">20</width> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_many_lines">You entered too many lines.</message> - <message name="line_too_long">A line was too long.</message> - <message name="too_long">You entered too many characters.</message> - </messages> - </field> - <field><id>listbox_price</id> <type>FloatField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">10</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <required type="int">0</required> - <title>Price</title> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="not_float">You did not enter a floating point number.</message> - </messages> - </field> - <field><id>listbox_quantity_unit</id> <type>ListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <extra_item></extra_item> - <first_item type="int">0</first_item> - <hidden type="int">0</hidden> - <items type="list">[]</items> - <required type="int">0</required> - <size type="int">1</size> - <title>Unité</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <items>here/portal_categories/quantity_unit/getFormItemList</items> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - </fields> - </group> - </groups> -</form> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_mrp/inventory_aggregated_view.form b/product/Coramy/skins/coramy_mrp/inventory_aggregated_view.form deleted file mode 100755 index ea0418da76..0000000000 --- a/product/Coramy/skins/coramy_mrp/inventory_aggregated_view.form +++ /dev/null @@ -1,230 +0,0 @@ -<?xml version="1.0"?> - -<form> - <title>Inventaire</title> - <row_length>4</row_length> - <name>inventory_view</name> - <pt>form_view</pt> - <action>base_edit</action> - <method>POST</method> - <enctype></enctype> - <encoding>UTF-8</encoding> - <stored_encoding>ISO-8859-1</stored_encoding> - <unicode_mode>false</unicode_mode> - <groups> - <group> - <title>left</title> - <fields> - - <field><id>my_id</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">10</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <max_length></max_length> - <required type="int">1</required> - <title>Inventaire n°</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - <field><id>my_start_date</id> <type>DateTimeField</type> - <values> - <allow_empty_time type="int">0</allow_empty_time> - <alternate_name></alternate_name> - <ampm_time_style type="int">0</ampm_time_style> - <css_class></css_class> - <date_only type="int">1</date_only> - <date_separator>/</date_separator> - <default_now type="int">0</default_now> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <hidden type="int">0</hidden> - <input_order>dmy</input_order> - <input_style>text</input_style> - <required type="int">1</required> - <time_separator>:</time_separator> - <title>Date d'inventaire</title> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="not_datetime">You did not enter a valid date and time.</message> - <message name="datetime_out_of_range">The date and time you entered were out of range.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>right</title> - <fields> - - <field><id>my_destination_section</id> <type>ListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <extra_item></extra_item> - <first_item type="int">0</first_item> - <hidden type="int">0</hidden> - <items type="list">[]</items> - <required type="int">1</required> - <size type="int">1</size> - <title>Société</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <items>python:here.portal_categories.group.Coramy.getCategoryChildIdItemList(base=1,display_none_category=1)</items> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - <field><id>my_destination</id> <type>ListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <extra_item></extra_item> - <first_item type="int">0</first_item> - <hidden type="int">0</hidden> - <items type="list">[]</items> - <required type="int">1</required> - <size type="int">1</size> - <title>Magasin</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <items>python:here.portal_categories.site.Stock_MP.getCategoryChildIdItemList(base=1,display_none_category=1)</items> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>center</title> - <fields> - - </fields> - </group> - <group> - <title>bottom</title> - <fields> - - <field><id>listbox</id> <type>ListBox</type> - <values> - <all_columns type="list">[]</all_columns> - <all_editable_columns type="list">[]</all_editable_columns> - <alternate_name></alternate_name> - <columns type="list">[('id', 'Ligne n\xb0'), ('description', 'Description'), ('resource_title', 'Produit'), ('total_inventory', 'Inventaire'), ('total_price', 'Montant'), ('quantity_unit', 'Unit\xe9')]</columns> - <css_class></css_class> - <default></default> - <default_params type="list">[]</default_params> - <description></description> - <domain_root_list type="list">[]</domain_root_list> - <domain_tree type="int">0</domain_tree> - <editable type="int">1</editable> - <editable_columns type="list">[('quantity_unit', 'quantity_unit')]</editable_columns> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <global_attributes type="list">[]</global_attributes> - <hidden type="int">0</hidden> - <lines type="int">100</lines> - <list_action>folder_contents</list_action> - <list_method type="method">searchFolder</list_method> - <meta_types type="list">[]</meta_types> - <portal_types type="list">[]</portal_types> - <report_root_list type="list">[]</report_root_list> - <report_tree type="int">0</report_tree> - <search type="int">0</search> - <search_columns></search_columns> - <select type="int">0</select> - <selection_name>inventory_lines_selection</selection_name> - <sort type="list">[('id', 'id')]</sort> - <sort_columns></sort_columns> - <stat_method></stat_method> - <title>Lignes d'inventaire</title> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>hidden</title> - <fields> - - <field><id>listbox_quantity_unit</id> <type>ListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <extra_item></extra_item> - <first_item type="int">0</first_item> - <hidden type="int">0</hidden> - <items type="list">[]</items> - <required type="int">0</required> - <size type="int">1</size> - <title>Unité</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <items>here/portal_categories/quantity_unit/getFormItemList</items> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - </fields> - </group> - </groups> -</form> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_mrp/inventory_cell_view.form b/product/Coramy/skins/coramy_mrp/inventory_cell_view.form deleted file mode 100755 index 7fce2cc63b..0000000000 --- a/product/Coramy/skins/coramy_mrp/inventory_cell_view.form +++ /dev/null @@ -1,271 +0,0 @@ -<?xml version="1.0"?> - -<form> - <title>Cellule d'inventaire</title> - <row_length>4</row_length> - <name>inventory_cell_view</name> - <pt>form_view</pt> - <action>base_edit</action> - <method>POST</method> - <enctype>multipart/form-data</enctype> - <encoding>UTF-8</encoding> - <stored_encoding>ISO-8859-1</stored_encoding> - <unicode_mode>false</unicode_mode> - <groups> - <group> - <title>left</title> - <fields> - - <field><id>my_id</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <max_length></max_length> - <required type="int">1</required> - <title>Cellule</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - <field><id>spacer</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">1</hidden> - <max_length></max_length> - <required type="int">0</required> - <title> </title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>right</title> - <fields> - - <field><id>my_inventory</id> <type>FloatField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">10</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <required type="int">0</required> - <title>Inventaire</title> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="not_float">You did not enter a floating point number.</message> - </messages> - </field> - <field><id>my_production_quantity</id> <type>FloatField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">10</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <required type="int">0</required> - <title>Entrée</title> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="not_float">You did not enter a floating point number.</message> - </messages> - </field> - <field><id>my_consumption_quantity</id> <type>FloatField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">10</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <required type="int">0</required> - <title>Sortie</title> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="not_float">You did not enter a floating point number.</message> - </messages> - </field> - <field><id>my_quantity_unit</id> <type>ListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <extra_item></extra_item> - <first_item type="int">0</first_item> - <hidden type="int">0</hidden> - <items type="list">[]</items> - <required type="int">0</required> - <size type="int">1</size> - <title>Unité</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <items>here/getQuantityUnitRangeItemList</items> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - <field><id>my_price</id> <type>FloatField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">10</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <required type="int">0</required> - <title>Prix</title> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="not_float">You did not enter a floating point number.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>center</title> - <fields> - - </fields> - </group> - <group> - <title>bottom</title> - <fields> - - <field><id>listbox</id> <type>ListBox</type> - <values> - <all_columns type="list">[]</all_columns> - <all_editable_columns type="list">[]</all_editable_columns> - <alternate_name></alternate_name> - <columns type="list">[('id', 'N\xb0 Lot'), ('resource_title', 'Produit'), ('getColoris', 'Coloris'), ('getRemainingQuantity', 'Quantit\xe9'), ('source_reference', 'R\xe9f\xe9rence Fournisseur'), ('bain_teinture', 'Bain de teinture'), ('getLaizeUtile', 'Laize utile'), ('getLocation', 'Emplacement')]</columns> - <css_class></css_class> - <default></default> - <default_params type="list">[]</default_params> - <description></description> - <domain_root_list type="list">[]</domain_root_list> - <domain_tree type="int">0</domain_tree> - <editable type="int">1</editable> - <editable_columns type="list">[]</editable_columns> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <global_attributes type="list">[]</global_attributes> - <hidden type="int">0</hidden> - <lines type="int">10</lines> - <list_action>folder_contents</list_action> - <list_method type="method">DeliveryCell_zGetItemList</list_method> - <meta_types type="list">[]</meta_types> - <portal_types type="list">[('Piece Tissu', 'Piece Tissu')]</portal_types> - <report_root_list type="list">[]</report_root_list> - <report_tree type="int">0</report_tree> - <search type="int">0</search> - <search_columns></search_columns> - <select type="int">0</select> - <selection_name>piece_tissu_selection</selection_name> - <sort type="list">[('Id', 'Id')]</sort> - <sort_columns></sort_columns> - <stat_method></stat_method> - <title>Lots associées</title> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>hidden</title> - <fields> - - </fields> - </group> - </groups> -</form> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_mrp/inventory_line_price_view.form b/product/Coramy/skins/coramy_mrp/inventory_line_price_view.form deleted file mode 100755 index 0e6660a871..0000000000 --- a/product/Coramy/skins/coramy_mrp/inventory_line_price_view.form +++ /dev/null @@ -1,321 +0,0 @@ -<?xml version="1.0"?> - -<form> - <title>Ligne d'inventaire</title> - <row_length>4</row_length> - <name>inventory_line_view</name> - <pt>form_view</pt> - <action>base_edit</action> - <method>POST</method> - <enctype></enctype> - <encoding>UTF-8</encoding> - <stored_encoding>ISO-8859-1</stored_encoding> - <unicode_mode>false</unicode_mode> - <groups> - <group> - <title>left</title> - <fields> - - <field><id>my_id</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">10</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <max_length></max_length> - <required type="int">1</required> - <title>Ligne n°</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>right</title> - <fields> - - </fields> - </group> - <group> - <title>center</title> - <fields> - - </fields> - </group> - <group> - <title>bottom</title> - <fields> - - <field><id>domain_base_category_list</id> <type>LinesField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default type="list">[]</default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <height type="int">5</height> - <hidden type="int">1</hidden> - <max_length></max_length> - <max_linelength></max_linelength> - <max_lines></max_lines> - <required type="int">0</required> - <title>Valid Domain</title> - <unicode type="int">0</unicode> - <view_separator><br /> -</view_separator> - <whitespace_preserve type="int">0</whitespace_preserve> - <width type="int">40</width> - </values> - <tales> - <default>here/getVariationBaseCategoryList</default> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_many_lines">You entered too many lines.</message> - <message name="line_too_long">A line was too long.</message> - <message name="too_long">You entered too many characters.</message> - </messages> - </field> - <field><id>mapped_value_property_list</id> <type>LinesField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default type="list">['inventory', 'price']</default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <height type="int">5</height> - <hidden type="int">1</hidden> - <max_length></max_length> - <max_linelength></max_linelength> - <max_lines></max_lines> - <required type="int">0</required> - <title>Modified categories</title> - <unicode type="int">0</unicode> - <view_separator><br /> -</view_separator> - <whitespace_preserve type="int">0</whitespace_preserve> - <width type="int">40</width> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_many_lines">You entered too many lines.</message> - <message name="line_too_long">A line was too long.</message> - <message name="too_long">You entered too many characters.</message> - </messages> - </field> - <field><id>matrixbox</id> <type>MatrixBox</type> - <values> - <all_editable_attributes type="list">[('inventory', 'inventory'), ('price', 'price'), ('predicate_value', 'predicate_value'), ('variation_category_list', 'variation_category_list')]</all_editable_attributes> - <alternate_name></alternate_name> - <cell_base_id>movement</cell_base_id> - <cell_range type="list">[]</cell_range> - <columns type="list">[('None', 'None')]</columns> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <editable_attributes type="list">[('inventory', 'inventory'), ('price', 'price'), ('predicate_value', 'predicate_value'), ('variation_category_list', 'variation_category_list')]</editable_attributes> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <getter_method></getter_method> - <global_attributes type="list">[('domain_base_category_list', 'domain_base_category_list'), ('mapped_value_property_list', 'mapped_value_property_list'), ('predicate_operator', 'predicate_operator')]</global_attributes> - <hidden type="int">0</hidden> - <lines type="list">[('None', 'None')]</lines> - <setter_method></setter_method> - <tabs type="list">[('None', 'None')]</tabs> - <title>matrixbox</title> - <update_cell_range type="int">1</update_cell_range> - </values> - <tales> - <columns>python:here.order_line_matrix_item_listbase_category_list = ('taille',), base=1)</columns> - <lines>python:here.order_line_matrix_item_list(base_category_list = ('coloris','variante'), base=1)</lines> - <tabs>python:here.order_line_matrix_item_list(base_category_list = ('taille','coloris','variante'), base=1, include=0)</tabs> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - </messages> - </field> - <field><id>predicate_operator</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default>SUPERSET_OF</default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">1</hidden> - <max_length></max_length> - <required type="int">0</required> - <title>Operator</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>hidden</title> - <fields> - - <field><id>matrixbox_predicate_value</id> <type>LinesField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default type="list">[]</default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <height type="int">5</height> - <hidden type="int">1</hidden> - <max_length></max_length> - <max_linelength></max_linelength> - <max_lines></max_lines> - <required type="int">0</required> - <title>matrixbox_predicate_value</title> - <unicode type="int">0</unicode> - <view_separator><br /> -</view_separator> - <whitespace_preserve type="int">0</whitespace_preserve> - <width type="int">40</width> - </values> - <tales> - <default>python:cell_index</default> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_many_lines">You entered too many lines.</message> - <message name="line_too_long">A line was too long.</message> - <message name="too_long">You entered too many characters.</message> - </messages> - </field> - <field><id>matrixbox_variation_category_list</id> <type>LinesField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default type="list">[]</default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <height type="int">5</height> - <hidden type="int">1</hidden> - <max_length></max_length> - <max_linelength></max_linelength> - <max_lines></max_lines> - <required type="int">0</required> - <title>matrixbox_predicate_value</title> - <unicode type="int">0</unicode> - <view_separator><br /> -</view_separator> - <whitespace_preserve type="int">0</whitespace_preserve> - <width type="int">40</width> - </values> - <tales> - <default>python:cell_index</default> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_many_lines">You entered too many lines.</message> - <message name="line_too_long">A line was too long.</message> - <message name="too_long">You entered too many characters.</message> - </messages> - </field> - <field><id>matrixbox_inventory</id> <type>FloatField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">10</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">1</hidden> - <required type="int">0</required> - <title>matrixbox_inventory</title> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <default>python:cell.getProperty('inventory')</default> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="not_float">You did not enter a floating point number.</message> - </messages> - </field> - <field><id>matrixbox_price</id> <type>FloatField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">10</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <required type="int">0</required> - <title>matrixbox_inventory</title> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <default>python:cell.getProperty('price')</default> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="not_float">You did not enter a floating point number.</message> - </messages> - </field> - </fields> - </group> - </groups> -</form> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_mrp/inventory_line_quantity_view.form b/product/Coramy/skins/coramy_mrp/inventory_line_quantity_view.form deleted file mode 100755 index 266f6d9d7c..0000000000 --- a/product/Coramy/skins/coramy_mrp/inventory_line_quantity_view.form +++ /dev/null @@ -1,321 +0,0 @@ -<?xml version="1.0"?> - -<form> - <title>Ligne d'inventaire</title> - <row_length>4</row_length> - <name>inventory_line_view</name> - <pt>form_view</pt> - <action>base_edit</action> - <method>POST</method> - <enctype></enctype> - <encoding>UTF-8</encoding> - <stored_encoding>ISO-8859-1</stored_encoding> - <unicode_mode>false</unicode_mode> - <groups> - <group> - <title>left</title> - <fields> - - <field><id>my_id</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">10</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <max_length></max_length> - <required type="int">1</required> - <title>Ligne n°</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>right</title> - <fields> - - </fields> - </group> - <group> - <title>center</title> - <fields> - - </fields> - </group> - <group> - <title>bottom</title> - <fields> - - <field><id>domain_base_category_list</id> <type>LinesField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default type="list">[]</default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <height type="int">5</height> - <hidden type="int">1</hidden> - <max_length></max_length> - <max_linelength></max_linelength> - <max_lines></max_lines> - <required type="int">0</required> - <title>Valid Domain</title> - <unicode type="int">0</unicode> - <view_separator><br /> -</view_separator> - <whitespace_preserve type="int">0</whitespace_preserve> - <width type="int">40</width> - </values> - <tales> - <default>here/getVariationBaseCategoryList</default> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_many_lines">You entered too many lines.</message> - <message name="line_too_long">A line was too long.</message> - <message name="too_long">You entered too many characters.</message> - </messages> - </field> - <field><id>mapped_value_property_list</id> <type>LinesField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default type="list">['inventory', 'price']</default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <height type="int">5</height> - <hidden type="int">1</hidden> - <max_length></max_length> - <max_linelength></max_linelength> - <max_lines></max_lines> - <required type="int">0</required> - <title>Modified categories</title> - <unicode type="int">0</unicode> - <view_separator><br /> -</view_separator> - <whitespace_preserve type="int">0</whitespace_preserve> - <width type="int">40</width> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_many_lines">You entered too many lines.</message> - <message name="line_too_long">A line was too long.</message> - <message name="too_long">You entered too many characters.</message> - </messages> - </field> - <field><id>matrixbox</id> <type>MatrixBox</type> - <values> - <all_editable_attributes type="list">[('inventory', 'inventory'), ('price', 'price'), ('predicate_value', 'predicate_value'), ('variation_category_list', 'variation_category_list')]</all_editable_attributes> - <alternate_name></alternate_name> - <cell_base_id>movement</cell_base_id> - <cell_range type="list">[]</cell_range> - <columns type="list">[('None', 'None')]</columns> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <editable_attributes type="list">[('inventory', 'inventory'), ('price', 'price'), ('predicate_value', 'predicate_value'), ('variation_category_list', 'variation_category_list')]</editable_attributes> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <getter_method></getter_method> - <global_attributes type="list">[('domain_base_category_list', 'domain_base_category_list'), ('mapped_value_property_list', 'mapped_value_property_list'), ('predicate_operator', 'predicate_operator')]</global_attributes> - <hidden type="int">0</hidden> - <lines type="list">[('None', 'None')]</lines> - <setter_method></setter_method> - <tabs type="list">[('None', 'None')]</tabs> - <title>matrixbox</title> - <update_cell_range type="int">1</update_cell_range> - </values> - <tales> - <columns>python:here.order_line_matrix_item_list(base_category_list = ('taille',), base=1)</columns> - <lines>python:here.order_line_matrix_item_list(base_category_list = ('coloris','variante'), base=1)</lines> - <tabs>python:here.order_line_matrix_item_list(base_category_list = ('taille','coloris','variante'), base=1, include=0)</tabs> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - </messages> - </field> - <field><id>predicate_operator</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default>SUPERSET_OF</default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">1</hidden> - <max_length></max_length> - <required type="int">0</required> - <title>Operator</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>hidden</title> - <fields> - - <field><id>matrixbox_predicate_value</id> <type>LinesField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default type="list">[]</default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <height type="int">5</height> - <hidden type="int">1</hidden> - <max_length></max_length> - <max_linelength></max_linelength> - <max_lines></max_lines> - <required type="int">0</required> - <title>matrixbox_predicate_value</title> - <unicode type="int">0</unicode> - <view_separator><br /> -</view_separator> - <whitespace_preserve type="int">0</whitespace_preserve> - <width type="int">40</width> - </values> - <tales> - <default>python:cell_index</default> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_many_lines">You entered too many lines.</message> - <message name="line_too_long">A line was too long.</message> - <message name="too_long">You entered too many characters.</message> - </messages> - </field> - <field><id>matrixbox_variation_category_list</id> <type>LinesField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default type="list">[]</default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <height type="int">5</height> - <hidden type="int">1</hidden> - <max_length></max_length> - <max_linelength></max_linelength> - <max_lines></max_lines> - <required type="int">0</required> - <title>matrixbox_predicate_value</title> - <unicode type="int">0</unicode> - <view_separator><br /> -</view_separator> - <whitespace_preserve type="int">0</whitespace_preserve> - <width type="int">40</width> - </values> - <tales> - <default>python:cell_index</default> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_many_lines">You entered too many lines.</message> - <message name="line_too_long">A line was too long.</message> - <message name="too_long">You entered too many characters.</message> - </messages> - </field> - <field><id>matrixbox_inventory</id> <type>FloatField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">10</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <required type="int">0</required> - <title>matrixbox_inventory</title> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <default>python:cell.getProperty('inventory')</default> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="not_float">You did not enter a floating point number.</message> - </messages> - </field> - <field><id>matrixbox_price</id> <type>FloatField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">10</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">1</hidden> - <required type="int">0</required> - <title>matrixbox_inventory</title> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <default>python:cell.getProperty('price')</default> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="not_float">You did not enter a floating point number.</message> - </messages> - </field> - </fields> - </group> - </groups> -</form> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_mrp/inventory_line_view.form b/product/Coramy/skins/coramy_mrp/inventory_line_view.form deleted file mode 100755 index 89b8a244d4..0000000000 --- a/product/Coramy/skins/coramy_mrp/inventory_line_view.form +++ /dev/null @@ -1,356 +0,0 @@ -<?xml version="1.0"?> - -<form> - <title>Ligne d'inventaire</title> - <row_length>4</row_length> - <name>inventory_line_view</name> - <pt>form_view</pt> - <action>base_edit</action> - <method>POST</method> - <enctype>multipart/form-data</enctype> - <encoding>UTF-8</encoding> - <stored_encoding>ISO-8859-1</stored_encoding> - <unicode_mode>false</unicode_mode> - <groups> - <group> - <title>left</title> - <fields> - - <field><id>my_id</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">5</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <max_length></max_length> - <required type="int">1</required> - <title>Ligne n°</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - <field><id>my_description</id> <type>TextAreaField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <height type="int">2</height> - <hidden type="int">0</hidden> - <max_length></max_length> - <max_linelength></max_linelength> - <max_lines></max_lines> - <required type="int">0</required> - <title>Description</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - <width type="int">40</width> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_many_lines">You entered too many lines.</message> - <message name="line_too_long">A line was too long.</message> - <message name="too_long">You entered too many characters.</message> - </messages> - </field> - <field><id>my_resource_relative_url</id> <type>RelationStringField</type> - <values> - <alternate_name></alternate_name> - <base_category>resource</base_category> - <catalog_index>relative_url</catalog_index> - <css_class></css_class> - <default></default> - <default_module>modele</default_module> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">40</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <jump_method>base_jump_relation</jump_method> - <max_length></max_length> - <portal_type type="list">[('Composant', 'Composant'), ('Tissu', 'Tissu'), ('Modele', 'Modele'), ('Assortiment', 'Assortiment'), ('Category', 'Category')]</portal_type> - <required type="int">0</required> - <title>Produit</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <update_method>base_update_relation</update_method> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - <field><id>my_variation_base_category_list</id> <type>MultiListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default type="list">[]</default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <extra_item></extra_item> - <hidden type="int">0</hidden> - <items type="list">[]</items> - <required type="int">0</required> - <size type="int">3</size> - <title>Axes variation</title> - <unicode type="int">0</unicode> - <view_separator><br /> -</view_separator> - </values> - <tales> - <items>here/getVariationRangeBaseCategoryItemList</items> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - <field><id>my_variation_category_list</id> <type>MultiListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default type="list">[]</default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <extra_item></extra_item> - <hidden type="int">0</hidden> - <items type="list">[]</items> - <required type="int">0</required> - <size type="int">8</size> - <title>Variantes</title> - <unicode type="int">0</unicode> - <view_separator><br /> -</view_separator> - </values> - <tales> - <items>here/getVariationRangeCategoryItemList</items> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>right</title> - <fields> - - <field><id>my_inventory</id> <type>FloatField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">10</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <required type="int">0</required> - <title>Quantité par défaut</title> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="not_float">You did not enter a floating point number.</message> - </messages> - </field> - <field><id>my_quantity_unit</id> <type>ListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <extra_item></extra_item> - <first_item type="int">0</first_item> - <hidden type="int">0</hidden> - <items type="list">[]</items> - <required type="int">0</required> - <size type="int">1</size> - <title>Unité</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <items>here/getQuantityUnitRangeItemList</items> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - <field><id>my_price</id> <type>FloatField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">10</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <required type="int">0</required> - <title>Prix par défaut</title> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="not_float">You did not enter a floating point number.</message> - </messages> - </field> - <field><id>spacer</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">1</hidden> - <max_length></max_length> - <required type="int">0</required> - <title> </title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - <field><id>my_total_inventory</id> <type>FloatField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">10</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">1</hidden> - <required type="int">0</required> - <title>Inventaire total</title> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <title>python:'Quantité totale : %.2f' % here.getTotalInventory()</title> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="not_float">You did not enter a floating point number.</message> - </messages> - </field> - <field><id>my_total_price</id> <type>FloatField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">10</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">1</hidden> - <required type="int">0</required> - <title>Valeur totale</title> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <title>python:'Montant total : %.2f' % here.getTotalPrice()</title> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="not_float">You did not enter a floating point number.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>center</title> - <fields> - - </fields> - </group> - <group> - <title>bottom</title> - <fields> - - </fields> - </group> - <group> - <title>hidden</title> - <fields> - - </fields> - </group> - </groups> -</form> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_mrp/inventory_view.form b/product/Coramy/skins/coramy_mrp/inventory_view.form deleted file mode 100755 index 36d89487b2..0000000000 --- a/product/Coramy/skins/coramy_mrp/inventory_view.form +++ /dev/null @@ -1,315 +0,0 @@ -<?xml version="1.0"?> - -<form> - <title>Inventaire</title> - <row_length>4</row_length> - <name>inventory_view</name> - <pt>form_view</pt> - <action>base_edit</action> - <method>POST</method> - <enctype></enctype> - <encoding>UTF-8</encoding> - <stored_encoding>ISO-8859-1</stored_encoding> - <unicode_mode>false</unicode_mode> - <groups> - <group> - <title>left</title> - <fields> - - <field><id>my_id</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">10</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <max_length></max_length> - <required type="int">1</required> - <title>Inventaire n°</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - <field><id>my_start_date</id> <type>DateTimeField</type> - <values> - <allow_empty_time type="int">0</allow_empty_time> - <alternate_name></alternate_name> - <ampm_time_style type="int">0</ampm_time_style> - <css_class></css_class> - <date_only type="int">0</date_only> - <date_separator>/</date_separator> - <default_now type="int">0</default_now> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <hidden type="int">0</hidden> - <input_order>dmy</input_order> - <input_style>text</input_style> - <required type="int">1</required> - <time_separator>:</time_separator> - <title>Date d'inventaire</title> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="not_datetime">You did not enter a valid date and time.</message> - <message name="datetime_out_of_range">The date and time you entered were out of range.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>right</title> - <fields> - - <field><id>my_destination_section</id> <type>ListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <extra_item></extra_item> - <first_item type="int">0</first_item> - <hidden type="int">0</hidden> - <items type="list">[]</items> - <required type="int">1</required> - <size type="int">1</size> - <title>Société</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <items>python:here.portal_categories.group.Coramy.getCategoryChildIdItemList(base=1,display_none_category=1)</items> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - <field><id>my_destination</id> <type>ListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <extra_item></extra_item> - <first_item type="int">0</first_item> - <hidden type="int">0</hidden> - <items type="list">[]</items> - <required type="int">1</required> - <size type="int">1</size> - <title>Magasin</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <items>python:here.portal_categories.site.Stock_MP.getCategoryChildIdItemList(base=1,display_none_category=1)</items> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>center</title> - <fields> - - <field><id>my_description</id> <type>TextAreaField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <height type="int">4</height> - <hidden type="int">0</hidden> - <max_length></max_length> - <max_linelength></max_linelength> - <max_lines></max_lines> - <required type="int">0</required> - <title>Description</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - <width type="int">80</width> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_many_lines">You entered too many lines.</message> - <message name="line_too_long">A line was too long.</message> - <message name="too_long">You entered too many characters.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>bottom</title> - <fields> - - <field><id>listbox</id> <type>ListBox</type> - <values> - <all_columns type="list">[]</all_columns> - <all_editable_columns type="list">[]</all_editable_columns> - <alternate_name></alternate_name> - <columns type="list">[('Id', 'Ligne n\xb0'), ('resource_title', 'Produit'), ('getVariationCategoryList', 'Variantes'), ('inventory', 'Inventaire'), ('price', 'Prix'), ('item_id_list', 'Lots en stock')]</columns> - <css_class></css_class> - <default></default> - <default_params type="list">[]</default_params> - <description></description> - <domain_root_list type="list">[]</domain_root_list> - <domain_tree type="int">0</domain_tree> - <editable type="int">1</editable> - <editable_columns type="list">[('inventory', 'inventory'), ('price', 'price'), ('item_id_list', 'item_id_list')]</editable_columns> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <global_attributes type="list">[]</global_attributes> - <hidden type="int">0</hidden> - <lines type="int">100</lines> - <list_action>folder_contents</list_action> - <list_method type="method">Delivery_zGetCellList</list_method> - <meta_types type="list">[]</meta_types> - <portal_types type="list">[]</portal_types> - <report_root_list type="list">[]</report_root_list> - <report_tree type="int">0</report_tree> - <search type="int">0</search> - <search_columns></search_columns> - <select type="int">0</select> - <selection_name>inventory_cells_selection</selection_name> - <sort type="list">[('Description', 'Description')]</sort> - <sort_columns></sort_columns> - <stat_method></stat_method> - <title>Lignes d'inventaire</title> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>hidden</title> - <fields> - - <field><id>listbox_inventory</id> <type>FloatField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">10</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <required type="int">0</required> - <title>Inventory</title> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="not_float">You did not enter a floating point number.</message> - </messages> - </field> - <field><id>listbox_item_id_list</id> <type>LinesField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default type="list">[]</default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <height type="int">2</height> - <hidden type="int">0</hidden> - <max_length></max_length> - <max_linelength></max_linelength> - <max_lines></max_lines> - <required type="int">0</required> - <title>Pièces en stock</title> - <unicode type="int">0</unicode> - <view_separator><br /> -</view_separator> - <whitespace_preserve type="int">0</whitespace_preserve> - <width type="int">20</width> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_many_lines">You entered too many lines.</message> - <message name="line_too_long">A line was too long.</message> - <message name="too_long">You entered too many characters.</message> - </messages> - </field> - <field><id>listbox_price</id> <type>FloatField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">10</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <required type="int">0</required> - <title>Price</title> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="not_float">You did not enter a floating point number.</message> - </messages> - </field> - </fields> - </group> - </groups> -</form> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_mrp/inventory_view2.form b/product/Coramy/skins/coramy_mrp/inventory_view2.form deleted file mode 100755 index 492ce6cd67..0000000000 --- a/product/Coramy/skins/coramy_mrp/inventory_view2.form +++ /dev/null @@ -1,315 +0,0 @@ -<?xml version="1.0"?> - -<form> - <title>Inventaire</title> - <row_length>4</row_length> - <name>inventory_view</name> - <pt>form_view</pt> - <action>base_edit</action> - <method>POST</method> - <enctype></enctype> - <encoding>UTF-8</encoding> - <stored_encoding>ISO-8859-1</stored_encoding> - <unicode_mode>false</unicode_mode> - <groups> - <group> - <title>left</title> - <fields> - - <field><id>my_id</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">10</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <max_length></max_length> - <required type="int">1</required> - <title>Inventaire n°</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - <field><id>my_start_date</id> <type>DateTimeField</type> - <values> - <allow_empty_time type="int">0</allow_empty_time> - <alternate_name></alternate_name> - <ampm_time_style type="int">0</ampm_time_style> - <css_class></css_class> - <date_only type="int">1</date_only> - <date_separator>/</date_separator> - <default_now type="int">0</default_now> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <hidden type="int">0</hidden> - <input_order>dmy</input_order> - <input_style>text</input_style> - <required type="int">1</required> - <time_separator>:</time_separator> - <title>Date d'inventaire</title> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="not_datetime">You did not enter a valid date and time.</message> - <message name="datetime_out_of_range">The date and time you entered were out of range.</message> - </messages> - </field> - <field><id>listbox_variantes</id> <type>MultiListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default type="list">[]</default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <extra_item></extra_item> - <hidden type="int">0</hidden> - <items type="list">[]</items> - <required type="int">0</required> - <size type="int">2</size> - <title>my_variantes</title> - <unicode type="int">0</unicode> - <view_separator><br /> -</view_separator> - </values> - <tales> - <items>line/getVariationCategoryList</items> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>right</title> - <fields> - - <field><id>my_destination_section</id> <type>ListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <extra_item></extra_item> - <first_item type="int">0</first_item> - <hidden type="int">0</hidden> - <items type="list">[]</items> - <required type="int">1</required> - <size type="int">1</size> - <title>Société</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <items>python:here.portal_categories.group.Coramy.getCategoryChildIdItemList(base=1,display_none_category=1)</items> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - <field><id>my_destination</id> <type>ListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <extra_item></extra_item> - <first_item type="int">0</first_item> - <hidden type="int">0</hidden> - <items type="list">[]</items> - <required type="int">1</required> - <size type="int">1</size> - <title>Magasin</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <items>python:here.portal_categories.site.Stock_MP.getCategoryChildIdItemList(base=1,display_none_category=1)</items> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>center</title> - <fields> - - <field><id>my_description</id> <type>TextAreaField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <height type="int">4</height> - <hidden type="int">0</hidden> - <max_length></max_length> - <max_linelength></max_linelength> - <max_lines></max_lines> - <required type="int">0</required> - <title>Description</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - <width type="int">80</width> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_many_lines">You entered too many lines.</message> - <message name="line_too_long">A line was too long.</message> - <message name="too_long">You entered too many characters.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>bottom</title> - <fields> - - <field><id>listbox</id> <type>ListBox</type> - <values> - <all_columns type="list">[]</all_columns> - <all_editable_columns type="list">[]</all_editable_columns> - <alternate_name></alternate_name> - <columns type="list">[('id', 'Ligne n\xb0'), ('description', 'Description'), ('resource_title', 'Produit'), ('variantes', 'Variantes'), ('inventory', 'Inventaire'), ('quantity_unit', 'Unit\xe9')]</columns> - <css_class></css_class> - <default></default> - <default_params type="list">[]</default_params> - <description></description> - <domain_root_list type="list">[]</domain_root_list> - <domain_tree type="int">0</domain_tree> - <editable type="int">1</editable> - <editable_columns type="list">[('quantity_unit', 'quantity_unit'), ('inventory', 'inventory'), ('variantes', 'variantes')]</editable_columns> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <global_attributes type="list">[]</global_attributes> - <hidden type="int">0</hidden> - <lines type="int">100</lines> - <list_action>folder_contents</list_action> - <list_method type="method">Delivery_zGetCellList</list_method> - <meta_types type="list">[]</meta_types> - <portal_types type="list">[]</portal_types> - <report_root_list type="list">[]</report_root_list> - <report_tree type="int">0</report_tree> - <search type="int">0</search> - <search_columns></search_columns> - <select type="int">0</select> - <selection_name>inventory_lines_selection</selection_name> - <sort type="list">[('id', 'id')]</sort> - <sort_columns></sort_columns> - <stat_method></stat_method> - <title>Lignes d'inventaire</title> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>hidden</title> - <fields> - - <field><id>listbox_inventory</id> <type>FloatField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <required type="int">0</required> - <title>Inventory</title> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="not_float">You did not enter a floating point number.</message> - </messages> - </field> - <field><id>listbox_quantity_unit</id> <type>ListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <extra_item></extra_item> - <first_item type="int">0</first_item> - <hidden type="int">0</hidden> - <items type="list">[]</items> - <required type="int">0</required> - <size type="int">1</size> - <title>Unité</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <items>here/portal_categories/quantity_unit/getFormItemList</items> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - </fields> - </group> - </groups> -</form> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_mrp/inventory_view_details.form b/product/Coramy/skins/coramy_mrp/inventory_view_details.form deleted file mode 100755 index 0766f48bef..0000000000 --- a/product/Coramy/skins/coramy_mrp/inventory_view_details.form +++ /dev/null @@ -1,284 +0,0 @@ -<?xml version="1.0"?> - -<form> - <title>Inventaire</title> - <row_length>4</row_length> - <name>inventory_view</name> - <pt>form_view</pt> - <action>base_edit</action> - <method>POST</method> - <enctype></enctype> - <encoding>UTF-8</encoding> - <stored_encoding>ISO-8859-1</stored_encoding> - <unicode_mode>false</unicode_mode> - <groups> - <group> - <title>left</title> - <fields> - - <field><id>my_id</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">10</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <max_length></max_length> - <required type="int">1</required> - <title>Inventaire n°</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - <field><id>my_start_date</id> <type>DateTimeField</type> - <values> - <allow_empty_time type="int">0</allow_empty_time> - <alternate_name></alternate_name> - <ampm_time_style type="int">0</ampm_time_style> - <css_class></css_class> - <date_only type="int">1</date_only> - <date_separator>/</date_separator> - <default_now type="int">0</default_now> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <hidden type="int">0</hidden> - <input_order>dmy</input_order> - <input_style>text</input_style> - <required type="int">1</required> - <time_separator>:</time_separator> - <title>Date d'inventaire</title> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="not_datetime">You did not enter a valid date and time.</message> - <message name="datetime_out_of_range">The date and time you entered were out of range.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>right</title> - <fields> - - <field><id>my_destination_section</id> <type>ListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <extra_item></extra_item> - <first_item type="int">0</first_item> - <hidden type="int">0</hidden> - <items type="list">[]</items> - <required type="int">1</required> - <size type="int">1</size> - <title>Société</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <items>python:here.portal_categories.group.Coramy.getCategoryChildIdItemList(base=1,display_none_category=1)</items> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - <field><id>my_destination</id> <type>ListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <extra_item></extra_item> - <first_item type="int">0</first_item> - <hidden type="int">0</hidden> - <items type="list">[]</items> - <required type="int">1</required> - <size type="int">1</size> - <title>Magasin</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <items>python:here.portal_categories.site.Stock_MP.getCategoryChildIdItemList(base=1,display_none_category=1)</items> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>center</title> - <fields> - - </fields> - </group> - <group> - <title>bottom</title> - <fields> - - <field><id>listbox</id> <type>ListBox</type> - <values> - <all_columns type="list">[]</all_columns> - <all_editable_columns type="list">[]</all_editable_columns> - <alternate_name></alternate_name> - <columns type="list">[('id', 'Ligne n\xb0'), ('resource_title', 'Produit'), ('getVariationCategoryList', 'Variantes'), ('inventory', 'Inventaire'), ('price', 'Prix'), ('item_id_list', 'Pi\xe8ces en stock')]</columns> - <css_class></css_class> - <default></default> - <default_params type="list">[]</default_params> - <description></description> - <domain_root_list type="list">[]</domain_root_list> - <domain_tree type="int">0</domain_tree> - <editable type="int">1</editable> - <editable_columns type="list">[('inventory', 'inventory'), ('price', 'price'), ('item_id_list', 'item_id_list')]</editable_columns> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <global_attributes type="list">[]</global_attributes> - <hidden type="int">0</hidden> - <lines type="int">100</lines> - <list_action>folder_contents</list_action> - <list_method type="method">Delivery_zGetCellList</list_method> - <meta_types type="list">[]</meta_types> - <portal_types type="list">[]</portal_types> - <report_root_list type="list">[]</report_root_list> - <report_tree type="int">0</report_tree> - <search type="int">0</search> - <search_columns></search_columns> - <select type="int">0</select> - <selection_name>inventory_cells_selection</selection_name> - <sort type="list">[('id', 'id')]</sort> - <sort_columns></sort_columns> - <stat_method></stat_method> - <title>Lignes d'inventaire</title> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>hidden</title> - <fields> - - <field><id>listbox_inventory</id> <type>FloatField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">10</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <required type="int">0</required> - <title>Inventory</title> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="not_float">You did not enter a floating point number.</message> - </messages> - </field> - <field><id>listbox_price</id> <type>FloatField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">10</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <required type="int">0</required> - <title>Price</title> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="not_float">You did not enter a floating point number.</message> - </messages> - </field> - <field><id>listbox_item_id_list</id> <type>LinesField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default type="list">[]</default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <height type="int">2</height> - <hidden type="int">0</hidden> - <max_length></max_length> - <max_linelength></max_linelength> - <max_lines></max_lines> - <required type="int">0</required> - <title>Pièces en stock</title> - <unicode type="int">0</unicode> - <view_separator><br /> -</view_separator> - <whitespace_preserve type="int">0</whitespace_preserve> - <width type="int">20</width> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_many_lines">You entered too many lines.</message> - <message name="line_too_long">A line was too long.</message> - <message name="too_long">You entered too many characters.</message> - </messages> - </field> - </fields> - </group> - </groups> -</form> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_mrp/item_tissu_list.form b/product/Coramy/skins/coramy_mrp/item_tissu_list.form deleted file mode 100755 index 363ec2ca34..0000000000 --- a/product/Coramy/skins/coramy_mrp/item_tissu_list.form +++ /dev/null @@ -1,63 +0,0 @@ -<?xml version="1.0"?> - -<form> - <title>Liste de pièces de tissus</title> - <row_length>4</row_length> - <name>item_tissu_list</name> - <pt>form_list</pt> - <action></action> - <method>POST</method> - <enctype>multipart/form-data</enctype> - <encoding>UTF-8</encoding> - <stored_encoding>ISO-8859-1</stored_encoding> - <unicode_mode>false</unicode_mode> - <groups> - <group> - <title>Default</title> - <fields> - - <field><id>listbox</id> <type>ListBox</type> - <values> - <all_columns type="list">[('id', 'N\xb0 pi\xe8ce'), ('default_resource_title', 'Tissu'), ('getColoris', 'Coloris'), ('getRemainingQuantity', 'Quantit\xe9'), ('default_source_title', 'Fournisseur'), ('default_source_reference', 'R\xe9f\xe9rence Fournisseur'), ('bain_teinture', 'Bain de teinture'), ('getLaizeUtile', 'Laize utile'), ('getLastLocationTitle', 'Localisation'), ('getLocation', 'Emplacement')]</all_columns> - <all_editable_columns type="list">[]</all_editable_columns> - <alternate_name></alternate_name> - <columns type="list">[('id', 'N\xb0 pi\xe8ce'), ('default_resource_title', 'Tissu'), ('getColoris', 'Coloris'), ('getRemainingQuantity', 'Quantit\xe9'), ('default_source_title', 'Fournisseur'), ('default_source_reference', 'R\xe9f\xe9rence Fournisseur'), ('bain_teinture', 'Bain de teinture'), ('getLaizeUtile', 'Laize utile'), ('getLastLocationTitle', 'Localisation'), ('getLocation', 'Emplacement')]</columns> - <css_class></css_class> - <default></default> - <default_params type="list">[('id', "''")]</default_params> - <description></description> - <domain_root_list type="list">[]</domain_root_list> - <domain_tree type="int">0</domain_tree> - <editable type="int">1</editable> - <editable_columns type="list">[]</editable_columns> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <global_attributes type="list">[]</global_attributes> - <hidden type="int">0</hidden> - <lines type="int">30</lines> - <list_action>list</list_action> - <list_method type="method">portal_catalog</list_method> - <meta_types type="list">[]</meta_types> - <portal_types type="list">[('Piece Tissu', 'Piece Tissu')]</portal_types> - <report_root_list type="list">[]</report_root_list> - <report_tree type="int">0</report_tree> - <search type="int">1</search> - <search_columns type="list">[]</search_columns> - <select type="int">1</select> - <selection_name>item_tissu_selection</selection_name> - <sort type="list">[('id', 'id')]</sort> - <sort_columns></sort_columns> - <stat_method type="method">PieceTissu_zGetAvailableItemStat</stat_method> - <title>Pièces de tissu</title> - </values> - <tales> - <list_method>python:here.getPortalObject().portal_skins.local_list_method[here.REQUEST.list_method_id]</list_method> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - </messages> - </field> - </fields> - </group> - </groups> -</form> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_mrp/item_tissu_view.form b/product/Coramy/skins/coramy_mrp/item_tissu_view.form deleted file mode 100755 index 9f58d4180c..0000000000 --- a/product/Coramy/skins/coramy_mrp/item_tissu_view.form +++ /dev/null @@ -1,453 +0,0 @@ -<?xml version="1.0"?> - -<form> - <title>Pièce de tissu</title> - <row_length>4</row_length> - <name>item_tissu_view</name> - <pt>form_view</pt> - <action>base_edit</action> - <method>POST</method> - <enctype></enctype> - <encoding>UTF-8</encoding> - <stored_encoding>ISO-8859-1</stored_encoding> - <unicode_mode>false</unicode_mode> - <groups> - <group> - <title>left</title> - <fields> - - <field><id>my_id</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">10</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <max_length></max_length> - <required type="int">1</required> - <title>N° de pièce</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - <field><id>my_resource_id</id> <type>RelationStringField</type> - <values> - <alternate_name></alternate_name> - <base_category>resource</base_category> - <catalog_index>id</catalog_index> - <css_class></css_class> - <default></default> - <default_module>tissu</default_module> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <jump_method>base_jump_relation</jump_method> - <max_length></max_length> - <portal_type type="list">[('Tissu', 'Tissu')]</portal_type> - <required type="int">0</required> - <title>Tissu</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <update_method>base_update_relation</update_method> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - <field><id>my_variation_category_list</id> <type>ListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <extra_item></extra_item> - <first_item type="int">0</first_item> - <hidden type="int">0</hidden> - <items type="list">[]</items> - <required type="int">0</required> - <size type="int">1</size> - <title>Coloris</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <default>python:here.getVariationCategoryList()[0]</default> - <items>python:[('','')]+here.getVariationRangeCategoryItemList()</items> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - <field><id>my_laize_utile</id> <type>FloatField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <required type="int">0</required> - <title>Laize utile (cm)</title> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="not_float">You did not enter a floating point number.</message> - </messages> - </field> - <field><id>my_last_location_title</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <max_length></max_length> - <required type="int">0</required> - <title>Localisation</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - <field><id>my_location</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <max_length></max_length> - <required type="int">0</required> - <title>Emplacement</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>right</title> - <fields> - - <field><id>my_source_title</id> <type>RelationStringField</type> - <values> - <alternate_name></alternate_name> - <base_category>source</base_category> - <catalog_index>title</catalog_index> - <css_class></css_class> - <default></default> - <default_module>organisation</default_module> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <jump_method>base_jump_relation</jump_method> - <max_length></max_length> - <portal_type type="list">[('Organisation', 'Organisation'), ('Category', 'Category')]</portal_type> - <required type="int">0</required> - <title>Fournisseur</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <update_method>base_update_relation</update_method> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - <field><id>my_source_reference</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <max_length></max_length> - <required type="int">0</required> - <title>N° pièce fournisseur</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - <field><id>my_bain_teinture</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <max_length></max_length> - <required type="int">0</required> - <title>N° bain teinture</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - <field><id>my_quantity</id> <type>FloatField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">10</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <required type="int">0</required> - <title>Quantité initiale</title> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="not_float">You did not enter a floating point number.</message> - </messages> - </field> - <field><id>my_remaining_quantity</id> <type>FloatField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">10</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <required type="int">0</required> - <title>Quantité restante</title> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="not_float">You did not enter a floating point number.</message> - </messages> - </field> - <field><id>my_quantity_unit</id> <type>ListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <extra_item></extra_item> - <first_item type="int">0</first_item> - <hidden type="int">0</hidden> - <items type="list">[]</items> - <required type="int">0</required> - <size type="int">1</size> - <title>Unité</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <items>here/getQuantityUnitRangeItemList</items> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>center</title> - <fields> - - <field><id>my_comment</id> <type>TextAreaField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <height type="int">3</height> - <hidden type="int">0</hidden> - <max_length></max_length> - <max_linelength></max_linelength> - <max_lines></max_lines> - <required type="int">0</required> - <title>Commentaires</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - <width type="int">80</width> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_many_lines">You entered too many lines.</message> - <message name="line_too_long">A line was too long.</message> - <message name="too_long">You entered too many characters.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>bottom</title> - <fields> - - <field><id>listbox</id> <type>ListBox</type> - <values> - <all_columns type="list">[('id', 'N\xb0 pi\xe8ce'), ('resource_title', 'Tissu'), ('getColoris', 'Coloris'), ('getRemainingQuantity', 'Quantit\xe9'), ('default_source_title', 'Fournisseur'), ('source_reference', 'R\xe9f\xe9rence Fournisseur'), ('bain_teinture', 'Bain de teinture'), ('getLaizeUtile', 'Laize utile')]</all_columns> - <all_editable_columns type="list">[]</all_editable_columns> - <alternate_name></alternate_name> - <columns type="list">[('id', 'N\xb0 pi\xe8ce'), ('resource_title', 'Tissu'), ('getColoris', 'Coloris'), ('getRemainingQuantity', 'Quantit\xe9'), ('default_source_title', 'Fournisseur'), ('source_reference', 'R\xe9f\xe9rence Fournisseur'), ('bain_teinture', 'Bain de teinture'), ('getLaizeUtile', 'Laize utile')]</columns> - <css_class></css_class> - <default></default> - <default_params type="list">[('id', "''")]</default_params> - <description></description> - <domain_root_list type="list">[]</domain_root_list> - <domain_tree type="int">0</domain_tree> - <editable type="int">1</editable> - <editable_columns type="list">[]</editable_columns> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <global_attributes type="list">[]</global_attributes> - <hidden type="int">0</hidden> - <lines type="int">10</lines> - <list_action>list</list_action> - <list_method type="method">searchFolder</list_method> - <meta_types type="list">[]</meta_types> - <portal_types type="list">[('Piece Tissu', 'Piece Tissu')]</portal_types> - <report_root_list type="list">[]</report_root_list> - <report_tree type="int">0</report_tree> - <search type="int">0</search> - <search_columns></search_columns> - <select type="int">0</select> - <selection_name>sub_items_selection</selection_name> - <sort type="list">[]</sort> - <sort_columns></sort_columns> - <stat_method></stat_method> - <title>Sous-pièces</title> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - </messages> - </field> - </fields> - </group> - </groups> -</form> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_mrp/movement_MP_list.form b/product/Coramy/skins/coramy_mrp/movement_MP_list.form deleted file mode 100755 index d6dc7c71c2..0000000000 --- a/product/Coramy/skins/coramy_mrp/movement_MP_list.form +++ /dev/null @@ -1,63 +0,0 @@ -<?xml version="1.0"?> - -<form> - <title>Liste de mouvements MP</title> - <row_length>4</row_length> - <name>movement_MP_list</name> - <pt>form_list</pt> - <action></action> - <method>POST</method> - <enctype></enctype> - <encoding>UTF-8</encoding> - <stored_encoding>ISO-8859-1</stored_encoding> - <unicode_mode>false</unicode_mode> - <groups> - <group> - <title>Default</title> - <fields> - - <field><id>listbox</id> <type>ListBox</type> - <values> - <all_columns type="list">[('id', 'Mouvement'), ('Description', 'Description'), ('default_destination_section_title', 'Soci\xe9t\xe9'), ('default_destination', 'Magasin'), ('start_date', 'Date du mouvement')]</all_columns> - <all_editable_columns type="list">[]</all_editable_columns> - <alternate_name></alternate_name> - <columns type="list">[('id', 'Mouvement'), ('Description', 'Description'), ('default_destination_section_title', 'Soci\xe9t\xe9'), ('default_destination', 'Magasin'), ('start_date', 'Date du mouvement')]</columns> - <css_class></css_class> - <default></default> - <default_params type="list">[]</default_params> - <description></description> - <domain_root_list type="list">[]</domain_root_list> - <domain_tree type="int">0</domain_tree> - <editable type="int">1</editable> - <editable_columns type="list">[]</editable_columns> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <global_attributes type="list">[]</global_attributes> - <hidden type="int">0</hidden> - <lines type="int">30</lines> - <list_action>list</list_action> - <list_method type="method">searchFolder</list_method> - <meta_types type="list">[]</meta_types> - <portal_types type="list">[('Movement MP', 'Movement MP')]</portal_types> - <report_root_list type="list">[]</report_root_list> - <report_tree type="int">0</report_tree> - <search type="int">1</search> - <search_columns></search_columns> - <select type="int">1</select> - <selection_name>inventory_selection</selection_name> - <sort type="list">[('id', 'id')]</sort> - <sort_columns></sort_columns> - <stat_method></stat_method> - <title>Mouvements</title> - </values> - <tales> - <list_method>python:here.getPortalObject().portal_skins.local_list_method[here.REQUEST.list_method_id]</list_method> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - </messages> - </field> - </fields> - </group> - </groups> -</form> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_mrp/movement_MP_view.form b/product/Coramy/skins/coramy_mrp/movement_MP_view.form deleted file mode 100755 index a63efd899e..0000000000 --- a/product/Coramy/skins/coramy_mrp/movement_MP_view.form +++ /dev/null @@ -1,402 +0,0 @@ -<?xml version="1.0"?> - -<form> - <title>Mouvement MP</title> - <row_length>4</row_length> - <name>movement_MP_view</name> - <pt>form_view</pt> - <action>base_edit</action> - <method>POST</method> - <enctype></enctype> - <encoding>UTF-8</encoding> - <stored_encoding>ISO-8859-1</stored_encoding> - <unicode_mode>false</unicode_mode> - <groups> - <group> - <title>left</title> - <fields> - - <field><id>my_id</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">10</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <max_length></max_length> - <required type="int">1</required> - <title>Mouvement n°</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - <field><id>my_start_date</id> <type>DateTimeField</type> - <values> - <allow_empty_time type="int">0</allow_empty_time> - <alternate_name></alternate_name> - <ampm_time_style type="int">0</ampm_time_style> - <css_class></css_class> - <date_only type="int">0</date_only> - <date_separator>/</date_separator> - <default_now type="int">0</default_now> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <hidden type="int">0</hidden> - <input_order>dmy</input_order> - <input_style>text</input_style> - <required type="int">1</required> - <time_separator>:</time_separator> - <title>Date de mouvement</title> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="not_datetime">You did not enter a valid date and time.</message> - <message name="datetime_out_of_range">The date and time you entered were out of range.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>right</title> - <fields> - - <field><id>my_destination_section</id> <type>ListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <extra_item></extra_item> - <first_item type="int">0</first_item> - <hidden type="int">0</hidden> - <items type="list">[]</items> - <required type="int">1</required> - <size type="int">1</size> - <title>Société</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <items>python:here.portal_categories.group.Coramy.getCategoryChildIdItemList(base=1,display_none_category=1)</items> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - <field><id>my_destination</id> <type>ListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <extra_item></extra_item> - <first_item type="int">0</first_item> - <hidden type="int">0</hidden> - <items type="list">[]</items> - <required type="int">1</required> - <size type="int">1</size> - <title>Magasin</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <items>python:here.portal_categories.site.Stock_MP.getCategoryChildIdItemList(base=1,display_none_category=1)</items> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>center</title> - <fields> - - <field><id>my_description</id> <type>TextAreaField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <height type="int">4</height> - <hidden type="int">0</hidden> - <max_length></max_length> - <max_linelength></max_linelength> - <max_lines></max_lines> - <required type="int">0</required> - <title>Description</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - <width type="int">80</width> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_many_lines">You entered too many lines.</message> - <message name="line_too_long">A line was too long.</message> - <message name="too_long">You entered too many characters.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>bottom</title> - <fields> - - <field><id>listbox</id> <type>ListBox</type> - <values> - <all_columns type="list">[]</all_columns> - <all_editable_columns type="list">[]</all_editable_columns> - <alternate_name></alternate_name> - <columns type="list">[('resource_title', 'Produit'), ('variation_text', 'Variantes'), ('getPurchaseDeliveryCellSourceReference', 'R\xe9f. fournisseur'), ('production_quantity', 'Entr\xe9e'), ('consumption_quantity', 'Sortie'), ('quantity_unit', 'Unit\xe9'), ('produced_item_id_list', 'Lots entr\xe9s'), ('consumed_item_id_list', 'Lots sortis')]</columns> - <css_class></css_class> - <default></default> - <default_params type="list">[]</default_params> - <description></description> - <domain_root_list type="list">[]</domain_root_list> - <domain_tree type="int">0</domain_tree> - <editable type="int">1</editable> - <editable_columns type="list">[('quantity_unit', 'quantity_unit'), ('production_quantity', 'production_quantity'), ('consumption_quantity', 'consumption_quantity'), ('produced_item_id_list', 'produced_item_id_list'), ('consumed_item_id_list', 'consumed_item_id_list')]</editable_columns> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <global_attributes type="list">[]</global_attributes> - <hidden type="int">0</hidden> - <lines type="int">100</lines> - <list_action>folder_contents</list_action> - <list_method type="method">Delivery_zGetCellList</list_method> - <meta_types type="list">[]</meta_types> - <portal_types type="list">[]</portal_types> - <report_root_list type="list">[]</report_root_list> - <report_tree type="int">0</report_tree> - <search type="int">0</search> - <search_columns></search_columns> - <select type="int">0</select> - <selection_name>movement_cells_selection</selection_name> - <sort type="list">[('variation_text', 'variation_text')]</sort> - <sort_columns></sort_columns> - <stat_method></stat_method> - <title>Lignes de mouvement</title> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>hidden</title> - <fields> - - <field><id>listbox_price</id> <type>FloatField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">10</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <required type="int">0</required> - <title>Price</title> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="not_float">You did not enter a floating point number.</message> - </messages> - </field> - <field><id>listbox_quantity_unit</id> <type>ListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <extra_item></extra_item> - <first_item type="int">0</first_item> - <hidden type="int">0</hidden> - <items type="list">[]</items> - <required type="int">0</required> - <size type="int">1</size> - <title>Unité</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <items>here/portal_categories/quantity_unit/getFormItemList</items> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - <field><id>listbox_consumption_quantity</id> <type>FloatField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">10</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <required type="int">0</required> - <title>Consommation</title> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="not_float">You did not enter a floating point number.</message> - </messages> - </field> - <field><id>listbox_production_quantity</id> <type>FloatField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">10</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <required type="int">0</required> - <title>Production</title> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="not_float">You did not enter a floating point number.</message> - </messages> - </field> - <field><id>listbox_produced_item_id_list</id> <type>LinesField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default type="list">[]</default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <height type="int">2</height> - <hidden type="int">0</hidden> - <max_length></max_length> - <max_linelength></max_linelength> - <max_lines></max_lines> - <required type="int">0</required> - <title>Lots entrés</title> - <unicode type="int">0</unicode> - <view_separator><br /> -</view_separator> - <whitespace_preserve type="int">0</whitespace_preserve> - <width type="int">10</width> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_many_lines">You entered too many lines.</message> - <message name="line_too_long">A line was too long.</message> - <message name="too_long">You entered too many characters.</message> - </messages> - </field> - <field><id>listbox_consumed_item_id_list</id> <type>LinesField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default type="list">[]</default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <height type="int">2</height> - <hidden type="int">0</hidden> - <max_length></max_length> - <max_linelength></max_linelength> - <max_lines></max_lines> - <required type="int">0</required> - <title>Lots sortis</title> - <unicode type="int">0</unicode> - <view_separator><br /> -</view_separator> - <whitespace_preserve type="int">0</whitespace_preserve> - <width type="int">10</width> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_many_lines">You entered too many lines.</message> - <message name="line_too_long">A line was too long.</message> - <message name="too_long">You entered too many characters.</message> - </messages> - </field> - </fields> - </group> - </groups> -</form> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_mrp/movement_PF_list.form b/product/Coramy/skins/coramy_mrp/movement_PF_list.form deleted file mode 100755 index d5f9ff38e7..0000000000 --- a/product/Coramy/skins/coramy_mrp/movement_PF_list.form +++ /dev/null @@ -1,62 +0,0 @@ -<?xml version="1.0"?> - -<form> - <title>Liste de mouvements PF</title> - <row_length>4</row_length> - <name>movement_PF_list</name> - <pt>form_list</pt> - <action></action> - <method>POST</method> - <enctype></enctype> - <encoding>UTF-8</encoding> - <stored_encoding>ISO-8859-1</stored_encoding> - <unicode_mode>false</unicode_mode> - <groups> - <group> - <title>Default</title> - <fields> - - <field><id>listbox</id> <type>ListBox</type> - <values> - <all_columns type="list">[('id', 'Mouvement'), ('Description', 'Description'), ('default_destination_section_title', 'Soci\xe9t\xe9'), ('default_destination', 'Magasin'), ('start_date', 'Date du mouvement')]</all_columns> - <all_editable_columns type="list">[]</all_editable_columns> - <alternate_name></alternate_name> - <columns type="list">[('id', 'Mouvement'), ('Description', 'Description'), ('default_destination_section_title', 'Soci\xe9t\xe9'), ('default_destination', 'Magasin'), ('start_date', 'Date du mouvement')]</columns> - <css_class></css_class> - <default></default> - <default_params type="list">[]</default_params> - <description></description> - <domain_root_list type="list">[]</domain_root_list> - <domain_tree type="int">0</domain_tree> - <editable type="int">1</editable> - <editable_columns type="list">[]</editable_columns> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <global_attributes type="list">[]</global_attributes> - <hidden type="int">0</hidden> - <lines type="int">30</lines> - <list_action>list</list_action> - <list_method type="method">searchFolder</list_method> - <meta_types type="list">[]</meta_types> - <portal_types type="list">[('Movement PF', 'Movement PF')]</portal_types> - <report_root_list type="list">[]</report_root_list> - <report_tree type="int">0</report_tree> - <search type="int">1</search> - <search_columns></search_columns> - <select type="int">1</select> - <selection_name>inventory_selection</selection_name> - <sort type="list">[('id', 'id')]</sort> - <sort_columns></sort_columns> - <stat_method></stat_method> - <title>Mouvements</title> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - </messages> - </field> - </fields> - </group> - </groups> -</form> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_mrp/movement_PF_view.form b/product/Coramy/skins/coramy_mrp/movement_PF_view.form deleted file mode 100755 index 01f49d0aed..0000000000 --- a/product/Coramy/skins/coramy_mrp/movement_PF_view.form +++ /dev/null @@ -1,402 +0,0 @@ -<?xml version="1.0"?> - -<form> - <title>Mouvement PF</title> - <row_length>4</row_length> - <name>movement_PF_view</name> - <pt>form_view</pt> - <action>base_edit</action> - <method>POST</method> - <enctype></enctype> - <encoding>UTF-8</encoding> - <stored_encoding>ISO-8859-1</stored_encoding> - <unicode_mode>false</unicode_mode> - <groups> - <group> - <title>left</title> - <fields> - - <field><id>my_id</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">10</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <max_length></max_length> - <required type="int">1</required> - <title>Mouvement n°</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - <field><id>my_start_date</id> <type>DateTimeField</type> - <values> - <allow_empty_time type="int">0</allow_empty_time> - <alternate_name></alternate_name> - <ampm_time_style type="int">0</ampm_time_style> - <css_class></css_class> - <date_only type="int">0</date_only> - <date_separator>/</date_separator> - <default_now type="int">0</default_now> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <hidden type="int">0</hidden> - <input_order>dmy</input_order> - <input_style>text</input_style> - <required type="int">1</required> - <time_separator>:</time_separator> - <title>Date de mouvement</title> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="not_datetime">You did not enter a valid date and time.</message> - <message name="datetime_out_of_range">The date and time you entered were out of range.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>right</title> - <fields> - - <field><id>my_destination_section</id> <type>ListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <extra_item></extra_item> - <first_item type="int">0</first_item> - <hidden type="int">0</hidden> - <items type="list">[]</items> - <required type="int">1</required> - <size type="int">1</size> - <title>Société</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <items>python:here.portal_categories.group.Coramy.getCategoryChildIdItemList(base=1,display_none_category=1)</items> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - <field><id>my_destination</id> <type>ListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <extra_item></extra_item> - <first_item type="int">0</first_item> - <hidden type="int">0</hidden> - <items type="list">[]</items> - <required type="int">1</required> - <size type="int">1</size> - <title>Magasin</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <items>python:here.portal_categories.site.Stock_PF.getCategoryChildIdItemList(base=1,display_none_category=1)</items> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>center</title> - <fields> - - <field><id>my_description</id> <type>TextAreaField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <height type="int">4</height> - <hidden type="int">0</hidden> - <max_length></max_length> - <max_linelength></max_linelength> - <max_lines></max_lines> - <required type="int">0</required> - <title>Description</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - <width type="int">80</width> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_many_lines">You entered too many lines.</message> - <message name="line_too_long">A line was too long.</message> - <message name="too_long">You entered too many characters.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>bottom</title> - <fields> - - <field><id>listbox</id> <type>ListBox</type> - <values> - <all_columns type="list">[]</all_columns> - <all_editable_columns type="list">[]</all_editable_columns> - <alternate_name></alternate_name> - <columns type="list">[('resource_title', 'Produit'), ('variation_text', 'Variantes'), ('getPurchaseDeliveryCellSourceReference', 'R\xe9f. fournisseur'), ('production_quantity', 'Entr\xe9e'), ('consumption_quantity', 'Sortie'), ('quantity_unit', 'Unit\xe9'), ('produced_item_id_list', 'Lots entr\xe9s'), ('consumed_item_id_list', 'Lots sortis')]</columns> - <css_class></css_class> - <default></default> - <default_params type="list">[]</default_params> - <description></description> - <domain_root_list type="list">[]</domain_root_list> - <domain_tree type="int">0</domain_tree> - <editable type="int">1</editable> - <editable_columns type="list">[('quantity_unit', 'quantity_unit'), ('production_quantity', 'production_quantity'), ('consumption_quantity', 'consumption_quantity'), ('produced_item_id_list', 'produced_item_id_list'), ('consumed_item_id_list', 'consumed_item_id_list')]</editable_columns> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <global_attributes type="list">[]</global_attributes> - <hidden type="int">0</hidden> - <lines type="int">100</lines> - <list_action>folder_contents</list_action> - <list_method type="method">Delivery_zGetCellList</list_method> - <meta_types type="list">[]</meta_types> - <portal_types type="list">[]</portal_types> - <report_root_list type="list">[]</report_root_list> - <report_tree type="int">0</report_tree> - <search type="int">0</search> - <search_columns></search_columns> - <select type="int">0</select> - <selection_name>movement_cells_selection</selection_name> - <sort type="list">[('variation_text', 'variation_text')]</sort> - <sort_columns></sort_columns> - <stat_method></stat_method> - <title>Lignes de mouvement</title> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>hidden</title> - <fields> - - <field><id>listbox_price</id> <type>FloatField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">10</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <required type="int">0</required> - <title>Price</title> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="not_float">You did not enter a floating point number.</message> - </messages> - </field> - <field><id>listbox_quantity_unit</id> <type>ListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <extra_item></extra_item> - <first_item type="int">0</first_item> - <hidden type="int">0</hidden> - <items type="list">[]</items> - <required type="int">0</required> - <size type="int">1</size> - <title>Unité</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <items>here/portal_categories/quantity_unit/getFormItemList</items> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - <field><id>listbox_consumption_quantity</id> <type>FloatField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">10</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <required type="int">0</required> - <title>Consommation</title> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="not_float">You did not enter a floating point number.</message> - </messages> - </field> - <field><id>listbox_production_quantity</id> <type>FloatField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">10</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <required type="int">0</required> - <title>Production</title> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="not_float">You did not enter a floating point number.</message> - </messages> - </field> - <field><id>listbox_produced_item_id_list</id> <type>LinesField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default type="list">[]</default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <height type="int">2</height> - <hidden type="int">0</hidden> - <max_length></max_length> - <max_linelength></max_linelength> - <max_lines></max_lines> - <required type="int">0</required> - <title>Lots entrés</title> - <unicode type="int">0</unicode> - <view_separator><br /> -</view_separator> - <whitespace_preserve type="int">0</whitespace_preserve> - <width type="int">10</width> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_many_lines">You entered too many lines.</message> - <message name="line_too_long">A line was too long.</message> - <message name="too_long">You entered too many characters.</message> - </messages> - </field> - <field><id>listbox_consumed_item_id_list</id> <type>LinesField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default type="list">[]</default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <height type="int">2</height> - <hidden type="int">0</hidden> - <max_length></max_length> - <max_linelength></max_linelength> - <max_lines></max_lines> - <required type="int">0</required> - <title>Lots sortis</title> - <unicode type="int">0</unicode> - <view_separator><br /> -</view_separator> - <whitespace_preserve type="int">0</whitespace_preserve> - <width type="int">10</width> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_many_lines">You entered too many lines.</message> - <message name="line_too_long">A line was too long.</message> - <message name="too_long">You entered too many characters.</message> - </messages> - </field> - </fields> - </group> - </groups> -</form> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_mrp/movement_aggregated_view.form b/product/Coramy/skins/coramy_mrp/movement_aggregated_view.form deleted file mode 100755 index 293902cb79..0000000000 --- a/product/Coramy/skins/coramy_mrp/movement_aggregated_view.form +++ /dev/null @@ -1,230 +0,0 @@ -<?xml version="1.0"?> - -<form> - <title>Mouvement MP</title> - <row_length>4</row_length> - <name>movement_aggregated_view</name> - <pt>form_view</pt> - <action>base_edit</action> - <method>POST</method> - <enctype></enctype> - <encoding>UTF-8</encoding> - <stored_encoding>ISO-8859-1</stored_encoding> - <unicode_mode>false</unicode_mode> - <groups> - <group> - <title>left</title> - <fields> - - <field><id>my_id</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">10</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <max_length></max_length> - <required type="int">1</required> - <title>Mouvement n°</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - <field><id>my_start_date</id> <type>DateTimeField</type> - <values> - <allow_empty_time type="int">0</allow_empty_time> - <alternate_name></alternate_name> - <ampm_time_style type="int">0</ampm_time_style> - <css_class></css_class> - <date_only type="int">1</date_only> - <date_separator>/</date_separator> - <default_now type="int">0</default_now> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <hidden type="int">0</hidden> - <input_order>dmy</input_order> - <input_style>text</input_style> - <required type="int">1</required> - <time_separator>:</time_separator> - <title>Date d'inventaire</title> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="not_datetime">You did not enter a valid date and time.</message> - <message name="datetime_out_of_range">The date and time you entered were out of range.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>right</title> - <fields> - - <field><id>my_destination_section</id> <type>ListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <extra_item></extra_item> - <first_item type="int">0</first_item> - <hidden type="int">0</hidden> - <items type="list">[]</items> - <required type="int">1</required> - <size type="int">1</size> - <title>Société</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <items>python:here.portal_categories.group.Coramy.getCategoryChildIdItemList(base=1,display_none_category=1)</items> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - <field><id>my_destination</id> <type>ListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <extra_item></extra_item> - <first_item type="int">0</first_item> - <hidden type="int">0</hidden> - <items type="list">[]</items> - <required type="int">1</required> - <size type="int">1</size> - <title>Magasin</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <items>python:here.portal_categories.site.Stock_MP.getCategoryChildIdItemList(base=1,display_none_category=1)</items> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>center</title> - <fields> - - </fields> - </group> - <group> - <title>bottom</title> - <fields> - - <field><id>listbox</id> <type>ListBox</type> - <values> - <all_columns type="list">[]</all_columns> - <all_editable_columns type="list">[]</all_editable_columns> - <alternate_name></alternate_name> - <columns type="list">[('id', 'Ligne n\xb0'), ('description', 'Description'), ('resource_title', 'Produit'), ('total_quantity', 'Quantit\xe9'), ('total_price', 'Montant'), ('quantity_unit', 'Unit\xe9')]</columns> - <css_class></css_class> - <default></default> - <default_params type="list">[]</default_params> - <description></description> - <domain_root_list type="list">[]</domain_root_list> - <domain_tree type="int">0</domain_tree> - <editable type="int">1</editable> - <editable_columns type="list">[('quantity_unit', 'quantity_unit')]</editable_columns> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <global_attributes type="list">[]</global_attributes> - <hidden type="int">0</hidden> - <lines type="int">100</lines> - <list_action>folder_contents</list_action> - <list_method type="method">searchFolder</list_method> - <meta_types type="list">[]</meta_types> - <portal_types type="list">[]</portal_types> - <report_root_list type="list">[]</report_root_list> - <report_tree type="int">0</report_tree> - <search type="int">0</search> - <search_columns></search_columns> - <select type="int">0</select> - <selection_name>inventory_lines_selection</selection_name> - <sort type="list">[('id', 'id')]</sort> - <sort_columns></sort_columns> - <stat_method></stat_method> - <title>Lignes de mouvement</title> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>hidden</title> - <fields> - - <field><id>listbox_quantity_unit</id> <type>ListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <extra_item></extra_item> - <first_item type="int">0</first_item> - <hidden type="int">0</hidden> - <items type="list">[]</items> - <required type="int">0</required> - <size type="int">1</size> - <title>Unité</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <items>here/portal_categories/quantity_unit/getFormItemList</items> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - </fields> - </group> - </groups> -</form> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_mrp/movement_line_consumption_quantity_view.form b/product/Coramy/skins/coramy_mrp/movement_line_consumption_quantity_view.form deleted file mode 100755 index edf6942773..0000000000 --- a/product/Coramy/skins/coramy_mrp/movement_line_consumption_quantity_view.form +++ /dev/null @@ -1,347 +0,0 @@ -<?xml version="1.0"?> - -<form> - <title>Ligne de mouvement</title> - <row_length>4</row_length> - <name>movement_line_view</name> - <pt>form_view</pt> - <action>base_edit</action> - <method>POST</method> - <enctype></enctype> - <encoding>UTF-8</encoding> - <stored_encoding>ISO-8859-1</stored_encoding> - <unicode_mode>false</unicode_mode> - <groups> - <group> - <title>left</title> - <fields> - - <field><id>my_id</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">10</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <max_length></max_length> - <required type="int">1</required> - <title>Ligne n°</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>right</title> - <fields> - - </fields> - </group> - <group> - <title>center</title> - <fields> - - </fields> - </group> - <group> - <title>bottom</title> - <fields> - - <field><id>domain_base_category_list</id> <type>LinesField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default type="list">[]</default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <height type="int">5</height> - <hidden type="int">1</hidden> - <max_length></max_length> - <max_linelength></max_linelength> - <max_lines></max_lines> - <required type="int">0</required> - <title>Valid Domain</title> - <unicode type="int">0</unicode> - <view_separator><br /> -</view_separator> - <whitespace_preserve type="int">0</whitespace_preserve> - <width type="int">40</width> - </values> - <tales> - <default>here/getVariationBaseCategoryList</default> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_many_lines">You entered too many lines.</message> - <message name="line_too_long">A line was too long.</message> - <message name="too_long">You entered too many characters.</message> - </messages> - </field> - <field><id>mapped_value_property_list</id> <type>LinesField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default type="list">['quantity', 'price']</default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <height type="int">5</height> - <hidden type="int">1</hidden> - <max_length></max_length> - <max_linelength></max_linelength> - <max_lines></max_lines> - <required type="int">0</required> - <title>Modified categories</title> - <unicode type="int">0</unicode> - <view_separator><br /> -</view_separator> - <whitespace_preserve type="int">0</whitespace_preserve> - <width type="int">40</width> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_many_lines">You entered too many lines.</message> - <message name="line_too_long">A line was too long.</message> - <message name="too_long">You entered too many characters.</message> - </messages> - </field> - <field><id>matrixbox</id> <type>MatrixBox</type> - <values> - <all_editable_attributes type="list">[('production_quantity', 'production_quantity'), ('consumption_quantity', 'consumption_quantity'), ('price', 'price'), ('predicate_value', 'predicate_value'), ('variation_category_list', 'variation_category_list')]</all_editable_attributes> - <alternate_name></alternate_name> - <cell_base_id>movement</cell_base_id> - <cell_range type="list">[]</cell_range> - <columns type="list">[('None', 'None')]</columns> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <editable_attributes type="list">[('production_quantity', 'production_quantity'), ('consumption_quantity', 'consumption_quantity'), ('price', 'price'), ('predicate_value', 'predicate_value'), ('variation_category_list', 'variation_category_list')]</editable_attributes> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <getter_method></getter_method> - <global_attributes type="list">[('domain_base_category_list', 'domain_base_category_list'), ('mapped_value_property_list', 'mapped_value_property_list'), ('predicate_operator', 'predicate_operator')]</global_attributes> - <hidden type="int">0</hidden> - <lines type="list">[('None', 'None')]</lines> - <setter_method></setter_method> - <tabs type="list">[('None', 'None')]</tabs> - <title>matrixbox</title> - <update_cell_range type="int">1</update_cell_range> - </values> - <tales> - <columns>python:here.order_line_matrix_item_list(base_category_list = ('taille',), base=1)</columns> - <lines>python:here.order_line_matrix_item_list(base_category_list = ('coloris','variante'), base=1)</lines> - <tabs>python:here.order_line_matrix_item_list(base_category_list = ('taille','coloris','variante'), base=1, include=0)</tabs> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - </messages> - </field> - <field><id>predicate_operator</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default>SUPERSET_OF</default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">1</hidden> - <max_length></max_length> - <required type="int">0</required> - <title>Operator</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>hidden</title> - <fields> - - <field><id>matrixbox_predicate_value</id> <type>LinesField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default type="list">[]</default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <height type="int">5</height> - <hidden type="int">1</hidden> - <max_length></max_length> - <max_linelength></max_linelength> - <max_lines></max_lines> - <required type="int">0</required> - <title>matrixbox_predicate_value</title> - <unicode type="int">0</unicode> - <view_separator><br /> -</view_separator> - <whitespace_preserve type="int">0</whitespace_preserve> - <width type="int">40</width> - </values> - <tales> - <default>python:cell_index</default> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_many_lines">You entered too many lines.</message> - <message name="line_too_long">A line was too long.</message> - <message name="too_long">You entered too many characters.</message> - </messages> - </field> - <field><id>matrixbox_variation_category_list</id> <type>LinesField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default type="list">[]</default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <height type="int">5</height> - <hidden type="int">1</hidden> - <max_length></max_length> - <max_linelength></max_linelength> - <max_lines></max_lines> - <required type="int">0</required> - <title>matrixbox_predicate_value</title> - <unicode type="int">0</unicode> - <view_separator><br /> -</view_separator> - <whitespace_preserve type="int">0</whitespace_preserve> - <width type="int">40</width> - </values> - <tales> - <default>python:cell_index</default> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_many_lines">You entered too many lines.</message> - <message name="line_too_long">A line was too long.</message> - <message name="too_long">You entered too many characters.</message> - </messages> - </field> - <field><id>matrixbox_price</id> <type>FloatField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">10</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">1</hidden> - <required type="int">0</required> - <title>matrixbox_inventory</title> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <default>python:cell.getProperty('price')</default> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="not_float">You did not enter a floating point number.</message> - </messages> - </field> - <field><id>matrixbox_production_quantity</id> <type>FloatField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">10</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">1</hidden> - <required type="int">0</required> - <title>matrixbox_production_quantity</title> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <default>python:cell.getProperty('production_quantity')</default> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="not_float">You did not enter a floating point number.</message> - </messages> - </field> - <field><id>matrixbox_consumption_quantity</id> <type>FloatField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">10</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <required type="int">0</required> - <title>matrixbox_consumption_quantity</title> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <default>python:cell.getProperty('consumption_quantity')</default> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="not_float">You did not enter a floating point number.</message> - </messages> - </field> - </fields> - </group> - </groups> -</form> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_mrp/movement_line_price_view.form b/product/Coramy/skins/coramy_mrp/movement_line_price_view.form deleted file mode 100755 index b1e0154d26..0000000000 --- a/product/Coramy/skins/coramy_mrp/movement_line_price_view.form +++ /dev/null @@ -1,347 +0,0 @@ -<?xml version="1.0"?> - -<form> - <title>Ligne de mouvement</title> - <row_length>4</row_length> - <name>movement_line_view</name> - <pt>form_view</pt> - <action>base_edit</action> - <method>POST</method> - <enctype></enctype> - <encoding>UTF-8</encoding> - <stored_encoding>ISO-8859-1</stored_encoding> - <unicode_mode>false</unicode_mode> - <groups> - <group> - <title>left</title> - <fields> - - <field><id>my_id</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">10</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <max_length></max_length> - <required type="int">1</required> - <title>Ligne n°</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>right</title> - <fields> - - </fields> - </group> - <group> - <title>center</title> - <fields> - - </fields> - </group> - <group> - <title>bottom</title> - <fields> - - <field><id>domain_base_category_list</id> <type>LinesField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default type="list">[]</default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <height type="int">5</height> - <hidden type="int">1</hidden> - <max_length></max_length> - <max_linelength></max_linelength> - <max_lines></max_lines> - <required type="int">0</required> - <title>Valid Domain</title> - <unicode type="int">0</unicode> - <view_separator><br /> -</view_separator> - <whitespace_preserve type="int">0</whitespace_preserve> - <width type="int">40</width> - </values> - <tales> - <default>here/getVariationBaseCategoryList</default> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_many_lines">You entered too many lines.</message> - <message name="line_too_long">A line was too long.</message> - <message name="too_long">You entered too many characters.</message> - </messages> - </field> - <field><id>mapped_value_property_list</id> <type>LinesField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default type="list">['quantity', 'price']</default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <height type="int">5</height> - <hidden type="int">1</hidden> - <max_length></max_length> - <max_linelength></max_linelength> - <max_lines></max_lines> - <required type="int">0</required> - <title>Modified categories</title> - <unicode type="int">0</unicode> - <view_separator><br /> -</view_separator> - <whitespace_preserve type="int">0</whitespace_preserve> - <width type="int">40</width> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_many_lines">You entered too many lines.</message> - <message name="line_too_long">A line was too long.</message> - <message name="too_long">You entered too many characters.</message> - </messages> - </field> - <field><id>matrixbox</id> <type>MatrixBox</type> - <values> - <all_editable_attributes type="list">[('production_quantity', 'production_quantity'), ('consumption_quantity', 'consumption_quantity'), ('price', 'price'), ('predicate_value', 'predicate_value'), ('variation_category_list', 'variation_category_list')]</all_editable_attributes> - <alternate_name></alternate_name> - <cell_base_id>movement</cell_base_id> - <cell_range type="list">[]</cell_range> - <columns type="list">[('None', 'None')]</columns> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <editable_attributes type="list">[('production_quantity', 'production_quantity'), ('consumption_quantity', 'consumption_quantity'), ('price', 'price'), ('predicate_value', 'predicate_value'), ('variation_category_list', 'variation_category_list')]</editable_attributes> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <getter_method></getter_method> - <global_attributes type="list">[('domain_base_category_list', 'domain_base_category_list'), ('mapped_value_property_list', 'mapped_value_property_list'), ('predicate_operator', 'predicate_operator')]</global_attributes> - <hidden type="int">0</hidden> - <lines type="list">[('None', 'None')]</lines> - <setter_method></setter_method> - <tabs type="list">[('None', 'None')]</tabs> - <title>matrixbox</title> - <update_cell_range type="int">1</update_cell_range> - </values> - <tales> - <columns>python:here.order_line_matrix_item_list(base_category_list = ('taille',), base=1)</columns> - <lines>python:here.order_line_matrix_item_list(base_category_list = ('coloris','variante'), base=1)</lines> - <tabs>python:here.order_line_matrix_item_list(base_category_list = ('taille','coloris','variante'), base=1, include=0)</tabs> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - </messages> - </field> - <field><id>predicate_operator</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default>SUPERSET_OF</default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">1</hidden> - <max_length></max_length> - <required type="int">0</required> - <title>Operator</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>hidden</title> - <fields> - - <field><id>matrixbox_predicate_value</id> <type>LinesField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default type="list">[]</default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <height type="int">5</height> - <hidden type="int">1</hidden> - <max_length></max_length> - <max_linelength></max_linelength> - <max_lines></max_lines> - <required type="int">0</required> - <title>matrixbox_predicate_value</title> - <unicode type="int">0</unicode> - <view_separator><br /> -</view_separator> - <whitespace_preserve type="int">0</whitespace_preserve> - <width type="int">40</width> - </values> - <tales> - <default>python:cell_index</default> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_many_lines">You entered too many lines.</message> - <message name="line_too_long">A line was too long.</message> - <message name="too_long">You entered too many characters.</message> - </messages> - </field> - <field><id>matrixbox_variation_category_list</id> <type>LinesField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default type="list">[]</default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <height type="int">5</height> - <hidden type="int">1</hidden> - <max_length></max_length> - <max_linelength></max_linelength> - <max_lines></max_lines> - <required type="int">0</required> - <title>matrixbox_predicate_value</title> - <unicode type="int">0</unicode> - <view_separator><br /> -</view_separator> - <whitespace_preserve type="int">0</whitespace_preserve> - <width type="int">40</width> - </values> - <tales> - <default>python:cell_index</default> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_many_lines">You entered too many lines.</message> - <message name="line_too_long">A line was too long.</message> - <message name="too_long">You entered too many characters.</message> - </messages> - </field> - <field><id>matrixbox_price</id> <type>FloatField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">10</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <required type="int">0</required> - <title>matrixbox_inventory</title> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <default>python:cell.getProperty('price')</default> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="not_float">You did not enter a floating point number.</message> - </messages> - </field> - <field><id>matrixbox_production_quantity</id> <type>FloatField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">10</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">1</hidden> - <required type="int">0</required> - <title>matrixbox_production_quantity</title> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <default>python:cell.getProperty('production_quantity')</default> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="not_float">You did not enter a floating point number.</message> - </messages> - </field> - <field><id>matrixbox_consumption_quantity</id> <type>FloatField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">10</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">1</hidden> - <required type="int">0</required> - <title>matrixbox_consumption_quantity</title> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <default>python:cell.getProperty('consumption_quantity')</default> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="not_float">You did not enter a floating point number.</message> - </messages> - </field> - </fields> - </group> - </groups> -</form> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_mrp/movement_line_production_quantity_view.form b/product/Coramy/skins/coramy_mrp/movement_line_production_quantity_view.form deleted file mode 100755 index aabc952540..0000000000 --- a/product/Coramy/skins/coramy_mrp/movement_line_production_quantity_view.form +++ /dev/null @@ -1,347 +0,0 @@ -<?xml version="1.0"?> - -<form> - <title>Ligne de mouvement</title> - <row_length>4</row_length> - <name>movement_line_view</name> - <pt>form_view</pt> - <action>base_edit</action> - <method>POST</method> - <enctype></enctype> - <encoding>UTF-8</encoding> - <stored_encoding>ISO-8859-1</stored_encoding> - <unicode_mode>false</unicode_mode> - <groups> - <group> - <title>left</title> - <fields> - - <field><id>my_id</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">10</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <max_length></max_length> - <required type="int">1</required> - <title>Ligne n°</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>right</title> - <fields> - - </fields> - </group> - <group> - <title>center</title> - <fields> - - </fields> - </group> - <group> - <title>bottom</title> - <fields> - - <field><id>domain_base_category_list</id> <type>LinesField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default type="list">[]</default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <height type="int">5</height> - <hidden type="int">1</hidden> - <max_length></max_length> - <max_linelength></max_linelength> - <max_lines></max_lines> - <required type="int">0</required> - <title>Valid Domain</title> - <unicode type="int">0</unicode> - <view_separator><br /> -</view_separator> - <whitespace_preserve type="int">0</whitespace_preserve> - <width type="int">40</width> - </values> - <tales> - <default>here/getVariationBaseCategoryList</default> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_many_lines">You entered too many lines.</message> - <message name="line_too_long">A line was too long.</message> - <message name="too_long">You entered too many characters.</message> - </messages> - </field> - <field><id>mapped_value_property_list</id> <type>LinesField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default type="list">['quantity', 'price']</default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <height type="int">5</height> - <hidden type="int">1</hidden> - <max_length></max_length> - <max_linelength></max_linelength> - <max_lines></max_lines> - <required type="int">0</required> - <title>Modified categories</title> - <unicode type="int">0</unicode> - <view_separator><br /> -</view_separator> - <whitespace_preserve type="int">0</whitespace_preserve> - <width type="int">40</width> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_many_lines">You entered too many lines.</message> - <message name="line_too_long">A line was too long.</message> - <message name="too_long">You entered too many characters.</message> - </messages> - </field> - <field><id>matrixbox</id> <type>MatrixBox</type> - <values> - <all_editable_attributes type="list">[('production_quantity', 'production_quantity'), ('consumption_quantity', 'consumption_quantity'), ('price', 'price'), ('predicate_value', 'predicate_value'), ('variation_category_list', 'variation_category_list')]</all_editable_attributes> - <alternate_name></alternate_name> - <cell_base_id>movement</cell_base_id> - <cell_range type="list">[]</cell_range> - <columns type="list">[('None', 'None')]</columns> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <editable_attributes type="list">[('production_quantity', 'production_quantity'), ('consumption_quantity', 'consumption_quantity'), ('price', 'price'), ('predicate_value', 'predicate_value'), ('variation_category_list', 'variation_category_list')]</editable_attributes> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <getter_method></getter_method> - <global_attributes type="list">[('domain_base_category_list', 'domain_base_category_list'), ('mapped_value_property_list', 'mapped_value_property_list'), ('predicate_operator', 'predicate_operator')]</global_attributes> - <hidden type="int">0</hidden> - <lines type="list">[('None', 'None')]</lines> - <setter_method></setter_method> - <tabs type="list">[('None', 'None')]</tabs> - <title>matrixbox</title> - <update_cell_range type="int">1</update_cell_range> - </values> - <tales> - <columns>python:here.order_line_matrix_item_list(base_category_list = ('taille',), base=1)</columns> - <lines>python:here.order_line_matrix_item_list(base_category_list = ('coloris','variante'), base=1)</lines> - <tabs>python:here.order_line_matrix_item_list(base_category_list = ('taille','coloris','variante'), base=1, include=0)</tabs> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - </messages> - </field> - <field><id>predicate_operator</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default>SUPERSET_OF</default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">1</hidden> - <max_length></max_length> - <required type="int">0</required> - <title>Operator</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>hidden</title> - <fields> - - <field><id>matrixbox_predicate_value</id> <type>LinesField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default type="list">[]</default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <height type="int">5</height> - <hidden type="int">1</hidden> - <max_length></max_length> - <max_linelength></max_linelength> - <max_lines></max_lines> - <required type="int">0</required> - <title>matrixbox_predicate_value</title> - <unicode type="int">0</unicode> - <view_separator><br /> -</view_separator> - <whitespace_preserve type="int">0</whitespace_preserve> - <width type="int">40</width> - </values> - <tales> - <default>python:cell_index</default> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_many_lines">You entered too many lines.</message> - <message name="line_too_long">A line was too long.</message> - <message name="too_long">You entered too many characters.</message> - </messages> - </field> - <field><id>matrixbox_variation_category_list</id> <type>LinesField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default type="list">[]</default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <height type="int">5</height> - <hidden type="int">1</hidden> - <max_length></max_length> - <max_linelength></max_linelength> - <max_lines></max_lines> - <required type="int">0</required> - <title>matrixbox_predicate_value</title> - <unicode type="int">0</unicode> - <view_separator><br /> -</view_separator> - <whitespace_preserve type="int">0</whitespace_preserve> - <width type="int">40</width> - </values> - <tales> - <default>python:cell_index</default> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_many_lines">You entered too many lines.</message> - <message name="line_too_long">A line was too long.</message> - <message name="too_long">You entered too many characters.</message> - </messages> - </field> - <field><id>matrixbox_price</id> <type>FloatField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">10</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">1</hidden> - <required type="int">0</required> - <title>matrixbox_inventory</title> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <default>python:cell.getProperty('price')</default> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="not_float">You did not enter a floating point number.</message> - </messages> - </field> - <field><id>matrixbox_production_quantity</id> <type>FloatField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">10</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <required type="int">0</required> - <title>matrixbox_production_quantity</title> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <default>python:cell.getProperty('production_quantity')</default> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="not_float">You did not enter a floating point number.</message> - </messages> - </field> - <field><id>matrixbox_consumption_quantity</id> <type>FloatField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">10</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">1</hidden> - <required type="int">0</required> - <title>matrixbox_consumption_quantity</title> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <default>python:cell.getProperty('consumption_quantity')</default> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="not_float">You did not enter a floating point number.</message> - </messages> - </field> - </fields> - </group> - </groups> -</form> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_mrp/movement_line_view.form b/product/Coramy/skins/coramy_mrp/movement_line_view.form deleted file mode 100755 index d573ec1739..0000000000 --- a/product/Coramy/skins/coramy_mrp/movement_line_view.form +++ /dev/null @@ -1,381 +0,0 @@ -<?xml version="1.0"?> - -<form> - <title>Ligne de mouvement</title> - <row_length>4</row_length> - <name>movement_line_view</name> - <pt>form_view</pt> - <action>base_edit</action> - <method>POST</method> - <enctype>multipart/form-data</enctype> - <encoding>UTF-8</encoding> - <stored_encoding>ISO-8859-1</stored_encoding> - <unicode_mode>false</unicode_mode> - <groups> - <group> - <title>left</title> - <fields> - - <field><id>my_id</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">5</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <max_length></max_length> - <required type="int">1</required> - <title>Ligne n°</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - <field><id>my_description</id> <type>TextAreaField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <height type="int">2</height> - <hidden type="int">0</hidden> - <max_length></max_length> - <max_linelength></max_linelength> - <max_lines></max_lines> - <required type="int">0</required> - <title>Description</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - <width type="int">40</width> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_many_lines">You entered too many lines.</message> - <message name="line_too_long">A line was too long.</message> - <message name="too_long">You entered too many characters.</message> - </messages> - </field> - <field><id>my_resource_relative_url</id> <type>RelationStringField</type> - <values> - <alternate_name></alternate_name> - <base_category>resource</base_category> - <catalog_index>relative_url</catalog_index> - <css_class></css_class> - <default></default> - <default_module>modele</default_module> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">40</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <jump_method>base_jump_relation</jump_method> - <max_length></max_length> - <portal_type type="list">[('Composant', 'Composant'), ('Tissu', 'Tissu'), ('Modele', 'Modele'), ('Assortiment', 'Assortiment'), ('Category', 'Category')]</portal_type> - <required type="int">0</required> - <title>Produit</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <update_method>base_update_relation</update_method> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - <field><id>my_variation_base_category_list</id> <type>MultiListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default type="list">[]</default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <extra_item></extra_item> - <hidden type="int">0</hidden> - <items type="list">[]</items> - <required type="int">0</required> - <size type="int">3</size> - <title>Axes variation</title> - <unicode type="int">0</unicode> - <view_separator><br /> -</view_separator> - </values> - <tales> - <items>here/getVariationRangeBaseCategoryItemList</items> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - <field><id>my_variation_category_list</id> <type>MultiListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default type="list">[]</default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <extra_item></extra_item> - <hidden type="int">0</hidden> - <items type="list">[]</items> - <required type="int">0</required> - <size type="int">8</size> - <title>Variantes</title> - <unicode type="int">0</unicode> - <view_separator><br /> -</view_separator> - </values> - <tales> - <items>here/getVariationRangeCategoryItemList</items> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>right</title> - <fields> - - <field><id>my_consumption_quantity</id> <type>FloatField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">10</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <required type="int">0</required> - <title>Sortie</title> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="not_float">You did not enter a floating point number.</message> - </messages> - </field> - <field><id>my_production_quantity</id> <type>FloatField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">10</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <required type="int">0</required> - <title>Entrée</title> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="not_float">You did not enter a floating point number.</message> - </messages> - </field> - <field><id>my_quantity_unit</id> <type>ListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <extra_item></extra_item> - <first_item type="int">0</first_item> - <hidden type="int">0</hidden> - <items type="list">[]</items> - <required type="int">0</required> - <size type="int">1</size> - <title>Unité</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <items>here/getQuantityUnitRangeItemList</items> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - <field><id>my_price</id> <type>FloatField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">10</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <required type="int">0</required> - <title>Prix par défaut</title> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="not_float">You did not enter a floating point number.</message> - </messages> - </field> - <field><id>spacer</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">1</hidden> - <max_length></max_length> - <required type="int">0</required> - <title> </title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - <field><id>my_total_quantity</id> <type>FloatField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">10</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">1</hidden> - <required type="int">0</required> - <title>Quantité totale</title> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <title>python:'Quantité totale : %.2f' % here.getTotalInventory()</title> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="not_float">You did not enter a floating point number.</message> - </messages> - </field> - <field><id>my_total_price</id> <type>FloatField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">10</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">1</hidden> - <required type="int">0</required> - <title>Valeur totale</title> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <title>python:'Montant total : %.2f' % here.getTotalPrice()</title> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="not_float">You did not enter a floating point number.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>center</title> - <fields> - - </fields> - </group> - <group> - <title>bottom</title> - <fields> - - </fields> - </group> - <group> - <title>hidden</title> - <fields> - - </fields> - </group> - </groups> -</form> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_pdm/CreateVarianteModele.py b/product/Coramy/skins/coramy_pdm/CreateVarianteModele.py deleted file mode 100755 index 1316e65182..0000000000 --- a/product/Coramy/skins/coramy_pdm/CreateVarianteModele.py +++ /dev/null @@ -1,46 +0,0 @@ -## Script (Python) "CreateVarianteModele" -##bind container=container -##bind context=context -##bind namespace= -##bind script=script -##bind subpath=traverse_subpath -##parameters=form_id='' -##title= -## -request = context.REQUEST -gamme = context.getDefaultValue('specialise',portal_type=('Gamme',)) -coloris_list = gamme.objectValues() -variantes_modele_list = context.objectValues() -variantes_id_list= [] -compteur = 0 - -for variante_modele in variantes_modele_list : - if variante_modele.portal_type == "Variante Modele" : - variantes_id_list.append(variante_modele.id) - -if len(coloris_list)>0 : - - for coloris in coloris_list : - if not(coloris.id in variantes_id_list) : - - compteur = compteur + 1 - context.invokeFactory(type_name="Variante Modele", - id=coloris.id, - RESPONSE=request.RESPONSE) - context[coloris.id].edit(description = coloris.getDescription()) - context[coloris.id].flushActivity(invoke=1) - - redirect_url = '%s/%s?%s' % ( context.absolute_url() - , form_id - , 'portal_status_message=%s+variantes+coloris+créées.'%compteur - ) - -else : - - redirect_url = '%s/%s?%s' % ( context.absolute_url() - , form_id - , 'portal_status_message=Pas+de+gamme+de+coloris+définie.' - ) - - -request[ 'RESPONSE' ].redirect( redirect_url ) diff --git a/product/Coramy/skins/coramy_pdm/Forme_categorySearchForm.form b/product/Coramy/skins/coramy_pdm/Forme_categorySearchForm.form deleted file mode 100755 index 09eae8fbc3..0000000000 --- a/product/Coramy/skins/coramy_pdm/Forme_categorySearchForm.form +++ /dev/null @@ -1,292 +0,0 @@ -<?xml version="1.0" encoding="iso-8859-1"?> - -<form> - <title>Rechercher</title> - <name>Forme_categorySearchForm</name> - <action>Base_searchHandler</action> - <enctype></enctype> - <method>POST</method> - <pt>form_view_dialog</pt> - - <groups> - <group> - <title>left</title> - <fields> - - <field><id>my_id_list</id> <type>LinesField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default type="list">[]</default> - <description></description> - <external_validator></external_validator> - <extra></extra> - <height type="int">5</height> - <hidden type="int">0</hidden> - <max_length></max_length> - <max_linelength></max_linelength> - <max_lines></max_lines> - <required type="int">0</required> - <title>Forme</title> - <width type="int">40</width> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_many_lines">You entered too many lines.</message> - <message name="line_too_long">A line was too long.</message> - <message name="too_long">You entered too many characters.</message> - </messages> - </field> - <field><id>my_referentiel_forme_list</id> <type>MultiListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default type="list">[]</default> - <description></description> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <items type="list">[]</items> - <required type="int">0</required> - <size type="int">5</size> - <title>Catégorie forme</title> - </values> - <tales> - <default>here/getReferentielFormeList</default> - <items>here/portal_categories/referentiel_forme/getFormItemList</items> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - <field><id>my_description</id> <type>TextAreaField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <external_validator></external_validator> - <extra></extra> - <height type="int">3</height> - <hidden type="int">0</hidden> - <max_length></max_length> - <max_linelength></max_linelength> - <max_lines></max_lines> - <required type="int">0</required> - <title>Description</title> - <width type="int">40</width> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_many_lines">You entered too many lines.</message> - <message name="line_too_long">A line was too long.</message> - <message name="too_long">You entered too many characters.</message> - </messages> - </field> - <field><id>my_forme_id_list</id> <type>LinesField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default type="list">[]</default> - <description></description> - <external_validator></external_validator> - <extra></extra> - <height type="int">5</height> - <hidden type="int">0</hidden> - <max_length></max_length> - <max_linelength></max_linelength> - <max_lines></max_lines> - <required type="int">0</required> - <title>Forme de base</title> - <width type="int">40</width> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_many_lines">You entered too many lines.</message> - <message name="line_too_long">A line was too long.</message> - <message name="too_long">You entered too many characters.</message> - </messages> - </field> - <field><id>my_reset</id> <type>CheckBoxField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default type="int">1</default> - <description></description> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <title>Recherche globale</title> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - </messages> - </field> - <field><id>my_list_form_id</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">1</hidden> - <max_length></max_length> - <required type="int">0</required> - <title></title> - <truncate type="int">0</truncate> - </values> - <tales> - <default>python:here.REQUEST.form_id</default> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - <field><id>my_list_method_id</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default>Forme_categorySearchSql</default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">1</hidden> - <max_length></max_length> - <required type="int">0</required> - <title>x</title> - <truncate type="int">0</truncate> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>right</title> - <fields> - - <field><id>my_collection_list</id> <type>MultiListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default type="list">[]</default> - <description></description> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <items type="list">[]</items> - <required type="int">0</required> - <size type="int">5</size> - <title>Collection</title> - </values> - <tales> - <default>here/getCollectionList</default> - <items>here/portal_categories/collection/getFormItemList</items> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - <field><id>my_eip_list</id> <type>MultiListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default type="list">[]</default> - <description></description> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <items type="list">[]</items> - <required type="int">0</required> - <size type="int">5</size> - <title>Espace Imaginaire</title> - </values> - <tales> - <default>here/getEipList</default> - <items>here/portal_categories/eip/getFormItemList</items> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - <field><id>my_option_forme_list</id> <type>MultiListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default type="list">[]</default> - <description></description> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <items type="list">[]</items> - <required type="int">0</required> - <size type="int">5</size> - <title>Option</title> - </values> - <tales> - <items>here/portal_categories/option_forme/getFormItemList</items> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - <field><id>my_etat</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <max_length></max_length> - <required type="int">0</required> - <title>Etat</title> - <truncate type="int">0</truncate> - </values> - <tales> - <default>python:here.portal_workflow.getInfoFor(here, 'forme_state')</default> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - </fields> - </group> - </groups> -</form> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_pdm/Forme_categorySearchSql.zsql b/product/Coramy/skins/coramy_pdm/Forme_categorySearchSql.zsql deleted file mode 100755 index eafb8f3e97..0000000000 --- a/product/Coramy/skins/coramy_pdm/Forme_categorySearchSql.zsql +++ /dev/null @@ -1,135 +0,0 @@ -<dtml-comment> -title: -connection_id:MySQL -max_rows:1000 -max_cache:100 -cache_time:0 -class_name:ZSQLBrain -class_file:zsqlbrain.py -</dtml-comment> -<params>collection_list="" -description="" -eip_list="" -etat="" -forme_id_list="" -id_list="" -option_forme_list="" -present_au_catalogue="" -referentiel_forme_list=""</params> -SELECT DISTINCT forme.id, forme.relative_url, forme.path, forme.Description, forme.forme_state -FROM catalog AS forme - -<dtml-if expr="_.len(collection_list)>0"> - <dtml-if expr="not (_.len(collection_list)==1 and collection_list[0]=='')"> - , category AS cat1 - </dtml-if> -</dtml-if> - -<dtml-if expr="_.len(eip_list)>0"> - <dtml-if expr="not (_.len(eip_list)==1 and eip_list[0]=='')"> - , category AS cat2 - </dtml-if> -</dtml-if> - -<dtml-if expr="_.len(option_forme_list)>0"> - <dtml-if expr="not (_.len(option_forme_list)==1 and option_forme_list[0]=='')"> - , category AS cat3 - </dtml-if> -</dtml-if> - -<dtml-if expr="_.len(referentiel_forme_list)>0"> - <dtml-if expr="not (_.len(referentiel_forme_list)==1 and referentiel_forme_list[0]=='')"> - , category AS cat4 - </dtml-if> -</dtml-if> - -<dtml-if expr="_.len(forme_id_list)>0"> - <dtml-if expr="not (_.len(forme_id_list)==1 and forme_id_list[0]=='')"> - , category AS cat5 - JOIN catalog ON catalog.uid=cat5.category_uid - </dtml-if> -</dtml-if> - - -WHERE forme.portal_type = "Forme" - -<dtml-if expr="_.len(id_list)>0"> - AND ( forme.id LIKE "<dtml-var expr="id_list[0]">" - <dtml-in prefix="loop" expr="_.range(_.len(id_list)-1)"> - OR forme.id LIKE "<dtml-var expr="id_list[loop_item+1]">" - </dtml-in> - ) -</dtml-if> - -<dtml-if expr="_.len(collection_list)>0"> - <dtml-if expr="not (_.len(collection_list)==1 and collection_list[0]=='')"> - AND cat1.uid=forme.uid - AND ( cat1.category_uid=<dtml-var expr="identify_category(base_category='collection',category=collection_list[0])"> - <dtml-in prefix="loop" expr="_.range(_.len(collection_list)-1)"> - OR cat1.category_uid=<dtml-var expr="identify_category(base_category='collection',category=collection_list[loop_item+1])"> - </dtml-in> - ) - AND cat1.base_category_uid=<dtml-var "portal_categories.collection.uid"> - </dtml-if> -</dtml-if> - -<dtml-if expr="_.len(eip_list)>0"> - <dtml-if expr="not (_.len(eip_list)==1 and eip_list[0]=='')"> - AND cat2.uid=forme.uid - AND ( cat2.category_uid=<dtml-var expr="identify_category(base_category='eip',category=eip_list[0])"> - <dtml-in prefix="loop" expr="_.range(_.len(eip_list)-1)"> - OR cat2.category_uid=<dtml-var expr="identify_category(base_category='eip',category=eip_list[loop_item+1])"> - </dtml-in> - ) - AND cat2.base_category_uid=<dtml-var "portal_categories.eip.uid"> - </dtml-if> -</dtml-if> - -<dtml-if expr="_.len(option_forme_list)>0"> - <dtml-if expr="not (_.len(option_forme_list)==1 and option_forme_list[0]=='')"> - AND cat3.uid=forme.uid - AND ( cat3.category_uid=<dtml-var expr="identify_category(base_category='option_forme',category=option_forme_list[0])"> - <dtml-in prefix="loop" expr="_.range(_.len(option_forme_list)-1)"> - OR cat3.category_uid=<dtml-var expr="identify_category(base_category='option_forme',category=option_forme_list[loop_item+1])"> - </dtml-in> - ) - AND cat3.base_category_uid=<dtml-var "portal_categories.option_forme.uid"> - </dtml-if> -</dtml-if> - -<dtml-if expr="_.len(referentiel_forme_list)>0"> - <dtml-if expr="not (_.len(referentiel_forme_list)==1 and referentiel_forme_list[0]=='')"> - AND cat4.uid=forme.uid - AND ( cat4.category_uid=<dtml-var expr="identify_category(base_category='referentiel_forme',category=referentiel_forme_list[0])"> - <dtml-in prefix="loop" expr="_.range(_.len(referentiel_forme_list)-1)"> - OR cat4.category_uid=<dtml-var expr="identify_category(base_category='referentiel_forme',category=referentiel_forme_list[loop_item+1])"> - </dtml-in> - ) - AND cat4.base_category_uid=<dtml-var "portal_categories.referentiel_forme.uid"> - </dtml-if> -</dtml-if> - -<dtml-if expr="_.len(forme_id_list)>0"> - <dtml-if expr="not (_.len(forme_id_list)==1 and forme_id_list[0]=='')"> - AND cat5.uid=forme.uid - AND cat5.base_category_uid=<dtml-var "portal_categories.specialise.uid"> - - AND ( (catalog.id LIKE "<dtml-var expr="forme_id_list[0]">") - <dtml-in prefix="loop" expr="_.range(_.len(forme_id_list)-1)"> - OR (catalog.id LIKE "<dtml-var expr="forme_id_list[loop_item+1]">") - </dtml-in> - ) - - </dtml-if> -</dtml-if> - - - -<dtml-if expr="not(etat=='')"> - AND forme.forme_state LIKE "<dtml-var expr="etat">" -</dtml-if> - -<dtml-if expr="not(description=='')"> - AND forme.Description LIKE "<dtml-var expr="description">" -</dtml-if> - diff --git a/product/Coramy/skins/coramy_pdm/Forme_thumbnailList.pt b/product/Coramy/skins/coramy_pdm/Forme_thumbnailList.pt deleted file mode 100755 index 1b9159184c..0000000000 --- a/product/Coramy/skins/coramy_pdm/Forme_thumbnailList.pt +++ /dev/null @@ -1,30 +0,0 @@ -<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" - "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> -<html xmlns="http://www.w3.org/1999/xhtml"> - - <head> - <title>Formes</title> - <link rel=stylesheet type="text/css" href="http://erp5.coramy.fr/coramy/thumbnail.css" /> - </head> - - <body tal:define="forme_list python:here.object_action_list(selection_name='gamme_list')"> - <h1>Dessins techniques des formes sélectionnées</h1> - <div class="container"> - <tal:block tal:repeat="forme python:forme_list"> - <div class="float" tal:define="dessin_list python:forme.contentValues(filter={'portal_type':'Dessin Technique'})"> - <a href="/" tal:attributes="href python:forme.absolute_url()"> - <tal:block tal:condition="python: len(dessin_list)>0"> - <img class="image" src="logo.gif" alt="Dessin technique" tal:attributes="src python:dessin_list[0].absolute_url() + '?display=small&format=jpeg&resolution=150'" /> - </tal:block> - <tal:block tal:condition="python: len(dessin_list)==0"> - <p>Pas de dessin associé</p> - </tal:block> - <p tal:content="python:forme.getId()" /> - </a> - </div> - </tal:block> - <hr /> - </div> - - </body> -</html> diff --git a/product/Coramy/skins/coramy_pdm/Resource_futureHistoryView.form b/product/Coramy/skins/coramy_pdm/Resource_futureHistoryView.form deleted file mode 100755 index 5c3d72a1c5..0000000000 --- a/product/Coramy/skins/coramy_pdm/Resource_futureHistoryView.form +++ /dev/null @@ -1,100 +0,0 @@ -<?xml version="1.0"?> - -<form> - <title>Resource Inventory</title> - <row_length>4</row_length> - <name>Resource_inventoryView</name> - <pt>form_view</pt> - <action></action> - <method>POST</method> - <enctype></enctype> - <encoding>UTF-8</encoding> - <stored_encoding>ISO-8859-1</stored_encoding> - <unicode_mode>false</unicode_mode> - <groups> - <group> - <title>left</title> - <fields> - - <field><id>my_id</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <max_length></max_length> - <required type="int">1</required> - <title>Id</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>right</title> - <fields> - - </fields> - </group> - <group> - <title>center</title> - <fields> - - </fields> - </group> - <group> - <title>bottom</title> - <fields> - - <field><id>future_history_chart</id> <type>ZGDChart</type> - <values> - <alternate_name></alternate_name> - <bg_transparent type="int">1</bg_transparent> - <chart_style>bar_3d</chart_style> - <chart_title>Excédents Futurs</chart_title> - <css_class></css_class> - <data_method>Resource_getChartFutureHistoryList</data_method> - <default></default> - <default_params type="list">[]</default_params> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <hidden type="int">0</hidden> - <selection_name>resource_future_history_char</selection_name> - <title>Historique Futur</title> - <x_title></x_title> - <y_title></y_title> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>hidden</title> - <fields> - - </fields> - </group> - </groups> -</form> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_pdm/Resource_futureInventoryView.form b/product/Coramy/skins/coramy_pdm/Resource_futureInventoryView.form deleted file mode 100755 index cbc16c2f5a..0000000000 --- a/product/Coramy/skins/coramy_pdm/Resource_futureInventoryView.form +++ /dev/null @@ -1,140 +0,0 @@ -<?xml version="1.0"?> - -<form> - <title>Resource Inventory</title> - <row_length>4</row_length> - <name>Resource_inventoryView</name> - <pt>form_view</pt> - <action></action> - <method>POST</method> - <enctype></enctype> - <encoding>UTF-8</encoding> - <stored_encoding>ISO-8859-1</stored_encoding> - <unicode_mode>false</unicode_mode> - <groups> - <group> - <title>left</title> - <fields> - - <field><id>my_id</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <max_length></max_length> - <required type="int">1</required> - <title>Id</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>right</title> - <fields> - - </fields> - </group> - <group> - <title>center</title> - <fields> - - </fields> - </group> - <group> - <title>bottom</title> - <fields> - - <field><id>future_inventory_list_box</id> <type>ListBox</type> - <values> - <all_columns type="list">[]</all_columns> - <all_editable_columns type="list">[]</all_editable_columns> - <alternate_name></alternate_name> - <columns type="list">[('node_title', 'Stock'), ('section_title', 'Propri\xe9taire'), ('variation_text', 'Variante'), ('inventory', 'Quantit\xe9')]</columns> - <css_class></css_class> - <default></default> - <default_params type="list">[]</default_params> - <description></description> - <domain_root_list type="list">[]</domain_root_list> - <domain_tree type="int">0</domain_tree> - <editable type="int">1</editable> - <editable_columns type="list">[]</editable_columns> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <global_attributes type="list">[]</global_attributes> - <hidden type="int">0</hidden> - <lines type="int">20</lines> - <list_action>Resource_inventoryView</list_action> - <list_method type="method">Resource_getInventoryList</list_method> - <meta_types type="list">[]</meta_types> - <portal_types type="list">[]</portal_types> - <report_root_list type="list">[]</report_root_list> - <report_tree type="int">0</report_tree> - <search type="int">0</search> - <search_columns></search_columns> - <select type="int">0</select> - <selection_name>resource_future_inventory</selection_name> - <sort type="list">[]</sort> - <sort_columns></sort_columns> - <stat_method></stat_method> - <title>Stock futur par variantes</title> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - </messages> - </field> - <field><id>future_inventory_chart</id> <type>ZGDChart</type> - <values> - <alternate_name></alternate_name> - <bg_transparent type="int">1</bg_transparent> - <chart_style>pie_3d</chart_style> - <chart_title>Excédents Futurs</chart_title> - <css_class></css_class> - <data_method>Resource_getChartInventoryList</data_method> - <default></default> - <default_params type="list">[]</default_params> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <hidden type="int">0</hidden> - <selection_name>resource_future_inventory_chart</selection_name> - <title>Excédents Futurs</title> - <x_title></x_title> - <y_title></y_title> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>hidden</title> - <fields> - - </fields> - </group> - </groups> -</form> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_pdm/Resource_getCartesianVariationList.py b/product/Coramy/skins/coramy_pdm/Resource_getCartesianVariationList.py deleted file mode 100755 index 3596d5ec08..0000000000 --- a/product/Coramy/skins/coramy_pdm/Resource_getCartesianVariationList.py +++ /dev/null @@ -1,27 +0,0 @@ -## Script (Python) "Resource_getCartesianVariationList" -##bind container=container -##bind context=context -##bind namespace= -##bind script=script -##bind subpath=traverse_subpath -##parameters=base_category_list=['coloris','taille','morphologie','variante'] -##title= -## -# returns a list of tuples combining possible variations -# we take only into account coloris, taille, variante and morphologie base categories - -raw_variation_base_category_list = context.getVariationBaseCategoryList() -variation_base_category_list = [] -for base_category in raw_variation_base_category_list : - if base_category in base_category_list : - variation_base_category_list.append(base_category) -variation_base_category_list.sort() -variation_list_list = [] - -for base_category in variation_base_category_list : - variation_list = map(lambda x:x[1], context.getVariationCategoryItemList(base_category_list=(base_category,))) - if variation_list != [] : - variation_list_list.append(variation_list) - -cartesian_variation_list = context.cartesianProduct(variation_list_list) -return cartesian_variation_list diff --git a/product/Coramy/skins/coramy_pdm/Resource_getSupplierItemList.py b/product/Coramy/skins/coramy_pdm/Resource_getSupplierItemList.py deleted file mode 100755 index 66d16a7e13..0000000000 --- a/product/Coramy/skins/coramy_pdm/Resource_getSupplierItemList.py +++ /dev/null @@ -1,23 +0,0 @@ -## Script (Python) "Resource_getSupplierItemList" -##bind container=container -##bind context=context -##bind namespace= -##bind script=script -##bind subpath=traverse_subpath -##parameters= -##title= -## -# returns a list of all suppliers in relation source -# with resources with a given portal_type - -supplier_list = context.Resource_sqlSupplierSearch(portal_type_list = ('Tissu', 'Composant')) - -supplier_item_list = [] -sorted_supplier_title_list = [] -for supplier in supplier_list : - sorted_supplier_title_list.append(supplier.title) -sorted_supplier_title_list.sort() - -supplier_item_list = map(lambda x:(x,x),sorted_supplier_title_list) - -return supplier_item_list diff --git a/product/Coramy/skins/coramy_pdm/Resource_inventoryView.form b/product/Coramy/skins/coramy_pdm/Resource_inventoryView.form deleted file mode 100755 index fb7aadf5a1..0000000000 --- a/product/Coramy/skins/coramy_pdm/Resource_inventoryView.form +++ /dev/null @@ -1,166 +0,0 @@ -<?xml version="1.0"?> - -<form> - <title>Resource Inventory</title> - <row_length>4</row_length> - <name>Resource_inventoryView</name> - <pt>form_view</pt> - <action></action> - <method>POST</method> - <enctype></enctype> - <encoding>UTF-8</encoding> - <stored_encoding>ISO-8859-1</stored_encoding> - <unicode_mode>false</unicode_mode> - <groups> - <group> - <title>left</title> - <fields> - - <field><id>my_id</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <max_length></max_length> - <required type="int">1</required> - <title>Id</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>right</title> - <fields> - - </fields> - </group> - <group> - <title>center</title> - <fields> - - </fields> - </group> - <group> - <title>bottom</title> - <fields> - - <field><id>listbox</id> <type>ListBox</type> - <values> - <all_columns type="list">[('node_title', 'Stock'), ('section_title', 'Propri\xe9taire'), ('variation_text', 'Variante'), ('getCurrentInventory', 'Stock'), ('getAvailableInventory', 'Dispo'), ('inventory', 'Futur')]</all_columns> - <all_editable_columns type="list">[]</all_editable_columns> - <alternate_name></alternate_name> - <columns type="list">[('node_title', 'Stock'), ('variation_text', 'Variante'), ('getCurrentInventory', 'Stock'), ('getAvailableInventory', 'Dispo'), ('inventory', 'Futur')]</columns> - <css_class></css_class> - <default></default> - <default_params type="list">[('group_by_section', '0')]</default_params> - <description></description> - <domain_root_list type="list">[('portal_categories/site/Stock_MP', 'Stocks MP'), ('portal_categories/site', 'Sites')]</domain_root_list> - <domain_tree type="int">1</domain_tree> - <editable type="int">1</editable> - <editable_columns type="list">[]</editable_columns> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <global_attributes type="list">[]</global_attributes> - <hidden type="int">0</hidden> - <lines type="int">20</lines> - <list_action>Resource_inventoryView</list_action> - <list_method type="method">getFutureInventoryList</list_method> - <meta_types type="list">[]</meta_types> - <portal_types type="list">[]</portal_types> - <report_root_list type="list">[]</report_root_list> - <report_tree type="int">0</report_tree> - <search type="int">0</search> - <search_columns type="list">[]</search_columns> - <select type="int">0</select> - <selection_name>resource_current_inventory</selection_name> - <sort type="list">[]</sort> - <sort_columns></sort_columns> - <stat_method type="method">getFutureInventoryStat</stat_method> - <title>Stock actuel par variantes</title> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - </messages> - </field> - <field><id>current_inventory_chart</id> <type>ZGDChart</type> - <values> - <alternate_name></alternate_name> - <bg_transparent type="int">1</bg_transparent> - <chart_style>line_2d</chart_style> - <chart_title>Prévisions</chart_title> - <css_class></css_class> - <data_method>getInventoryHistoryChart</data_method> - <default></default> - <default_params type="list">[]</default_params> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <hidden type="int">0</hidden> - <selection_name>resource_current_inventory_chart</selection_name> - <title>Prévisions</title> - <x_title></x_title> - <y_title></y_title> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - </messages> - </field> - <field><id>current_inventory_pie</id> <type>ZGDChart</type> - <values> - <alternate_name></alternate_name> - <bg_transparent type="int">1</bg_transparent> - <chart_style>bar_3d</chart_style> - <chart_title>Répartition</chart_title> - <css_class></css_class> - <data_method>getInventoryChart</data_method> - <default></default> - <default_params type="list">[]</default_params> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <hidden type="int">0</hidden> - <selection_name>resource_current_inventory_pie</selection_name> - <title>Excédents Actuels</title> - <x_title></x_title> - <y_title></y_title> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>hidden</title> - <fields> - - </fields> - </group> - </groups> -</form> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_pdm/Resource_movementHistoryView.form b/product/Coramy/skins/coramy_pdm/Resource_movementHistoryView.form deleted file mode 100755 index 17b8cd3b93..0000000000 --- a/product/Coramy/skins/coramy_pdm/Resource_movementHistoryView.form +++ /dev/null @@ -1,114 +0,0 @@ -<?xml version="1.0"?> - -<form> - <title>Resource Inventory</title> - <row_length>4</row_length> - <name>Resource_inventoryView</name> - <pt>form_view</pt> - <action></action> - <method>POST</method> - <enctype></enctype> - <encoding>UTF-8</encoding> - <stored_encoding>ISO-8859-1</stored_encoding> - <unicode_mode>false</unicode_mode> - <groups> - <group> - <title>left</title> - <fields> - - <field><id>my_id</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <max_length></max_length> - <required type="int">1</required> - <title>Id</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>right</title> - <fields> - - </fields> - </group> - <group> - <title>center</title> - <fields> - - </fields> - </group> - <group> - <title>bottom</title> - <fields> - - <field><id>listbox</id> <type>ListBox</type> - <values> - <all_columns type="list">[]</all_columns> - <all_editable_columns type="list">[]</all_editable_columns> - <alternate_name></alternate_name> - <columns type="list">[('start_date', 'start_date'), ('getExplanationText', 'Explication'), ('node_title', 'Stock'), ('section_title', 'Propri\xe9taire'), ('variation_text', 'Variante'), ('quantity', 'Quantit\xe9'), ('getAggregateListText', 'Lots'), ('simulation_state', 'simulation_state')]</columns> - <css_class></css_class> - <default></default> - <default_params type="list">[]</default_params> - <description></description> - <domain_root_list type="list">[('portal_categories/site/Stock_MP', 'Stocks MP'), ('portal_categories/site', 'Sites')]</domain_root_list> - <domain_tree type="int">0</domain_tree> - <editable type="int">1</editable> - <editable_columns type="list">[]</editable_columns> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <global_attributes type="list">[]</global_attributes> - <hidden type="int">0</hidden> - <lines type="int">20</lines> - <list_action>Resource_inventoryView</list_action> - <list_method type="method">getMovementHistoryList</list_method> - <meta_types type="list">[]</meta_types> - <portal_types type="list">[]</portal_types> - <report_root_list type="list">[]</report_root_list> - <report_tree type="int">0</report_tree> - <search type="int">0</search> - <search_columns type="list">[]</search_columns> - <select type="int">0</select> - <selection_name>movement_selection</selection_name> - <sort type="list">[]</sort> - <sort_columns></sort_columns> - <stat_method type="method">getMovementHistoryStat</stat_method> - <title>Stock actuel par variantes</title> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>hidden</title> - <fields> - - </fields> - </group> - </groups> -</form> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_pdm/Resource_sqlResourceSupplierSearch.zsql b/product/Coramy/skins/coramy_pdm/Resource_sqlResourceSupplierSearch.zsql deleted file mode 100755 index 095e9dd680..0000000000 --- a/product/Coramy/skins/coramy_pdm/Resource_sqlResourceSupplierSearch.zsql +++ /dev/null @@ -1,27 +0,0 @@ -<dtml-comment> -title: -connection_id:erp5_sql_connection -max_rows:1000 -max_cache:100 -cache_time:0 -class_name:ZSQLBrain -class_file:zsqlbrain.py -</dtml-comment> -<params>supplier_title_list=""</params> -SELECT DISTINCT resource.id, resource.title, resource.relative_url, resource.path -FROM catalog AS resource, catalog as organisation, category - -WHERE resource.uid = category.uid -AND organisation.uid = category.category_uid -AND category.base_category_uid=<dtml-var "portal_categories.source.uid"> - -AND ( resource.portal_type = 'Tissu' -OR resource.portal_type = 'Composant') - -<dtml-if expr="_.len(supplier_title_list)>0"> -AND ( organisation.title = "<dtml-var expr="supplier_title_list[0]">" -<dtml-in prefix="loop" expr="_.range(_.len(supplier_title_list)-1)"> -OR organisation.title = "<dtml-var expr="supplier_title_list[loop_item+1]">" -</dtml-in> -) -</dtml-if> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_pdm/Resource_sqlSupplierSearch.zsql b/product/Coramy/skins/coramy_pdm/Resource_sqlSupplierSearch.zsql deleted file mode 100755 index 5a8905b476..0000000000 --- a/product/Coramy/skins/coramy_pdm/Resource_sqlSupplierSearch.zsql +++ /dev/null @@ -1,25 +0,0 @@ -<dtml-comment> -title: -connection_id:erp5_sql_connection -max_rows:1000 -max_cache:100 -cache_time:0 -class_name:ZSQLBrain -class_file:zsqlbrain.py -</dtml-comment> -<params>portal_type_list="" -</params> -SELECT DISTINCT organisation.id, organisation.title, organisation.relative_url, organisation.path -FROM catalog AS organisation, catalog as resource, category - -WHERE resource.uid = category.uid -AND organisation.uid = category.category_uid -AND category.base_category_uid=<dtml-var "portal_categories.source.uid"> - -<dtml-if expr="_.len(portal_type_list)>0"> -AND ( resource.portal_type = "<dtml-var expr="portal_type_list[0]">" -<dtml-in prefix="loop" expr="_.range(_.len(portal_type_list)-1)"> -OR resource.portal_type = "<dtml-var expr="portal_type_list[loop_item+1]">" -</dtml-in> -) -</dtml-if> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_pdm/Tissu_categorySearchForm.form b/product/Coramy/skins/coramy_pdm/Tissu_categorySearchForm.form deleted file mode 100755 index 4de6a39966..0000000000 --- a/product/Coramy/skins/coramy_pdm/Tissu_categorySearchForm.form +++ /dev/null @@ -1,338 +0,0 @@ -<?xml version="1.0" encoding="iso-8859-1"?> - -<form> - <title>Rechercher</title> - <name>Tissu_categorySearchForm</name> - <action>Base_searchHandler</action> - <enctype></enctype> - <method>POST</method> - <pt>form_view_dialog</pt> - - <groups> - <group> - <title>left</title> - <fields> - - <field><id>my_id_list</id> <type>LinesField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default type="list">[]</default> - <description></description> - <external_validator></external_validator> - <extra></extra> - <height type="int">3</height> - <hidden type="int">0</hidden> - <max_length></max_length> - <max_linelength></max_linelength> - <max_lines></max_lines> - <required type="int">0</required> - <title>Tissu</title> - <width type="int">40</width> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_many_lines">You entered too many lines.</message> - <message name="line_too_long">A line was too long.</message> - <message name="too_long">You entered too many characters.</message> - </messages> - </field> - <field><id>my_source_title</id> <type>LinesField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default type="list">[]</default> - <description></description> - <external_validator></external_validator> - <extra></extra> - <height type="int">3</height> - <hidden type="int">0</hidden> - <max_length></max_length> - <max_linelength></max_linelength> - <max_lines></max_lines> - <required type="int">0</required> - <title>Fournisseur</title> - <width type="int">40</width> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_many_lines">You entered too many lines.</message> - <message name="line_too_long">A line was too long.</message> - <message name="too_long">You entered too many characters.</message> - </messages> - </field> - <field><id>my_categorie_tissu</id> <type>MultiListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default type="list">[]</default> - <description></description> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <items type="list">[]</items> - <required type="int">0</required> - <size type="int">5</size> - <title>Type tissu</title> - </values> - <tales> - <items>here/portal_categories/categorie_tissu/getFormItemList</items> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - <field><id>my_motif</id> <type>MultiListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default type="list">[]</default> - <description></description> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <items type="list">[]</items> - <required type="int">0</required> - <size type="int">5</size> - <title>Motif</title> - </values> - <tales> - <items>here/portal_categories/motif/getFormItemList</items> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - <field><id>my_description</id> <type>TextAreaField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <external_validator></external_validator> - <extra></extra> - <height type="int">3</height> - <hidden type="int">0</hidden> - <max_length></max_length> - <max_linelength></max_linelength> - <max_lines></max_lines> - <required type="int">0</required> - <title>Description</title> - <width type="int">40</width> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_many_lines">You entered too many lines.</message> - <message name="line_too_long">A line was too long.</message> - <message name="too_long">You entered too many characters.</message> - </messages> - </field> - <field><id>my_reset</id> <type>CheckBoxField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default type="int">1</default> - <description></description> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <title>Recherche globale</title> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>right</title> - <fields> - - <field><id>my_collection_list</id> <type>MultiListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default type="list">[]</default> - <description></description> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <items type="list">[]</items> - <required type="int">0</required> - <size type="int">5</size> - <title>Collection</title> - </values> - <tales> - <default>here/getCollectionList</default> - <items>here/portal_categories/collection/getFormItemList</items> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - <field><id>my_composition_list</id> <type>MultiListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default type="list">[]</default> - <description></description> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <items type="list">[]</items> - <required type="int">0</required> - <size type="int">5</size> - <title>Composition</title> - </values> - <tales> - <default>here/getCompositionList</default> - <items>here/portal_categories/composition/getFormItemList</items> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - <field><id>my_eip_list</id> <type>MultiListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default type="list">[]</default> - <description></description> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <items type="list">[]</items> - <required type="int">0</required> - <size type="int">5</size> - <title>Famille</title> - </values> - <tales> - <default>here/getEipList</default> - <items>here/portal_categories/eip/getFormItemList</items> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - <field><id>my_code_entretien_list</id> <type>MultiListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default type="list">[]</default> - <description></description> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <items type="list">[]</items> - <required type="int">0</required> - <size type="int">3</size> - <title>Entretien</title> - </values> - <tales> - <items>here/portal_categories/code_entretien/getFormItemList</items> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - <field><id>my_composant_state</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">40</display_width> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <max_length></max_length> - <required type="int">0</required> - <title>Etat</title> - <truncate type="int">0</truncate> - </values> - <tales> - <default>python:here.portal_workflow.getInfoFor(here, 'composant_state')</default> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - <field><id>my_list_form_id</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">1</hidden> - <max_length></max_length> - <required type="int">0</required> - <title></title> - <truncate type="int">0</truncate> - </values> - <tales> - <default>python:here.REQUEST.form_id</default> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - <field><id>my_list_method_id</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default>Tissu_categorySearchSql</default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">1</hidden> - <max_length></max_length> - <required type="int">0</required> - <title>x</title> - <truncate type="int">0</truncate> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - </fields> - </group> - </groups> -</form> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_pdm/Tissu_categorySearchSql.zsql b/product/Coramy/skins/coramy_pdm/Tissu_categorySearchSql.zsql deleted file mode 100755 index e2e181dad6..0000000000 --- a/product/Coramy/skins/coramy_pdm/Tissu_categorySearchSql.zsql +++ /dev/null @@ -1,176 +0,0 @@ -<dtml-comment> -title: -connection_id:MySQL -max_rows:1000 -max_cache:100 -cache_time:0 -class_name:ZSQLBrain -class_file:zsqlbrain.py -</dtml-comment> -<params>id_list="" -source_title="" -categorie_tissu="" -motif="" -description="" -collection_list="" -composition_list="" -eip_list="" -code_entretien_list="" -composant_state=""</params> -SELECT DISTINCT tissu.id, tissu.relative_url, tissu.path, tissu.Description, tissu.composant_state -FROM catalog AS tissu - -<dtml-if expr="_.len(categorie_tissu)>0"> - <dtml-if expr="not (_.len(categorie_tissu)==1 and categorie_tissu[0]=='')"> - , category AS cat1 - </dtml-if> -</dtml-if> - -<dtml-if expr="_.len(motif)>0"> - <dtml-if expr="not (_.len(motif)==1 and motif[0]=='')"> - , category AS cat2 - </dtml-if> -</dtml-if> - -<dtml-if expr="_.len(collection_list)>0"> - <dtml-if expr="not (_.len(collection_list)==1 and collection_list[0]=='')"> - , category AS cat3 - </dtml-if> -</dtml-if> - -<dtml-if expr="_.len(composition_list)>0"> - <dtml-if expr="not (_.len(composition_list)==1 and composition_list[0]=='')"> - , category AS cat4 - </dtml-if> -</dtml-if> - -<dtml-if expr="_.len(eip_list)>0"> - <dtml-if expr="not (_.len(eip_list)==1 and eip_list[0]=='')"> - , category AS cat5 - </dtml-if> -</dtml-if> - -<dtml-if expr="_.len(code_entretien_list)>0"> - <dtml-if expr="not (_.len(code_entretien_list)==1 and code_entretien_list[0]=='')"> - , category AS cat6 - </dtml-if> -</dtml-if> - -<dtml-if expr="_.len(source_title)>0"> - <dtml-if expr="not (_.len(source_title)==1 and source_title[0]=='')"> - , category AS cat7 - JOIN catalog ON catalog.uid=cat7.category_uid - </dtml-if> -</dtml-if> - - -WHERE tissu.portal_type = "Tissu" - - -<dtml-if expr="_.len(id_list)>0"> - AND ( tissu.id LIKE "<dtml-var expr="id_list[0]">" - <dtml-in prefix="loop" expr="_.range(_.len(id_list)-1)"> - OR tissu.id LIKE "<dtml-var expr="id_list[loop_item+1]">" - </dtml-in> - ) -</dtml-if> - - -<dtml-if expr="_.len(source_title)>0"> - <dtml-if expr="not (_.len(source_title)==1 and source_title[0]=='')"> - AND cat7.uid=tissu.uid - AND cat7.base_category_uid=<dtml-var "portal_categories.source.uid"> - AND ( (catalog.title LIKE "<dtml-var expr="source_title[0]">") - <dtml-in prefix="loop" expr="_.range(_.len(source_title)-1)"> - OR (catalog.title LIKE "<dtml-var expr="source_title[loop_item+1]">") - </dtml-in> - ) - </dtml-if> -</dtml-if> - - -<dtml-if expr="_.len(categorie_tissu)>0"> - <dtml-if expr="not (_.len(categorie_tissu)==1 and categorie_tissu[0]=='')"> - AND cat1.uid=tissu.uid - AND ( cat1.category_uid=<dtml-var expr="identify_category(base_category='categorie_tissu',category=categorie_tissu[0])"> - <dtml-in prefix="loop" expr="_.range(_.len(categorie_tissu)-1)"> - OR cat1.category_uid=<dtml-var expr="identify_category(base_category='categorie_tissu',category=categorie_tissu[loop_item+1])"> - </dtml-in> - ) - AND cat1.base_category_uid=<dtml-var "portal_categories.categorie_tissu.uid"> - </dtml-if> -</dtml-if> - - -<dtml-if expr="_.len(motif)>0"> - <dtml-if expr="not (_.len(motif)==1 and motif[0]=='')"> - AND cat2.uid=tissu.uid - AND ( cat2.category_uid=<dtml-var expr="identify_category(base_category='motif',category=motif[0])"> - <dtml-in prefix="loop" expr="_.range(_.len(motif)-1)"> - OR cat2.category_uid=<dtml-var expr="identify_category(base_category='motif',category=motif[loop_item+1])"> - </dtml-in> - ) - AND cat2.base_category_uid=<dtml-var "portal_categories.motif.uid"> - </dtml-if> -</dtml-if> - - -<dtml-if expr="_.len(collection_list)>0"> - <dtml-if expr="not (_.len(collection_list)==1 and collection_list[0]=='')"> - AND cat3.uid=tissu.uid - AND ( cat3.category_uid=<dtml-var expr="identify_category(base_category='collection',category=collection_list[0])"> - <dtml-in prefix="loop" expr="_.range(_.len(collection_list)-1)"> - OR cat3.category_uid=<dtml-var expr="identify_category(base_category='collection',category=collection_list[loop_item+1])"> - </dtml-in> - ) - AND cat3.base_category_uid=<dtml-var "portal_categories.collection.uid"> - </dtml-if> -</dtml-if> - - -<dtml-if expr="_.len(composition_list)>0"> - <dtml-if expr="not (_.len(composition_list)==1 and composition_list[0]=='')"> - AND cat4.uid=tissu.uid - AND ( cat4.category_uid=<dtml-var expr="identify_category(base_category='composition',category=composition_list[0])"> - <dtml-in prefix="loop" expr="_.range(_.len(composition_list)-1)"> - OR cat4.category_uid=<dtml-var expr="identify_category(base_category='composition',category=composition_list[loop_item+1])"> - </dtml-in> - ) - AND cat4.base_category_uid=<dtml-var "portal_categories.composition.uid"> - </dtml-if> -</dtml-if> - - -<dtml-if expr="_.len(eip_list)>0"> - <dtml-if expr="not (_.len(eip_list)==1 and eip_list[0]=='')"> - AND cat5.uid=tissu.uid - AND ( cat5.category_uid=<dtml-var expr="identify_category(base_category='eip',category=eip_list[0])"> - <dtml-in prefix="loop" expr="_.range(_.len(eip_list)-1)"> - OR cat5.category_uid=<dtml-var expr="identify_category(base_category='eip',category=eip_list[loop_item+1])"> - </dtml-in> - ) - AND cat5.base_category_uid=<dtml-var "portal_categories.eip.uid"> - </dtml-if> -</dtml-if> - - -<dtml-if expr="_.len(code_entretien_list)>0"> - <dtml-if expr="not (_.len(code_entretien_list)==1 and code_entretien_list[0]=='')"> - AND cat6.uid=tissu.uid - AND ( cat6.category_uid=<dtml-var expr="identify_category(base_category='code_entretien',category=code_entretien_list[0])"> - <dtml-in prefix="loop" expr="_.range(_.len(code_entretien_list)-1)"> - OR cat6.category_uid=<dtml-var expr="identify_category(base_category='code_entretien',category=code_entretien_list[loop_item+1])"> - </dtml-in> - ) - AND cat6.base_category_uid=<dtml-var "portal_categories.code_entretien.uid"> - </dtml-if> -</dtml-if> - -<dtml-if expr="not(composant_state=='')"> - AND tissu.composant_state LIKE "<dtml-var expr="composant_state">" -</dtml-if> - -<dtml-if expr="not(description=='')"> - AND tissu.Description LIKE "<dtml-var expr="description">" -</dtml-if> - diff --git a/product/Coramy/skins/coramy_pdm/Transformation_getAllTransformedResource.py b/product/Coramy/skins/coramy_pdm/Transformation_getAllTransformedResource.py deleted file mode 100755 index f6623cfbc4..0000000000 --- a/product/Coramy/skins/coramy_pdm/Transformation_getAllTransformedResource.py +++ /dev/null @@ -1,22 +0,0 @@ -## Script (Python) "Transformation_getAllTransformedResource" -##bind container=container -##bind context=context -##bind namespace= -##bind script=script -##bind subpath=traverse_subpath -##parameters= -##title= -## -transformation = context - -transformation_list = [] -transformation_list.append(transformation) -transformation_list += transformation.getSpecialiseValueList(portal_type='Transformation') - -final_t_r_list = [] -for my_transformation in transformation_list : - raw_t_r_list=my_transformation.contentValues(filter={'portal_type':'Transformation Component'}) - transformed_resource_list =my_transformation.sort_object_list(unordered_list=raw_t_r_list, sort_order = (('resource', 'ASC'),) ) - final_t_r_list += transformed_resource_list - -return final_t_r_list diff --git a/product/Coramy/skins/coramy_pdm/TransformedComponent_getCorrespondanceList.py b/product/Coramy/skins/coramy_pdm/TransformedComponent_getCorrespondanceList.py deleted file mode 100755 index f395c3bf04..0000000000 --- a/product/Coramy/skins/coramy_pdm/TransformedComponent_getCorrespondanceList.py +++ /dev/null @@ -1,59 +0,0 @@ -## Script (Python) "TransformedComponent_getCorrespondanceList" -##bind container=container -##bind context=context -##bind namespace= -##bind script=script -##bind subpath=traverse_subpath -##parameters= -##title= -## -transformed_component = context -correspondance_list = [] - -variation_base_category_list = [] -q_variation_base_category_list = transformed_component.getQVariationBaseCategoryList() -v_variation_base_category_list = transformed_component.getVVariationBaseCategoryList() - -for base_category in q_variation_base_category_list : - variation_base_category_list.append(base_category) - -for base_category in v_variation_base_category_list : - if not base_category in variation_base_category_list : - variation_base_category_list.append(base_category) - -variation_base_category_list.sort() -variation_list_list = [] - -for base_category in variation_base_category_list : - variation_list = context.aq_parent.getVariationCategoryList(base_category_list = base_category) - variation_list_list.append(variation_list) - -cartesian_variation_list = context.cartesianProduct(variation_list_list) - -mapped_value_list = context.objectValues() -for variation_list in cartesian_variation_list : - quantity = '' - variation = [] - for mapped_value in mapped_value_list : - if mapped_value.test(transformed_component.asContext(categories=variation_list)) : - if mapped_value.getId().find('quantity') <> (-1): - try : - quantity = str(mapped_value.getProperty(key='quantity')) - except : pass - if mapped_value.getId().find('variation') <> (-1): - try : - variation = mapped_value.getVariationCategoryList() - except : pass - - if variation_list == [] and quantity == '' and variation == [] : - pass - else : - pretty_variation_1 = '- ' - for my_variation in variation_list : - pretty_variation_1 += my_variation+' - ' - pretty_variation_2 = '- ' - for my_variation in variation : - pretty_variation_2 += my_variation+' - ' - correspondance_list.append([pretty_variation_1, quantity, pretty_variation_2]) - -return correspondance_list diff --git a/product/Coramy/skins/coramy_pdm/Vetement_categorySearchForm.form b/product/Coramy/skins/coramy_pdm/Vetement_categorySearchForm.form deleted file mode 100755 index de61175950..0000000000 --- a/product/Coramy/skins/coramy_pdm/Vetement_categorySearchForm.form +++ /dev/null @@ -1,272 +0,0 @@ -<?xml version="1.0" encoding="iso-8859-1"?> - -<form> - <title>Rechercher</title> - <name>Forme_categorySearchForm</name> - <action>Base_searchHandler</action> - <enctype></enctype> - <method>POST</method> - <pt>form_view_dialog</pt> - - <groups> - <group> - <title>left</title> - <fields> - - <field><id>my_id_list</id> <type>LinesField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default type="list">[]</default> - <description></description> - <external_validator></external_validator> - <extra></extra> - <height type="int">5</height> - <hidden type="int">0</hidden> - <max_length></max_length> - <max_linelength></max_linelength> - <max_lines></max_lines> - <required type="int">0</required> - <title>Vêtement</title> - <width type="int">40</width> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_many_lines">You entered too many lines.</message> - <message name="line_too_long">A line was too long.</message> - <message name="too_long">You entered too many characters.</message> - </messages> - </field> - <field><id>my_description</id> <type>TextAreaField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <external_validator></external_validator> - <extra></extra> - <height type="int">3</height> - <hidden type="int">0</hidden> - <max_length></max_length> - <max_linelength></max_linelength> - <max_lines></max_lines> - <required type="int">0</required> - <title>Description</title> - <width type="int">40</width> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_many_lines">You entered too many lines.</message> - <message name="line_too_long">A line was too long.</message> - <message name="too_long">You entered too many characters.</message> - </messages> - </field> - <field><id>my_forme_id_list</id> <type>LinesField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default type="list">[]</default> - <description></description> - <external_validator></external_validator> - <extra></extra> - <height type="int">5</height> - <hidden type="int">0</hidden> - <max_length></max_length> - <max_linelength></max_linelength> - <max_lines></max_lines> - <required type="int">0</required> - <title>Formes concernées</title> - <width type="int">40</width> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_many_lines">You entered too many lines.</message> - <message name="line_too_long">A line was too long.</message> - <message name="too_long">You entered too many characters.</message> - </messages> - </field> - <field><id>my_correspondance_id</id> <type>LinesField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default type="list">[]</default> - <description></description> - <external_validator></external_validator> - <extra></extra> - <height type="int">5</height> - <hidden type="int">0</hidden> - <max_length></max_length> - <max_linelength></max_linelength> - <max_lines></max_lines> - <required type="int">0</required> - <title>Correspondances mesures</title> - <width type="int">40</width> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_many_lines">You entered too many lines.</message> - <message name="line_too_long">A line was too long.</message> - <message name="too_long">You entered too many characters.</message> - </messages> - </field> - <field><id>my_reset</id> <type>CheckBoxField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default type="int">1</default> - <description></description> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <title>Recherche globale</title> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>right</title> - <fields> - - <field><id>my_taille_list</id> <type>MultiListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default type="list">[]</default> - <description></description> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <items type="list">[]</items> - <required type="int">0</required> - <size type="int">6</size> - <title>Plage de tailles</title> - </values> - <tales> - <default>here/getTailleList</default> - <items>here/portal_categories/taille/getFormItemList</items> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - <field><id>my_mesure_vetement_list</id> <type>MultiListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default type="list">[]</default> - <description></description> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <items type="list">[]</items> - <required type="int">0</required> - <size type="int">7</size> - <title>Mesures Coramy</title> - </values> - <tales> - <default>here/getMesureVetementList</default> - <items>here/portal_categories/mesure_vetement/getFormItemList</items> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - <field><id>my_etat</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <max_length></max_length> - <required type="int">0</required> - <title>Etat</title> - <truncate type="int">0</truncate> - </values> - <tales> - <default>python:here.portal_workflow.getInfoFor(here, 'forme_state')</default> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - <field><id>my_list_form_id</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">1</hidden> - <max_length></max_length> - <required type="int">0</required> - <title></title> - <truncate type="int">0</truncate> - </values> - <tales> - <default>python:here.REQUEST.form_id</default> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - <field><id>my_list_method_id</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default>Vetement_categorySearchSql</default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">1</hidden> - <max_length></max_length> - <required type="int">0</required> - <title>x</title> - <truncate type="int">0</truncate> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - </fields> - </group> - </groups> -</form> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_pdm/Vetement_categorySearchSql.zsql b/product/Coramy/skins/coramy_pdm/Vetement_categorySearchSql.zsql deleted file mode 100755 index 3ad8f1cf47..0000000000 --- a/product/Coramy/skins/coramy_pdm/Vetement_categorySearchSql.zsql +++ /dev/null @@ -1,114 +0,0 @@ -<dtml-comment> -title: -connection_id:MySQL -max_rows:1000 -max_cache:100 -cache_time:0 -class_name:ZSQLBrain -class_file:zsqlbrain.py -</dtml-comment> -<params>correspondance_id="" -forme_id_list="" -mesure_vetement_list="" -taille_list="" - -description="" -etat="" -id_list=""</params> -SELECT DISTINCT vetement.id, vetement.relative_url, vetement.path, vetement.Description, vetement.forme_state -FROM catalog AS vetement - -<dtml-if expr="_.len(correspondance_id)>0"> - <dtml-if expr="not (_.len(correspondance_id)==1 and correspondance_id[0]=='')"> - , catalog AS catal1 JOIN category AS cat1 ON catal1.uid=cat1.category_uid - </dtml-if> -</dtml-if> - -<dtml-if expr="_.len(forme_id_list)>0"> - <dtml-if expr="not (_.len(forme_id_list)==1 and forme_id_list[0]=='')"> - , catalog AS catal2 JOIN category AS cat2 ON catal2.uid=cat2.category_uid - </dtml-if> -</dtml-if> - -<dtml-if expr="_.len(mesure_vetement_list)>0"> - <dtml-if expr="not (_.len(mesure_vetement_list)==1 and mesure_vetement_list[0]=='')"> - , category AS cat3 - </dtml-if> -</dtml-if> - -<dtml-if expr="_.len(taille_list)>0"> - <dtml-if expr="not (_.len(taille_list)==1 and taille_list[0]=='')"> - , category AS cat4 - </dtml-if> -</dtml-if> - - -WHERE vetement.portal_type = "Vetement" - -<dtml-if expr="_.len(id_list)>0"> - AND ( vetement.id LIKE "<dtml-var expr="id_list[0]">" - <dtml-in prefix="loop" expr="_.range(_.len(id_list)-1)"> - OR vetement.id LIKE "<dtml-var expr="id_list[loop_item+1]">" - </dtml-in> - ) -</dtml-if> - -<dtml-if expr="_.len(correspondance_id)>0"> - <dtml-if expr="not (_.len(correspondance_id)==1 and correspondance_id[0]=='')"> - AND cat1.uid=vetement.uid - AND cat1.base_category_uid=<dtml-var "portal_categories.specialise.uid"> - AND catal1.portal_type = "Correspondance mesures" - AND ( (catal1.id LIKE "<dtml-var expr="correspondance_id[0]">") - <dtml-in prefix="loop" expr="_.range(_.len(correspondance_id)-1)"> - OR (catal1.id LIKE "<dtml-var expr="correspondance_id[loop_item+1]">") - </dtml-in> - ) - </dtml-if> -</dtml-if> - -<dtml-if expr="_.len(forme_id_list)>0"> - <dtml-if expr="not (_.len(forme_id_list)==1 and forme_id_list[0]=='')"> - AND cat2.uid=vetement.uid - AND cat2.base_category_uid=<dtml-var "portal_categories.specialise.uid"> - AND catal2.portal_type = "Forme" - AND ( (catal2.id LIKE "<dtml-var expr="forme_id_list[0]">") - <dtml-in prefix="loop" expr="_.range(_.len(forme_id_list)-1)"> - OR (catal2.id LIKE "<dtml-var expr="forme_id_list[loop_item+1]">") - </dtml-in> - ) - </dtml-if> -</dtml-if> - -<dtml-if expr="_.len(mesure_vetement_list)>0"> - <dtml-if expr="not (_.len(mesure_vetement_list)==1 and mesure_vetement_list[0]=='')"> - AND cat3.uid=vetement.uid - AND ( cat3.category_uid=<dtml-var expr="identify_category(base_category='mesure_vetement',category=mesure_vetement_list[0])"> - <dtml-in prefix="loop" expr="_.range(_.len(mesure_vetement_list)-1)"> - OR cat3.category_uid=<dtml-var expr="identify_category(base_category='mesure_vetement',category=mesure_vetement_list[loop_item+1])"> - </dtml-in> - ) - AND cat3.base_category_uid=<dtml-var "portal_categories.mesure_vetement.uid"> - </dtml-if> -</dtml-if> - -<dtml-if expr="_.len(taille_list)>0"> - <dtml-if expr="not (_.len(taille_list)==1 and taille_list[0]=='')"> - AND cat4.uid=vetement.uid - AND ( cat4.category_uid=<dtml-var expr="identify_category(base_category='taille',category=taille_list[0])"> - <dtml-in prefix="loop" expr="_.range(_.len(taille_list)-1)"> - OR cat4.category_uid=<dtml-var expr="identify_category(base_category='taille',category=taille_list[loop_item+1])"> - </dtml-in> - ) - AND cat4.base_category_uid=<dtml-var "portal_categories.taille.uid"> - </dtml-if> -</dtml-if> - - -<dtml-if expr="not(etat=='')"> - AND vetement.vetement_state LIKE "<dtml-var expr="etat">" -</dtml-if> - -<dtml-if expr="not(description=='')"> - AND vetement.Description LIKE "<dtml-var expr="description">" -</dtml-if> - diff --git a/product/Coramy/skins/coramy_pdm/Vetement_thumbnailList.pt b/product/Coramy/skins/coramy_pdm/Vetement_thumbnailList.pt deleted file mode 100755 index 1704c3e845..0000000000 --- a/product/Coramy/skins/coramy_pdm/Vetement_thumbnailList.pt +++ /dev/null @@ -1,30 +0,0 @@ -<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" - "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> -<html xmlns="http://www.w3.org/1999/xhtml"> - - <head> - <title>Vetements</title> - <link rel=stylesheet type="text/css" href="http://erp5.coramy.fr/coramy/thumbnail.css" /> - </head> - - <body tal:define="vetement_list python:here.object_action_list(selection_name='vetement_selection')"> - <h1>Dessins techniques des vêtements sélectionnés</h1> - <div class="container"> - <tal:block tal:repeat="vetement python:vetement_list"> - <div class="float" tal:define="dessin_list python:vetement.contentValues(filter={'portal_type':'Dessin Technique'})"> - <a href="/" tal:attributes="href python:vetement.absolute_url()"> - <tal:block tal:condition="python: len(dessin_list)>0"> - <img class="image" src="logo.gif" alt="Dessin technique" tal:attributes="src python:dessin_list[0].absolute_url() + '?display=small&format=jpeg&resolution=150'" /> - </tal:block> - <tal:block tal:condition="python: len(dessin_list)==0"> - <p>Pas de dessin associé</p> - </tal:block> - <p tal:content="python:vetement.getId()" /> - </a> - </div> - </tal:block> - <hr /> - </div> - - </body> -</html> diff --git a/product/Coramy/skins/coramy_pdm/Vetement_zGetRelatedModeleList.zsql b/product/Coramy/skins/coramy_pdm/Vetement_zGetRelatedModeleList.zsql deleted file mode 100755 index 5a344a52a7..0000000000 --- a/product/Coramy/skins/coramy_pdm/Vetement_zGetRelatedModeleList.zsql +++ /dev/null @@ -1,17 +0,0 @@ -<dtml-comment> -title: -connection_id:MySQL -max_rows:10000 -max_cache:100 -cache_time:0 -class_name:ZSQLBrain -class_file:zsqlbrain.py -</dtml-comment> -<params>uid</params> -select resource.relative_url, resource.path, resource.portal_type, resource.description from catalog, category, catalog as resource -where catalog.uid = category.category_uid -and category.uid = resource.uid -and category.base_category_uid = <dtml-var "portal_categories.specialise.uid"> -and catalog.uid = <dtml-var uid> -and ( resource.portal_type = "Modele" -or resource.portal_type = "Variante Morphologique" ) \ No newline at end of file diff --git a/product/Coramy/skins/coramy_pdm/assorted_resource_quantity_view.form b/product/Coramy/skins/coramy_pdm/assorted_resource_quantity_view.form deleted file mode 100755 index 20b2859007..0000000000 --- a/product/Coramy/skins/coramy_pdm/assorted_resource_quantity_view.form +++ /dev/null @@ -1,329 +0,0 @@ -<?xml version="1.0"?> - -<form> - <title></title> - <row_length>4</row_length> - <name>transformed_resource_variation_view</name> - <pt>form_view</pt> - <action>base_edit</action> - <method>POST</method> - <enctype></enctype> - <encoding>UTF-8</encoding> - <stored_encoding>ISO-8859-1</stored_encoding> - <unicode_mode>false</unicode_mode> - <groups> - <group> - <title>Default</title> - <fields> - - <field><id>my_id</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">5</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <max_length></max_length> - <required type="int">1</required> - <title>Ligne n°</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>right</title> - <fields> - - </fields> - </group> - <group> - <title>center</title> - <fields> - - </fields> - </group> - <group> - <title>bottom</title> - <fields> - - <field><id>matrixbox</id> <type>MatrixBox</type> - <values> - <all_editable_attributes type="list">[('quantity', 'Quantity'), ('predicate_value_list', 'predicate_value_list'), ('variation_category_list', 'variation_category_list')]</all_editable_attributes> - <alternate_name></alternate_name> - <cell_base_id>quantity</cell_base_id> - <cell_range type="list">[]</cell_range> - <columns type="list">[('32', '32'), ('34', '34'), ('36', '36'), ('38', '38')]</columns> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <editable_attributes type="list">[('quantity', 'Quantity'), ('predicate_value_list', 'Predicate'), ('variation_category_list', 'Variation')]</editable_attributes> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <getter_method></getter_method> - <global_attributes type="list">[('mapped_value_property_list', 'mapped_value_property_list'), ('mapped_value_base_category_list', 'mapped_value_base_category_list'), ('domain_base_category_list', 'domain_base_category_list'), ('predicate_operator', 'predicate_operator')]</global_attributes> - <hidden type="int">0</hidden> - <lines type="list">[('Bleu', 'Bleu'), ('Rouge', 'Rouge'), ('Verts', 'Verts')]</lines> - <setter_method></setter_method> - <tabs type="list">[('A', 'A'), ('B', 'B'), ('C', 'C')]</tabs> - <title>matrixbox</title> - <update_cell_range type="int">0</update_cell_range> - </values> - <tales> - <columns>here/getQColumnItemList</columns> - <lines>here/getQLineItemList</lines> - <tabs>here/getQTabItemList</tabs> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - </messages> - </field> - <field><id>mapped_value_property_list</id> <type>LinesField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default type="list">['quantity']</default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <height type="int">5</height> - <hidden type="int">1</hidden> - <max_length></max_length> - <max_linelength></max_linelength> - <max_lines></max_lines> - <required type="int">0</required> - <title>Modified categories</title> - <unicode type="int">0</unicode> - <view_separator><br /> -</view_separator> - <whitespace_preserve type="int">0</whitespace_preserve> - <width type="int">40</width> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_many_lines">You entered too many lines.</message> - <message name="line_too_long">A line was too long.</message> - <message name="too_long">You entered too many characters.</message> - </messages> - </field> - <field><id>mapped_value_base_category_list</id> <type>LinesField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default type="list">[]</default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <height type="int">5</height> - <hidden type="int">1</hidden> - <max_length></max_length> - <max_linelength></max_linelength> - <max_lines></max_lines> - <required type="int">0</required> - <title>Modified categories</title> - <unicode type="int">0</unicode> - <view_separator><br /> -</view_separator> - <whitespace_preserve type="int">0</whitespace_preserve> - <width type="int">40</width> - </values> - <tales> - <default>python: here.getAssortedVariationBaseCategoryList()</default> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_many_lines">You entered too many lines.</message> - <message name="line_too_long">A line was too long.</message> - <message name="too_long">You entered too many characters.</message> - </messages> - </field> - <field><id>predicate_operator</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default>SUPERSET_OF</default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">1</hidden> - <max_length></max_length> - <required type="int">0</required> - <title>Operator</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - <field><id>domain_base_category_list</id> <type>LinesField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default type="list">[]</default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <height type="int">5</height> - <hidden type="int">1</hidden> - <max_length></max_length> - <max_linelength></max_linelength> - <max_lines></max_lines> - <required type="int">0</required> - <title>Valid Domain</title> - <unicode type="int">0</unicode> - <view_separator><br /> -</view_separator> - <whitespace_preserve type="int">0</whitespace_preserve> - <width type="int">40</width> - </values> - <tales> - <default>python: here.getAssortmentVariationBaseCategoryList()</default> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_many_lines">You entered too many lines.</message> - <message name="line_too_long">A line was too long.</message> - <message name="too_long">You entered too many characters.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>hidden</title> - <fields> - - <field><id>matrixbox_quantity</id> <type>FloatField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">10</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <required type="int">0</required> - <title>Quantity</title> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <default>cell/quantity | string:</default> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="not_float">You did not enter a floating point number.</message> - </messages> - </field> - <field><id>matrixbox_predicate_value_list</id> <type>LinesField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default type="list">[]</default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <height type="int">5</height> - <hidden type="int">1</hidden> - <max_length></max_length> - <max_linelength></max_linelength> - <max_lines></max_lines> - <required type="int">0</required> - <title>Predicate</title> - <unicode type="int">0</unicode> - <view_separator><br /> -</view_separator> - <whitespace_preserve type="int">0</whitespace_preserve> - <width type="int">40</width> - </values> - <tales> - <default>python: here.getAssortmentVariationCategoryList(cell_index)</default> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_many_lines">You entered too many lines.</message> - <message name="line_too_long">A line was too long.</message> - <message name="too_long">You entered too many characters.</message> - </messages> - </field> - <field><id>matrixbox_variation_category_list</id> <type>LinesField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default type="list">[]</default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <height type="int">5</height> - <hidden type="int">1</hidden> - <max_length></max_length> - <max_linelength></max_linelength> - <max_lines></max_lines> - <required type="int">0</required> - <title>Modified categories</title> - <unicode type="int">0</unicode> - <view_separator><br /> -</view_separator> - <whitespace_preserve type="int">0</whitespace_preserve> - <width type="int">40</width> - </values> - <tales> - <default>python: here.getAssortedVariationCategoryList(cell_index)</default> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_many_lines">You entered too many lines.</message> - <message name="line_too_long">A line was too long.</message> - <message name="too_long">You entered too many characters.</message> - </messages> - </field> - </fields> - </group> - </groups> -</form> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_pdm/assorted_resource_view.form b/product/Coramy/skins/coramy_pdm/assorted_resource_view.form deleted file mode 100755 index 95cd98bc3a..0000000000 --- a/product/Coramy/skins/coramy_pdm/assorted_resource_view.form +++ /dev/null @@ -1,233 +0,0 @@ -<?xml version="1.0"?> - -<form> - <title>Transformation</title> - <row_length>4</row_length> - <name>transformation_view</name> - <pt>form_view</pt> - <action>base_edit</action> - <method>POST</method> - <enctype>multipart/form-data</enctype> - <encoding>UTF-8</encoding> - <stored_encoding>ISO-8859-1</stored_encoding> - <unicode_mode>false</unicode_mode> - <groups> - <group> - <title>Default</title> - <fields> - - <field><id>my_id</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">5</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <max_length></max_length> - <required type="int">1</required> - <title>Ligne n°</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - <field><id>my_resource_relative_url</id> <type>RelationStringField</type> - <values> - <alternate_name></alternate_name> - <base_category>resource</base_category> - <catalog_index>relative_url</catalog_index> - <css_class></css_class> - <default></default> - <default_module>composant</default_module> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">40</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <jump_method>base_jump_relation</jump_method> - <max_length></max_length> - <portal_type type="list">[('Composant', 'Composant'), ('Tissu', 'Tissu'), ('Modele', 'Modele'), ('Forme', 'Forme'), ('Vetement', 'Vetement'), ('Category', 'Category'), ('Composant', 'Composant'), ('Gamme', 'Gamme'), ('Assortiment', 'Assortiment')]</portal_type> - <required type="int">0</required> - <title>Composant</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <update_method>base_update_relation</update_method> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - <field><id>my_description</id> <type>TextAreaField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <height type="int">3</height> - <hidden type="int">0</hidden> - <max_length></max_length> - <max_linelength></max_linelength> - <max_lines></max_lines> - <required type="int">0</required> - <title>Description</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - <width type="int">40</width> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_many_lines">You entered too many lines.</message> - <message name="line_too_long">A line was too long.</message> - <message name="too_long">You entered too many characters.</message> - </messages> - </field> - <field><id>my_transformation_subpart</id> <type>ListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <extra_item></extra_item> - <first_item type="int">0</first_item> - <hidden type="int">0</hidden> - <items type="list">[]</items> - <required type="int">0</required> - <size type="int">1</size> - <title>Sous-ensemble</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <items>here/portal_categories/transformation_subpart/getFormItemList</items> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>right</title> - <fields> - - <field><id>my_q_variation_base_category_list</id> <type>MultiListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default type="list">[]</default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <extra_item></extra_item> - <hidden type="int">0</hidden> - <items type="list">[]</items> - <required type="int">0</required> - <size type="int">3</size> - <title>Variations</title> - <unicode type="int">0</unicode> - <view_separator><br /> -</view_separator> - </values> - <tales> - <items>here/getVariationRangeBaseCategoryItemList | python:[]</items> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - <field><id>my_quantity_unit</id> <type>ListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <extra_item></extra_item> - <first_item type="int">0</first_item> - <hidden type="int">0</hidden> - <items type="list">[]</items> - <required type="int">0</required> - <size type="int">1</size> - <title>Unité</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <items>here/getQuantityUnitRangeItemList</items> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - <field><id>my_efficiency</id> <type>FloatField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">10</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <required type="int">0</required> - <title>Efficience (%)</title> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="not_float">You did not enter a floating point number.</message> - </messages> - </field> - </fields> - </group> - </groups> -</form> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_pdm/assortiment_list.form b/product/Coramy/skins/coramy_pdm/assortiment_list.form deleted file mode 100755 index 82effa7a92..0000000000 --- a/product/Coramy/skins/coramy_pdm/assortiment_list.form +++ /dev/null @@ -1,62 +0,0 @@ -<?xml version="1.0"?> - -<form> - <title>Liste des assortiments</title> - <row_length>4</row_length> - <name>assortiment_list</name> - <pt>form_list</pt> - <action></action> - <method>POST</method> - <enctype></enctype> - <encoding>UTF-8</encoding> - <stored_encoding>ISO-8859-1</stored_encoding> - <unicode_mode>false</unicode_mode> - <groups> - <group> - <title>Default</title> - <fields> - - <field><id>listbox</id> <type>ListBox</type> - <values> - <all_columns type="list">[('id', 'Assortiment'), ('Description', 'Description'), ('default_destination_title', 'Client'), ('destination_reference', 'R\xe9f\xe9rence Client')]</all_columns> - <all_editable_columns type="list">[]</all_editable_columns> - <alternate_name></alternate_name> - <columns type="list">[('id', 'Assortiment'), ('Description', 'Description'), ('default_destination_title', 'Client'), ('destination_reference', 'R\xe9f\xe9rence Client')]</columns> - <css_class></css_class> - <default></default> - <default_params type="list">[]</default_params> - <description></description> - <domain_root_list type="list">[]</domain_root_list> - <domain_tree type="int">0</domain_tree> - <editable type="int">1</editable> - <editable_columns type="list">[]</editable_columns> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <global_attributes type="list">[]</global_attributes> - <hidden type="int">0</hidden> - <lines type="int">30</lines> - <list_action>list</list_action> - <list_method type="method">portal_catalog</list_method> - <meta_types type="list">[]</meta_types> - <portal_types type="list">[('Assortiment', 'Assortiment')]</portal_types> - <report_root_list type="list">[]</report_root_list> - <report_tree type="int">0</report_tree> - <search type="int">1</search> - <search_columns type="list">[]</search_columns> - <select type="int">1</select> - <selection_name>assortiment_selection</selection_name> - <sort type="list">[('id', 'id')]</sort> - <sort_columns></sort_columns> - <stat_method></stat_method> - <title>Assortiments</title> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - </messages> - </field> - </fields> - </group> - </groups> -</form> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_pdm/assortiment_list_export.py b/product/Coramy/skins/coramy_pdm/assortiment_list_export.py deleted file mode 100755 index c4499dc93d..0000000000 --- a/product/Coramy/skins/coramy_pdm/assortiment_list_export.py +++ /dev/null @@ -1,26 +0,0 @@ -## Script (Python) "assortiment_list_export" -##bind container=container -##bind context=context -##bind namespace= -##bind script=script -##bind subpath=traverse_subpath -##parameters= -##title= -## -selection = context.portal_selections.getSelectionFor('assortiment_selection',REQUEST=context.REQUEST) -modele_list = selection(context=context) -request = context.REQUEST - -for modele_item in modele_list: - modele=modele_item.getObject() - if modele <> None : - - ligne_modele = '' - ligne_modele += str(modele.getId())+'\t' - ligne_modele += str(modele.getCollection())+'\t' - - print ligne_modele - -request.RESPONSE.setHeader('Content-Type','application/text') - -return printed diff --git a/product/Coramy/skins/coramy_pdm/assortiment_price_view.form b/product/Coramy/skins/coramy_pdm/assortiment_price_view.form deleted file mode 100755 index 7aeb523559..0000000000 --- a/product/Coramy/skins/coramy_pdm/assortiment_price_view.form +++ /dev/null @@ -1,475 +0,0 @@ -<?xml version="1.0"?> - -<form> - <title>Assortiment</title> - <row_length>4</row_length> - <name>assortiment_price_view</name> - <pt>form_view</pt> - <action>base_edit</action> - <method>POST</method> - <enctype></enctype> - <encoding>UTF-8</encoding> - <stored_encoding>ISO-8859-1</stored_encoding> - <unicode_mode>false</unicode_mode> - <groups> - <group> - <title>left</title> - <fields> - - <field><id>my_id</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <max_length></max_length> - <required type="int">1</required> - <title>Assortiment</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - <field><id>my_description</id> <type>TextAreaField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <height type="int">3</height> - <hidden type="int">0</hidden> - <max_length></max_length> - <max_linelength></max_linelength> - <max_lines></max_lines> - <required type="int">0</required> - <title>Description</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - <width type="int">40</width> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_many_lines">You entered too many lines.</message> - <message name="line_too_long">A line was too long.</message> - <message name="too_long">You entered too many characters.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>right</title> - <fields> - - <field><id>my_destination_title</id> <type>RelationStringField</type> - <values> - <alternate_name></alternate_name> - <base_category>destination</base_category> - <catalog_index>Title</catalog_index> - <css_class></css_class> - <default></default> - <default_module>organisation</default_module> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <jump_method>base_jump_relation</jump_method> - <max_length></max_length> - <portal_type type="list">[('Organisation', 'Organisation')]</portal_type> - <required type="int">0</required> - <title>Client</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <update_method>base_update_relation</update_method> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <default>here/getDefaultDestinationTitle</default> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - <field><id>my_destination_reference</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <max_length></max_length> - <required type="int">0</required> - <title>Référence client</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>center</title> - <fields> - - </fields> - </group> - <group> - <title>bottom</title> - <fields> - - <field><id>listbox</id> <type>ListBox</type> - <values> - <all_columns type="list">[('id', 'El\xe9ment'), ('description', 'Description'), ('coloris_list', 'Coloris'), ('taille_list', 'Tailles'), ('default_taille', 'Taille centrale'), ('quantity_range_list', 'Quantit\xe9s'), ('destination_base_price', 'Prix par d\xe9faut')]</all_columns> - <all_editable_columns type="list">[('description', 'description'), ('taille_list', 'tailles_list'), ('default_taille', 'Taille par d\xe9faut'), ('coloris_list', 'coloris_list'), ('destination_base_price', 'price'), ('quantity_range_list', 'Quantit\xe9s')]</all_editable_columns> - <alternate_name></alternate_name> - <columns type="list">[('id', 'El\xe9ment'), ('description', 'Description'), ('coloris_list', 'Coloris'), ('taille_list', 'Tailles'), ('default_taille', 'Taille centrale'), ('quantity_range_list', 'Quantit\xe9s'), ('destination_base_price', 'Prix par d\xe9faut')]</columns> - <css_class></css_class> - <default></default> - <default_params type="list">[('id', "''"), ('description', "''")]</default_params> - <description></description> - <domain_root_list type="list">[]</domain_root_list> - <domain_tree type="int">0</domain_tree> - <editable type="int">1</editable> - <editable_columns type="list">[('description', 'description'), ('taille_list', 'tailles_list'), ('default_taille', 'Taille par d\xe9faut'), ('coloris_list', 'coloris_list'), ('destination_base_price', 'price'), ('quantity_range_list', 'Quantit\xe9s')]</editable_columns> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <global_attributes type="list">[('predicate_operator', 'predicate_operator'), ('mapped_value_property_list', 'mapped_value_property_list'), ('domain_base_category_list', 'domain_base_category_list')]</global_attributes> - <hidden type="int">0</hidden> - <lines type="int">20</lines> - <list_action>list</list_action> - <list_method type="method">searchFolder</list_method> - <meta_types type="list">[]</meta_types> - <portal_types type="list">[('Element Tarif', 'Element Tarif')]</portal_types> - <report_root_list type="list">[]</report_root_list> - <report_tree type="int">0</report_tree> - <search type="int">0</search> - <search_columns></search_columns> - <select type="int">0</select> - <selection_name>elements_tarif</selection_name> - <sort type="list">[]</sort> - <sort_columns></sort_columns> - <stat_method></stat_method> - <title>Eléments de tarif</title> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - </messages> - </field> - <field><id>domain_base_category_list</id> <type>LinesField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default type="list">['taille', 'coloris']</default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <height type="int">5</height> - <hidden type="int">1</hidden> - <max_length></max_length> - <max_linelength></max_linelength> - <max_lines></max_lines> - <required type="int">0</required> - <title>Valid Domain</title> - <unicode type="int">0</unicode> - <view_separator><br /> -</view_separator> - <whitespace_preserve type="int">0</whitespace_preserve> - <width type="int">40</width> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_many_lines">You entered too many lines.</message> - <message name="line_too_long">A line was too long.</message> - <message name="too_long">You entered too many characters.</message> - </messages> - </field> - <field><id>mapped_value_property_list</id> <type>LinesField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default type="list">['destination_base_price']</default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <height type="int">5</height> - <hidden type="int">1</hidden> - <max_length></max_length> - <max_linelength></max_linelength> - <max_lines></max_lines> - <required type="int">0</required> - <title>Modified categories</title> - <unicode type="int">0</unicode> - <view_separator><br /> -</view_separator> - <whitespace_preserve type="int">0</whitespace_preserve> - <width type="int">40</width> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_many_lines">You entered too many lines.</message> - <message name="line_too_long">A line was too long.</message> - <message name="too_long">You entered too many characters.</message> - </messages> - </field> - <field><id>predicate_operator</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default>SUPERSET_OF</default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">1</hidden> - <max_length></max_length> - <required type="int">0</required> - <title>Operator</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>hidden</title> - <fields> - - <field><id>listbox_coloris_list</id> <type>MultiListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default type="list">[]</default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <extra_item></extra_item> - <hidden type="int">0</hidden> - <items type="list">[]</items> - <required type="int">0</required> - <size type="int">5</size> - <title>Coloris</title> - <unicode type="int">0</unicode> - <view_separator><br /> -</view_separator> - </values> - <tales> - <items>python:here.getVariationRangeCategoryItemList(base_category_list=['coloris'], base=0)</items> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - <field><id>listbox_description</id> <type>TextAreaField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <height type="int">2</height> - <hidden type="int">0</hidden> - <max_length></max_length> - <max_linelength></max_linelength> - <max_lines></max_lines> - <required type="int">0</required> - <title>Description</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - <width type="int">20</width> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_many_lines">You entered too many lines.</message> - <message name="line_too_long">A line was too long.</message> - <message name="too_long">You entered too many characters.</message> - </messages> - </field> - <field><id>listbox_taille_list</id> <type>MultiListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default type="list">[]</default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <extra_item></extra_item> - <hidden type="int">0</hidden> - <items type="list">[]</items> - <required type="int">0</required> - <size type="int">5</size> - <title>Tailles</title> - <unicode type="int">0</unicode> - <view_separator><br /> -</view_separator> - </values> - <tales> - <items>python:here.getVariationRangeCategoryItemList(base_category_list=['taille'],base=0)</items> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - <field><id>listbox_default_taille</id> <type>ListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <extra_item></extra_item> - <first_item type="int">0</first_item> - <hidden type="int">0</hidden> - <items type="list">[]</items> - <required type="int">0</required> - <size type="int">1</size> - <title>Taille centrale</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <default>here/getDefaultTaille</default> - <items>python:here.getVariationRangeCategoryItemList(base_category_list=['taille'],base=0)</items> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - <field><id>listbox_destination_base_price</id> <type>FloatField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">10</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <required type="int">0</required> - <title>Price</title> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="not_float">You did not enter a floating point number.</message> - </messages> - </field> - <field><id>listbox_quantity_range_list</id> <type>MultiListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default type="list">[]</default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <extra_item></extra_item> - <hidden type="int">0</hidden> - <items type="list">[]</items> - <required type="int">0</required> - <size type="int">5</size> - <title>Quantités</title> - <unicode type="int">0</unicode> - <view_separator><br /> -</view_separator> - </values> - <tales> - <items>python:here.portal_categories.quantity_range.getBaseItemList(base=0)</items> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - </fields> - </group> - </groups> -</form> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_pdm/assortiment_variated_reference_view.form b/product/Coramy/skins/coramy_pdm/assortiment_variated_reference_view.form deleted file mode 100755 index 8fc701c105..0000000000 --- a/product/Coramy/skins/coramy_pdm/assortiment_variated_reference_view.form +++ /dev/null @@ -1,211 +0,0 @@ -<?xml version="1.0"?> - -<form> - <title>Assortiment</title> - <row_length>4</row_length> - <name>assortiment_variated_reference_list</name> - <pt>form_view</pt> - <action>base_edit</action> - <method>POST</method> - <enctype>multipart/form-data</enctype> - <encoding>UTF-8</encoding> - <stored_encoding>ISO-8859-1</stored_encoding> - <unicode_mode>false</unicode_mode> - <groups> - <group> - <title>left</title> - <fields> - - <field><id>my_correspondance_tailles_id</id> <type>RelationStringField</type> - <values> - <alternate_name></alternate_name> - <base_category>specialise</base_category> - <catalog_index>id</catalog_index> - <css_class></css_class> - <default></default> - <default_module>correspondance_tailles</default_module> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <jump_method>base_jump_relation</jump_method> - <max_length></max_length> - <portal_type type="list">[('Correspondance Tailles', 'Correspondance Tailles')]</portal_type> - <required type="int">0</required> - <title>Correspondance tailles</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <update_method>base_update_relation</update_method> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - <field><id>my_correspondance_mesures_id</id> <type>RelationStringField</type> - <values> - <alternate_name></alternate_name> - <base_category>specialise</base_category> - <catalog_index>id</catalog_index> - <css_class></css_class> - <default></default> - <default_module>correspondance_mesures</default_module> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <jump_method>base_jump_relation</jump_method> - <max_length></max_length> - <portal_type type="list">[('Correspondance Mesures', 'Correspondance Mesures')]</portal_type> - <required type="int">0</required> - <title>Correspondance mesures</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <update_method>base_update_relation</update_method> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>right</title> - <fields> - - </fields> - </group> - <group> - <title>center</title> - <fields> - - </fields> - </group> - <group> - <title>bottom</title> - <fields> - - <field><id>listbox</id> <type>ListBox</type> - <values> - <all_columns type="list">[('id', 'R\xe9f\xe9rence'), ('mapped_value_property_list', 'Type'), ('Description', 'Description'), ('variation_base_category_list', 'Variable selon')]</all_columns> - <all_editable_columns type="list">[('variation_base_category_list', 'variation_base_category_list')]</all_editable_columns> - <alternate_name></alternate_name> - <columns type="list">[('id', 'R\xe9f\xe9rence'), ('mapped_value_property_list', 'Type'), ('Description', 'Description'), ('variation_base_category_list', 'Variable selon')]</columns> - <css_class></css_class> - <default></default> - <default_params type="list">[('id', "''")]</default_params> - <description></description> - <domain_root_list type="list">[]</domain_root_list> - <domain_tree type="int">0</domain_tree> - <editable type="int">1</editable> - <editable_columns type="list">[('variation_base_category_list', 'variation_base_category_list')]</editable_columns> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <global_attributes type="list">[]</global_attributes> - <hidden type="int">0</hidden> - <lines type="int">30</lines> - <list_action>list</list_action> - <list_method type="method">searchFolder</list_method> - <meta_types type="list">[]</meta_types> - <portal_types type="list">[('Variated Reference', 'Variated Reference')]</portal_types> - <report_root_list type="list">[]</report_root_list> - <report_tree type="int">0</report_tree> - <search type="int">0</search> - <search_columns></search_columns> - <select type="int">0</select> - <selection_name>variated_reference_selection</selection_name> - <sort type="list">[('id', 'id')]</sort> - <sort_columns></sort_columns> - <stat_method></stat_method> - <title>Références variables</title> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>hidden</title> - <fields> - - <field><id>listbox_variation_base_category_list</id> <type>MultiListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default type="list">[]</default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <extra_item></extra_item> - <hidden type="int">0</hidden> - <items type="list">[]</items> - <required type="int">0</required> - <size type="int">5</size> - <title>Axes variation</title> - <unicode type="int">0</unicode> - <view_separator><br /> -</view_separator> - </values> - <tales> - <items>python:here.getVariationBaseCategoryList()</items> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - <field><id>listbox_mapped_value_property_list</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <max_length></max_length> - <required type="int">0</required> - <title>Type</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - </fields> - </group> - </groups> -</form> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_pdm/assortiment_view.form b/product/Coramy/skins/coramy_pdm/assortiment_view.form deleted file mode 100755 index 17b645af90..0000000000 --- a/product/Coramy/skins/coramy_pdm/assortiment_view.form +++ /dev/null @@ -1,377 +0,0 @@ -<?xml version="1.0"?> - -<form> - <title>Assortiment</title> - <row_length>4</row_length> - <name>assortiment_view</name> - <pt>form_view</pt> - <action>base_edit</action> - <method>POST</method> - <enctype></enctype> - <encoding>UTF-8</encoding> - <stored_encoding>ISO-8859-1</stored_encoding> - <unicode_mode>false</unicode_mode> - <groups> - <group> - <title>left</title> - <fields> - - <field><id>my_id</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <max_length></max_length> - <required type="int">1</required> - <title>Assortiment</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - <field><id>my_description</id> <type>TextAreaField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <height type="int">3</height> - <hidden type="int">0</hidden> - <max_length></max_length> - <max_linelength></max_linelength> - <max_lines></max_lines> - <required type="int">0</required> - <title>Description</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - <width type="int">40</width> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_many_lines">You entered too many lines.</message> - <message name="line_too_long">A line was too long.</message> - <message name="too_long">You entered too many characters.</message> - </messages> - </field> - <field><id>my_code_ean13</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <max_length></max_length> - <required type="int">0</required> - <title>Gencod</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - <field><id>assortiment_state</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <max_length></max_length> - <required type="int">0</required> - <title>Etat</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>right</title> - <fields> - - <field><id>my_collection</id> <type>ListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <extra_item></extra_item> - <first_item type="int">0</first_item> - <hidden type="int">0</hidden> - <items type="list">[]</items> - <required type="int">1</required> - <size type="int">1</size> - <title>Collection</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <items>here/portal_categories/collection/getFormItemList</items> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - <field><id>my_eip</id> <type>ListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <extra_item></extra_item> - <first_item type="int">0</first_item> - <hidden type="int">0</hidden> - <items type="list">[]</items> - <required type="int">1</required> - <size type="int">1</size> - <title>Espace imaginaire</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <items>here/portal_categories/eip/getFormItemList</items> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - <field><id>my_destination_title</id> <type>RelationStringField</type> - <values> - <alternate_name></alternate_name> - <base_category>destination</base_category> - <catalog_index>Title</catalog_index> - <css_class></css_class> - <default></default> - <default_module>organisation</default_module> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <jump_method>base_jump_relation</jump_method> - <max_length></max_length> - <portal_type type="list">[('Organisation', 'Organisation')]</portal_type> - <required type="int">0</required> - <title>Client</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <update_method>base_update_relation</update_method> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <default>here/getDefaultDestinationTitle</default> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - <field><id>my_destination_reference</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <max_length></max_length> - <required type="int">0</required> - <title>Référence client</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - <field><id>my_taille_list</id> <type>MultiListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default type="list">[]</default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <extra_item></extra_item> - <hidden type="int">0</hidden> - <items type="list">[]</items> - <required type="int">0</required> - <size type="int">5</size> - <title>Plage de tailles</title> - <unicode type="int">0</unicode> - <view_separator><br /> -</view_separator> - </values> - <tales> - <default>here/getTailleList</default> - <items>here/portal_categories/taille/getFormItemList</items> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>center</title> - <fields> - - <field><id>my_commentaires</id> <type>TextAreaField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <height type="int">3</height> - <hidden type="int">0</hidden> - <max_length></max_length> - <max_linelength></max_linelength> - <max_lines></max_lines> - <required type="int">0</required> - <title>Commentaires</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - <width type="int">80</width> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_many_lines">You entered too many lines.</message> - <message name="line_too_long">A line was too long.</message> - <message name="too_long">You entered too many characters.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>bottom</title> - <fields> - - <field><id>listbox</id> <type>ListBox</type> - <values> - <all_columns type="list">[('id', 'Variante'), ('description', 'Description'), ('getPrototype', 'Prototype')]</all_columns> - <all_editable_columns type="list">[]</all_editable_columns> - <alternate_name></alternate_name> - <columns type="list">[('id', 'Variante'), ('description', 'Description'), ('getPrototype', 'Prototype')]</columns> - <css_class></css_class> - <default></default> - <default_params type="list">[('id', "''"), ('description', "''")]</default_params> - <description></description> - <domain_root_list type="list">[]</domain_root_list> - <domain_tree type="int">0</domain_tree> - <editable type="int">1</editable> - <editable_columns type="list">[]</editable_columns> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <global_attributes type="list">[]</global_attributes> - <hidden type="int">0</hidden> - <lines type="int">10</lines> - <list_action>list</list_action> - <list_method type="method">searchFolder</list_method> - <meta_types type="list">[]</meta_types> - <portal_types type="list">[('Variante Modele', 'Variante Modele')]</portal_types> - <report_root_list type="list">[]</report_root_list> - <report_tree type="int">0</report_tree> - <search type="int">0</search> - <search_columns></search_columns> - <select type="int">0</select> - <selection_name>variante_modele</selection_name> - <sort type="list">[]</sort> - <sort_columns></sort_columns> - <stat_method></stat_method> - <title>Variantes coloris</title> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - </messages> - </field> - </fields> - </group> - </groups> -</form> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_pdm/bareme_mesures_dessins_list.py b/product/Coramy/skins/coramy_pdm/bareme_mesures_dessins_list.py deleted file mode 100755 index 80f420d47c..0000000000 --- a/product/Coramy/skins/coramy_pdm/bareme_mesures_dessins_list.py +++ /dev/null @@ -1,55 +0,0 @@ -## Script (Python) "bareme_mesures_dessins_list" -##bind container=container -##bind context=context -##bind namespace= -##bind script=script -##bind subpath=traverse_subpath -##parameters=correspondance_mesures -##title= -## -modele = context -forme = modele.getDefaultValue('specialise',portal_type=['Forme']) -dessins_list = [] -dessins_final_list = [] - -if forme<>None: - dessins_list += forme.contentValues(filter={'portal_type':'Dessin Technique'}) - if len(dessins_list) == 1 : - dessins_final_list = dessins_list - else : - for dessin in dessins_list : - if dessin.getId().find('fl') == (-1) and dessin.getId().find('mes') == (-1) and dessin.getId().find('typ') == (-1): - dessins_final_list = [dessin] -if len(dessins_final_list) == 0 : - dessins_final_list = [None] - -vetements_list = modele.getValueList('specialise',portal_type=['Vetement']) -for vetement in vetements_list : - vetement_dessins_list =[] - # TEMPORARY modification because contentValues does not work in all cases - # dessins_list = vetement.contentValues(filter={'portal_type':'Dessin Technique'}) - dessins_list = [] - raw_dessins_list = vetement.objectValues() - for dessin_item in raw_dessins_list : - if dessin_item.getPortalType() == 'Dessin Technique' : - dessins_list.append(dessin_item) - - if len(dessins_list) == 1 and dessins_list[0].getId().find('fl') == (-1) and dessins_list[0].getId().find('typ') == (-1): - vetement_dessins_list = dessins_list - else : - for dessin in dessins_list : - if dessin.getId().find('fl') == (-1) and dessin.getId().find('typ') == (-1) : - vetement_dessins_list = [dessin] - - correspondance = vetement.getDefaultValue('specialise',portal_type=['Correspondance Mesures']) - if correspondance <> None and len(vetement_dessins_list) == 0 : - vetement_dessins_list.append(correspondance) - dessins_final_list += vetement_dessins_list - -if correspondance_mesures<>None : - dessins_final_list.append(correspondance_mesures) - -if len(dessins_final_list) == 1 : - dessins_final_list += [None] - -return dessins_final_list diff --git a/product/Coramy/skins/coramy_pdm/bareme_mesures_mesures_list.py b/product/Coramy/skins/coramy_pdm/bareme_mesures_mesures_list.py deleted file mode 100755 index 8eebdc3154..0000000000 --- a/product/Coramy/skins/coramy_pdm/bareme_mesures_mesures_list.py +++ /dev/null @@ -1,72 +0,0 @@ -## Script (Python) "bareme_mesures_mesures_list" -##bind container=container -##bind context=context -##bind namespace= -##bind script=script -##bind subpath=traverse_subpath -##parameters=tailles_list=[], correspondance=None -##title= -## -vetement = context -tailles_list = tailles_list -mesures_list = vetement.getMesureVetementList() -final_mesures_list = [] - -# identification de la correspondance mesures à utiliser -# si pas de correspondance associée au modèle, on regarde s'il y en a une sur le vetement -if correspondance == None : - correspondance = vetement.getDefaultValue('specialise',portal_type=['Correspondance Mesures']) - -def category_property(category, property): - if category <> None : - if hasattr(category,property) : - return getattr(category,property) - else : - return " " - else : - return " " - -for mesure in mesures_list : - category_items = mesure.split("/") - category_mesure = context.portal_categories.mesure_vetement - for item in category_items : - category_mesure=category_mesure[item] - mesure_line = [] - - # Gestion du code mesure - if correspondance <> None : - if correspondance.getCell(mesure, 'Code_mesure', base_id='mesure_client') <> None : - mesure_line.append(correspondance.getCell(mesure, 'Code_mesure', base_id='mesure_client').mesure_client) - else : - # recup du code associé à la categorie - mesure_line.append(category_property(category_mesure,"code_mesure")) - else : - # recup du code associé à la categorie - mesure_line.append(category_property(category_mesure,"code_mesure")) - - # Gestion du libellé mesure - if correspondance <> None : - if correspondance.getCell(mesure, 'Libelle', base_id='mesure_client') <> None : - mesure_line.append(correspondance.getCell(mesure, 'Libelle', base_id='mesure_client').mesure_client) - else : - # recup du titre de la categorie - mesure_line.append(category_property(category_mesure,"title")) - else : - # recup du titre de la categorie - mesure_line.append(category_property(category_mesure,"title")) - - # Gestion des mesures par tailles - mesure_line_list = [] - for taille in tailles_list : - if vetement.getCell(mesure, taille, base_id='mesure_coramy') <> None : - mesure_line_list.append(" "+str(vetement.getCell(mesure, taille, base_id='mesure_coramy').mesure_coramy)+" ") - else : - mesure_line_list.append(" ") - mesure_line.append(mesure_line_list) - - # Gestion des tolérances - mesure_line.append(category_property(category_mesure,"tolerance")) - - final_mesures_list.append(mesure_line) - -return final_mesures_list diff --git a/product/Coramy/skins/coramy_pdm/bareme_mesures_morphologie_print.pt b/product/Coramy/skins/coramy_pdm/bareme_mesures_morphologie_print.pt deleted file mode 100755 index fad0a4a83f..0000000000 --- a/product/Coramy/skins/coramy_pdm/bareme_mesures_morphologie_print.pt +++ /dev/null @@ -1,120 +0,0 @@ -<HTML> - <HEAD> - <meta http-equiv="content-type" content="text/html;charset=ISO-8859-1"> - <title tal:content="here/getTitle">Coramy</title> - <link rel=stylesheet type="text/css" href="mesure"> - </HEAD> - <BODY - tal:define="modele python:here.aq_parent; - vetement_list python:here.getValueList('specialise',portal_type=['Vetement']); - forme python:modele.getDefaultValue('specialise',portal_type=['Forme']); - correspondance_tailles python:modele.getDefaultValue('specialise',portal_type=['Correspondance Tailles']); - correspondance_mesures python:modele.getDefaultValue('specialise',portal_type=['Correspondance Mesures']); - dessins_final_list python:modele.bareme_mesures_dessins_list(correspondance_mesures) -"> - - <TABLE width="660" height="900" cellpadding="0" cellspacing="0"><!-- Tableau general --> - <TR><h3>Barème de mesures</h3></TR> - <TR height="10%"><!-- Infos --> - <TD> - <TABLE border="0" width="100%" height="100%"> - <TR> - <TD class="bold">Modèle Coramy</TD> - <TD tal:content="python:modele.getId()"></TD> - <TD class="bold" tal:content="python:'Référence '+modules['string'].capwords(modele.getDefaultDestinationTitle(''))"></TD> - <TD tal:content="python:modele.getDestinationReference('')"></TD> - </TR> - <TR> - <TD class="bold">Forme</TD> - <TD tal:content="modele/getFormeId">5120</TD> - <TD class="bold">Modéliste</TD> - <TD tal:content="python:modele.modele_show_local_roles(['ModelisteDesigne'])"></TD> - </TR> - <TR> - <TD class="bold">Designation</TD> - <TD colspan="3" tal:content="python:modele.getDescription('')"></TD> - </TR> - </TABLE> - </TD> - </TR> - <TR><!-- Dessins --> - <TD> - <TABLE class="Border" align="center" width="100%"> - <TR> - <TD><SPAN tal:condition="python:dessins_final_list[1]<>None"><img src="" tal:attributes="src python:dessins_final_list[1].absolute_url() + '?display=small&format=jpeg&resolution=150'" ></SPAN></TD> - <TD tal:attributes="rowspan python:(len(dessins_final_list)-1)"> <SPAN tal:condition="python:dessins_final_list[0]<>None"><img src="" tal:attributes="src python:dessins_final_list[0].absolute_url() + '?display=small&format=jpeg&resolution=150'" ></SPAN></TD> - </TR> - <SPAN tal:condition="python:len(dessins_final_list)>2"> - <TR tal:repeat="image python:dessins_final_list[2:len(dessins_final_list)]"> - <TD><SPAN tal:condition="python:image<>None"><img src="" tal:attributes="src python:image.absolute_url() + '?display=small&format=jpeg&resolution=150'" ></SPAN></TD> - </TR> - </SPAN> - </TABLE><!-- - <TABLE class="Border" align="center" width="100%"> - <TR> - <TD tal:attributes="colspan python:len(dessins_list)" align="left"><i>Dessin Technique</i></TD> - </TR> - <TR> <span tal:repeat="dessin dessins_list"> - <TD tal:condition="python:len(dessins_list)<=1" align="center"><img src="" tal:attributes="src python:dessin.absolute_url() + '?display=small&format=jpeg&resolution=150'" width="50%"> - </TD> - <TD tal:condition="python:len(dessins_list)>1" align="center"><img src="" tal:attributes="src python:dessin.absolute_url() + '?display=small&format=jpeg&resolution=150'" width="100%"> - </TD></span> - </TR> - </TABLE> --> - </TD> - </TR> - <SPAN tal:repeat="vetement vetement_list"> - <TR><!-- Tableau de mesures --> - <TD valign="top"> - <SPAN class="bold" tal:content="python:'Vêtement : %s - %s' %(vetement.getId(),here.getMorphoType())"/> - <TABLE tal:define="tailles python:here.bareme_mesures_morphologie_tailles_list(correspondance_tailles)" border="1" width="100%"> - <TR tal:condition="python:correspondance_tailles<>None"> - <TD rowspan="2">Code</TD> - <TD width="100%" rowspan="2">Mesure</TD> - <TD nowrap>Taille</TD> - <TD align="center" tal:repeat="index python:range(len(tailles[1]))" - tal:content="python:tailles[1][index]">36</TD><!-- BOUCLE SUR LE NB DE TAILLES --> - <TD rowspan="2" align="center">Tol +/-</TD> - </TR> - <TR tal:condition="python:correspondance_tailles==None"> - <TD>Code</TD> - <TD width="100%">Mesure</TD> - <TD nowrap>Taille</TD> - <TD align="center" tal:repeat="index python:range(len(tailles[1]))" - tal:content="python:tailles[1][index]">36</TD><!-- BOUCLE SUR LE NB DE TAILLES --> - <TD align="center">Tol +/-</TD> - </TR> - <TR tal:condition="python:correspondance_tailles<>None"> - <TD nowrap>Taille Coramy</TD> - <TD align="center" tal:repeat="index python:range(len(tailles[0]))" - tal:content="python:tailles[0][index]">36</TD><!-- BOUCLE SUR LE NB DE TAILLES --> - </TR> - <TR tal:repeat="mesure_line python:vetement.bareme_mesures_mesures_list(tailles[2],correspondance_mesures)"><!-- BOUCLE SUR LES TAILLES --> - <TD tal:content="python:mesure_line[0]" align="center">A</TD> - <TD tal:content="python:mesure_line[1]" colspan="2">Longueur totale</TD> - <TD tal:repeat="mesure python:mesure_line[2]"> - <SPAN tal:content="structure mesure"/> - </TD> - <TD tal:content="python:mesure_line[3]" align="center">1</TD> - </TR> - </TABLE> - </TD> - </TR> - - <TR tal:define="commentaires_list python:modules['string'].split('','\n')"><!-- Notes --> - <TD valign="top"> - <span tal:repeat="commentaires_item commentaires_list"> - <span tal:content="python:commentaires_item"/></span> - </TD> - </TR> - - </SPAN> - - <TR> - <TD height="40%"><p class="Copy">© Coramy - All rights reserved<br>This document is the confidential property of CORAMY<br>Anyone who divulges this plan is rendering - himself liable of legal proceedings</p> - </TD> - </TR> - </TABLE> - </BODY> -</HTML> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_pdm/bareme_mesures_morphologie_tailles_list.py b/product/Coramy/skins/coramy_pdm/bareme_mesures_morphologie_tailles_list.py deleted file mode 100755 index 253b513aff..0000000000 --- a/product/Coramy/skins/coramy_pdm/bareme_mesures_morphologie_tailles_list.py +++ /dev/null @@ -1,29 +0,0 @@ -## Script (Python) "bareme_mesures_morphologie_tailles_list" -##bind container=container -##bind context=context -##bind namespace= -##bind script=script -##bind subpath=traverse_subpath -##parameters=correspondance=None -##title= -## -var_morpho = context -vetement = context.aq_parent -tailles_list = vetement.getTailleList() -tailles_coramy = [] -tailles_client = [] -for taille in tailles_list : - taille_items = taille.split('/') - tailles_coramy.append(taille_items[len(taille_items)-1]) - -if correspondance == None : - tailles_client = tailles_coramy -else : - for taille in tailles_list : - if correspondance.getCell(var_morpho.getMorphoType(), taille, base_id='taille_client') <> None : - tailles_client.append(correspondance.getCell(var_morpho.getMorphoType(), taille, base_id='taille_client').taille_client) - else : - tailles_client.append("") - -tailles = [tailles_coramy, tailles_client, tailles_list] -return tailles diff --git a/product/Coramy/skins/coramy_pdm/bareme_mesures_print.pt b/product/Coramy/skins/coramy_pdm/bareme_mesures_print.pt deleted file mode 100755 index af16fb907d..0000000000 --- a/product/Coramy/skins/coramy_pdm/bareme_mesures_print.pt +++ /dev/null @@ -1,120 +0,0 @@ -<HTML> - <HEAD> - <meta http-equiv="content-type" content="text/html;charset=ISO-8859-1"> - <title tal:content="here/getTitle">Coramy</title> - <link rel=stylesheet type="text/css" href="mesure"> - </HEAD> - <BODY - tal:define="modele python:here; - vetement_list python:modele.getValueList('specialise',portal_type=['Vetement']); - forme python:modele.getDefaultValue('specialise',portal_type=['Forme']); - correspondance_tailles python:modele.getDefaultValue('specialise',portal_type=['Correspondance Tailles']); - correspondance_mesures python:modele.getDefaultValue('specialise',portal_type=['Correspondance Mesures']); - dessins_final_list python:modele.bareme_mesures_dessins_list(correspondance_mesures) -"> - - <TABLE width="660" height="900" cellpadding="0" cellspacing="0"><!-- Tableau general --> - <TR><h3>Barème de mesures</h3></TR> - <TR height="10%"><!-- Infos --> - <TD> - <TABLE border="0" width="100%" height="100%"> - <TR> - <TD class="bold">Modèle Coramy</TD> - <TD tal:content="python:modele.getId()"></TD> - <TD class="bold" tal:content="python:'Référence '+modules['string'].capwords(modele.getDefaultDestinationTitle(''))"></TD> - <TD tal:content="python:modele.getDestinationReference('')"></TD> - </TR> - <TR> - <TD class="bold">Forme</TD> - <TD tal:content="modele/getFormeId">5120</TD> - <TD class="bold">Modéliste</TD> - <TD tal:content="python:modele.modele_show_local_roles(roles=('ModelisteDesigne',),formated=0)"></TD> - </TR> - <TR> - <TD class="bold">Designation</TD> - <TD colspan="3" tal:content="python:modele.getDescription('')"></TD> - </TR> - </TABLE> - </TD> - </TR> - <TR><!-- Dessins --> - <TD> - <TABLE class="Border" align="center" width="100%"> - <TR> - <TD><SPAN tal:condition="python:dessins_final_list[1]<>None"><img src="" tal:attributes="src python:dessins_final_list[1].absolute_url() + '?display=small&format=jpeg&resolution=150'" ></SPAN></TD> - <TD tal:attributes="rowspan python:(len(dessins_final_list)-1)"> <SPAN tal:condition="python:dessins_final_list[0]<>None"><img src="" tal:attributes="src python:dessins_final_list[0].absolute_url() + '?display=small&format=jpeg&resolution=150'" ></SPAN></TD> - </TR> - <SPAN tal:condition="python:len(dessins_final_list)>2"> - <TR tal:repeat="image python:dessins_final_list[2:len(dessins_final_list)]"> - <TD><SPAN tal:condition="python:image<>None"><img src="" tal:attributes="src python:image.absolute_url() + '?display=small&format=jpeg&resolution=150'" ></SPAN></TD> - </TR> - </SPAN> - </TABLE><!-- - <TABLE class="Border" align="center" width="100%"> - <TR> - <TD tal:attributes="colspan python:len(dessins_list)" align="left"><i>Dessin Technique</i></TD> - </TR> - <TR> <span tal:repeat="dessin dessins_list"> - <TD tal:condition="python:len(dessins_list)<=1" align="center"><img src="" tal:attributes="src python:dessin.absolute_url() + '?display=small&format=jpeg&resolution=150'" width="50%"> - </TD> - <TD tal:condition="python:len(dessins_list)>1" align="center"><img src="" tal:attributes="src python:dessin.absolute_url() + '?display=small&format=jpeg&resolution=150'" width="100%"> - </TD></span> - </TR> - </TABLE> --> - </TD> - </TR> - <SPAN tal:repeat="vetement vetement_list"> - <TR><!-- Tableau de mesures --> - <TD valign="top"> - <SPAN class="bold" tal:content="python:'Vêtement : %s' %vetement.getId()"/> - <TABLE tal:define="tailles python:modele.Variated_getTailleList(correspondance_tailles)" border="1" width="100%"> - <TR tal:condition="python:correspondance_tailles<>None"> - <TD rowspan="2">Code</TD> - <TD width="100%" rowspan="2">Mesure</TD> - <TD nowrap>Taille</TD> - <TD align="center" tal:repeat="index python:range(len(tailles[1]))" - tal:content="python:tailles[1][index]">36</TD><!-- BOUCLE SUR LE NB DE TAILLES --> - <TD rowspan="2" align="center">Tol +/-</TD> - </TR> - <TR tal:condition="python:correspondance_tailles==None"> - <TD>Code</TD> - <TD width="100%">Mesure</TD> - <TD nowrap>Taille</TD> - <TD align="center" tal:repeat="index python:range(len(tailles[1]))" - tal:content="python:tailles[1][index]">36</TD><!-- BOUCLE SUR LE NB DE TAILLES --> - <TD align="center">Tol +/-</TD> - </TR> - <TR tal:condition="python:correspondance_tailles<>None"> - <TD nowrap>Taille Coramy</TD> - <TD align="center" tal:repeat="index python:range(len(tailles[0]))" - tal:content="python:tailles[0][index]">36</TD><!-- BOUCLE SUR LE NB DE TAILLES --> - </TR> - <TR tal:repeat="mesure_line python:vetement.bareme_mesures_mesures_list(tailles[2],correspondance_mesures)"><!-- BOUCLE SUR LES TAILLES --> - <TD tal:content="python:mesure_line[0]" align="center">A</TD> - <TD tal:content="python:mesure_line[1]" colspan="2">Longueur totale</TD> - <TD tal:repeat="mesure python:mesure_line[2]"> - <SPAN tal:content="structure mesure"/> - </TD> - <TD tal:content="python:mesure_line[3]" align="center">1</TD> - </TR> - </TABLE> - </TD> - </TR> - - <TR tal:define="commentaires_list python:modules['string'].split('','\n')"><!-- Notes --> - <TD valign="top"> - <span tal:repeat="commentaires_item commentaires_list"> - <span tal:content="python:commentaires_item"/></span> - </TD> - </TR> - - </SPAN> - - <TR> - <TD height="40%"><p class="Copy">© Coramy - All rights reserved<br>This document is the confidential property of CORAMY<br>Anyone who divulges this plan is rendering - himself liable of legal proceedings</p> - </TD> - </TR> - </TABLE> - </BODY> -</HTML> diff --git a/product/Coramy/skins/coramy_pdm/bareme_mesures_tailles_list.py b/product/Coramy/skins/coramy_pdm/bareme_mesures_tailles_list.py deleted file mode 100755 index 7049e52558..0000000000 --- a/product/Coramy/skins/coramy_pdm/bareme_mesures_tailles_list.py +++ /dev/null @@ -1,28 +0,0 @@ -## Script (Python) "bareme_mesures_tailles_list" -##bind container=container -##bind context=context -##bind namespace= -##bind script=script -##bind subpath=traverse_subpath -##parameters=correspondance=None -##title= -## -vetement = context -tailles_list = vetement.getTailleList() -tailles_coramy = [] -tailles_client = [] -for taille in tailles_list : - taille_items = taille.split('/') - tailles_coramy.append(taille_items[len(taille_items)-1]) - -if correspondance == None : - tailles_client = tailles_coramy -else : - for taille in tailles_list : - if correspondance.getCell(None, taille, base_id='taille_client') <> None : - tailles_client.append(correspondance.getCell(None, taille, base_id='taille_client').taille_client) - else : - tailles_client.append("") - -tailles = [tailles_coramy, tailles_client, tailles_list] -return tailles diff --git a/product/Coramy/skins/coramy_pdm/composant_history_view.pt b/product/Coramy/skins/coramy_pdm/composant_history_view.pt deleted file mode 100755 index c1109399fb..0000000000 --- a/product/Coramy/skins/coramy_pdm/composant_history_view.pt +++ /dev/null @@ -1,79 +0,0 @@ -<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" - "DTD/xhtml1-strict.dtd"> -<?xml-stylesheet href="erp5.css" rel="stylesheet" type="text/css"?> - -<span tal:replace="nothing"> -<!-- -Copyright (c) 2002 Nexedi SARL and Contributors. All Rights Reserved. - Thierry Faucher <tf@nexedi.com> - -This program is Free Software; you can redistribute it and/or -modify it under the terms of the GNU General Public License -as published by the Free Software Foundation; either version 2 -of the License, or (at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program; if not, write to the Free Software -Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. ---> -</span> - -<html xmlns="http://www.w3.org/1999/xhtml" lang="en" - xml:lang="en" - xmlns:tal="http://xml.zope.org/namespaces/tal" - xmlns:metal="http://xml.zope.org/namespaces/metal" - metal:use-macro="here/main_template/macros/master"> - - <head> - <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /> - <title tal:content="template/title_or_id">The title</title> - <link href="erp5.css" rel="stylesheet" type="text/css"/> - </head> - - <body><div metal:fill-slot="main"> - <div class="Main"> - - -<strong>Historique</strong><br><br> - -<table border=1> - <tr align=center> - <td><b>Etat</b></td><td><b>Date - Heure</b></td><td><b>Utilisateur</b></td><td><b>Action</b></td><td><b>Commentaires</b></td> - </tr> - <span tal:repeat="history_item python:here.portal_workflow.getInfoFor(here, 'composant_history')"> - - <tr> - <td> - <span tal:condition="history_item/composant_state | nothing" - tal:content="history_item/composant_state"/> - </td> - <td> - <span tal:condition="history_item/composant_time | nothing" - tal:content="history_item/composant_time"/> - </td> - <td> - <span tal:condition="history_item/composant_actor | nothing" - tal:content="history_item/composant_actor"/> - </td> - <td> - <span tal:condition="history_item/composant_action | nothing" - tal:content="history_item/composant_action"/> - </td> - <td> - <span tal:condition="history_item/composant_comment | nothing" - tal:content="history_item/composant_comment"/> - </td> - </tr> - - </span> -</table> - - </div> - </div> - </body> -</html> diff --git a/product/Coramy/skins/coramy_pdm/composant_list.form b/product/Coramy/skins/coramy_pdm/composant_list.form deleted file mode 100755 index 22b568da58..0000000000 --- a/product/Coramy/skins/coramy_pdm/composant_list.form +++ /dev/null @@ -1,62 +0,0 @@ -<?xml version="1.0"?> - -<form> - <title>Liste de composants</title> - <row_length>4</row_length> - <name>composant_list</name> - <pt>form_list</pt> - <action></action> - <method>POST</method> - <enctype>multipart/form-data</enctype> - <encoding>UTF-8</encoding> - <stored_encoding>ISO-8859-1</stored_encoding> - <unicode_mode>false</unicode_mode> - <groups> - <group> - <title>Default</title> - <fields> - - <field><id>listbox</id> <type>ListBox</type> - <values> - <all_columns type="list">[('id', 'R\xe9f\xe9rence'), ('default_source_title', 'Fournisseur'), ('default_source_reference', 'R\xe9f\xe9rence Fournisseur'), ('Description', 'Description'), ('composant_state', 'Etat')]</all_columns> - <all_editable_columns type="list">[]</all_editable_columns> - <alternate_name></alternate_name> - <columns type="list">[('id', 'R\xe9f\xe9rence'), ('default_source_title', 'Fournisseur'), ('source_id', 'No fournisseur'), ('default_source_reference', 'R\xe9f\xe9rence Fournisseur'), ('Description', 'Description'), ('composant_state', 'Etat')]</columns> - <css_class></css_class> - <default></default> - <default_params type="list">[('id', "''"), ('title', "''")]</default_params> - <description></description> - <domain_root_list type="list">[]</domain_root_list> - <domain_tree type="int">0</domain_tree> - <editable type="int">1</editable> - <editable_columns type="list">[]</editable_columns> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <global_attributes type="list">[]</global_attributes> - <hidden type="int">0</hidden> - <lines type="int">30</lines> - <list_action>list</list_action> - <list_method type="method">portal_catalog</list_method> - <meta_types type="list">[]</meta_types> - <portal_types type="list">[('Composant', 'Composant')]</portal_types> - <report_root_list type="list">[]</report_root_list> - <report_tree type="int">0</report_tree> - <search type="int">1</search> - <search_columns type="list">[]</search_columns> - <select type="int">1</select> - <selection_name>composant_selection</selection_name> - <sort type="list">[('id', 'id')]</sort> - <sort_columns></sort_columns> - <stat_method></stat_method> - <title>Composants</title> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - </messages> - </field> - </fields> - </group> - </groups> -</form> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_pdm/composant_list_sort_on.form b/product/Coramy/skins/coramy_pdm/composant_list_sort_on.form deleted file mode 100755 index ce549478d8..0000000000 --- a/product/Coramy/skins/coramy_pdm/composant_list_sort_on.form +++ /dev/null @@ -1,50 +0,0 @@ -<?xml version="1.0"?> - -<form> - <title>Trier</title> - <row_length>4</row_length> - <name>composant_list_sort_on</name> - <pt>form_sort</pt> - <action>base_sort_on</action> - <method>POST</method> - <enctype></enctype> - <encoding>UTF-8</encoding> - <stored_encoding>ISO-8859-1</stored_encoding> - <unicode_mode>false</unicode_mode> - <groups> - <group> - <title>Default</title> - <fields> - - <field><id>sort_order</id> <type>ListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <extra_item></extra_item> - <first_item type="int">0</first_item> - <hidden type="int">0</hidden> - <items type="list">[('Ascending', 'ascending'), ('Descending', 'descending')]</items> - <required type="int">1</required> - <size type="int">1</size> - <title>sort_order</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - </fields> - </group> - </groups> -</form> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_pdm/composant_list_ui.form b/product/Coramy/skins/coramy_pdm/composant_list_ui.form deleted file mode 100755 index 3e3b7fe775..0000000000 --- a/product/Coramy/skins/coramy_pdm/composant_list_ui.form +++ /dev/null @@ -1,28 +0,0 @@ -<?xml version="1.0"?> - -<form> - <title>Enregistrer les paramètres</title> - <row_length>4</row_length> - <name>composant_list_ui</name> - <pt>form_list_ui</pt> - <action>base_list_ui</action> - <method>POST</method> - <enctype></enctype> - <encoding>UTF-8</encoding> - <stored_encoding>ISO-8859-1</stored_encoding> - <unicode_mode>false</unicode_mode> - <groups> - <group> - <title>left</title> - <fields> - - </fields> - </group> - <group> - <title>right</title> - <fields> - - </fields> - </group> - </groups> -</form> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_pdm/composant_search.form b/product/Coramy/skins/coramy_pdm/composant_search.form deleted file mode 100755 index 5c9bae0191..0000000000 --- a/product/Coramy/skins/coramy_pdm/composant_search.form +++ /dev/null @@ -1,112 +0,0 @@ -<?xml version="1.0"?> - -<form> - <title>Rechercher</title> - <row_length>4</row_length> - <name>search</name> - <pt>form_dialog</pt> - <action>composant_list</action> - <method>POST</method> - <enctype></enctype> - <encoding>UTF-8</encoding> - <stored_encoding>ISO-8859-1</stored_encoding> - <unicode_mode>false</unicode_mode> - <groups> - <group> - <title>left</title> - <fields> - - <field><id>my_id</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default>%</default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">60</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <max_length></max_length> - <required type="int">1</required> - <title>Composant</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - <field><id>my_description</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default>%</default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">60</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <max_length></max_length> - <required type="int">1</required> - <title>Description</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - <field><id>my_source_reference</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default>%</default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">60</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <max_length></max_length> - <required type="int">1</required> - <title>Référence fournisseur</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>right</title> - <fields> - - </fields> - </group> - </groups> -</form> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_pdm/composant_view.form b/product/Coramy/skins/coramy_pdm/composant_view.form deleted file mode 100755 index ba7c53dfa3..0000000000 --- a/product/Coramy/skins/coramy_pdm/composant_view.form +++ /dev/null @@ -1,637 +0,0 @@ -<?xml version="1.0"?> - -<form> - <title>Composant</title> - <row_length>4</row_length> - <name>composant_view</name> - <pt>form_view</pt> - <action>base_edit</action> - <method>POST</method> - <enctype>multipart/form-data</enctype> - <encoding>UTF-8</encoding> - <stored_encoding>ISO-8859-1</stored_encoding> - <unicode_mode>false</unicode_mode> - <groups> - <group> - <title>left</title> - <fields> - - <field><id>my_id</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <max_length></max_length> - <required type="int">1</required> - <title>Composant</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - <field><id>my_source_title</id> <type>RelationStringField</type> - <values> - <alternate_name></alternate_name> - <base_category>source</base_category> - <catalog_index>Title</catalog_index> - <css_class></css_class> - <default></default> - <default_module>organisation</default_module> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <jump_method>base_jump_relation</jump_method> - <max_length></max_length> - <portal_type type="list">[('Organisation', 'Organisation')]</portal_type> - <required type="int">0</required> - <title>Fournisseur</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <update_method>base_update_relation</update_method> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - <field><id>my_source_reference</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <max_length></max_length> - <required type="int">0</required> - <title>Référence fournisseur</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - <field><id>my_type_composant</id> <type>ListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <extra_item></extra_item> - <first_item type="int">0</first_item> - <hidden type="int">0</hidden> - <items type="list">[]</items> - <required type="int">0</required> - <size type="int">1</size> - <title>Type composant</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <items>here/portal_categories/type_composant/getFormItemList</items> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - <field><id>my_description</id> <type>TextAreaField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <height type="int">3</height> - <hidden type="int">0</hidden> - <max_length></max_length> - <max_linelength></max_linelength> - <max_lines></max_lines> - <required type="int">0</required> - <title>Description</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - <width type="int">40</width> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_many_lines">You entered too many lines.</message> - <message name="line_too_long">A line was too long.</message> - <message name="too_long">You entered too many characters.</message> - </messages> - </field> - <field><id>my_quantity_unit</id> <type>ListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <extra_item></extra_item> - <first_item type="int">0</first_item> - <hidden type="int">0</hidden> - <items type="list">[]</items> - <required type="int">0</required> - <size type="int">1</size> - <title>Unité de gestion</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <items>here/portal_categories/quantity_unit/getFormItemList</items> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - <field><id>my_source_base_price</id> <type>FloatField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <required type="int">0</required> - <title>Prix fournisseur</title> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="not_float">You did not enter a floating point number.</message> - </messages> - </field> - <field><id>my_base_price</id> <type>FloatField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <required type="int">0</required> - <title>Prix Coramy</title> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="not_float">You did not enter a floating point number.</message> - </messages> - </field> - <field><id>my_priced_quantity</id> <type>FloatField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <required type="int">0</required> - <title>Prix pour</title> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <default>here/getPricedQuantity</default> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="not_float">You did not enter a floating point number.</message> - </messages> - </field> - <field><id>my_source_base_price_validity</id> <type>DateTimeField</type> - <values> - <allow_empty_time type="int">0</allow_empty_time> - <alternate_name></alternate_name> - <ampm_time_style type="int">0</ampm_time_style> - <css_class></css_class> - <date_only type="int">1</date_only> - <date_separator>/</date_separator> - <default_now type="int">0</default_now> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <hidden type="int">0</hidden> - <input_order>dmy</input_order> - <input_style>text</input_style> - <required type="int">0</required> - <time_separator>:</time_separator> - <title>Validité du prix</title> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="not_datetime">You did not enter a valid date and time.</message> - <message name="datetime_out_of_range">The date and time you entered were out of range.</message> - </messages> - </field> - <field><id>composant_state</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <max_length></max_length> - <required type="int">0</required> - <title>Etat</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <default>python:here.portal_workflow.getInfoFor(here, 'composant_state')</default> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>right</title> - <fields> - - <field><id>my_collection_list</id> <type>MultiListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default type="list">[]</default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <extra_item></extra_item> - <hidden type="int">0</hidden> - <items type="list">[]</items> - <required type="int">0</required> - <size type="int">5</size> - <title>Collection</title> - <unicode type="int">0</unicode> - <view_separator><br /> -</view_separator> - </values> - <tales> - <default>here/getCollectionList</default> - <items>here/portal_categories/collection/getFormItemList</items> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - <field><id>my_composition_list</id> <type>MultiListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default type="list">[]</default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <extra_item></extra_item> - <hidden type="int">0</hidden> - <items type="list">[]</items> - <required type="int">0</required> - <size type="int">5</size> - <title>Composition</title> - <unicode type="int">0</unicode> - <view_separator><br /> -</view_separator> - </values> - <tales> - <default>here/getCompositionList</default> - <items>here/portal_categories/composition/getFormItemList</items> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - <field><id>my_base_weight</id> <type>FloatField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <required type="int">0</required> - <title>Poids (g)</title> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="not_float">You did not enter a floating point number.</message> - </messages> - </field> - <field><id>my_base_length</id> <type>FloatField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <required type="int">0</required> - <title>Longueur (cm)</title> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="not_float">You did not enter a floating point number.</message> - </messages> - </field> - <field><id>my_base_width</id> <type>FloatField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <required type="int">0</required> - <title>Largeur (cm)</title> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="not_float">You did not enter a floating point number.</message> - </messages> - </field> - <field><id>my_base_height</id> <type>FloatField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <required type="int">0</required> - <title>Hauteur (cm)</title> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="not_float">You did not enter a floating point number.</message> - </messages> - </field> - <field><id>my_nb_couleurs</id> <type>IntegerField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <end></end> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <required type="int">0</required> - <start></start> - <title>Nombre de couleurs</title> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="not_integer">You did not enter an integer.</message> - <message name="integer_out_of_range">The integer you entered was out of range.</message> - </messages> - </field> - <field><id>my_length_quantity</id> <type>FloatField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <required type="int">0</required> - <title>Equivalent mètres</title> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="not_float">You did not enter a floating point number.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>center</title> - <fields> - - <field><id>my_commentaires</id> <type>TextAreaField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <height type="int">3</height> - <hidden type="int">0</hidden> - <max_length></max_length> - <max_linelength></max_linelength> - <max_lines></max_lines> - <required type="int">0</required> - <title>Commentaires</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - <width type="int">80</width> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_many_lines">You entered too many lines.</message> - <message name="line_too_long">A line was too long.</message> - <message name="too_long">You entered too many characters.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>bottom</title> - <fields> - - <field><id>listbox</id> <type>ListBox</type> - <values> - <all_columns type="list">[('id', 'Variante'), ('description', 'Description'), ('portal_type', 'Type')]</all_columns> - <all_editable_columns></all_editable_columns> - <alternate_name></alternate_name> - <columns type="list">[('id', 'Variante'), ('description', 'Description')]</columns> - <css_class></css_class> - <default></default> - <default_params type="list">[('id', "''"), ('description', "''"), ('portal_type', "''")]</default_params> - <description></description> - <domain_root_list></domain_root_list> - <domain_tree></domain_tree> - <editable type="int">1</editable> - <editable_columns></editable_columns> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <global_attributes></global_attributes> - <hidden type="int">0</hidden> - <lines type="int">30</lines> - <list_action>list</list_action> - <list_method type="method">searchFolder</list_method> - <meta_types type="list">[]</meta_types> - <portal_types type="list">[]</portal_types> - <report_root_list></report_root_list> - <report_tree></report_tree> - <search type="int">0</search> - <search_columns></search_columns> - <select type="int">0</select> - <selection_name>variantes</selection_name> - <sort type="list">[('id', 'id')]</sort> - <sort_columns></sort_columns> - <stat_method></stat_method> - <title>Variantes</title> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - </messages> - </field> - </fields> - </group> - </groups> -</form> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_pdm/composant_workflow_valider_composant.form b/product/Coramy/skins/coramy_pdm/composant_workflow_valider_composant.form deleted file mode 100755 index 52a2b4759b..0000000000 --- a/product/Coramy/skins/coramy_pdm/composant_workflow_valider_composant.form +++ /dev/null @@ -1,81 +0,0 @@ -<?xml version="1.0"?> - -<form> - <title>Valider le composant</title> - <row_length>4</row_length> - <name>main</name> - <pt>form_view_dialog</pt> - <action>workflow_status_modify</action> - <method>POST</method> - <enctype>multipart/form-data</enctype> - <encoding>UTF-8</encoding> - <stored_encoding>ISO-8859-1</stored_encoding> - <unicode_mode>false</unicode_mode> - <groups> - <group> - <title>Default</title> - <fields> - - <field><id>my_comment</id> <type>TextAreaField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <height type="int">5</height> - <hidden type="int">0</hidden> - <max_length></max_length> - <max_linelength></max_linelength> - <max_lines></max_lines> - <required type="int">0</required> - <title>Commentaires</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - <width type="int">80</width> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_many_lines">You entered too many lines.</message> - <message name="line_too_long">A line was too long.</message> - <message name="too_long">You entered too many characters.</message> - </messages> - </field> - <field><id>my_workflow_action</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default>valider_composant</default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">1</hidden> - <max_length></max_length> - <required type="int">1</required> - <title> </title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - </fields> - </group> - </groups> -</form> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_pdm/correspondance_list.form b/product/Coramy/skins/coramy_pdm/correspondance_list.form deleted file mode 100755 index 01856d7d23..0000000000 --- a/product/Coramy/skins/coramy_pdm/correspondance_list.form +++ /dev/null @@ -1,62 +0,0 @@ -<?xml version="1.0"?> - -<form> - <title>Liste de correspondances</title> - <row_length>4</row_length> - <name>correspondance_list</name> - <pt>form_list</pt> - <action></action> - <method>POST</method> - <enctype>multipart/form-data</enctype> - <encoding>UTF-8</encoding> - <stored_encoding>ISO-8859-1</stored_encoding> - <unicode_mode>false</unicode_mode> - <groups> - <group> - <title>Default</title> - <fields> - - <field><id>listbox</id> <type>ListBox</type> - <values> - <all_columns type="list">[('id', 'Correspondance'), ('default_destination_title', 'Client'), ('Description', 'Description')]</all_columns> - <all_editable_columns type="list">[]</all_editable_columns> - <alternate_name></alternate_name> - <columns type="list">[('id', 'Correspondance'), ('default_destination_title', 'Client'), ('Description', 'Description')]</columns> - <css_class></css_class> - <default></default> - <default_params type="list">[('id', "''")]</default_params> - <description></description> - <domain_root_list type="list">[]</domain_root_list> - <domain_tree type="int">0</domain_tree> - <editable type="int">1</editable> - <editable_columns type="list">[]</editable_columns> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <global_attributes type="list">[]</global_attributes> - <hidden type="int">0</hidden> - <lines type="int">30</lines> - <list_action>list</list_action> - <list_method type="method">searchFolder</list_method> - <meta_types type="list">[]</meta_types> - <portal_types type="list">[('Correspondance Tailles', 'Correspondance Tailles'), ('Correspondance Mesures', 'Correspondance Mesures')]</portal_types> - <report_root_list type="list">[]</report_root_list> - <report_tree type="int">0</report_tree> - <search type="int">1</search> - <search_columns></search_columns> - <select type="int">1</select> - <selection_name>tissu_selection</selection_name> - <sort type="list">[('id', 'id')]</sort> - <sort_columns></sort_columns> - <stat_method></stat_method> - <title>Correspondances</title> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - </messages> - </field> - </fields> - </group> - </groups> -</form> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_pdm/correspondance_mesures_client_view.form b/product/Coramy/skins/coramy_pdm/correspondance_mesures_client_view.form deleted file mode 100755 index 65becdc642..0000000000 --- a/product/Coramy/skins/coramy_pdm/correspondance_mesures_client_view.form +++ /dev/null @@ -1,293 +0,0 @@ -<?xml version="1.0"?> - -<form> - <title>Correspondance de mesures</title> - <row_length>4</row_length> - <name>transformed_resource_variation_view</name> - <pt>form_view</pt> - <action>base_edit</action> - <method>POST</method> - <enctype></enctype> - <encoding>UTF-8</encoding> - <stored_encoding>ISO-8859-1</stored_encoding> - <unicode_mode>false</unicode_mode> - <groups> - <group> - <title>Default</title> - <fields> - - <field><id>my_id</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <max_length></max_length> - <required type="int">1</required> - <title>Correspondance</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>right</title> - <fields> - - </fields> - </group> - <group> - <title>center</title> - <fields> - - </fields> - </group> - <group> - <title>bottom</title> - <fields> - - <field><id>matrixbox</id> <type>MatrixBox</type> - <values> - <all_editable_attributes type="list">[('mesure_client', 'mesure_client'), ('predicate_value', 'predicate_value')]</all_editable_attributes> - <alternate_name></alternate_name> - <cell_base_id>mesure_client</cell_base_id> - <cell_range type="list">[]</cell_range> - <columns type="list">[('32', '32'), ('34', '34'), ('36', '36'), ('38', '38')]</columns> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <editable_attributes type="list">[('mesure_client', 'mesure_client'), ('predicate_value', 'predicate_value')]</editable_attributes> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <getter_method></getter_method> - <global_attributes type="list">[('domain_base_category_list', 'domain_base_category_list'), ('mapped_value_property_list', 'mapped_value_property_list'), ('predicate_operator', 'predicate_operator')]</global_attributes> - <hidden type="int">0</hidden> - <lines type="list">[('Bleu', 'Bleu'), ('Rouge', 'Rouge'), ('Verts', 'Verts')]</lines> - <setter_method></setter_method> - <tabs type="list">[]</tabs> - <title>matrixbox</title> - <update_cell_range type="int">0</update_cell_range> - </values> - <tales> - <columns>here/getReferenceMesureItemList</columns> - <lines>here/getMesureVetementItemList</lines> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - </messages> - </field> - <field><id>domain_base_category_list</id> <type>LinesField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default type="list">[]</default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <height type="int">5</height> - <hidden type="int">1</hidden> - <max_length></max_length> - <max_linelength></max_linelength> - <max_lines></max_lines> - <required type="int">0</required> - <title>Valid Domain</title> - <unicode type="int">0</unicode> - <view_separator><br /> -</view_separator> - <whitespace_preserve type="int">0</whitespace_preserve> - <width type="int">40</width> - </values> - <tales> - <default>python:[here.portal_categories.reference_mesure.id,here.portal_categories.mesure_vetement.id]</default> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_many_lines">You entered too many lines.</message> - <message name="line_too_long">A line was too long.</message> - <message name="too_long">You entered too many characters.</message> - </messages> - </field> - <field><id>mapped_value_property_list</id> <type>LinesField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default type="list">['mesure_client']</default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <height type="int">5</height> - <hidden type="int">1</hidden> - <max_length></max_length> - <max_linelength></max_linelength> - <max_lines></max_lines> - <required type="int">0</required> - <title>Modified categories</title> - <unicode type="int">0</unicode> - <view_separator><br /> -</view_separator> - <whitespace_preserve type="int">0</whitespace_preserve> - <width type="int">40</width> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_many_lines">You entered too many lines.</message> - <message name="line_too_long">A line was too long.</message> - <message name="too_long">You entered too many characters.</message> - </messages> - </field> - <field><id>predicate_operator</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default>SUPERSET_OF</default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">1</hidden> - <max_length></max_length> - <required type="int">0</required> - <title>Operator</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>hidden</title> - <fields> - - <field><id>matrixbox_predicate_value</id> <type>LinesField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default type="list">[]</default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <height type="int">5</height> - <hidden type="int">1</hidden> - <max_length></max_length> - <max_linelength></max_linelength> - <max_lines></max_lines> - <required type="int">0</required> - <title>matrixbox_predicate_value</title> - <unicode type="int">0</unicode> - <view_separator><br /> -</view_separator> - <whitespace_preserve type="int">0</whitespace_preserve> - <width type="int">40</width> - </values> - <tales> - <default>python:cell_index</default> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_many_lines">You entered too many lines.</message> - <message name="line_too_long">A line was too long.</message> - <message name="too_long">You entered too many characters.</message> - </messages> - </field> - <field><id>matrixbox_variation_category_list</id> <type>MultiListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default type="list">[]</default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <extra_item></extra_item> - <hidden type="int">0</hidden> - <items type="list">[]</items> - <required type="int">0</required> - <size type="int">5</size> - <title>matrixbox_value</title> - <unicode type="int">0</unicode> - <view_separator><br /> -</view_separator> - </values> - <tales> - <default>cell/getVariationCategoryList | string:Error</default> - <items>here/getVariationRangeCategoryItemList</items> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - <field><id>matrixbox_mesure_client</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <max_length></max_length> - <required type="int">0</required> - <title>Mesure client</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <default>cell/mesure_client | string:</default> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - </fields> - </group> - </groups> -</form> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_pdm/correspondance_mesures_view.form b/product/Coramy/skins/coramy_pdm/correspondance_mesures_view.form deleted file mode 100755 index ccf21cdc78..0000000000 --- a/product/Coramy/skins/coramy_pdm/correspondance_mesures_view.form +++ /dev/null @@ -1,234 +0,0 @@ -<?xml version="1.0"?> - -<form> - <title>Correspondance de mesures</title> - <row_length>4</row_length> - <name>correspondance_mesures_view</name> - <pt>form_view</pt> - <action>base_edit</action> - <method>POST</method> - <enctype>multipart/form-data</enctype> - <encoding>UTF-8</encoding> - <stored_encoding>ISO-8859-1</stored_encoding> - <unicode_mode>false</unicode_mode> - <groups> - <group> - <title>left</title> - <fields> - - <field><id>my_id</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <max_length></max_length> - <required type="int">1</required> - <title>Correspondance</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - <field><id>my_description</id> <type>TextAreaField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <height type="int">5</height> - <hidden type="int">0</hidden> - <max_length></max_length> - <max_linelength></max_linelength> - <max_lines></max_lines> - <required type="int">0</required> - <title>Description</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - <width type="int">40</width> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_many_lines">You entered too many lines.</message> - <message name="line_too_long">A line was too long.</message> - <message name="too_long">You entered too many characters.</message> - </messages> - </field> - <field><id>my_destination_title</id> <type>RelationStringField</type> - <values> - <alternate_name></alternate_name> - <base_category>destination</base_category> - <catalog_index>Title</catalog_index> - <css_class></css_class> - <default></default> - <default_module>organisation</default_module> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <jump_method>base_jump_relation</jump_method> - <max_length></max_length> - <portal_type type="list">[('Organisation', 'Organisation')]</portal_type> - <required type="int">0</required> - <title>Client</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <update_method>base_update_relation</update_method> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - <field><id>my_file</id> <type>FileField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <title>Fichier image</title> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>right</title> - <fields> - - <field><id>my_mesure_vetement_list</id> <type>MultiListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default type="list">[]</default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <extra_item></extra_item> - <hidden type="int">0</hidden> - <items type="list">[]</items> - <required type="int">0</required> - <size type="int">6</size> - <title>Mesures Coramy</title> - <unicode type="int">0</unicode> - <view_separator><br /> -</view_separator> - </values> - <tales> - <default>here/getMesureVetementList</default> - <items>here/portal_categories/mesure_vetement/getFormItemList</items> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - <field><id>my_reference_mesure_list</id> <type>MultiListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default type="list">[]</default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <extra_item></extra_item> - <hidden type="int">0</hidden> - <items type="list">[]</items> - <required type="int">0</required> - <size type="int">5</size> - <title>Références client</title> - <unicode type="int">0</unicode> - <view_separator><br /> -</view_separator> - </values> - <tales> - <default>here/getReferenceMesureList</default> - <items>here/portal_categories/reference_mesure/getFormItemList</items> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - <field><id>image</id> <type>ImageField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <image_display>thumbnail</image_display> - <image_format>jpg</image_format> - <image_resolution type="int">75</image_resolution> - <max_length></max_length> - <required type="int">0</required> - <title> </title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <default>here/absolute_url</default> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - </fields> - </group> - </groups> -</form> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_pdm/correspondance_tailles_client_view.form b/product/Coramy/skins/coramy_pdm/correspondance_tailles_client_view.form deleted file mode 100755 index 722ef9c7bd..0000000000 --- a/product/Coramy/skins/coramy_pdm/correspondance_tailles_client_view.form +++ /dev/null @@ -1,293 +0,0 @@ -<?xml version="1.0"?> - -<form> - <title>Correspondance de tailles</title> - <row_length>4</row_length> - <name>transformed_resource_variation_view</name> - <pt>form_view</pt> - <action>base_edit</action> - <method>POST</method> - <enctype></enctype> - <encoding>UTF-8</encoding> - <stored_encoding>ISO-8859-1</stored_encoding> - <unicode_mode>false</unicode_mode> - <groups> - <group> - <title>Default</title> - <fields> - - <field><id>my_id</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <max_length></max_length> - <required type="int">1</required> - <title>Correspondance</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>right</title> - <fields> - - </fields> - </group> - <group> - <title>center</title> - <fields> - - </fields> - </group> - <group> - <title>bottom</title> - <fields> - - <field><id>matrixbox</id> <type>MatrixBox</type> - <values> - <all_editable_attributes type="list">[('taille_client', 'taille_client'), ('predicate_value', 'predicate_value')]</all_editable_attributes> - <alternate_name></alternate_name> - <cell_base_id>taille_client</cell_base_id> - <cell_range type="list">[]</cell_range> - <columns type="list">[('32', '32'), ('34', '34'), ('36', '36'), ('38', '38')]</columns> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <editable_attributes type="list">[('taille_client', 'taille_client'), ('predicate_value', 'predicate_value')]</editable_attributes> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <getter_method></getter_method> - <global_attributes type="list">[('domain_base_category_list', 'domain_base_category_list'), ('mapped_value_property_list', 'mapped_value_property_list'), ('predicate_operator', 'predicate_operator')]</global_attributes> - <hidden type="int">0</hidden> - <lines type="list">[('Bleu', 'Bleu'), ('Rouge', 'Rouge'), ('Verts', 'Verts')]</lines> - <setter_method></setter_method> - <tabs type="list">[]</tabs> - <title>matrixbox</title> - <update_cell_range type="int">0</update_cell_range> - </values> - <tales> - <columns>here/getTailleItemList</columns> - <lines>here/getLineItemList</lines> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - </messages> - </field> - <field><id>domain_base_category_list</id> <type>LinesField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default type="list">[]</default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <height type="int">5</height> - <hidden type="int">1</hidden> - <max_length></max_length> - <max_linelength></max_linelength> - <max_lines></max_lines> - <required type="int">0</required> - <title>Valid Domain</title> - <unicode type="int">0</unicode> - <view_separator><br /> -</view_separator> - <whitespace_preserve type="int">0</whitespace_preserve> - <width type="int">40</width> - </values> - <tales> - <default>python:[here.portal_categories.taille.id,here.portal_categories.morpho_type.id]</default> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_many_lines">You entered too many lines.</message> - <message name="line_too_long">A line was too long.</message> - <message name="too_long">You entered too many characters.</message> - </messages> - </field> - <field><id>mapped_value_property_list</id> <type>LinesField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default type="list">['taille_client']</default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <height type="int">5</height> - <hidden type="int">1</hidden> - <max_length></max_length> - <max_linelength></max_linelength> - <max_lines></max_lines> - <required type="int">0</required> - <title>Modified categories</title> - <unicode type="int">0</unicode> - <view_separator><br /> -</view_separator> - <whitespace_preserve type="int">0</whitespace_preserve> - <width type="int">40</width> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_many_lines">You entered too many lines.</message> - <message name="line_too_long">A line was too long.</message> - <message name="too_long">You entered too many characters.</message> - </messages> - </field> - <field><id>predicate_operator</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default>SUPERSET_OF</default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">1</hidden> - <max_length></max_length> - <required type="int">0</required> - <title>Operator</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>hidden</title> - <fields> - - <field><id>matrixbox_predicate_value</id> <type>LinesField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default type="list">[]</default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <height type="int">5</height> - <hidden type="int">1</hidden> - <max_length></max_length> - <max_linelength></max_linelength> - <max_lines></max_lines> - <required type="int">0</required> - <title>matrixbox_predicate_value</title> - <unicode type="int">0</unicode> - <view_separator><br /> -</view_separator> - <whitespace_preserve type="int">0</whitespace_preserve> - <width type="int">40</width> - </values> - <tales> - <default>python:cell_index</default> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_many_lines">You entered too many lines.</message> - <message name="line_too_long">A line was too long.</message> - <message name="too_long">You entered too many characters.</message> - </messages> - </field> - <field><id>matrixbox_variation_category_list</id> <type>MultiListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default type="list">[]</default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <extra_item></extra_item> - <hidden type="int">0</hidden> - <items type="list">[]</items> - <required type="int">0</required> - <size type="int">5</size> - <title>matrixbox_value</title> - <unicode type="int">0</unicode> - <view_separator><br /> -</view_separator> - </values> - <tales> - <default>cell/getVariationCategoryList | string:Error</default> - <items>here/getVariationRangeCategoryItemList</items> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - <field><id>matrixbox_taille_client</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <max_length></max_length> - <required type="int">0</required> - <title>Taille client</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <default>cell/taille_client | string:</default> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - </fields> - </group> - </groups> -</form> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_pdm/correspondance_tailles_view.form b/product/Coramy/skins/coramy_pdm/correspondance_tailles_view.form deleted file mode 100755 index 4192d035aa..0000000000 --- a/product/Coramy/skins/coramy_pdm/correspondance_tailles_view.form +++ /dev/null @@ -1,182 +0,0 @@ -<?xml version="1.0"?> - -<form> - <title>Correspondance de tailles</title> - <row_length>4</row_length> - <name>correspondance_tailles_view</name> - <pt>form_view</pt> - <action>base_edit</action> - <method>POST</method> - <enctype>multipart/form-data</enctype> - <encoding>UTF-8</encoding> - <stored_encoding>ISO-8859-1</stored_encoding> - <unicode_mode>false</unicode_mode> - <groups> - <group> - <title>Default</title> - <fields> - - <field><id>my_id</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <max_length></max_length> - <required type="int">1</required> - <title>Correspondance</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - <field><id>my_description</id> <type>TextAreaField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <height type="int">5</height> - <hidden type="int">0</hidden> - <max_length></max_length> - <max_linelength></max_linelength> - <max_lines></max_lines> - <required type="int">0</required> - <title>Description</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - <width type="int">40</width> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_many_lines">You entered too many lines.</message> - <message name="line_too_long">A line was too long.</message> - <message name="too_long">You entered too many characters.</message> - </messages> - </field> - <field><id>my_destination_title</id> <type>RelationStringField</type> - <values> - <alternate_name></alternate_name> - <base_category>destination</base_category> - <catalog_index>Title</catalog_index> - <css_class></css_class> - <default></default> - <default_module>organisation</default_module> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <jump_method>base_jump_relation</jump_method> - <max_length></max_length> - <portal_type type="list">[('Organisation', 'Organisation')]</portal_type> - <required type="int">0</required> - <title>Client</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <update_method>base_update_relation</update_method> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <default>here/getDefaultDestinationTitle</default> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>right</title> - <fields> - - <field><id>my_taille_list</id> <type>MultiListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default type="list">[]</default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <extra_item></extra_item> - <hidden type="int">0</hidden> - <items type="list">[]</items> - <required type="int">0</required> - <size type="int">6</size> - <title>Tailles Coramy</title> - <unicode type="int">0</unicode> - <view_separator><br /> -</view_separator> - </values> - <tales> - <default>here/getTailleList</default> - <items>here/portal_categories/taille/getFormItemList</items> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - <field><id>my_morpho_type_list</id> <type>MultiListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default type="list">[]</default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <extra_item></extra_item> - <hidden type="int">0</hidden> - <items type="list">[]</items> - <required type="int">0</required> - <size type="int">5</size> - <title>Morphologies</title> - <unicode type="int">0</unicode> - <view_separator><br /> -</view_separator> - </values> - <tales> - <default>here/getMorphoTypeList</default> - <items>here/portal_categories/morpho_type/getFormItemList</items> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - </fields> - </group> - </groups> -</form> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_pdm/dessin_technique_view.form b/product/Coramy/skins/coramy_pdm/dessin_technique_view.form deleted file mode 100755 index 7ea4f911bf..0000000000 --- a/product/Coramy/skins/coramy_pdm/dessin_technique_view.form +++ /dev/null @@ -1,140 +0,0 @@ -<?xml version="1.0"?> - -<form> - <title>Dessin technique</title> - <row_length>4</row_length> - <name>variante_modele_view</name> - <pt>form_view</pt> - <action>base_edit</action> - <method>POST</method> - <enctype>multipart/form-data</enctype> - <encoding>UTF-8</encoding> - <stored_encoding>ISO-8859-1</stored_encoding> - <unicode_mode>false</unicode_mode> - <groups> - <group> - <title>left</title> - <fields> - - <field><id>my_id</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <max_length></max_length> - <required type="int">1</required> - <title>Dessin</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - <field><id>my_description</id> <type>TextAreaField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <height type="int">3</height> - <hidden type="int">0</hidden> - <max_length></max_length> - <max_linelength></max_linelength> - <max_lines></max_lines> - <required type="int">0</required> - <title>Description</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - <width type="int">40</width> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_many_lines">You entered too many lines.</message> - <message name="line_too_long">A line was too long.</message> - <message name="too_long">You entered too many characters.</message> - </messages> - </field> - <field><id>my_file</id> <type>FileField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <title>Fichier</title> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>right</title> - <fields> - - <field><id>image</id> <type>ImageField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <image_display>thumbnail</image_display> - <image_format>jpg</image_format> - <image_resolution type="int">75</image_resolution> - <max_length></max_length> - <required type="int">0</required> - <title> </title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <default>here/absolute_url</default> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - </fields> - </group> - </groups> -</form> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_pdm/element_tarif_list_create.py b/product/Coramy/skins/coramy_pdm/element_tarif_list_create.py deleted file mode 100755 index fce1f8a82d..0000000000 --- a/product/Coramy/skins/coramy_pdm/element_tarif_list_create.py +++ /dev/null @@ -1,29 +0,0 @@ -## Script (Python) "element_tarif_list_create" -##bind container=container -##bind context=context -##bind namespace= -##bind script=script -##bind subpath=traverse_subpath -##parameters=form_id='' -##title= -## -request = context.REQUEST -elements_tarif_list = context.objectValues() -elements_list= [] - -for element in elements_tarif_list : - if element.portal_type == "Element Tarif" : - elements_list.append(element) - -new_id = "t"+str(len(elements_list)) -context.invokeFactory(type_name="Element Tarif", - id=new_id, - RESPONSE=request.RESPONSE) -context[new_id].flushActivity(invoke=1) - -redirect_url = '%s/%s?%s' % ( context.absolute_url() - , form_id - , 'portal_status_message=1+éléments+de+tarif+créés.' - ) - -request[ 'RESPONSE' ].redirect( redirect_url ) diff --git a/product/Coramy/skins/coramy_pdm/element_tarif_view.form b/product/Coramy/skins/coramy_pdm/element_tarif_view.form deleted file mode 100755 index 64e30e9161..0000000000 --- a/product/Coramy/skins/coramy_pdm/element_tarif_view.form +++ /dev/null @@ -1,463 +0,0 @@ -<?xml version="1.0"?> - -<form> - <title>Elément tarif</title> - <row_length>4</row_length> - <name>element_tarfi_view</name> - <pt>form_view</pt> - <action>base_edit</action> - <method>POST</method> - <enctype></enctype> - <encoding>UTF-8</encoding> - <stored_encoding>ISO-8859-1</stored_encoding> - <unicode_mode>false</unicode_mode> - <groups> - <group> - <title>left</title> - <fields> - - <field><id>my_id</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">10</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <max_length></max_length> - <required type="int">1</required> - <title>Elément</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - <field><id>my_description</id> <type>TextAreaField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <height type="int">3</height> - <hidden type="int">0</hidden> - <max_length></max_length> - <max_linelength></max_linelength> - <max_lines></max_lines> - <required type="int">0</required> - <title>Description</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - <width type="int">40</width> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_many_lines">You entered too many lines.</message> - <message name="line_too_long">A line was too long.</message> - <message name="too_long">You entered too many characters.</message> - </messages> - </field> - <field><id>my_destination_base_price</id> <type>FloatField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">10</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <required type="int">0</required> - <title>Prix de vente par défaut</title> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="not_float">You did not enter a floating point number.</message> - </messages> - </field> - <field><id>my_quantity_range_list</id> <type>MultiListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default type="list">[]</default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <extra_item></extra_item> - <hidden type="int">0</hidden> - <items type="list">[]</items> - <required type="int">0</required> - <size type="int">5</size> - <title>Plages de quantité</title> - <unicode type="int">0</unicode> - <view_separator><br /> -</view_separator> - </values> - <tales> - <items>python:here.portal_categories.quantity_range.getBaseItemList(base=0)</items> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - <field><id>matrixbox</id> <type>MatrixBox</type> - <values> - <all_editable_attributes type="list">[('destination_base_price', 'Price'), ('predicate_value', 'predicate_value')]</all_editable_attributes> - <alternate_name></alternate_name> - <cell_base_id>destination_base_price</cell_base_id> - <cell_range type="list">[]</cell_range> - <columns type="list">[('300', '300'), ('1000', '1000'), ('5000', '5000')]</columns> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <editable_attributes type="list">[('destination_base_price', 'Price'), ('predicate_value', 'predicate_value')]</editable_attributes> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <getter_method></getter_method> - <global_attributes type="list">[('mapped_value_property_list', 'mapped_value_property_list'), ('predicate_operator', 'predicate_operator'), ('domain_base_category_list', 'domain_base_category_list')]</global_attributes> - <hidden type="int">0</hidden> - <lines type="list">[('None', 'None')]</lines> - <setter_method></setter_method> - <tabs type="list">[]</tabs> - <title>Prix par quantités</title> - <update_cell_range type="int">0</update_cell_range> - </values> - <tales> - <columns>python:here.portal_categories.getItemList(here.getQuantityRangeList())</columns> - <lines>python:((None,None),)</lines> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>right</title> - <fields> - - <field><id>my_taille_list</id> <type>MultiListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default type="list">[]</default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <extra_item></extra_item> - <hidden type="int">0</hidden> - <items type="list">[]</items> - <required type="int">0</required> - <size type="int">5</size> - <title>Plage de tailles</title> - <unicode type="int">0</unicode> - <view_separator><br /> -</view_separator> - </values> - <tales> - <default>here/getTailleList</default> - <items>here/portal_categories/taille/getFormItemList</items> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - <field><id>my_default_taille</id> <type>ListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <extra_item></extra_item> - <first_item type="int">0</first_item> - <hidden type="int">0</hidden> - <items type="list">[]</items> - <required type="int">0</required> - <size type="int">1</size> - <title>Taille centrale</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <items>here/portal_categories/taille/getFormItemList</items> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>center</title> - <fields> - - <field><id>my_commentaires</id> <type>TextAreaField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <height type="int">2</height> - <hidden type="int">0</hidden> - <max_length></max_length> - <max_linelength></max_linelength> - <max_lines></max_lines> - <required type="int">0</required> - <title>Commentaires</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - <width type="int">80</width> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_many_lines">You entered too many lines.</message> - <message name="line_too_long">A line was too long.</message> - <message name="too_long">You entered too many characters.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>bottom</title> - <fields> - - <field><id>domain_base_category_list</id> <type>LinesField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default type="list">['quantity_range']</default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <height type="int">5</height> - <hidden type="int">1</hidden> - <max_length></max_length> - <max_linelength></max_linelength> - <max_lines></max_lines> - <required type="int">0</required> - <title>Valid Domain</title> - <unicode type="int">0</unicode> - <view_separator><br /> -</view_separator> - <whitespace_preserve type="int">0</whitespace_preserve> - <width type="int">40</width> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_many_lines">You entered too many lines.</message> - <message name="line_too_long">A line was too long.</message> - <message name="too_long">You entered too many characters.</message> - </messages> - </field> - <field><id>mapped_value_property_list</id> <type>LinesField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default type="list">['destination_base_price']</default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <height type="int">5</height> - <hidden type="int">1</hidden> - <max_length></max_length> - <max_linelength></max_linelength> - <max_lines></max_lines> - <required type="int">0</required> - <title>Modified categories</title> - <unicode type="int">0</unicode> - <view_separator><br /> -</view_separator> - <whitespace_preserve type="int">0</whitespace_preserve> - <width type="int">40</width> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_many_lines">You entered too many lines.</message> - <message name="line_too_long">A line was too long.</message> - <message name="too_long">You entered too many characters.</message> - </messages> - </field> - <field><id>predicate_operator</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default>SUPERSET_OF</default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">1</hidden> - <max_length></max_length> - <required type="int">0</required> - <title>Operator</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>hidden</title> - <fields> - - <field><id>matrixbox_destination_base_price</id> <type>FloatField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">10</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <required type="int">0</required> - <title>Quantity</title> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <default>cell/destination_base_price | string:</default> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="not_float">You did not enter a floating point number.</message> - </messages> - </field> - <field><id>matrixbox_predicate_value</id> <type>LinesField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default type="list">[]</default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <height type="int">5</height> - <hidden type="int">1</hidden> - <max_length></max_length> - <max_linelength></max_linelength> - <max_lines></max_lines> - <required type="int">0</required> - <title>matrixbox_predicate_value</title> - <unicode type="int">0</unicode> - <view_separator><br /> -</view_separator> - <whitespace_preserve type="int">0</whitespace_preserve> - <width type="int">40</width> - </values> - <tales> - <default>python:('quantity_range/'+cell_index[1],)</default> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_many_lines">You entered too many lines.</message> - <message name="line_too_long">A line was too long.</message> - <message name="too_long">You entered too many characters.</message> - </messages> - </field> - <field><id>matrixbox_title</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <max_length></max_length> - <required type="int">0</required> - <title>matrixbox_title</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <default>cell/getTitle | string:</default> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - </fields> - </group> - </groups> -</form> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_pdm/etiquettes_collection.py b/product/Coramy/skins/coramy_pdm/etiquettes_collection.py deleted file mode 100755 index 1f32bacf09..0000000000 --- a/product/Coramy/skins/coramy_pdm/etiquettes_collection.py +++ /dev/null @@ -1,37 +0,0 @@ -## Script (Python) "etiquettes_collection" -##bind container=container -##bind context=context -##bind namespace= -##bind script=script -##bind subpath=traverse_subpath -##parameters= -##title= -## -selection = context.portal_selections.getSelectionFor('modele_selection',REQUEST=context.REQUEST) -modele_list = selection(context=context) -request = context.REQUEST - -for modele_item in modele_list: - modele=modele_item.getObject() - - ligne_modele = '' - ligne_modele += modele.id+'£' - ligne_modele += modele.getCollection()+'£' - ligne_modele += modele.composition+'£' - - content_list = modele.objectValues() - price_list = [] - for content_item in content_list: - if content_item.portal_type == 'Element Tarif': - price_list.append(content_item) - - for price in price_list: - ligne_modele += price.description+'£' - ligne_modele += str(price.destination_base_price)+'£' - -# ligne_modele += '$' - print ligne_modele - -request.RESPONSE.setHeader('Content-Type','application/text') - -return printed diff --git a/product/Coramy/skins/coramy_pdm/etiquettes_collection_planches.py b/product/Coramy/skins/coramy_pdm/etiquettes_collection_planches.py deleted file mode 100755 index 3448f9a4ee..0000000000 --- a/product/Coramy/skins/coramy_pdm/etiquettes_collection_planches.py +++ /dev/null @@ -1,43 +0,0 @@ -## Script (Python) "etiquettes_collection_planches" -##bind container=container -##bind context=context -##bind namespace= -##bind script=script -##bind subpath=traverse_subpath -##parameters= -##title= -## -selection = context.portal_selections.getSelectionFor('modele_selection',REQUEST=context.REQUEST) -modele_list = selection(context=context) -request = context.REQUEST -tab = '\t' -cr = '\r' -export = '' - -for modele_item in modele_list: - ligne_modele = '' - modele=modele_item.getObject() - - ligne_modele += modele.getId()+tab - ligne_modele += modele.getCollection()+tab - ligne_modele += string.capwords(modele.getComposition())+tab - ligne_modele += modele.getCodeEan13()+tab - - content_list = modele.objectValues() - price_list = [] - for content_item in content_list: - if content_item.portal_type == 'Element Tarif': - price_list.append(content_item) - - for price in price_list: - ligne_modele += price.description+tab - ligne_modele += str(price.destination_base_price)+tab - for i in range(3-len(price_list)): - ligne_modele += tab+tab - - ligne_modele += cr - export += 14 * ligne_modele - -request.RESPONSE.setHeader('Content-Type','application/text') - -return export diff --git a/product/Coramy/skins/coramy_pdm/etiquettes_collection_unitaires.py b/product/Coramy/skins/coramy_pdm/etiquettes_collection_unitaires.py deleted file mode 100755 index 21768d6c9e..0000000000 --- a/product/Coramy/skins/coramy_pdm/etiquettes_collection_unitaires.py +++ /dev/null @@ -1,43 +0,0 @@ -## Script (Python) "etiquettes_collection_unitaires" -##bind container=container -##bind context=context -##bind namespace= -##bind script=script -##bind subpath=traverse_subpath -##parameters= -##title= -## -selection = context.portal_selections.getSelectionFor('modele_selection',REQUEST=context.REQUEST) -modele_list = selection(context=context) -request = context.REQUEST -tab = '\t' -cr = '\r' -export = '' - -for modele_item in modele_list: - ligne_modele = '' - modele=modele_item.getObject() - - ligne_modele += modele.getId()+tab - ligne_modele += modele.getCollection()+tab - ligne_modele += string.capwords(modele.getComposition())+tab - ligne_modele += modele.getCodeEan13()+tab - - content_list = modele.objectValues() - price_list = [] - for content_item in content_list: - if content_item.portal_type == 'Element Tarif': - price_list.append(content_item) - - for price in price_list: - ligne_modele += price.description+tab - ligne_modele += str(price.destination_base_price)+tab - for i in range(3-len(price_list)): - ligne_modele += tab+tab - - ligne_modele += cr - export += ligne_modele - -request.RESPONSE.setHeader('Content-Type','application/text') - -return export diff --git a/product/Coramy/skins/coramy_pdm/forme_list.form b/product/Coramy/skins/coramy_pdm/forme_list.form deleted file mode 100755 index 32da218f31..0000000000 --- a/product/Coramy/skins/coramy_pdm/forme_list.form +++ /dev/null @@ -1,62 +0,0 @@ -<?xml version="1.0"?> - -<form> - <title>Liste de formes</title> - <row_length>4</row_length> - <name>folder_contents</name> - <pt>form_list</pt> - <action></action> - <method>POST</method> - <enctype></enctype> - <encoding>UTF-8</encoding> - <stored_encoding>ISO-8859-1</stored_encoding> - <unicode_mode>false</unicode_mode> - <groups> - <group> - <title>Default</title> - <fields> - - <field><id>listbox</id> <type>ListBox</type> - <values> - <all_columns type="list">[('id', 'Forme'), ('Description', 'Description'), ('forme_state', 'Etat')]</all_columns> - <all_editable_columns type="list">[]</all_editable_columns> - <alternate_name></alternate_name> - <columns type="list">[('id', 'Forme'), ('Description', 'Description'), ('forme_state', 'Etat')]</columns> - <css_class></css_class> - <default></default> - <default_params type="list">[]</default_params> - <description></description> - <domain_root_list type="list">[]</domain_root_list> - <domain_tree type="int">0</domain_tree> - <editable type="int">1</editable> - <editable_columns type="list">[]</editable_columns> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <global_attributes type="list">[]</global_attributes> - <hidden type="int">0</hidden> - <lines type="int">30</lines> - <list_action>list</list_action> - <list_method type="method">portal_catalog</list_method> - <meta_types type="list">[]</meta_types> - <portal_types type="list">[('Forme', 'Forme')]</portal_types> - <report_root_list type="list">[]</report_root_list> - <report_tree type="int">0</report_tree> - <search type="int">1</search> - <search_columns></search_columns> - <select type="int">1</select> - <selection_name>gamme_list</selection_name> - <sort type="list">[('id', 'id')]</sort> - <sort_columns></sort_columns> - <stat_method></stat_method> - <title>Formes</title> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - </messages> - </field> - </fields> - </group> - </groups> -</form> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_pdm/forme_list_sort_on.form b/product/Coramy/skins/coramy_pdm/forme_list_sort_on.form deleted file mode 100755 index e8476bbc3d..0000000000 --- a/product/Coramy/skins/coramy_pdm/forme_list_sort_on.form +++ /dev/null @@ -1,50 +0,0 @@ -<?xml version="1.0"?> - -<form> - <title>Trier</title> - <row_length>4</row_length> - <name>forme_list_sort_on</name> - <pt>form_sort</pt> - <action>base_sort_on</action> - <method>POST</method> - <enctype></enctype> - <encoding>UTF-8</encoding> - <stored_encoding>ISO-8859-1</stored_encoding> - <unicode_mode>false</unicode_mode> - <groups> - <group> - <title>Default</title> - <fields> - - <field><id>sort_order</id> <type>ListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <extra_item></extra_item> - <first_item type="int">0</first_item> - <hidden type="int">0</hidden> - <items type="list">[('Ascending', 'ascending'), ('Descending', 'descending')]</items> - <required type="int">1</required> - <size type="int">1</size> - <title>sort_order</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - </fields> - </group> - </groups> -</form> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_pdm/forme_list_ui.form b/product/Coramy/skins/coramy_pdm/forme_list_ui.form deleted file mode 100755 index ea3931773b..0000000000 --- a/product/Coramy/skins/coramy_pdm/forme_list_ui.form +++ /dev/null @@ -1,28 +0,0 @@ -<?xml version="1.0"?> - -<form> - <title>Enregistrer les paramètres</title> - <row_length>4</row_length> - <name>gamme_list_ui</name> - <pt>form_list_ui</pt> - <action>base_list_ui</action> - <method>POST</method> - <enctype></enctype> - <encoding>UTF-8</encoding> - <stored_encoding>ISO-8859-1</stored_encoding> - <unicode_mode>false</unicode_mode> - <groups> - <group> - <title>left</title> - <fields> - - </fields> - </group> - <group> - <title>right</title> - <fields> - - </fields> - </group> - </groups> -</form> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_pdm/forme_mise_au_point_view.form b/product/Coramy/skins/coramy_pdm/forme_mise_au_point_view.form deleted file mode 100755 index 5ed1255051..0000000000 --- a/product/Coramy/skins/coramy_pdm/forme_mise_au_point_view.form +++ /dev/null @@ -1,102 +0,0 @@ -<?xml version="1.0"?> - -<form> - <title>Mise au point Forme</title> - <row_length>4</row_length> - <name>forme_mise_au_point_view</name> - <pt>form_view</pt> - <action>base_edit</action> - <method>POST</method> - <enctype></enctype> - <encoding>UTF-8</encoding> - <stored_encoding>ISO-8859-1</stored_encoding> - <unicode_mode>false</unicode_mode> - <groups> - <group> - <title>left</title> - <fields> - - </fields> - </group> - <group> - <title>right</title> - <fields> - - </fields> - </group> - <group> - <title>center</title> - <fields> - - <field><id>my_nomenclature</id> <type>TextAreaField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <height type="int">10</height> - <hidden type="int">0</hidden> - <max_length></max_length> - <max_linelength></max_linelength> - <max_lines></max_lines> - <required type="int">0</required> - <title>Nomenclature</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - <width type="int">80</width> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_many_lines">You entered too many lines.</message> - <message name="line_too_long">A line was too long.</message> - <message name="too_long">You entered too many characters.</message> - </messages> - </field> - <field><id>my_mode_operatoire</id> <type>TextAreaField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <height type="int">10</height> - <hidden type="int">0</hidden> - <max_length></max_length> - <max_linelength></max_linelength> - <max_lines></max_lines> - <required type="int">0</required> - <title>Mode opératoire</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - <width type="int">80</width> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_many_lines">You entered too many lines.</message> - <message name="line_too_long">A line was too long.</message> - <message name="too_long">You entered too many characters.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>bottom</title> - <fields> - - </fields> - </group> - </groups> -</form> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_pdm/forme_search.form b/product/Coramy/skins/coramy_pdm/forme_search.form deleted file mode 100755 index a647eca06d..0000000000 --- a/product/Coramy/skins/coramy_pdm/forme_search.form +++ /dev/null @@ -1,84 +0,0 @@ -<?xml version="1.0"?> - -<form> - <title>Rechercher</title> - <row_length>4</row_length> - <name>search</name> - <pt>form_dialog</pt> - <action>gamme_list</action> - <method>POST</method> - <enctype></enctype> - <encoding>UTF-8</encoding> - <stored_encoding>ISO-8859-1</stored_encoding> - <unicode_mode>false</unicode_mode> - <groups> - <group> - <title>left</title> - <fields> - - <field><id>my_id</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default>%</default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">60</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <max_length></max_length> - <required type="int">1</required> - <title>Forme</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - <field><id>my_description</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default>%</default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">60</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <max_length></max_length> - <required type="int">1</required> - <title>Description</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>right</title> - <fields> - - </fields> - </group> - </groups> -</form> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_pdm/forme_vet.form b/product/Coramy/skins/coramy_pdm/forme_vet.form deleted file mode 100755 index 073be679a3..0000000000 --- a/product/Coramy/skins/coramy_pdm/forme_vet.form +++ /dev/null @@ -1,80 +0,0 @@ -<?xml version="1.0"?> - -<form> - <title>Forme</title> - <row_length>4</row_length> - <name>tissu_view</name> - <pt>form_view</pt> - <action>base_edit</action> - <method>POST</method> - <enctype>multipart/form-data</enctype> - <encoding>UTF-8</encoding> - <stored_encoding>ISO-8859-1</stored_encoding> - <unicode_mode>false</unicode_mode> - <groups> - <group> - <title>left</title> - <fields> - - </fields> - </group> - <group> - <title>right</title> - <fields> - - </fields> - </group> - <group> - <title>center</title> - <fields> - - </fields> - </group> - <group> - <title>bottom</title> - <fields> - - <field><id>listbox</id> <type>ListBox</type> - <values> - <all_columns type="list">[('id', 'V\xeatement'), ('description', 'Description'), ('vetement_state', 'Etat'), ('portal_type', 'Type')]</all_columns> - <all_editable_columns type="list">[]</all_editable_columns> - <alternate_name></alternate_name> - <columns type="list">[('id', 'V\xeatement'), ('description', 'Description'), ('vetement_state', 'Etat'), ('portal_type', 'Type')]</columns> - <css_class></css_class> - <default></default> - <default_params type="list">[('id', "''"), ('description', "''"), ('portal_type', "''")]</default_params> - <description></description> - <domain_root_list type="list">[]</domain_root_list> - <domain_tree type="int">0</domain_tree> - <editable type="int">1</editable> - <editable_columns type="list">[]</editable_columns> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <global_attributes></global_attributes> - <hidden type="int">0</hidden> - <lines type="int">30</lines> - <list_action>list</list_action> - <list_method type="method">searchFolder</list_method> - <meta_types type="list">[]</meta_types> - <portal_types type="list">[('Vetement', 'Vetement')]</portal_types> - <report_root_list type="list">[]</report_root_list> - <report_tree type="int">0</report_tree> - <search type="int">0</search> - <search_columns></search_columns> - <select type="int">0</select> - <selection_name>dessins</selection_name> - <sort type="list">[('id', 'id')]</sort> - <sort_columns></sort_columns> - <stat_method></stat_method> - <title>Vêtements</title> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - </messages> - </field> - </fields> - </group> - </groups> -</form> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_pdm/forme_view.form b/product/Coramy/skins/coramy_pdm/forme_view.form deleted file mode 100755 index 1d5dc0cad2..0000000000 --- a/product/Coramy/skins/coramy_pdm/forme_view.form +++ /dev/null @@ -1,378 +0,0 @@ -<?xml version="1.0"?> - -<form> - <title>Forme</title> - <row_length>4</row_length> - <name>tissu_view</name> - <pt>form_view</pt> - <action>base_edit</action> - <method>POST</method> - <enctype>multipart/form-data</enctype> - <encoding>UTF-8</encoding> - <stored_encoding>ISO-8859-1</stored_encoding> - <unicode_mode>false</unicode_mode> - <groups> - <group> - <title>left</title> - <fields> - - <field><id>my_id</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <max_length></max_length> - <required type="int">1</required> - <title>Forme</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - <field><id>my_referentiel_forme_list</id> <type>MultiListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default type="list">[]</default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <extra_item></extra_item> - <hidden type="int">0</hidden> - <items type="list">[]</items> - <required type="int">0</required> - <size type="int">5</size> - <title>Catégorie forme</title> - <unicode type="int">0</unicode> - <view_separator><br /> -</view_separator> - </values> - <tales> - <default>here/getReferentielFormeList</default> - <items>here/portal_categories/referentiel_forme/getFormItemList</items> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - <field><id>my_description</id> <type>TextAreaField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <height type="int">3</height> - <hidden type="int">0</hidden> - <max_length></max_length> - <max_linelength></max_linelength> - <max_lines></max_lines> - <required type="int">0</required> - <title>Description</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - <width type="int">40</width> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_many_lines">You entered too many lines.</message> - <message name="line_too_long">A line was too long.</message> - <message name="too_long">You entered too many characters.</message> - </messages> - </field> - <field><id>my_forme_id_list</id> <type>MultiRelationStringField</type> - <values> - <alternate_name></alternate_name> - <base_category>specialise</base_category> - <catalog_index>id</catalog_index> - <css_class></css_class> - <default type="list">[]</default> - <default_module>forme</default_module> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <height type="int">2</height> - <hidden type="int">0</hidden> - <jump_method>base_jump_relation</jump_method> - <max_length></max_length> - <max_linelength></max_linelength> - <max_lines></max_lines> - <portal_type type="list">[('Forme', 'Forme')]</portal_type> - <required type="int">0</required> - <title>Formes de base</title> - <unicode type="int">0</unicode> - <update_method>base_update_relation</update_method> - <view_separator><br /> -</view_separator> - <whitespace_preserve type="int">0</whitespace_preserve> - <width type="int">20</width> - </values> - <tales> - <default>here/getFormeIdList</default> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_many_lines">You entered too many lines.</message> - <message name="line_too_long">A line was too long.</message> - <message name="too_long">You entered too many characters.</message> - </messages> - </field> - <field><id>my_option_forme</id> <type>MultiListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default type="list">[]</default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <extra_item></extra_item> - <hidden type="int">0</hidden> - <items type="list">[]</items> - <required type="int">0</required> - <size type="int">5</size> - <title>Options</title> - <unicode type="int">0</unicode> - <view_separator><br /> -</view_separator> - </values> - <tales> - <default>here/getOptionFormeList</default> - <items>here/portal_categories/option_forme/getFormItemList</items> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>right</title> - <fields> - - <field><id>my_collection_list</id> <type>MultiListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default type="list">[]</default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <extra_item></extra_item> - <hidden type="int">0</hidden> - <items type="list">[]</items> - <required type="int">0</required> - <size type="int">5</size> - <title>Collection</title> - <unicode type="int">0</unicode> - <view_separator><br /> -</view_separator> - </values> - <tales> - <default>here/getCollectionList</default> - <items>here/portal_categories/collection/getFormItemList</items> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - <field><id>my_eip_list</id> <type>MultiListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default type="list">[]</default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <extra_item></extra_item> - <hidden type="int">0</hidden> - <items type="list">[]</items> - <required type="int">0</required> - <size type="int">5</size> - <title>Famille</title> - <unicode type="int">0</unicode> - <view_separator><br /> -</view_separator> - </values> - <tales> - <default>here/getEipList</default> - <items>here/portal_categories/eip/getFormItemList</items> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - <field><id>my_present_au_catalogue</id> <type>CheckBoxField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default type="int">0</default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <title>Présent au catalogue</title> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - </messages> - </field> - <field><id>etat</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <max_length></max_length> - <required type="int">0</required> - <title>etat</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <default>python:here.portal_workflow.getInfoFor(here, 'forme_state')</default> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>center</title> - <fields> - - <field><id>my_commentaires</id> <type>TextAreaField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <height type="int">3</height> - <hidden type="int">0</hidden> - <max_length></max_length> - <max_linelength></max_linelength> - <max_lines></max_lines> - <required type="int">0</required> - <title>Commentaires</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - <width type="int">80</width> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_many_lines">You entered too many lines.</message> - <message name="line_too_long">A line was too long.</message> - <message name="too_long">You entered too many characters.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>bottom</title> - <fields> - - <field><id>listbox</id> <type>ListBox</type> - <values> - <all_columns type="list">[('id', 'Dessin'), ('description', 'Description'), ('portal_type', 'Type')]</all_columns> - <all_editable_columns></all_editable_columns> - <alternate_name></alternate_name> - <columns type="list">[('id', 'Dessin'), ('description', 'Description'), ('portal_type', 'Type')]</columns> - <css_class></css_class> - <default></default> - <default_params type="list">[('id', "''"), ('description', "''"), ('portal_type', "''")]</default_params> - <description></description> - <domain_root_list></domain_root_list> - <domain_tree></domain_tree> - <editable type="int">1</editable> - <editable_columns></editable_columns> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <global_attributes></global_attributes> - <hidden type="int">0</hidden> - <lines type="int">30</lines> - <list_action>list</list_action> - <list_method type="method">searchFolder</list_method> - <meta_types type="list">[]</meta_types> - <portal_types type="list">[('Dessin Technique', 'Dessin Technique')]</portal_types> - <report_root_list></report_root_list> - <report_tree></report_tree> - <search type="int">0</search> - <search_columns></search_columns> - <select type="int">0</select> - <selection_name>dessins</selection_name> - <sort type="list">[('id', 'id')]</sort> - <sort_columns></sort_columns> - <stat_method></stat_method> - <title>Dessins techniques</title> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - </messages> - </field> - </fields> - </group> - </groups> -</form> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_pdm/forme_workflow_lancer_prototype.form b/product/Coramy/skins/coramy_pdm/forme_workflow_lancer_prototype.form deleted file mode 100755 index 1daa612fab..0000000000 --- a/product/Coramy/skins/coramy_pdm/forme_workflow_lancer_prototype.form +++ /dev/null @@ -1,81 +0,0 @@ -<?xml version="1.0"?> - -<form> - <title>Lancer le prototype</title> - <row_length>4</row_length> - <name>main</name> - <pt>form_view_dialog</pt> - <action>workflow_status_modify</action> - <method>POST</method> - <enctype>multipart/form-data</enctype> - <encoding>UTF-8</encoding> - <stored_encoding>ISO-8859-1</stored_encoding> - <unicode_mode>false</unicode_mode> - <groups> - <group> - <title>Default</title> - <fields> - - <field><id>my_comment</id> <type>TextAreaField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <height type="int">5</height> - <hidden type="int">0</hidden> - <max_length></max_length> - <max_linelength></max_linelength> - <max_lines></max_lines> - <required type="int">0</required> - <title>Commentaires</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - <width type="int">80</width> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_many_lines">You entered too many lines.</message> - <message name="line_too_long">A line was too long.</message> - <message name="too_long">You entered too many characters.</message> - </messages> - </field> - <field><id>my_workflow_action</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default>lancer_prototype</default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">1</hidden> - <max_length></max_length> - <required type="int">1</required> - <title> </title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - </fields> - </group> - </groups> -</form> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_pdm/forme_workflow_rectifier_dossier_technique.form b/product/Coramy/skins/coramy_pdm/forme_workflow_rectifier_dossier_technique.form deleted file mode 100755 index bb875756e6..0000000000 --- a/product/Coramy/skins/coramy_pdm/forme_workflow_rectifier_dossier_technique.form +++ /dev/null @@ -1,81 +0,0 @@ -<?xml version="1.0"?> - -<form> - <title>Rectifier le dossier technique</title> - <row_length>4</row_length> - <name>main</name> - <pt>form_view_dialog</pt> - <action>workflow_status_modify</action> - <method>POST</method> - <enctype>multipart/form-data</enctype> - <encoding>UTF-8</encoding> - <stored_encoding>ISO-8859-1</stored_encoding> - <unicode_mode>false</unicode_mode> - <groups> - <group> - <title>Default</title> - <fields> - - <field><id>my_comment</id> <type>TextAreaField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <height type="int">5</height> - <hidden type="int">0</hidden> - <max_length></max_length> - <max_linelength></max_linelength> - <max_lines></max_lines> - <required type="int">1</required> - <title>Commentaires</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - <width type="int">80</width> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_many_lines">You entered too many lines.</message> - <message name="line_too_long">A line was too long.</message> - <message name="too_long">You entered too many characters.</message> - </messages> - </field> - <field><id>my_workflow_action</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default>rectifier_dossier_technique</default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">1</hidden> - <max_length></max_length> - <required type="int">1</required> - <title> </title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - </fields> - </group> - </groups> -</form> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_pdm/forme_workflow_rectifier_forme.form b/product/Coramy/skins/coramy_pdm/forme_workflow_rectifier_forme.form deleted file mode 100755 index 5d366e5d5d..0000000000 --- a/product/Coramy/skins/coramy_pdm/forme_workflow_rectifier_forme.form +++ /dev/null @@ -1,81 +0,0 @@ -<?xml version="1.0"?> - -<form> - <title>Rectifier la forme</title> - <row_length>4</row_length> - <name>main</name> - <pt>form_view_dialog</pt> - <action>workflow_status_modify</action> - <method>POST</method> - <enctype>multipart/form-data</enctype> - <encoding>UTF-8</encoding> - <stored_encoding>ISO-8859-1</stored_encoding> - <unicode_mode>false</unicode_mode> - <groups> - <group> - <title>Default</title> - <fields> - - <field><id>my_comment</id> <type>TextAreaField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <height type="int">5</height> - <hidden type="int">0</hidden> - <max_length></max_length> - <max_linelength></max_linelength> - <max_lines></max_lines> - <required type="int">1</required> - <title>Commentaires</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - <width type="int">80</width> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_many_lines">You entered too many lines.</message> - <message name="line_too_long">A line was too long.</message> - <message name="too_long">You entered too many characters.</message> - </messages> - </field> - <field><id>my_workflow_action</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default>rectifier_forme</default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">1</hidden> - <max_length></max_length> - <required type="int">1</required> - <title> </title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - </fields> - </group> - </groups> -</form> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_pdm/forme_workflow_soumettre_modelisme.form b/product/Coramy/skins/coramy_pdm/forme_workflow_soumettre_modelisme.form deleted file mode 100755 index f442daf94a..0000000000 --- a/product/Coramy/skins/coramy_pdm/forme_workflow_soumettre_modelisme.form +++ /dev/null @@ -1,81 +0,0 @@ -<?xml version="1.0"?> - -<form> - <title>Soumettre au modelisme</title> - <row_length>4</row_length> - <name>main</name> - <pt>form_view_dialog</pt> - <action>workflow_status_modify</action> - <method>POST</method> - <enctype>multipart/form-data</enctype> - <encoding>UTF-8</encoding> - <stored_encoding>ISO-8859-1</stored_encoding> - <unicode_mode>false</unicode_mode> - <groups> - <group> - <title>Default</title> - <fields> - - <field><id>my_comment</id> <type>TextAreaField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <height type="int">5</height> - <hidden type="int">0</hidden> - <max_length></max_length> - <max_linelength></max_linelength> - <max_lines></max_lines> - <required type="int">0</required> - <title>Commentaires</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - <width type="int">80</width> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_many_lines">You entered too many lines.</message> - <message name="line_too_long">A line was too long.</message> - <message name="too_long">You entered too many characters.</message> - </messages> - </field> - <field><id>my_workflow_action</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default>soumettre_modelisme</default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">1</hidden> - <max_length></max_length> - <required type="int">1</required> - <title> </title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - </fields> - </group> - </groups> -</form> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_pdm/forme_workflow_valider_dossier_technique.form b/product/Coramy/skins/coramy_pdm/forme_workflow_valider_dossier_technique.form deleted file mode 100755 index ee9f80d160..0000000000 --- a/product/Coramy/skins/coramy_pdm/forme_workflow_valider_dossier_technique.form +++ /dev/null @@ -1,81 +0,0 @@ -<?xml version="1.0"?> - -<form> - <title>Valider le dossier technique</title> - <row_length>4</row_length> - <name>main</name> - <pt>form_view_dialog</pt> - <action>workflow_status_modify</action> - <method>POST</method> - <enctype>multipart/form-data</enctype> - <encoding>UTF-8</encoding> - <stored_encoding>ISO-8859-1</stored_encoding> - <unicode_mode>false</unicode_mode> - <groups> - <group> - <title>Default</title> - <fields> - - <field><id>my_comment</id> <type>TextAreaField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <height type="int">5</height> - <hidden type="int">0</hidden> - <max_length></max_length> - <max_linelength></max_linelength> - <max_lines></max_lines> - <required type="int">0</required> - <title>Commentaires</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - <width type="int">80</width> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_many_lines">You entered too many lines.</message> - <message name="line_too_long">A line was too long.</message> - <message name="too_long">You entered too many characters.</message> - </messages> - </field> - <field><id>my_workflow_action</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default>valider_dossier_technique</default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">1</hidden> - <max_length></max_length> - <required type="int">1</required> - <title> </title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - </fields> - </group> - </groups> -</form> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_pdm/forme_workflow_valider_forme.form b/product/Coramy/skins/coramy_pdm/forme_workflow_valider_forme.form deleted file mode 100755 index 9dde7d567d..0000000000 --- a/product/Coramy/skins/coramy_pdm/forme_workflow_valider_forme.form +++ /dev/null @@ -1,81 +0,0 @@ -<?xml version="1.0"?> - -<form> - <title>Valider la forme</title> - <row_length>4</row_length> - <name>main</name> - <pt>form_view_dialog</pt> - <action>workflow_status_modify</action> - <method>POST</method> - <enctype>multipart/form-data</enctype> - <encoding>UTF-8</encoding> - <stored_encoding>ISO-8859-1</stored_encoding> - <unicode_mode>false</unicode_mode> - <groups> - <group> - <title>Default</title> - <fields> - - <field><id>my_comment</id> <type>TextAreaField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <height type="int">5</height> - <hidden type="int">0</hidden> - <max_length></max_length> - <max_linelength></max_linelength> - <max_lines></max_lines> - <required type="int">0</required> - <title>Commentaires</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - <width type="int">80</width> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_many_lines">You entered too many lines.</message> - <message name="line_too_long">A line was too long.</message> - <message name="too_long">You entered too many characters.</message> - </messages> - </field> - <field><id>my_workflow_action</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default>valider_forme</default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">1</hidden> - <max_length></max_length> - <required type="int">1</required> - <title> </title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - </fields> - </group> - </groups> -</form> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_pdm/gamme_list.form b/product/Coramy/skins/coramy_pdm/gamme_list.form deleted file mode 100755 index db232d7112..0000000000 --- a/product/Coramy/skins/coramy_pdm/gamme_list.form +++ /dev/null @@ -1,62 +0,0 @@ -<?xml version="1.0"?> - -<form> - <title>Liste de gammes</title> - <row_length>4</row_length> - <name>folder_contents</name> - <pt>form_list</pt> - <action></action> - <method>POST</method> - <enctype></enctype> - <encoding>UTF-8</encoding> - <stored_encoding>ISO-8859-1</stored_encoding> - <unicode_mode>false</unicode_mode> - <groups> - <group> - <title>Default</title> - <fields> - - <field><id>listbox</id> <type>ListBox</type> - <values> - <all_columns type="list">[('id', 'Num\xe9ro'), ('title', 'Titre'), ('Description', 'Description'), ('getCollection', 'Collection')]</all_columns> - <all_editable_columns type="list">[]</all_editable_columns> - <alternate_name></alternate_name> - <columns type="list">[('id', 'Gamme'), ('Description', 'Description')]</columns> - <css_class></css_class> - <default></default> - <default_params type="list">[]</default_params> - <description></description> - <domain_root_list type="list">[]</domain_root_list> - <domain_tree type="int">0</domain_tree> - <editable type="int">1</editable> - <editable_columns type="list">[]</editable_columns> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <global_attributes type="list">[]</global_attributes> - <hidden type="int">0</hidden> - <lines type="int">30</lines> - <list_action>list</list_action> - <list_method type="method">portal_catalog</list_method> - <meta_types type="list">[]</meta_types> - <portal_types type="list">[('Gamme', 'Gamme')]</portal_types> - <report_root_list type="list">[]</report_root_list> - <report_tree type="int">0</report_tree> - <search type="int">1</search> - <search_columns></search_columns> - <select type="int">1</select> - <selection_name>gamme_list</selection_name> - <sort type="list">[('id', 'id')]</sort> - <sort_columns></sort_columns> - <stat_method></stat_method> - <title>Gammes</title> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - </messages> - </field> - </fields> - </group> - </groups> -</form> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_pdm/gamme_list_sort_on.form b/product/Coramy/skins/coramy_pdm/gamme_list_sort_on.form deleted file mode 100755 index 9ba271cb2a..0000000000 --- a/product/Coramy/skins/coramy_pdm/gamme_list_sort_on.form +++ /dev/null @@ -1,50 +0,0 @@ -<?xml version="1.0"?> - -<form> - <title>Trier</title> - <row_length>4</row_length> - <name>gamme_list_sort_on</name> - <pt>form_sort</pt> - <action>base_sort_on</action> - <method>POST</method> - <enctype></enctype> - <encoding>UTF-8</encoding> - <stored_encoding>ISO-8859-1</stored_encoding> - <unicode_mode>false</unicode_mode> - <groups> - <group> - <title>Default</title> - <fields> - - <field><id>sort_order</id> <type>ListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <extra_item></extra_item> - <first_item type="int">0</first_item> - <hidden type="int">0</hidden> - <items type="list">[('Ascending', 'ascending'), ('Descending', 'descending')]</items> - <required type="int">1</required> - <size type="int">1</size> - <title>sort_order</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - </fields> - </group> - </groups> -</form> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_pdm/gamme_list_ui.form b/product/Coramy/skins/coramy_pdm/gamme_list_ui.form deleted file mode 100755 index ea3931773b..0000000000 --- a/product/Coramy/skins/coramy_pdm/gamme_list_ui.form +++ /dev/null @@ -1,28 +0,0 @@ -<?xml version="1.0"?> - -<form> - <title>Enregistrer les paramètres</title> - <row_length>4</row_length> - <name>gamme_list_ui</name> - <pt>form_list_ui</pt> - <action>base_list_ui</action> - <method>POST</method> - <enctype></enctype> - <encoding>UTF-8</encoding> - <stored_encoding>ISO-8859-1</stored_encoding> - <unicode_mode>false</unicode_mode> - <groups> - <group> - <title>left</title> - <fields> - - </fields> - </group> - <group> - <title>right</title> - <fields> - - </fields> - </group> - </groups> -</form> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_pdm/gamme_sql_tissu_search.zsql b/product/Coramy/skins/coramy_pdm/gamme_sql_tissu_search.zsql deleted file mode 100755 index 1c02fd7c1c..0000000000 --- a/product/Coramy/skins/coramy_pdm/gamme_sql_tissu_search.zsql +++ /dev/null @@ -1,18 +0,0 @@ -<dtml-comment> -title: -connection_id:erp5_sql_connection -max_rows:1000 -max_cache:100 -cache_time:0 -class_name:ZSQLBrain -class_file:zsqlbrain.py -</dtml-comment> -<params>tissu1 -tissu2</params> -SELECT DISTINCT catalog.id, catalog.uid, catalog.path, catalog.relative_url, catalog.parent_uid, catalog.Description -FROM catalog, catalog AS vgamme, catalog AS vtissu, category -WHERE vgamme.parent_uid=catalog.uid -AND vtissu.uid=category.category_uid -AND vtissu.relative_url LIKE "%<dtml-var tissu1>%" -AND vgamme.uid=category.uid -AND catalog.portal_type="Gamme" \ No newline at end of file diff --git a/product/Coramy/skins/coramy_pdm/gamme_tissu_search.form b/product/Coramy/skins/coramy_pdm/gamme_tissu_search.form deleted file mode 100755 index a4f38f0d18..0000000000 --- a/product/Coramy/skins/coramy_pdm/gamme_tissu_search.form +++ /dev/null @@ -1,84 +0,0 @@ -<?xml version="1.0"?> - -<form> - <title>Rechercher</title> - <row_length>4</row_length> - <name>search</name> - <pt>form_dialog</pt> - <action>gamme_tissu_search_list</action> - <method>POST</method> - <enctype></enctype> - <encoding>UTF-8</encoding> - <stored_encoding>ISO-8859-1</stored_encoding> - <unicode_mode>false</unicode_mode> - <groups> - <group> - <title>left</title> - <fields> - - <field><id>my_tissu1</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">60</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <max_length></max_length> - <required type="int">1</required> - <title>Tissu 1</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - <field><id>my_tissu2</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default>%</default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">60</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <max_length></max_length> - <required type="int">0</required> - <title>Tissu 2</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>right</title> - <fields> - - </fields> - </group> - </groups> -</form> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_pdm/gamme_tissu_search_list.form b/product/Coramy/skins/coramy_pdm/gamme_tissu_search_list.form deleted file mode 100755 index 0255a86dcb..0000000000 --- a/product/Coramy/skins/coramy_pdm/gamme_tissu_search_list.form +++ /dev/null @@ -1,62 +0,0 @@ -<?xml version="1.0"?> - -<form> - <title>Liste de gammes</title> - <row_length>4</row_length> - <name>folder_contents</name> - <pt>form_list</pt> - <action></action> - <method>POST</method> - <enctype></enctype> - <encoding>UTF-8</encoding> - <stored_encoding>ISO-8859-1</stored_encoding> - <unicode_mode>false</unicode_mode> - <groups> - <group> - <title>Default</title> - <fields> - - <field><id>listbox</id> <type>ListBox</type> - <values> - <all_columns type="list">[('id', 'Num\xe9ro'), ('title', 'Titre'), ('Description', 'Description'), ('getCollection', 'Collection')]</all_columns> - <all_editable_columns type="list">[]</all_editable_columns> - <alternate_name></alternate_name> - <columns type="list">[('id', 'Gamme'), ('Description', 'Description')]</columns> - <css_class></css_class> - <default></default> - <default_params type="list">[]</default_params> - <description></description> - <domain_root_list type="list">[]</domain_root_list> - <domain_tree type="int">0</domain_tree> - <editable type="int">1</editable> - <editable_columns type="list">[]</editable_columns> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <global_attributes></global_attributes> - <hidden type="int">0</hidden> - <lines type="int">30</lines> - <list_action>list</list_action> - <list_method type="method">gamme_sql_tissu_search</list_method> - <meta_types type="list">[]</meta_types> - <portal_types type="list">[('Gamme', 'Gamme')]</portal_types> - <report_root_list type="list">[]</report_root_list> - <report_tree type="int">0</report_tree> - <search type="int">1</search> - <search_columns></search_columns> - <select type="int">1</select> - <selection_name>gamme_tissu_search_list</selection_name> - <sort type="list">[]</sort> - <sort_columns></sort_columns> - <stat_method></stat_method> - <title>Gammes</title> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - </messages> - </field> - </fields> - </group> - </groups> -</form> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_pdm/gamme_view.form b/product/Coramy/skins/coramy_pdm/gamme_view.form deleted file mode 100755 index 36c11ffb58..0000000000 --- a/product/Coramy/skins/coramy_pdm/gamme_view.form +++ /dev/null @@ -1,199 +0,0 @@ -<?xml version="1.0"?> - -<form> - <title>Gamme</title> - <row_length>4</row_length> - <name>gamme_view</name> - <pt>form_view</pt> - <action>base_edit</action> - <method>POST</method> - <enctype></enctype> - <encoding>UTF-8</encoding> - <stored_encoding>ISO-8859-1</stored_encoding> - <unicode_mode>false</unicode_mode> - <groups> - <group> - <title>left</title> - <fields> - - <field><id>my_id</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <max_length></max_length> - <required type="int">1</required> - <title>Gamme</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - <field><id>my_description</id> <type>TextAreaField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <height type="int">3</height> - <hidden type="int">0</hidden> - <max_length></max_length> - <max_linelength></max_linelength> - <max_lines></max_lines> - <required type="int">0</required> - <title>Description</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - <width type="int">40</width> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_many_lines">You entered too many lines.</message> - <message name="line_too_long">A line was too long.</message> - <message name="too_long">You entered too many characters.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>right</title> - <fields> - - <field><id>my_collection_list</id> <type>MultiListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default type="list">[]</default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <extra_item></extra_item> - <hidden type="int">0</hidden> - <items type="list">[]</items> - <required type="int">0</required> - <size type="int">5</size> - <title>Collection</title> - <unicode type="int">0</unicode> - <view_separator><br /> -</view_separator> - </values> - <tales> - <default>here/getCollectionList</default> - <items>here/portal_categories/collection/getFormItemList</items> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - <field><id>my_eip_list</id> <type>MultiListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default type="list">[]</default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <extra_item></extra_item> - <hidden type="int">0</hidden> - <items type="list">[]</items> - <required type="int">0</required> - <size type="int">5</size> - <title>Famille</title> - <unicode type="int">0</unicode> - <view_separator><br /> -</view_separator> - </values> - <tales> - <default>here/getEipList</default> - <items>here/portal_categories/eip/getFormItemList</items> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>center</title> - <fields> - - </fields> - </group> - <group> - <title>bottom</title> - <fields> - - <field><id>listbox</id> <type>ListBox</type> - <values> - <all_columns type="list">[('id', 'Variante'), ('description', 'Description')]</all_columns> - <all_editable_columns></all_editable_columns> - <alternate_name></alternate_name> - <columns type="list">[('id', 'Variante'), ('description', 'Description')]</columns> - <css_class></css_class> - <default></default> - <default_params type="list">[('id', "''"), ('description', "''")]</default_params> - <description></description> - <domain_root_list></domain_root_list> - <domain_tree></domain_tree> - <editable type="int">1</editable> - <editable_columns></editable_columns> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <global_attributes></global_attributes> - <hidden type="int">0</hidden> - <lines type="int">10</lines> - <list_action>list</list_action> - <list_method type="method">searchFolder</list_method> - <meta_types type="list">[]</meta_types> - <portal_types type="list">[]</portal_types> - <report_root_list></report_root_list> - <report_tree></report_tree> - <search type="int">0</search> - <search_columns></search_columns> - <select type="int">0</select> - <selection_name></selection_name> - <sort type="list">[]</sort> - <sort_columns></sort_columns> - <stat_method></stat_method> - <title>Variantes</title> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - </messages> - </field> - </fields> - </group> - </groups> -</form> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_pdm/getModeleAggregatedModeOperatoire.py b/product/Coramy/skins/coramy_pdm/getModeleAggregatedModeOperatoire.py deleted file mode 100755 index e00e1fa4d1..0000000000 --- a/product/Coramy/skins/coramy_pdm/getModeleAggregatedModeOperatoire.py +++ /dev/null @@ -1,23 +0,0 @@ -## Script (Python) "getModeleAggregatedModeOperatoire" -##bind container=container -##bind context=context -##bind namespace= -##bind script=script -##bind subpath=traverse_subpath -##parameters= -##title= -## -modele = context -result = '' - -try: - vetement_list = modele.getValueList('specialise',portal_type=['Vetement']) - forme = modele.getDefaultValue('specialise',portal_type=['Forme']) - if forme.getModeOperatoire('') <> '' : - result += forme.getModeOperatoire('')+'\n' - for vetement in vetement_list : - if vetement.getModeOperatoire('') <> '' : - result += vetement.getModeOperatoire('')+'\n' - return result -except : - return "Titre calculé" diff --git a/product/Coramy/skins/coramy_pdm/getModeleAggregatedNomenclature.py b/product/Coramy/skins/coramy_pdm/getModeleAggregatedNomenclature.py deleted file mode 100755 index 5f7c41cc4f..0000000000 --- a/product/Coramy/skins/coramy_pdm/getModeleAggregatedNomenclature.py +++ /dev/null @@ -1,23 +0,0 @@ -## Script (Python) "getModeleAggregatedNomenclature" -##bind container=container -##bind context=context -##bind namespace= -##bind script=script -##bind subpath=traverse_subpath -##parameters= -##title= -## -modele = context -result = '' - -try: - vetement_list = modele.getValueList('specialise',portal_type=['Vetement']) - forme = modele.getDefaultValue('specialise',portal_type=['Forme']) - if forme.getNomenclature('') <> '' : - result += forme.getNomenclature('')+'\n' - for vetement in vetement_list : - if vetement.getNomenclature('') <> '' : - result += vetement.getNomenclature('')+'\n' - return result -except : - return "Titre calculé" diff --git a/product/Coramy/skins/coramy_pdm/getModelisteDesigne.py b/product/Coramy/skins/coramy_pdm/getModelisteDesigne.py deleted file mode 100755 index 47d5bb4868..0000000000 --- a/product/Coramy/skins/coramy_pdm/getModelisteDesigne.py +++ /dev/null @@ -1,11 +0,0 @@ -## Script (Python) "getModelisteDesigne" -##bind container=container -##bind context=context -##bind namespace= -##bind script=script -##bind subpath=traverse_subpath -##parameters= -##title= -## -result = context.modele_show_local_roles(['ModelisteDesigne']) -return result diff --git a/product/Coramy/skins/coramy_pdm/grille_consommation_quantity_view.form b/product/Coramy/skins/coramy_pdm/grille_consommation_quantity_view.form deleted file mode 100755 index 357b0e231e..0000000000 --- a/product/Coramy/skins/coramy_pdm/grille_consommation_quantity_view.form +++ /dev/null @@ -1,131 +0,0 @@ -<?xml version="1.0"?> - -<form> - <title></title> - <row_length>4</row_length> - <name>transformed_resource_variation_view</name> - <pt>form_view</pt> - <action>base_edit</action> - <method>POST</method> - <enctype></enctype> - <encoding>UTF-8</encoding> - <stored_encoding>ISO-8859-1</stored_encoding> - <unicode_mode>false</unicode_mode> - <groups> - <group> - <title>Default</title> - <fields> - - <field><id>my_id</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <max_length></max_length> - <required type="int">1</required> - <title>Grille</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>right</title> - <fields> - - </fields> - </group> - <group> - <title>center</title> - <fields> - - </fields> - </group> - <group> - <title>bottom</title> - <fields> - - <field><id>matrixbox</id> <type>MatrixBox</type> - <values> - <all_editable_attributes type="list">[('quantity', 'Quantity'), ('id', 'id')]</all_editable_attributes> - <alternate_name></alternate_name> - <cell_base_id>quantity</cell_base_id> - <cell_range type="list">[]</cell_range> - <columns type="list">[('32', '32'), ('34', '34'), ('36', '36'), ('38', '38')]</columns> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <editable_attributes type="list">[('quantity', 'Quantity')]</editable_attributes> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <getter_method></getter_method> - <global_attributes></global_attributes> - <hidden type="int">0</hidden> - <lines type="list">[('Bleu', 'Bleu'), ('Rouge', 'Rouge'), ('Verts', 'Verts')]</lines> - <setter_method></setter_method> - <tabs type="list">[]</tabs> - <title>matrixbox</title> - <update_cell_range type="int">0</update_cell_range> - </values> - <tales> - <columns>here/getTailleItemList</columns> - <lines>here/getTailleItemList</lines> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>hidden</title> - <fields> - - <field><id>matrixbox_quantity</id> <type>FloatField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">10</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <required type="int">0</required> - <title>Quantity</title> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <default>cell/quantity | string:</default> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="not_float">You did not enter a floating point number.</message> - </messages> - </field> - </fields> - </group> - </groups> -</form> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_pdm/grille_consommation_update.py b/product/Coramy/skins/coramy_pdm/grille_consommation_update.py deleted file mode 100755 index 616fb481b4..0000000000 --- a/product/Coramy/skins/coramy_pdm/grille_consommation_update.py +++ /dev/null @@ -1,50 +0,0 @@ -## Script (Python) "grille_consommation_update" -##bind container=container -##bind context=context -##bind namespace= -##bind script=script -##bind subpath=traverse_subpath -##parameters=reference_taille, form_id -##title= -## -items = context.getTailleList() -request = context.REQUEST - -# This is a bug fix related to an issue in Base -# which does not update attributes if the value is unchanged - -default_quantity = {} -for j in items: - cell = context.newCell(reference_taille, j, base_id='quantity') - try: - default_quantity[j] = cell.quantity - except: - redirect_url = '%s/%s?%s' % ( context.absolute_url() - , form_id - , 'portal_status_message=Error+Missing+Data.' - ) - return request[ 'RESPONSE' ].redirect( redirect_url ) - -reference_quantity = default_quantity[reference_taille] - -if reference_quantity is None or reference_quantity == 0: - redirect_url = '%s/%s?%s' % ( context.absolute_url() - , form_id - , 'portal_status_message=Error+Zero+Value.' - ) - return request[ 'RESPONSE' ].redirect( redirect_url ) - -for i in items: - for j in items: - cell = context.newCell(i, j, base_id='quantity') - if default_quantity[j] is not None: - try: - cell.edit(quantity = default_quantity[j] / default_quantity[i] ) - except: - pass - -redirect_url = '%s/%s?%s' % ( context.absolute_url() - , form_id - , 'portal_status_message=Grille+Consommation+Updated.' - ) -return request[ 'RESPONSE' ].redirect( redirect_url ) diff --git a/product/Coramy/skins/coramy_pdm/grille_consommation_update_form.form b/product/Coramy/skins/coramy_pdm/grille_consommation_update_form.form deleted file mode 100755 index 396816aa5a..0000000000 --- a/product/Coramy/skins/coramy_pdm/grille_consommation_update_form.form +++ /dev/null @@ -1,51 +0,0 @@ -<?xml version="1.0"?> - -<form> - <title>Update</title> - <row_length>4</row_length> - <name>consommation_update_form</name> - <pt>form_view_dialog</pt> - <action>grille_consommation_update</action> - <method>POST</method> - <enctype>multipart/form-data</enctype> - <encoding>UTF-8</encoding> - <stored_encoding>ISO-8859-1</stored_encoding> - <unicode_mode>false</unicode_mode> - <groups> - <group> - <title>Default</title> - <fields> - - <field><id>my_reference_taille</id> <type>ListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <extra_item></extra_item> - <first_item type="int">0</first_item> - <hidden type="int">0</hidden> - <items type="list">[]</items> - <required type="int">1</required> - <size type="int">5</size> - <title>Taille de réference</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <items>here/getTailleList</items> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - </fields> - </group> - </groups> -</form> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_pdm/grille_consommation_view.form b/product/Coramy/skins/coramy_pdm/grille_consommation_view.form deleted file mode 100755 index a5083552c3..0000000000 --- a/product/Coramy/skins/coramy_pdm/grille_consommation_view.form +++ /dev/null @@ -1,117 +0,0 @@ -<?xml version="1.0"?> - -<form> - <title>Grille de consommation</title> - <row_length>4</row_length> - <name>grille_consommation_view</name> - <pt>form_view</pt> - <action>base_edit</action> - <method>POST</method> - <enctype>multipart/form-data</enctype> - <encoding>UTF-8</encoding> - <stored_encoding>ISO-8859-1</stored_encoding> - <unicode_mode>false</unicode_mode> - <groups> - <group> - <title>Default</title> - <fields> - - <field><id>my_id</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <max_length></max_length> - <required type="int">1</required> - <title>Grille</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - <field><id>my_description</id> <type>TextAreaField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <height type="int">5</height> - <hidden type="int">0</hidden> - <max_length></max_length> - <max_linelength></max_linelength> - <max_lines></max_lines> - <required type="int">0</required> - <title>Description</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - <width type="int">40</width> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_many_lines">You entered too many lines.</message> - <message name="line_too_long">A line was too long.</message> - <message name="too_long">You entered too many characters.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>right</title> - <fields> - - <field><id>my_taille_list</id> <type>MultiListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default type="list">[]</default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <extra_item></extra_item> - <hidden type="int">0</hidden> - <items type="list">[]</items> - <required type="int">0</required> - <size type="int">8</size> - <title>Plage de tailles</title> - <unicode type="int">0</unicode> - <view_separator><br /> -</view_separator> - </values> - <tales> - <default>here/getTailleList</default> - <items>here/portal_categories/taille/getFormItemList</items> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - </fields> - </group> - </groups> -</form> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_pdm/modele2transformation.py b/product/Coramy/skins/coramy_pdm/modele2transformation.py deleted file mode 100755 index ac6768c8cd..0000000000 --- a/product/Coramy/skins/coramy_pdm/modele2transformation.py +++ /dev/null @@ -1,32 +0,0 @@ -## Script (Python) "modele2transformation" -##bind container=container -##bind context=context -##bind namespace= -##bind script=script -##bind subpath=traverse_subpath -##parameters=form_id='view', form_id2='', selection_index='', selection_name='', batch_mode=0 -##title= -## -request = context.REQUEST -modele = context - -pricing_transformation = modele.modele_transformation() - -if pricing_transformation is not None : - if form_id2<>'': - redirect_url = '%s/%s?form_id=%s' % (pricing_transformation.absolute_url() - , form_id - , form_id2 - ) - else : - redirect_url = '%s/%s' % (pricing_transformation.absolute_url() - , form_id - ) - -else : - redirect_url = '%s/%s?%s' % ( context.absolute_url() - , form_id - , 'portal_status_message=Pas+de+transformation+définie.' - ) - -request[ 'RESPONSE' ].redirect( redirect_url ) diff --git a/product/Coramy/skins/coramy_pdm/modele2transformation_access.py b/product/Coramy/skins/coramy_pdm/modele2transformation_access.py deleted file mode 100755 index 72e298de44..0000000000 --- a/product/Coramy/skins/coramy_pdm/modele2transformation_access.py +++ /dev/null @@ -1,10 +0,0 @@ -## Script (Python) "modele2transformation_access" -##bind container=container -##bind context=context -##bind namespace= -##bind script=script -##bind subpath=traverse_subpath -##parameters=form_id='' -##title= -## -context.modele2transformation(form_id='transformation_view') diff --git a/product/Coramy/skins/coramy_pdm/modele2transformation_details.py b/product/Coramy/skins/coramy_pdm/modele2transformation_details.py deleted file mode 100755 index 679b20091e..0000000000 --- a/product/Coramy/skins/coramy_pdm/modele2transformation_details.py +++ /dev/null @@ -1,10 +0,0 @@ -## Script (Python) "modele2transformation_details" -##bind container=container -##bind context=context -##bind namespace= -##bind script=script -##bind subpath=traverse_subpath -##parameters=form_id='' -##title= -## -context.modele2transformation(form_id='transformation_expanded_view_form', form_id2='transformation_view') diff --git a/product/Coramy/skins/coramy_pdm/modele2transformation_print.py b/product/Coramy/skins/coramy_pdm/modele2transformation_print.py deleted file mode 100755 index cc67a28cf2..0000000000 --- a/product/Coramy/skins/coramy_pdm/modele2transformation_print.py +++ /dev/null @@ -1,10 +0,0 @@ -## Script (Python) "modele2transformation_print" -##bind container=container -##bind context=context -##bind namespace= -##bind script=script -##bind subpath=traverse_subpath -##parameters=form_id='' -##title= -## -context.modele2transformation(form_id='transformation_print_form', form_id2='transformation_view') diff --git a/product/Coramy/skins/coramy_pdm/modele_catalog.pt b/product/Coramy/skins/coramy_pdm/modele_catalog.pt deleted file mode 100755 index a23de96a16..0000000000 --- a/product/Coramy/skins/coramy_pdm/modele_catalog.pt +++ /dev/null @@ -1,99 +0,0 @@ -<HTML> - <HEAD> - <meta http-equiv="content-type" content="text/html;charset=ISO-8859-1"> - <title tal:content="here/getTitle">Coramy</title> - <link rel=stylesheet type="text/css" href="modele_catalog_c"> - </HEAD> - <BODY> - <SPAN tal:define="modele_list python:here.object_action_list(selection_name='modele_selection',max_nb=20)"> - <TABLE tal:repeat="modele modele_list" width="660" height="955" cellpadding="0" cellspacing="0" class="PageA4"> - <SPAN tal:define="forme python:modele.getDefaultValue('specialise',portal_type=['Forme']); - variantes_coloris_list python:modele.sort_object_list(unordered_list=modele.contentValues(filter={'portal_type':'Variante Modele'}), - sort_order = (('prototype', 'DESC'),('id', 'ASC'),) ); - - correspondance_tailles python:modele.getDefaultValue('specialise',portal_type=['Correspondance Tailles']); - correspondance_mesures python:modele.getDefaultValue('specialise',portal_type=['Correspondance Mesures']); - col_nb python:3; - lin_nb python:3; - nb_coloris python:len(variantes_coloris_list); - "> - <TR> - <TD colspan="2"><!-- Entete --> - <TABLE width="100%"> - <TR> - <TD class="Titre" width="30%"><p tal:repeat="eip modele/getEipList"><span tal:replace="eip"></span></p></TD> - <TD width="30%"> </TD> - <TD width="40%" class="Client" tal:content="modele/getDefaultDestinationTitle">Client</TD> - </TR> - <TR> - <TD></TD> - <TD class="Titre" tal:content="modele/getDestinationReference">ref client</TD> - <TD></TD> - </TR> - </TABLE><br> - </TD> - </TR> - <TR> - <TD width="50%" valign="top"><!-- Tailles & composition --> - <br><br><br> - - <TABLE border="1" width="100%" tal:define="tailles python:modele.bareme_mesures_tailles_list(correspondance_tailles)"> - <TR class="Titre2"> - <TD tal:attributes="colspan python:len(tailles[1])"><b>SIZES</b></TD> - </TR> - <TR> - <TD tal:repeat="index python:range(len(tailles[1]))" - tal:content="python:tailles[1][index]">36</TD><!-- BOUCLE SUR LE NB DE TAILLES --> - </TR> - </TABLE><br><br> - <TABLE border="1" width="100%" > - <TR class="Titre2"> - <TD><b>COMPOSITION</b></TD> - </TR> - <TR> - <TD tal:content="modele/getComposition"></TD> - </TR> - </TABLE><br><br> - <TABLE border="1" width="100%"> - <TR class="Titre2"> - <TD><b>DESCRIPTION</b></TD> - </TR> - <TR> - <TD tal:content="modele/getDescription"></TD> - </TR> - </TABLE> - - </TD> - <TD align="center"><!-- Col. principal, prototype --> - <img src="" - tal:attributes="src python:'%s?display=small&format=jpeg&resolution=300' % variantes_coloris_list[0].getPath()" /><br> - <span class="Compo" tal:content="python:variantes_coloris_list[0].getDestinationReference()" /> - </TD> - </TR> - <TR> - <TD colspan="2"><!-- Autres coloris --> - <TABLE width="100%"> - <SPAN tal:repeat="i python:range(lin_nb)"> - <TR > - <SPAN tal:repeat="j python:range(col_nb)"> - <SPAN tal:condition="python:(i*col_nb)+j+1<nb_coloris"> - <TD align="center" tal:define="variante_coloris python:variantes_coloris_list[(i*col_nb)+j+1]"> - <img src="" - tal:attributes="src python:'%s?display=small&format=jpeg&resolution=150' % variante_coloris.getPath()" width="35%"/><br> - <span class="Compo" tal:content="python:variante_coloris.getDestinationReference()" /> - </TD> - </SPAN> - </SPAN> - </TR> - </SPAN> - </TABLE> - </TD> - </TR> - <TR height="100%"> - <TD/> - </TR> - </SPAN> - </TABLE> - </SPAN> - </BODY> -</HTML> diff --git a/product/Coramy/skins/coramy_pdm/modele_default_search.form b/product/Coramy/skins/coramy_pdm/modele_default_search.form deleted file mode 100755 index 44651bf235..0000000000 --- a/product/Coramy/skins/coramy_pdm/modele_default_search.form +++ /dev/null @@ -1,266 +0,0 @@ -<?xml version="1.0"?> - -<form> - <title>Rechercher</title> - <row_length>4</row_length> - <name>search</name> - <pt>form_dialog</pt> - <action>modele_default_search_list</action> - <method>POST</method> - <enctype></enctype> - <encoding>UTF-8</encoding> - <stored_encoding>ISO-8859-1</stored_encoding> - <unicode_mode>false</unicode_mode> - <groups> - <group> - <title>left</title> - <fields> - - <field><id>my_modele_id_list</id> <type>LinesField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default type="list">[]</default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <height type="int">5</height> - <hidden type="int">0</hidden> - <max_length></max_length> - <max_linelength></max_linelength> - <max_lines></max_lines> - <required type="int">0</required> - <title>Modèle</title> - <unicode type="int">0</unicode> - <view_separator><br /> -</view_separator> - <whitespace_preserve type="int">0</whitespace_preserve> - <width type="int">40</width> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_many_lines">You entered too many lines.</message> - <message name="line_too_long">A line was too long.</message> - <message name="too_long">You entered too many characters.</message> - </messages> - </field> - <field><id>my_forme_id_list</id> <type>LinesField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default type="list">[]</default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <height type="int">5</height> - <hidden type="int">0</hidden> - <max_length></max_length> - <max_linelength></max_linelength> - <max_lines></max_lines> - <required type="int">0</required> - <title>Forme</title> - <unicode type="int">0</unicode> - <view_separator><br /> -</view_separator> - <whitespace_preserve type="int">0</whitespace_preserve> - <width type="int">40</width> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_many_lines">You entered too many lines.</message> - <message name="line_too_long">A line was too long.</message> - <message name="too_long">You entered too many characters.</message> - </messages> - </field> - <field><id>my_gamme_id_list</id> <type>LinesField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default type="list">[]</default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <height type="int">5</height> - <hidden type="int">0</hidden> - <max_length></max_length> - <max_linelength></max_linelength> - <max_lines></max_lines> - <required type="int">0</required> - <title>Gamme</title> - <unicode type="int">0</unicode> - <view_separator><br /> -</view_separator> - <whitespace_preserve type="int">0</whitespace_preserve> - <width type="int">40</width> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_many_lines">You entered too many lines.</message> - <message name="line_too_long">A line was too long.</message> - <message name="too_long">You entered too many characters.</message> - </messages> - </field> - <field><id>my_reset</id> <type>CheckBoxField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default type="int">1</default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <title>Recherche globale</title> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>right</title> - <fields> - - <field><id>my_collection_list</id> <type>MultiListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default type="list">[]</default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <extra_item></extra_item> - <hidden type="int">0</hidden> - <items type="list">[]</items> - <required type="int">0</required> - <size type="int">5</size> - <title>Collection</title> - <unicode type="int">0</unicode> - <view_separator><br /> -</view_separator> - </values> - <tales> - <default>python:'rien du tout'</default> - <items>here/portal_categories/collection/getFormItemList</items> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - <field><id>my_eip_list</id> <type>MultiListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default type="list">[]</default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <extra_item></extra_item> - <hidden type="int">0</hidden> - <items type="list">[]</items> - <required type="int">0</required> - <size type="int">5</size> - <title>Espace Imaginaire</title> - <unicode type="int">0</unicode> - <view_separator><br /> -</view_separator> - </values> - <tales> - <default>python:'rien du tout'</default> - <items>here/portal_categories/eip/getFormItemList</items> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - <field><id>my_marque_list</id> <type>MultiListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default type="list">[]</default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <extra_item></extra_item> - <hidden type="int">0</hidden> - <items type="list">[]</items> - <required type="int">0</required> - <size type="int">5</size> - <title>Marque</title> - <unicode type="int">0</unicode> - <view_separator><br /> -</view_separator> - </values> - <tales> - <default>python:'rien du tout'</default> - <items>here/portal_categories/marque/getFormItemList</items> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - <field><id>my_modele_origine_list</id> <type>MultiListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default type="list">[]</default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <extra_item></extra_item> - <hidden type="int">0</hidden> - <items type="list">[]</items> - <required type="int">0</required> - <size type="int">5</size> - <title>Origine</title> - <unicode type="int">0</unicode> - <view_separator><br /> -</view_separator> - </values> - <tales> - <default>python:'rien du tout'</default> - <items>here/portal_categories/modele_origine/getFormItemList</items> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - </fields> - </group> - </groups> -</form> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_pdm/modele_default_search_list.form b/product/Coramy/skins/coramy_pdm/modele_default_search_list.form deleted file mode 100755 index d20f97d46d..0000000000 --- a/product/Coramy/skins/coramy_pdm/modele_default_search_list.form +++ /dev/null @@ -1,62 +0,0 @@ -<?xml version="1.0"?> - -<form> - <title>Liste de modèles</title> - <row_length>4</row_length> - <name>folder_contents</name> - <pt>form_list</pt> - <action></action> - <method>POST</method> - <enctype></enctype> - <encoding>UTF-8</encoding> - <stored_encoding>ISO-8859-1</stored_encoding> - <unicode_mode>false</unicode_mode> - <groups> - <group> - <title>Default</title> - <fields> - - <field><id>listbox</id> <type>ListBox</type> - <values> - <all_columns type="list">[('id', 'Modele'), ('forme_id', 'Forme'), ('gamme_id', 'Gamme'), ('Description', 'Description'), ('default_destination_title', 'Client'), ('destination_reference', 'R\xe9f\xe9rence Client'), ('modele_state', 'Etat'), ('getDefaultCollection', 'Collection'), ('getEip', 'Espace imaginaire'), ('modele_state_modeliste', 'Modeliste'), ('modele_state_gestionaire', 'Gestionaire'), ('modele_state_probleme', 'Probleme')]</all_columns> - <all_editable_columns type="list">[]</all_editable_columns> - <alternate_name></alternate_name> - <columns type="list">[('id', 'Modele'), ('forme_id', 'Forme'), ('gamme_id', 'Gamme'), ('Description', 'Description'), ('default_destination_title', 'Client'), ('modele_state', 'Etat')]</columns> - <css_class></css_class> - <default></default> - <default_params type="list">[]</default_params> - <description></description> - <domain_root_list type="list">[]</domain_root_list> - <domain_tree type="int">0</domain_tree> - <editable type="int">1</editable> - <editable_columns type="list">[]</editable_columns> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <global_attributes type="list">[]</global_attributes> - <hidden type="int">0</hidden> - <lines type="int">30</lines> - <list_action>list</list_action> - <list_method type="method">modele_sql_default_search</list_method> - <meta_types type="list">[]</meta_types> - <portal_types type="list">[('Modele', 'Modele')]</portal_types> - <report_root_list type="list">[]</report_root_list> - <report_tree type="int">0</report_tree> - <search type="int">1</search> - <search_columns></search_columns> - <select type="int">1</select> - <selection_name>modele_selection</selection_name> - <sort type="list">[('id', 'id')]</sort> - <sort_columns></sort_columns> - <stat_method></stat_method> - <title>Modeles</title> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - </messages> - </field> - </fields> - </group> - </groups> -</form> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_pdm/modele_dessins_list.py b/product/Coramy/skins/coramy_pdm/modele_dessins_list.py deleted file mode 100755 index daf3bca8b3..0000000000 --- a/product/Coramy/skins/coramy_pdm/modele_dessins_list.py +++ /dev/null @@ -1,32 +0,0 @@ -## Script (Python) "modele_dessins_list" -##bind container=container -##bind context=context -##bind namespace= -##bind script=script -##bind subpath=traverse_subpath -##parameters= -##title= -## -modele = context -forme = modele.getDefaultValue('specialise',portal_type=['Forme']) - -if forme<>None: - dessins_list1 = forme.objectValues() -else : - dessins_list1 = [] - -vetements_list = modele.getValueList('specialise',portal_type=['Vetement']) - -final_list = [] - -for dessin in dessins_list1 : - if dessin.portal_type == 'Dessin Technique' : - final_list.append(dessin) - -for vetement in vetements_list : - dessins_list2 = vetement.objectValues() - for dessin in dessins_list2 : - if dessin.portal_type == 'Dessin Technique' : - final_list.append(dessin) - -return final_list diff --git a/product/Coramy/skins/coramy_pdm/modele_history_view.pt b/product/Coramy/skins/coramy_pdm/modele_history_view.pt deleted file mode 100755 index 37fa949e25..0000000000 --- a/product/Coramy/skins/coramy_pdm/modele_history_view.pt +++ /dev/null @@ -1,78 +0,0 @@ -<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" - "DTD/xhtml1-strict.dtd"> -<?xml-stylesheet href="erp5.css" rel="stylesheet" type="text/css"?> - -<span tal:replace="nothing"> -<!-- -Copyright (c) 2002 Nexedi SARL and Contributors. All Rights Reserved. - Thierry Faucher <tf@nexedi.com> - -This program is Free Software; you can redistribute it and/or -modify it under the terms of the GNU General Public License -as published by the Free Software Foundation; either version 2 -of the License, or (at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program; if not, write to the Free Software -Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. ---> -</span> - -<html xmlns="http://www.w3.org/1999/xhtml" lang="en" - xml:lang="en" - xmlns:tal="http://xml.zope.org/namespaces/tal" - xmlns:metal="http://xml.zope.org/namespaces/metal" - metal:use-macro="here/view_master/macros/master"> - - <head> - <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /> - <title tal:content="template/title_or_id">The title</title> - <link href="erp5.css" rel="stylesheet" type="text/css"/> - </head> - - <body><div metal:fill-slot="main"> - <div class="Main"> - -<br> - -<table border=1> - <tr align=center> - <td><b>Etat</b></td><td><b>Date - Heure</b></td><td><b>Utilisateur</b></td><td><b>Action</b></td><td><b>Commentaires</b></td> - </tr> - <span tal:repeat="history_item python:here.portal_workflow.getInfoFor(here, 'modele_history')"> - - <tr> - <td> - <span tal:condition="history_item/modele_state | nothing" - tal:content="history_item/modele_state"/> - </td> - <td> - <span tal:condition="history_item/modele_time | nothing" - tal:content="history_item/modele_time"/> - </td> - <td> - <span tal:condition="history_item/modele_actor | nothing" - tal:content="history_item/modele_actor"/> - </td> - <td> - <span tal:condition="history_item/modele_action | nothing" - tal:content="history_item/modele_action"/> - </td> - <td> - <span tal:condition="history_item/modele_comment | nothing" - tal:content="history_item/modele_comment"/> - </td> - </tr> - - </span> -</table> - - </div> - </div> - </body> -</html> diff --git a/product/Coramy/skins/coramy_pdm/modele_id_search_list.form b/product/Coramy/skins/coramy_pdm/modele_id_search_list.form deleted file mode 100755 index 1526bcd7aa..0000000000 --- a/product/Coramy/skins/coramy_pdm/modele_id_search_list.form +++ /dev/null @@ -1,62 +0,0 @@ -<?xml version="1.0"?> - -<form> - <title>Liste de modèles</title> - <row_length>4</row_length> - <name>folder_contents</name> - <pt>form_list</pt> - <action></action> - <method>POST</method> - <enctype></enctype> - <encoding>UTF-8</encoding> - <stored_encoding>ISO-8859-1</stored_encoding> - <unicode_mode>false</unicode_mode> - <groups> - <group> - <title>Default</title> - <fields> - - <field><id>listbox</id> <type>ListBox</type> - <values> - <all_columns type="list">[('id', 'Modele'), ('forme_id', 'Forme'), ('gamme_id', 'Gamme'), ('Description', 'Description'), ('default_destination_title', 'Client'), ('destination_reference', 'R\xe9f\xe9rence Client'), ('modele_state', 'Etat'), ('getDefaultCollection', 'Collection'), ('getEip', 'Espace imaginaire'), ('modele_state_modeliste', 'Modeliste'), ('modele_state_gestionaire', 'Gestionaire'), ('modele_state_probleme', 'Probleme')]</all_columns> - <all_editable_columns type="list">[]</all_editable_columns> - <alternate_name></alternate_name> - <columns type="list">[('id', 'Modele'), ('forme_id', 'Forme'), ('gamme_id', 'Gamme'), ('Description', 'Description'), ('default_destination_title', 'Client'), ('modele_state', 'Etat')]</columns> - <css_class></css_class> - <default></default> - <default_params type="list">[]</default_params> - <description></description> - <domain_root_list type="list">[]</domain_root_list> - <domain_tree type="int">0</domain_tree> - <editable type="int">1</editable> - <editable_columns type="list">[]</editable_columns> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <global_attributes></global_attributes> - <hidden type="int">0</hidden> - <lines type="int">30</lines> - <list_action>list</list_action> - <list_method type="method">sql_id_search</list_method> - <meta_types type="list">[]</meta_types> - <portal_types type="list">[('Modele', 'Modele')]</portal_types> - <report_root_list type="list">[]</report_root_list> - <report_tree type="int">0</report_tree> - <search type="int">1</search> - <search_columns></search_columns> - <select type="int">1</select> - <selection_name>modele_selection</selection_name> - <sort type="list">[]</sort> - <sort_columns></sort_columns> - <stat_method></stat_method> - <title>Modeles</title> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - </messages> - </field> - </fields> - </group> - </groups> -</form> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_pdm/modele_list.form b/product/Coramy/skins/coramy_pdm/modele_list.form deleted file mode 100755 index fadeba602b..0000000000 --- a/product/Coramy/skins/coramy_pdm/modele_list.form +++ /dev/null @@ -1,62 +0,0 @@ -<?xml version="1.0"?> - -<form> - <title>Liste de modèles</title> - <row_length>4</row_length> - <name>folder_contents</name> - <pt>form_list</pt> - <action></action> - <method>POST</method> - <enctype></enctype> - <encoding>UTF-8</encoding> - <stored_encoding>ISO-8859-1</stored_encoding> - <unicode_mode>false</unicode_mode> - <groups> - <group> - <title>Default</title> - <fields> - - <field><id>listbox</id> <type>ListBox</type> - <values> - <all_columns type="list">[('id', 'Modele'), ('forme_id', 'Forme'), ('gamme_id', 'Gamme'), ('Description', 'Description'), ('default_destination_title', 'Client'), ('destination_reference', 'R\xe9f\xe9rence Client'), ('modele_state', 'Etat'), ('getDefaultCollection', 'Collection'), ('getModeleTemplate', 'Modele pere'), ('getEip', 'Espace imaginaire'), ('modele_state_modeliste', 'Modeliste'), ('modele_state_gestionaire', 'Gestionaire'), ('modele_state_probleme', 'Probleme'), ('getModelisteDesigne', 'Modeliste')]</all_columns> - <all_editable_columns type="list">[]</all_editable_columns> - <alternate_name></alternate_name> - <columns type="list">[('id', 'Modele'), ('forme_id', 'Forme'), ('gamme_id', 'Gamme'), ('Description', 'Description'), ('default_destination_title', 'Client'), ('destination_reference', 'R\xe9f\xe9rence Client'), ('modele_state', 'Etat')]</columns> - <css_class></css_class> - <default></default> - <default_params type="list">[]</default_params> - <description></description> - <domain_root_list type="list">[]</domain_root_list> - <domain_tree type="int">0</domain_tree> - <editable type="int">1</editable> - <editable_columns type="list">[]</editable_columns> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <global_attributes type="list">[]</global_attributes> - <hidden type="int">0</hidden> - <lines type="int">30</lines> - <list_action>list</list_action> - <list_method type="method">portal_catalog</list_method> - <meta_types type="list">[]</meta_types> - <portal_types type="list">[('Modele', 'Modele')]</portal_types> - <report_root_list type="list">[]</report_root_list> - <report_tree type="int">0</report_tree> - <search type="int">1</search> - <search_columns></search_columns> - <select type="int">1</select> - <selection_name>modele_selection</selection_name> - <sort type="list">[('id', 'id')]</sort> - <sort_columns></sort_columns> - <stat_method></stat_method> - <title>Modeles</title> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - </messages> - </field> - </fields> - </group> - </groups> -</form> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_pdm/modele_list2.form b/product/Coramy/skins/coramy_pdm/modele_list2.form deleted file mode 100755 index b0a36cad16..0000000000 --- a/product/Coramy/skins/coramy_pdm/modele_list2.form +++ /dev/null @@ -1,63 +0,0 @@ -<?xml version="1.0"?> - -<form> - <title>Liste de modèles</title> - <row_length>4</row_length> - <name>folder_contents</name> - <pt>form_list</pt> - <action></action> - <method>POST</method> - <enctype></enctype> - <encoding>UTF-8</encoding> - <stored_encoding>ISO-8859-1</stored_encoding> - <unicode_mode>false</unicode_mode> - <groups> - <group> - <title>Default</title> - <fields> - - <field><id>listbox</id> <type>ListBox</type> - <values> - <all_columns type="list">[('id', 'Modele'), ('forme_id', 'Forme'), ('gamme_id', 'Gamme'), ('Description', 'Description'), ('default_destination_title', 'Client'), ('destination_reference', 'R\xe9f\xe9rence Client'), ('modele_state', 'Etat'), ('getDefaultCollection', 'Collection'), ('getEip', 'Espace imaginaire'), ('modele_state_modeliste', 'Modeliste'), ('modele_state_gestionaire', 'Gestionaire'), ('modele_state_probleme', 'Probleme')]</all_columns> - <all_editable_columns type="list">[]</all_editable_columns> - <alternate_name></alternate_name> - <columns type="list">[('id', 'Modele'), ('forme_id', 'Forme'), ('gamme_id', 'Gamme'), ('Description', 'Description'), ('default_destination_title', 'Client'), ('destination_reference', 'R\xe9f\xe9rence Client'), ('modele_state', 'Etat')]</columns> - <css_class></css_class> - <default></default> - <default_params type="list">[]</default_params> - <description></description> - <domain_root_list type="list">[]</domain_root_list> - <domain_tree type="int">0</domain_tree> - <editable type="int">1</editable> - <editable_columns type="list">[]</editable_columns> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <global_attributes type="list">[]</global_attributes> - <hidden type="int">0</hidden> - <lines type="int">30</lines> - <list_action>list</list_action> - <list_method type="method">portal_catalog</list_method> - <meta_types type="list">[]</meta_types> - <portal_types type="list">[('Modele', 'Modele')]</portal_types> - <report_root_list type="list">[]</report_root_list> - <report_tree type="int">0</report_tree> - <search type="int">1</search> - <search_columns></search_columns> - <select type="int">1</select> - <selection_name>modele_selection</selection_name> - <sort type="list">[('id', 'id')]</sort> - <sort_columns></sort_columns> - <stat_method></stat_method> - <title>Modeles</title> - </values> - <tales> - <list_method>python:here.portal_catalog</list_method> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - </messages> - </field> - </fields> - </group> - </groups> -</form> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_pdm/modele_list_export.py b/product/Coramy/skins/coramy_pdm/modele_list_export.py deleted file mode 100755 index 55fc1f9694..0000000000 --- a/product/Coramy/skins/coramy_pdm/modele_list_export.py +++ /dev/null @@ -1,27 +0,0 @@ -## Script (Python) "modele_list_export" -##bind container=container -##bind context=context -##bind namespace= -##bind script=script -##bind subpath=traverse_subpath -##parameters= -##title= -## -selection = context.portal_selections.getSelectionFor('modele_selection',REQUEST=context.REQUEST) -modele_list = selection(context=context) -request = context.REQUEST - -for modele_item in modele_list: - modele=modele_item.getObject() - if modele <> None : - - ligne_modele = '' - ligne_modele += str(modele.getId())+'\t' - ligne_modele += str(modele.getModeleOrigine())+'\t' - ligne_modele += str(modele.getCollection())+'\t' - - print ligne_modele - -request.RESPONSE.setHeader('Content-Type','application/text') - -return printed diff --git a/product/Coramy/skins/coramy_pdm/modele_list_set_gencod_coramy.py b/product/Coramy/skins/coramy_pdm/modele_list_set_gencod_coramy.py deleted file mode 100755 index 8194634027..0000000000 --- a/product/Coramy/skins/coramy_pdm/modele_list_set_gencod_coramy.py +++ /dev/null @@ -1,16 +0,0 @@ -## Script (Python) "modele_list_set_gencod_coramy" -##bind container=container -##bind context=context -##bind namespace= -##bind script=script -##bind subpath=traverse_subpath -##parameters= -##title= -## -selection = context.portal_selections.getSelectionFor('modele_selection',REQUEST=context.REQUEST) -modele_list = selection(context=context) -request = context.REQUEST - -for modele_item in modele_list: - modele=modele_item.getObject() - modele.setEan13Modele(modele.portal_categories.group.Coramy) diff --git a/product/Coramy/skins/coramy_pdm/modele_list_set_gencod_houvenaegel.py b/product/Coramy/skins/coramy_pdm/modele_list_set_gencod_houvenaegel.py deleted file mode 100755 index dca8c1c0a4..0000000000 --- a/product/Coramy/skins/coramy_pdm/modele_list_set_gencod_houvenaegel.py +++ /dev/null @@ -1,16 +0,0 @@ -## Script (Python) "modele_list_set_gencod_houvenaegel" -##bind container=container -##bind context=context -##bind namespace= -##bind script=script -##bind subpath=traverse_subpath -##parameters= -##title= -## -selection = context.portal_selections.getSelectionFor('modele_selection',REQUEST=context.REQUEST) -modele_list = selection(context=context) -request = context.REQUEST - -for modele_item in modele_list: - modele=modele_item.getObject() - modele.setEan13Modele(modele.portal_categories.group.Coramy.Houvenaegel) diff --git a/product/Coramy/skins/coramy_pdm/modele_list_sort_on.form b/product/Coramy/skins/coramy_pdm/modele_list_sort_on.form deleted file mode 100755 index cd9979e805..0000000000 --- a/product/Coramy/skins/coramy_pdm/modele_list_sort_on.form +++ /dev/null @@ -1,50 +0,0 @@ -<?xml version="1.0"?> - -<form> - <title>Trier</title> - <row_length>4</row_length> - <name>modele_list_sort_on</name> - <pt>form_sort</pt> - <action>base_sort_on</action> - <method>POST</method> - <enctype></enctype> - <encoding>UTF-8</encoding> - <stored_encoding>ISO-8859-1</stored_encoding> - <unicode_mode>false</unicode_mode> - <groups> - <group> - <title>Default</title> - <fields> - - <field><id>sort_order</id> <type>ListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <extra_item></extra_item> - <first_item type="int">0</first_item> - <hidden type="int">0</hidden> - <items type="list">[('Ascending', 'ascending'), ('Descending', 'descending')]</items> - <required type="int">1</required> - <size type="int">1</size> - <title>sort_order</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - </fields> - </group> - </groups> -</form> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_pdm/modele_list_ui.form b/product/Coramy/skins/coramy_pdm/modele_list_ui.form deleted file mode 100755 index a0cd88eab5..0000000000 --- a/product/Coramy/skins/coramy_pdm/modele_list_ui.form +++ /dev/null @@ -1,28 +0,0 @@ -<?xml version="1.0"?> - -<form> - <title>Enregistrer les paramètres</title> - <row_length>4</row_length> - <name>person_list_ui</name> - <pt>form_list_ui</pt> - <action>base_list_ui</action> - <method>POST</method> - <enctype></enctype> - <encoding>UTF-8</encoding> - <stored_encoding>ISO-8859-1</stored_encoding> - <unicode_mode>false</unicode_mode> - <groups> - <group> - <title>left</title> - <fields> - - </fields> - </group> - <group> - <title>right</title> - <fields> - - </fields> - </group> - </groups> -</form> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_pdm/modele_list_update_gencod.py b/product/Coramy/skins/coramy_pdm/modele_list_update_gencod.py deleted file mode 100755 index ba03c65a10..0000000000 --- a/product/Coramy/skins/coramy_pdm/modele_list_update_gencod.py +++ /dev/null @@ -1,18 +0,0 @@ -## Script (Python) "modele_list_update_gencod" -##bind container=container -##bind context=context -##bind namespace= -##bind script=script -##bind subpath=traverse_subpath -##parameters= -##title= -## -selection = context.portal_selections.getSelectionFor('modele_selection',REQUEST=context.REQUEST) -modele_list = selection(context=context) -request = context.REQUEST -CIP = 650000 - -for modele_item in modele_list: - modele=modele_item.getObject() - modele.edit(code_ean13 = modele.new_ean13_code('3','15971',CIP)) - CIP += 1 diff --git a/product/Coramy/skins/coramy_pdm/modele_mise_au_point_view.form b/product/Coramy/skins/coramy_pdm/modele_mise_au_point_view.form deleted file mode 100755 index 6cad046a49..0000000000 --- a/product/Coramy/skins/coramy_pdm/modele_mise_au_point_view.form +++ /dev/null @@ -1,166 +0,0 @@ -<?xml version="1.0"?> - -<form> - <title>Modèle</title> - <row_length>4</row_length> - <name>modele_mise_au_point_view</name> - <pt>form_view</pt> - <action>base_edit</action> - <method>POST</method> - <enctype></enctype> - <encoding>UTF-8</encoding> - <stored_encoding>ISO-8859-1</stored_encoding> - <unicode_mode>false</unicode_mode> - <groups> - <group> - <title>left</title> - <fields> - - </fields> - </group> - <group> - <title>right</title> - <fields> - - </fields> - </group> - <group> - <title>center</title> - <fields> - - <field><id>aggegated_nomenclature</id> <type>TextAreaField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <height type="int">8</height> - <hidden type="int">0</hidden> - <max_length></max_length> - <max_linelength></max_linelength> - <max_lines></max_lines> - <required type="int">0</required> - <title>Nomenclature aggrégée (non modifiable)</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - <width type="int">80</width> - </values> - <tales> - <default>python:here.getModeleAggregatedNomenclature()</default> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_many_lines">You entered too many lines.</message> - <message name="line_too_long">A line was too long.</message> - <message name="too_long">You entered too many characters.</message> - </messages> - </field> - <field><id>my_nomenclature</id> <type>TextAreaField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <height type="int">5</height> - <hidden type="int">0</hidden> - <max_length></max_length> - <max_linelength></max_linelength> - <max_lines></max_lines> - <required type="int">0</required> - <title>Nomenclature</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - <width type="int">80</width> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_many_lines">You entered too many lines.</message> - <message name="line_too_long">A line was too long.</message> - <message name="too_long">You entered too many characters.</message> - </messages> - </field> - <field><id>aggegated_mode_operatoire</id> <type>TextAreaField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <height type="int">8</height> - <hidden type="int">0</hidden> - <max_length></max_length> - <max_linelength></max_linelength> - <max_lines></max_lines> - <required type="int">0</required> - <title>Mode opératoire aggrégé (non modifiable)</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - <width type="int">80</width> - </values> - <tales> - <default>python:here.getModeleAggregatedModeOperatoire()</default> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_many_lines">You entered too many lines.</message> - <message name="line_too_long">A line was too long.</message> - <message name="too_long">You entered too many characters.</message> - </messages> - </field> - <field><id>my_mode_operatoire</id> <type>TextAreaField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <height type="int">5</height> - <hidden type="int">0</hidden> - <max_length></max_length> - <max_linelength></max_linelength> - <max_lines></max_lines> - <required type="int">0</required> - <title>Mode opératoire</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - <width type="int">80</width> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_many_lines">You entered too many lines.</message> - <message name="line_too_long">A line was too long.</message> - <message name="too_long">You entered too many characters.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>bottom</title> - <fields> - - </fields> - </group> - </groups> -</form> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_pdm/modele_pri_matrix_item_list.py b/product/Coramy/skins/coramy_pdm/modele_pri_matrix_item_list.py deleted file mode 100755 index 8bcc753027..0000000000 --- a/product/Coramy/skins/coramy_pdm/modele_pri_matrix_item_list.py +++ /dev/null @@ -1,20 +0,0 @@ -## Script (Python) "modele_pri_matrix_item_list" -##bind container=container -##bind context=context -##bind namespace= -##bind script=script -##bind subpath=traverse_subpath -##parameters=base_category_list=[] -##title= -## -modele = context - -first_list = modele.getVariationCategoryItemList(base_category_list=base_category_list) -final_list = [] -for list_item in first_list : - final_list.append((list_item[1],list_item[0])) - -if len(final_list)==0 : - final_list.append((None,None)) - -return final_list diff --git a/product/Coramy/skins/coramy_pdm/modele_pri_view.form b/product/Coramy/skins/coramy_pdm/modele_pri_view.form deleted file mode 100755 index 83d15c6a86..0000000000 --- a/product/Coramy/skins/coramy_pdm/modele_pri_view.form +++ /dev/null @@ -1,261 +0,0 @@ -<?xml version="1.0"?> - -<form> - <title>Modèle</title> - <row_length>4</row_length> - <name>modele_pri_view</name> - <pt>form_view</pt> - <action>base_edit</action> - <method>POST</method> - <enctype></enctype> - <encoding>UTF-8</encoding> - <stored_encoding>ISO-8859-1</stored_encoding> - <unicode_mode>false</unicode_mode> - <groups> - <group> - <title>left</title> - <fields> - - <field><id>my_id</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <max_length></max_length> - <required type="int">1</required> - <title>Modèle</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>right</title> - <fields> - - </fields> - </group> - <group> - <title>center</title> - <fields> - - </fields> - </group> - <group> - <title>bottom</title> - <fields> - - <field><id>matrixbox</id> <type>MatrixBox</type> - <values> - <all_editable_attributes type="list">[('pri', 'pri'), ('predicate_value', 'predicate_value')]</all_editable_attributes> - <alternate_name></alternate_name> - <cell_base_id>pri</cell_base_id> - <cell_range type="list">[]</cell_range> - <columns type="list">[('None', 'None')]</columns> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <editable_attributes type="list">[('pri', 'pri'), ('predicate_value', 'predicate_value')]</editable_attributes> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <getter_method></getter_method> - <global_attributes type="list">[('domain_base_category_list', 'domain_base_category_list'), ('mapped_value_property_list', 'mapped_value_propertyr_list'), ('predicate_operator', 'predicate_operator')]</global_attributes> - <hidden type="int">0</hidden> - <lines type="list">[('None', 'None')]</lines> - <setter_method></setter_method> - <tabs type="list">[('None', 'None')]</tabs> - <title>matrixbox</title> - <update_cell_range type="int">1</update_cell_range> - </values> - <tales> - <columns>python:here.modele_pri_matrix_item_list(base_category_list=('taille',))</columns> - <lines>python:here.modele_pri_matrix_item_list(base_category_list=('coloris',))</lines> - <tabs>python:[(None,None)]</tabs> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - </messages> - </field> - <field><id>domain_base_category_list</id> <type>LinesField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default type="list">[]</default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <height type="int">5</height> - <hidden type="int">1</hidden> - <max_length></max_length> - <max_linelength></max_linelength> - <max_lines></max_lines> - <required type="int">0</required> - <title>Valid Domain</title> - <unicode type="int">0</unicode> - <view_separator><br /> -</view_separator> - <whitespace_preserve type="int">0</whitespace_preserve> - <width type="int">40</width> - </values> - <tales> - <default>python:filter(lambda x:x in ('coloris', 'taille'),here.getVariationBaseCategoryList())</default> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_many_lines">You entered too many lines.</message> - <message name="line_too_long">A line was too long.</message> - <message name="too_long">You entered too many characters.</message> - </messages> - </field> - <field><id>predicate_operator</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default>SUPERSET_OF</default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">1</hidden> - <max_length></max_length> - <required type="int">0</required> - <title>Operator</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - <field><id>mapped_value_property_list</id> <type>LinesField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default type="list">['pri']</default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <height type="int">5</height> - <hidden type="int">1</hidden> - <max_length></max_length> - <max_linelength></max_linelength> - <max_lines></max_lines> - <required type="int">0</required> - <title>Modified categories</title> - <unicode type="int">0</unicode> - <view_separator><br /> -</view_separator> - <whitespace_preserve type="int">0</whitespace_preserve> - <width type="int">40</width> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_many_lines">You entered too many lines.</message> - <message name="line_too_long">A line was too long.</message> - <message name="too_long">You entered too many characters.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>hidden</title> - <fields> - - <field><id>matrixbox_predicate_value</id> <type>LinesField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default type="list">[]</default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <height type="int">5</height> - <hidden type="int">1</hidden> - <max_length></max_length> - <max_linelength></max_linelength> - <max_lines></max_lines> - <required type="int">0</required> - <title>matrixbox_predicate_value</title> - <unicode type="int">0</unicode> - <view_separator><br /> -</view_separator> - <whitespace_preserve type="int">0</whitespace_preserve> - <width type="int">40</width> - </values> - <tales> - <default>python:filter(lambda x: x is not None,cell_index)</default> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_many_lines">You entered too many lines.</message> - <message name="line_too_long">A line was too long.</message> - <message name="too_long">You entered too many characters.</message> - </messages> - </field> - <field><id>matrixbox_pri</id> <type>FloatField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">10</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <required type="int">0</required> - <title>Prix de revient</title> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <default>python:cell.getProperty(key='pri')</default> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="not_float">You did not enter a floating point number.</message> - </messages> - </field> - </fields> - </group> - </groups> -</form> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_pdm/modele_price_view.form b/product/Coramy/skins/coramy_pdm/modele_price_view.form deleted file mode 100755 index 6edadaf468..0000000000 --- a/product/Coramy/skins/coramy_pdm/modele_price_view.form +++ /dev/null @@ -1,570 +0,0 @@ -<?xml version="1.0"?> - -<form> - <title>Modèle</title> - <row_length>4</row_length> - <name>modele_view</name> - <pt>form_view</pt> - <action>base_edit</action> - <method>POST</method> - <enctype></enctype> - <encoding>UTF-8</encoding> - <stored_encoding>ISO-8859-1</stored_encoding> - <unicode_mode>false</unicode_mode> - <groups> - <group> - <title>left</title> - <fields> - - <field><id>my_id</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <max_length></max_length> - <required type="int">1</required> - <title>Modèle</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - <field><id>my_description</id> <type>TextAreaField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <height type="int">3</height> - <hidden type="int">0</hidden> - <max_length></max_length> - <max_linelength></max_linelength> - <max_lines></max_lines> - <required type="int">0</required> - <title>Description</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - <width type="int">40</width> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_many_lines">You entered too many lines.</message> - <message name="line_too_long">A line was too long.</message> - <message name="too_long">You entered too many characters.</message> - </messages> - </field> - <field><id>modele_state</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <max_length></max_length> - <required type="int">0</required> - <title>Etat</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <default>python:here.portal_workflow.getInfoFor(here, 'modele_state')</default> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>right</title> - <fields> - - <field><id>my_tarif</id> <type>ListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <extra_item></extra_item> - <first_item type="int">0</first_item> - <hidden type="int">0</hidden> - <items type="list">[]</items> - <required type="int">0</required> - <size type="int">1</size> - <title>Tarif</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <items>here/portal_categories/tarif/getFormItemList</items> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - <field><id>my_cout_additionnel</id> <type>FloatField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">10</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <required type="int">0</required> - <title>Coût sup. (euros)</title> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="not_float">You did not enter a floating point number.</message> - </messages> - </field> - <field><id>my_coef_marge</id> <type>FloatField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">10</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <required type="int">0</required> - <title>Coef. de marge</title> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="not_float">You did not enter a floating point number.</message> - </messages> - </field> - <field><id>my_coef_majoration</id> <type>FloatField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">10</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <required type="int">0</required> - <title>Coef. majoration</title> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="not_float">You did not enter a floating point number.</message> - </messages> - </field> - <field><id>my_temps_piquage</id> <type>FloatField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">10</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <required type="int">0</required> - <title>Temps piquage (min)</title> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="not_float">You did not enter a floating point number.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>center</title> - <fields> - - </fields> - </group> - <group> - <title>bottom</title> - <fields> - - <field><id>listbox</id> <type>ListBox</type> - <values> - <all_columns type="list">[('id', 'El\xe9ment'), ('description', 'Description'), ('coloris_list', 'Coloris'), ('taille_list', 'Tailles'), ('default_taille', 'Taille centrale'), ('quantity_range_list', 'Quantit\xe9s'), ('destination_base_price', 'Prix par d\xe9faut')]</all_columns> - <all_editable_columns type="list">[('description', 'description'), ('taille_list', 'tailles_list'), ('default_taille', 'Taille par d\xe9faut'), ('coloris_list', 'coloris_list'), ('destination_base_price', 'price'), ('quantity_range_list', 'Quantit\xe9s')]</all_editable_columns> - <alternate_name></alternate_name> - <columns type="list">[('id', 'El\xe9ment'), ('description', 'Description'), ('coloris_list', 'Coloris'), ('taille_list', 'Tailles'), ('default_taille', 'Taille centrale'), ('quantity_range_list', 'Quantit\xe9s'), ('destination_base_price', 'Prix par d\xe9faut')]</columns> - <css_class></css_class> - <default></default> - <default_params type="list">[('id', "''"), ('description', "''")]</default_params> - <description></description> - <domain_root_list type="list">[]</domain_root_list> - <domain_tree type="int">0</domain_tree> - <editable type="int">1</editable> - <editable_columns type="list">[('description', 'description'), ('taille_list', 'tailles_list'), ('default_taille', 'Taille par d\xe9faut'), ('coloris_list', 'coloris_list'), ('destination_base_price', 'price'), ('quantity_range_list', 'Quantit\xe9s')]</editable_columns> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <global_attributes type="list">[('predicate_operator', 'predicate_operator'), ('mapped_value_property_list', 'mapped_value_property_list'), ('domain_base_category_list', 'domain_base_category_list')]</global_attributes> - <hidden type="int">0</hidden> - <lines type="int">20</lines> - <list_action>list</list_action> - <list_method type="method">searchFolder</list_method> - <meta_types type="list">[]</meta_types> - <portal_types type="list">[('Element Tarif', 'Element Tarif')]</portal_types> - <report_root_list type="list">[]</report_root_list> - <report_tree type="int">0</report_tree> - <search type="int">0</search> - <search_columns></search_columns> - <select type="int">0</select> - <selection_name>elements_tarif</selection_name> - <sort type="list">[]</sort> - <sort_columns></sort_columns> - <stat_method></stat_method> - <title>Eléments de tarif</title> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - </messages> - </field> - <field><id>domain_base_category_list</id> <type>LinesField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default type="list">['taille', 'coloris']</default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <height type="int">5</height> - <hidden type="int">1</hidden> - <max_length></max_length> - <max_linelength></max_linelength> - <max_lines></max_lines> - <required type="int">0</required> - <title>Valid Domain</title> - <unicode type="int">0</unicode> - <view_separator><br /> -</view_separator> - <whitespace_preserve type="int">0</whitespace_preserve> - <width type="int">40</width> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_many_lines">You entered too many lines.</message> - <message name="line_too_long">A line was too long.</message> - <message name="too_long">You entered too many characters.</message> - </messages> - </field> - <field><id>mapped_value_property_list</id> <type>LinesField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default type="list">['destination_base_price']</default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <height type="int">5</height> - <hidden type="int">1</hidden> - <max_length></max_length> - <max_linelength></max_linelength> - <max_lines></max_lines> - <required type="int">0</required> - <title>Modified categories</title> - <unicode type="int">0</unicode> - <view_separator><br /> -</view_separator> - <whitespace_preserve type="int">0</whitespace_preserve> - <width type="int">40</width> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_many_lines">You entered too many lines.</message> - <message name="line_too_long">A line was too long.</message> - <message name="too_long">You entered too many characters.</message> - </messages> - </field> - <field><id>predicate_operator</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default>SUPERSET_OF</default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">1</hidden> - <max_length></max_length> - <required type="int">0</required> - <title>Operator</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>hidden</title> - <fields> - - <field><id>listbox_coloris_list</id> <type>MultiListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default type="list">[]</default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <extra_item></extra_item> - <hidden type="int">0</hidden> - <items type="list">[]</items> - <required type="int">0</required> - <size type="int">5</size> - <title>Coloris</title> - <unicode type="int">0</unicode> - <view_separator><br /> -</view_separator> - </values> - <tales> - <items>python:here.getVariationRangeCategoryItemList(base_category_list=['coloris'], base=0)</items> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - <field><id>listbox_description</id> <type>TextAreaField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <height type="int">2</height> - <hidden type="int">0</hidden> - <max_length></max_length> - <max_linelength></max_linelength> - <max_lines></max_lines> - <required type="int">0</required> - <title>Description</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - <width type="int">20</width> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_many_lines">You entered too many lines.</message> - <message name="line_too_long">A line was too long.</message> - <message name="too_long">You entered too many characters.</message> - </messages> - </field> - <field><id>listbox_taille_list</id> <type>MultiListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default type="list">[]</default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <extra_item></extra_item> - <hidden type="int">0</hidden> - <items type="list">[]</items> - <required type="int">0</required> - <size type="int">5</size> - <title>Tailles</title> - <unicode type="int">0</unicode> - <view_separator><br /> -</view_separator> - </values> - <tales> - <items>python:here.getVariationRangeCategoryItemList(base_category_list=['taille'],base=0)</items> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - <field><id>listbox_default_taille</id> <type>ListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <extra_item></extra_item> - <first_item type="int">0</first_item> - <hidden type="int">0</hidden> - <items type="list">[]</items> - <required type="int">0</required> - <size type="int">1</size> - <title>Taille centrale</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <default>here/getDefaultTaille</default> - <items>python:here.getVariationRangeCategoryItemList(base_category_list=['taille'],base=0)</items> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - <field><id>listbox_destination_base_price</id> <type>FloatField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">10</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <required type="int">0</required> - <title>Price</title> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="not_float">You did not enter a floating point number.</message> - </messages> - </field> - <field><id>listbox_quantity_range_list</id> <type>MultiListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default type="list">[]</default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <extra_item></extra_item> - <hidden type="int">0</hidden> - <items type="list">[]</items> - <required type="int">0</required> - <size type="int">5</size> - <title>Quantités</title> - <unicode type="int">0</unicode> - <view_separator><br /> -</view_separator> - </values> - <tales> - <items>python:here.portal_categories.quantity_range.getBaseItemList(base=0)</items> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - </fields> - </group> - </groups> -</form> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_pdm/modele_print.pt b/product/Coramy/skins/coramy_pdm/modele_print.pt deleted file mode 100755 index 4456639130..0000000000 --- a/product/Coramy/skins/coramy_pdm/modele_print.pt +++ /dev/null @@ -1,253 +0,0 @@ -<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> - -<html> - - <head> - <meta http-equiv="content-type" content="text/html;charset=ISO-8859-1"> - <title tal:content="here/getTitle">Coramy</title> - - </head> - - <body bgcolor="#ffffff" - tal:define="gamme python:here.getDefaultValue('specialise',portal_type=['Gamme']); - forme python:here.getDefaultValue('specialise',portal_type=['Forme']); - dessins_list python:here.modele_dessins_list(); - variantes_modele_list python:here.contentValues(filter={'portal_type':'Variante Modele'}); - printed_coloris python:min([3,len(variantes_modele_list)]) - "> - -<table width="675" border="0" cellpadding="0" cellspacing="0"> - <tr> <!-- Ligne Titre --> - <td><img src="spacer1.png" width="1" height="1"></td> - <td> <div align="center"> - <p><font size="+3" color="red"><span tal:replace="python:'Modele : %s' %here.getId()">Modèle - </span></font></p> - </div></td> - <td><img src="spacer1.png" width="1" height="1"></td> - </tr> - <tr> <!-- Border-top info --> - <td class="line"><img src="spacer.png" width="1" height="1"></td> - <td class="line"><img src="spacer.png" width="673" height="1"></td> - <td class="line"><img src="spacer.png" width="1" height="1"></td> - </tr> - <tr> <!-- Info --> - <td class="line"><img src="spacer.png" width="1" height="100%"></td> - <td><table class="border" width="100%"> - <tr> - <td><i><b>Forme</b></i></td> - <td tal:content="here/getFormeId">77H</td> - <td><i><b>Collection</b></i></td> - <td><p tal:repeat="collection here/getCollectionList"><span tal:replace="collection">777HC401</span></p></td> - <td></td> - </tr> - <tr> - <td><i><b>Gamme </b></i></td> - <td tal:content="here/getGammeId">77H</td> - <td><i><b>Espace imaginaire</b></i></td> - <td><p tal:repeat="eip here/getEipList"><span tal:replace="eip">777HC401</span></p></td> - <td></td> - </tr> - <tr tal:condition="python:here.getDefaultDestinationTitle()<>''"> - <td><i><b>Client </b></i></td> - <td tal:content="here/getDefaultDestinationTitle">77H</td> - <td><i><b>Reference client</b></i></td> - <td tal:content="here/getDestinationReference">77H</td> - <td></td> - </tr> - <tr> - <td valign="top"><i><b>Modéliste</b></i> </td> - <td tal:content="python:here.modele_show_local_roles(['ModelisteDesigne'],formated=0)"></td> - <td valign="top"><i><b>Gestionaire</b></i> </td> - <td tal:content="python:here.modele_show_local_roles(['GestionaireDesigne'],formated=0)"></td> - </tr> - <tr> - <td valign="top"><i><b>Description</b></i> </td> - <td colspan="3" tal:content="here/getDescription">short homme surf hawai</td> - <td></td> - </tr> - </table></td> - <td class="line"><img src="spacer.png" width="1" height="100%"></td> - </tr> - <tr> <!-- Border Bottom info --> - <td class="line"><img src="spacer.png" width="1" height="1"></td> - <td><img src="spacer.png" width="673" height="1"></td> - <td class="line"><img src="spacer.png" width="1" height="1"></td> - </tr> - <tr> <!-- spacer --> - <td><img src="spacer1.png" width="1" height="1"></td> - <td><img src="spacer1.png" width="1" height="1"></td> - <td><img src="spacer1.png" width="1" height="1"></td> - </tr> - <tr> <!-- Border Top Dessin Technique --> - <td><img src="spacer.png" width="1" height="1"></td> - <td><img src="spacer.png" width="673" height="1"></td> - <td><img src="spacer.png" width="1" height="1"></td> - </tr> - <tr> <!-- Dessin Technique --> - <td><img src="spacer.png" width="1" height="100%"></td> - <td><table class="border" align="center" width="100%"> - <tr> - <td tal:attributes="colspan python:len(dessins_list)" align="left"><b>Dessin - Technique</b></td> - </tr> - <tr> <span tal:repeat="dessin dessins_list"> <span tal:condition="python:dessin.portal_type == 'Dessin Technique'"> - <td tal:condition="python:len(dessins_list)<=1" align="center"><img src="" tal:attributes="src python:dessin.absolute_url() + '?display=medium&format=jpeg&resolution=300'" width="50%"> - </td> - <td tal:condition="python:len(dessins_list)>1" align="center"><img src="" tal:attributes="src python:dessin.absolute_url() + '?display=medium&format=jpeg&resolution=300'" width="100%"> - </td> - </span> </span> </tr> - <tr> - <td tal:attributes="colspan python:len(dessins_list)" align="left"><b>Description technique</b></td> - </tr> - <tr> - <td colspan="3" tal:condition="python:forme<>None" - tal:content="forme/getDescription">short homme surf hawai</td> - </tr> - </table> - <td><img src="spacer.png" width="1" height="100%"></td> - </tr> - <tr> <!-- Border Bottom Dessin Technique --> - <td><img src="spacer.png" width="1" height="1"></td> - <td><img src="spacer.png" width="673" height="1"></td> - <td><img src="spacer.png" width="1" height="1"></td> - </tr> - <tr> <!-- spacer --> - <td><img src="spacer1.png" width="1" height="1"></td> - <td><img src="spacer1.png" width="1" height="1"></td> - <td><img src="spacer1.png" width="1" height="1"></td> - </tr> - <tr> <!-- Border Top Nomenclature --> - <td><img src="spacer.png" width="1" height="1"></td> - <td><img src="spacer.png" width="673" height="1"></td> - <td><img src="spacer.png" width="1" height="1"></td> - </tr> - <tr> <!-- Nomenclature --> - <td><img src="spacer.png" width="1" height="100%"></td> - <td> - <table class="border" width="100%"> - <tr> - <td align="left"><b>Nomenclature Prototype</b></td> - </tr> - <tr tal:define="nomenclature_list python:modules['string'].split(here.getModeleAggregatedNomenclature()+here.getNomenclature(''),'\n')"> - <td width="100%"> <span tal:repeat="nomenclature_item nomenclature_list"> - <span tal:content="python:nomenclature_item"> </span><br> - </span> </td> - </tr> - <tr> - <td align="left"><b>Mode opératoire Prototype</b></td> - </tr> - <tr tal:define="nomenclature_list python:modules['string'].split(here.getModeleAggregatedModeOperatoire()+here.getModeOperatoire(''),'\n')"> - <td width="100%"> <span tal:repeat="nomenclature_item nomenclature_list"> - <span tal:content="python:nomenclature_item"> </span><br> - </span> </td> - </tr> - <tr> - <td></td> - <td width="100%"></td> - </tr> - </table> - </td> - <td><img src="spacer.png" width="1" height="100%"></td> - </tr> - <tr><!-- Border Bottom Nomenclature --> - <td><img src="spacer.png" width="1" height="1"></td> - <td><img src="spacer.png" width="673" height="1"></td> - <td><img src="spacer.png" width="1" height="1"></td> - </tr> - <tr> <!-- spacer --> - <td><img src="spacer1.png" width="1" height="1"></td> - <td><img src="spacer1.png" width="1" height="1"></td> - <td><img src="spacer1.png" width="1" height="1"></td> - </tr> - <tr> <!-- Border Top Gamme Coloris --> - <td><img src="spacer.png" width="1" height="1"></td> - <td><img src="spacer.png" width="673" height="1"></td> - <td><img src="spacer.png" width="1" height="1"></td> - </tr> - <tr> <!-- Coloris --> - <td><img src="spacer.png" width="1" height="100%"></td> - <td><table class="border" width="100%"> - <tr colspan="1" - tal:attributes="colspan python:len(variantes_modele_list)"> - <td colspan="4" align="left"><b>Gamme de Coloris</b></td> - </tr> - <tr> - <td tal:repeat="variante_modele python:variantes_modele_list[0:printed_coloris]"> - <span tal:condition="python:gamme<>None"> - <table tal:define="variante_modele_id variante_modele/getId; - variante_gamme python:gamme.get(variante_modele_id,None)"> - <tr> - <td tal:content="variante_modele/getId" align=center> </td> - <td tal:condition="python:variante_modele.getPrototype() == 1" color="red"> - <font color="red">Prototype</font> </td> - </tr> - <tr> - <td align="center" colspan="2" - tal:define="modele_image python:here.get(variante_modele_id,None)"> - <img src="" - tal:condition="variante_modele_id" - tal:attributes="src python:'%s?display=small&format=jpeg&resolution=300' % modele_image.getPath()" /> - </td> - </tr> - <tr tal:condition="variante_gamme" - tal:repeat="variante_tissu python:variante_gamme.getValueList('couleur',portal_type=['Variante Tissu'])"> - <td tal:define="my_index repeat/variante_tissu/index" - tal:content="python: 'D%s :' % (my_index + 1)"> - D1 </td> - <td tal:content="variante_tissu/getRelativeUrl"> </td> - </tr> - </table> - </span></td> - </tr> - <tr> - <td colspan="2" align="left"><b>Composition</b></td> - </tr> - <tr> - <td width="100%"> <span tal:content="python:here.getComposition('')"> </span><br> - </td> - </tr> - </table></td> - <td><img src="spacer.png" width="1" height="100%"></td> - </tr> - <tr> <!-- Border Bottom Gamme Coloris --> - <td><img src="spacer.png" width="1" height="1"></td> - <td><img src="spacer.png" width="673" height="1"></td> - <td><img src="spacer.png" width="1" height="1"></td> - </tr> - <tr> <!-- spacer --> - <td><img src="spacer1.png" width="1" height="1"></td> - <td><img src="spacer1.png" width="1" height="1"></td> - <td><img src="spacer1.png" width="1" height="1"></td> - </tr> - <tr> <!-- Border Top Commentaires --> - <td><img src="spacer.png" width="1" height="1"></td> - <td><img src="spacer.png" width="673" height="1"></td> - <td><img src="spacer.png" width="1" height="1"></td> - </tr> - <tr> <!-- Commentaires --> - <td><img src="spacer.png" width="1" height="100%"></td> - <td><table class="border" width="100%"> - <tr> - <td colspan="2" align="left"><b>Commentaires</b></td> - </tr> - <tr tal:define="commentaires_list python:modules['string'].split(here.getCommentaires(''),'\n')"> - <td width="100%"> <span tal:repeat="commentaires_item commentaires_list"> - <span tal:content="python:commentaires_item"> </span><br> - </span> </td> - </tr> - </table></td> - <td><img src="spacer.png" width="1" height="100%"></td> - </tr> - <tr> <!-- Border Bottom Commentaires --> - <td><img src="spacer.png" width="1" height="1"></td> - <td><img src="spacer.png" width="673" height="1"></td> - <td><img src="spacer.png" width="1" height="1"></td> - </tr> -</table> - - - - -</body> - -</html> diff --git a/product/Coramy/skins/coramy_pdm/modele_print_list.py b/product/Coramy/skins/coramy_pdm/modele_print_list.py deleted file mode 100755 index 6d7881243b..0000000000 --- a/product/Coramy/skins/coramy_pdm/modele_print_list.py +++ /dev/null @@ -1,25 +0,0 @@ -## Script (Python) "modele_print_list" -##bind container=container -##bind context=context -##bind namespace= -##bind script=script -##bind subpath=traverse_subpath -##parameters= -##title= -## -# Retourne une liste de modèles -# si appelé sur un modèle, la liste contient uniquement le modèle -# si appelé sur le module modèle, la liste contient la sélection de modèles - -modele_list = [] -request = context.REQUEST -if context.portal_type == 'Modele' : - modele_list.append(context) -else : - selection = context.portal_selections.getSelectionFor('modele_selection',REQUEST=context.REQUEST) - modele_list = map((lambda x:x.getObject()),selection(context=context)) - -if len(modele_list) > 20 : - modele_list = modele_list[0:20] - -return modele_list diff --git a/product/Coramy/skins/coramy_pdm/modele_search.form b/product/Coramy/skins/coramy_pdm/modele_search.form deleted file mode 100755 index 210559276b..0000000000 --- a/product/Coramy/skins/coramy_pdm/modele_search.form +++ /dev/null @@ -1,140 +0,0 @@ -<?xml version="1.0"?> - -<form> - <title>Rechercher</title> - <row_length>4</row_length> - <name>search</name> - <pt>form_dialog</pt> - <action>modele_list</action> - <method>POST</method> - <enctype></enctype> - <encoding>UTF-8</encoding> - <stored_encoding>ISO-8859-1</stored_encoding> - <unicode_mode>false</unicode_mode> - <groups> - <group> - <title>left</title> - <fields> - - <field><id>my_id</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default>%</default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">60</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <max_length></max_length> - <required type="int">1</required> - <title>Modèle</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - <field><id>my_description</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default>%</default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">60</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <max_length></max_length> - <required type="int">1</required> - <title>Description</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - <field><id>my_forme_id</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default>%</default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">60</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <max_length></max_length> - <required type="int">1</required> - <title>Forme</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - <field><id>my_gamme_id</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default>%</default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">60</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <max_length></max_length> - <required type="int">1</required> - <title>Gamme</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>right</title> - <fields> - - </fields> - </group> - </groups> -</form> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_pdm/modele_search2.form b/product/Coramy/skins/coramy_pdm/modele_search2.form deleted file mode 100755 index ded694facd..0000000000 --- a/product/Coramy/skins/coramy_pdm/modele_search2.form +++ /dev/null @@ -1,84 +0,0 @@ -<?xml version="1.0"?> - -<form> - <title>Rechercher</title> - <row_length>4</row_length> - <name>search</name> - <pt>form_dialog</pt> - <action>modele_id_search_list</action> - <method>POST</method> - <enctype></enctype> - <encoding>UTF-8</encoding> - <stored_encoding>ISO-8859-1</stored_encoding> - <unicode_mode>false</unicode_mode> - <groups> - <group> - <title>left</title> - <fields> - - <field><id>my_id</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default>%</default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">60</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <max_length></max_length> - <required type="int">1</required> - <title>Modèle</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - <field><id>my_portal_type</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <max_length></max_length> - <required type="int">1</required> - <title>my_portal_type</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>right</title> - <fields> - - </fields> - </group> - </groups> -</form> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_pdm/modele_search_id.form b/product/Coramy/skins/coramy_pdm/modele_search_id.form deleted file mode 100755 index 845180cfef..0000000000 --- a/product/Coramy/skins/coramy_pdm/modele_search_id.form +++ /dev/null @@ -1,56 +0,0 @@ -<?xml version="1.0"?> - -<form> - <title>Rechercher</title> - <row_length>4</row_length> - <name>search</name> - <pt>form_dialog</pt> - <action>modele_search_id_list</action> - <method>POST</method> - <enctype></enctype> - <encoding>UTF-8</encoding> - <stored_encoding>ISO-8859-1</stored_encoding> - <unicode_mode>false</unicode_mode> - <groups> - <group> - <title>left</title> - <fields> - - <field><id>my_modele_id</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default>%</default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">60</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <max_length></max_length> - <required type="int">1</required> - <title>Modèle</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>right</title> - <fields> - - </fields> - </group> - </groups> -</form> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_pdm/modele_search_id_list.form b/product/Coramy/skins/coramy_pdm/modele_search_id_list.form deleted file mode 100755 index 14d192f7fd..0000000000 --- a/product/Coramy/skins/coramy_pdm/modele_search_id_list.form +++ /dev/null @@ -1,62 +0,0 @@ -<?xml version="1.0"?> - -<form> - <title>Liste de modèles</title> - <row_length>4</row_length> - <name>folder_contents</name> - <pt>form_list</pt> - <action></action> - <method>POST</method> - <enctype></enctype> - <encoding>UTF-8</encoding> - <stored_encoding>ISO-8859-1</stored_encoding> - <unicode_mode>false</unicode_mode> - <groups> - <group> - <title>Default</title> - <fields> - - <field><id>listbox</id> <type>ListBox</type> - <values> - <all_columns type="list">[('id', 'Modele'), ('forme_id', 'Forme'), ('gamme_id', 'Gamme'), ('Description', 'Description'), ('default_destination_title', 'Client'), ('destination_reference', 'R\xe9f\xe9rence Client'), ('modele_state', 'Etat'), ('getDefaultCollection', 'Collection'), ('getEip', 'Espace imaginaire'), ('modele_state_modeliste', 'Modeliste'), ('modele_state_gestionaire', 'Gestionaire'), ('modele_state_probleme', 'Probleme')]</all_columns> - <all_editable_columns type="list">[]</all_editable_columns> - <alternate_name></alternate_name> - <columns type="list">[('id', 'Modele'), ('forme_id', 'Forme'), ('gamme_id', 'Gamme'), ('Description', 'Description'), ('default_destination_title', 'Client'), ('modele_state', 'Etat')]</columns> - <css_class></css_class> - <default></default> - <default_params type="list">[]</default_params> - <description></description> - <domain_root_list type="list">[]</domain_root_list> - <domain_tree type="int">0</domain_tree> - <editable type="int">1</editable> - <editable_columns type="list">[]</editable_columns> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <global_attributes type="list">[]</global_attributes> - <hidden type="int">0</hidden> - <lines type="int">30</lines> - <list_action>list</list_action> - <list_method type="method">modele_sql_search_id</list_method> - <meta_types type="list">[]</meta_types> - <portal_types type="list">[('Modele', 'Modele')]</portal_types> - <report_root_list type="list">[]</report_root_list> - <report_tree type="int">0</report_tree> - <search type="int">1</search> - <search_columns></search_columns> - <select type="int">1</select> - <selection_name>modele_selection</selection_name> - <sort type="list">[]</sort> - <sort_columns></sort_columns> - <stat_method></stat_method> - <title>Modeles</title> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - </messages> - </field> - </fields> - </group> - </groups> -</form> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_pdm/modele_search_origine.form b/product/Coramy/skins/coramy_pdm/modele_search_origine.form deleted file mode 100755 index 6f0927c699..0000000000 --- a/product/Coramy/skins/coramy_pdm/modele_search_origine.form +++ /dev/null @@ -1,57 +0,0 @@ -<?xml version="1.0"?> - -<form> - <title>Rechercher</title> - <row_length>4</row_length> - <name>modele_search</name> - <pt>form_dialog</pt> - <action>modele_search_origine_list</action> - <method>POST</method> - <enctype></enctype> - <encoding>UTF-8</encoding> - <stored_encoding>ISO-8859-1</stored_encoding> - <unicode_mode>false</unicode_mode> - <groups> - <group> - <title>left</title> - <fields> - - <field><id>my_modele_origine</id> <type>ListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <extra_item></extra_item> - <first_item type="int">0</first_item> - <hidden type="int">0</hidden> - <items type="list">[]</items> - <required type="int">1</required> - <size type="int">1</size> - <title>Origine du modèle</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <items>here/portal_categories/modele_origine/getFormItemList</items> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>right</title> - <fields> - - </fields> - </group> - </groups> -</form> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_pdm/modele_search_origine_list.form b/product/Coramy/skins/coramy_pdm/modele_search_origine_list.form deleted file mode 100755 index 4b1f433119..0000000000 --- a/product/Coramy/skins/coramy_pdm/modele_search_origine_list.form +++ /dev/null @@ -1,62 +0,0 @@ -<?xml version="1.0"?> - -<form> - <title>Liste de modèles</title> - <row_length>4</row_length> - <name>folder_contents</name> - <pt>form_list</pt> - <action></action> - <method>POST</method> - <enctype></enctype> - <encoding>UTF-8</encoding> - <stored_encoding>ISO-8859-1</stored_encoding> - <unicode_mode>false</unicode_mode> - <groups> - <group> - <title>Default</title> - <fields> - - <field><id>listbox</id> <type>ListBox</type> - <values> - <all_columns type="list">[('id', 'Modele'), ('forme_id', 'Forme'), ('gamme_id', 'Gamme'), ('Description', 'Description'), ('default_destination_title', 'Client'), ('destination_reference', 'R\xe9f\xe9rence Client'), ('modele_state', 'Etat'), ('getDefaultCollection', 'Collection'), ('getEip', 'Espace imaginaire'), ('modele_state_modeliste', 'Modeliste'), ('modele_state_gestionaire', 'Gestionaire'), ('modele_state_probleme', 'Probleme')]</all_columns> - <all_editable_columns type="list">[]</all_editable_columns> - <alternate_name></alternate_name> - <columns type="list">[('id', 'Modele'), ('forme_id', 'Forme'), ('gamme_id', 'Gamme'), ('Description', 'Description'), ('default_destination_title', 'Client'), ('modele_state', 'Etat')]</columns> - <css_class></css_class> - <default></default> - <default_params type="list">[]</default_params> - <description></description> - <domain_root_list type="list">[]</domain_root_list> - <domain_tree type="int">0</domain_tree> - <editable type="int">1</editable> - <editable_columns type="list">[]</editable_columns> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <global_attributes type="list">[]</global_attributes> - <hidden type="int">0</hidden> - <lines type="int">30</lines> - <list_action>list</list_action> - <list_method type="method">modele_sql_search_origine</list_method> - <meta_types type="list">[]</meta_types> - <portal_types type="list">[('Modele', 'Modele')]</portal_types> - <report_root_list type="list">[]</report_root_list> - <report_tree type="int">0</report_tree> - <search type="int">1</search> - <search_columns></search_columns> - <select type="int">1</select> - <selection_name>modele_selection</selection_name> - <sort type="list">[]</sort> - <sort_columns></sort_columns> - <stat_method></stat_method> - <title>Modeles</title> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - </messages> - </field> - </fields> - </group> - </groups> -</form> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_pdm/modele_set_gencod_coramy.py b/product/Coramy/skins/coramy_pdm/modele_set_gencod_coramy.py deleted file mode 100755 index baebe51bd8..0000000000 --- a/product/Coramy/skins/coramy_pdm/modele_set_gencod_coramy.py +++ /dev/null @@ -1,20 +0,0 @@ -## Script (Python) "modele_set_gencod_coramy" -##bind container=container -##bind context=context -##bind namespace= -##bind script=script -##bind subpath=traverse_subpath -##parameters=form_id='' -##title= -## -request = context.REQUEST -modele = context - -modele.setEan13Modele(modele.portal_categories.group.Coramy) - -redirect_url = '%s/%s?%s' % ( context.absolute_url() - , form_id - , 'portal_status_message=Gencod+mis+a+jour.' - ) - -request[ 'RESPONSE' ].redirect( redirect_url ) diff --git a/product/Coramy/skins/coramy_pdm/modele_set_gencod_houvenaegel.py b/product/Coramy/skins/coramy_pdm/modele_set_gencod_houvenaegel.py deleted file mode 100755 index 09f8cfad4d..0000000000 --- a/product/Coramy/skins/coramy_pdm/modele_set_gencod_houvenaegel.py +++ /dev/null @@ -1,20 +0,0 @@ -## Script (Python) "modele_set_gencod_houvenaegel" -##bind container=container -##bind context=context -##bind namespace= -##bind script=script -##bind subpath=traverse_subpath -##parameters=form_id='' -##title= -## -request = context.REQUEST -modele = context - -modele.setEan13Modele(modele.portal_categories.group.Coramy.Houvenaegel) - -redirect_url = '%s/%s?%s' % ( context.absolute_url() - , form_id - , 'portal_status_message=Gencod+mis+a+jour.' - ) - -request[ 'RESPONSE' ].redirect( redirect_url ) diff --git a/product/Coramy/skins/coramy_pdm/modele_show_local_roles.py b/product/Coramy/skins/coramy_pdm/modele_show_local_roles.py deleted file mode 100755 index 15c0c4aef6..0000000000 --- a/product/Coramy/skins/coramy_pdm/modele_show_local_roles.py +++ /dev/null @@ -1,40 +0,0 @@ -## Script (Python) "modele_show_local_roles" -##bind container=container -##bind context=context -##bind namespace= -##bind script=script -##bind subpath=traverse_subpath -##parameters=roles=(), formated=1 -##title= -## -raw_local_roles = context.get_local_roles() -used_roles = {} -if len(roles)<>0 : - if 'ModelisteDesigne' in roles : - used_roles['ModelisteDesigne']='Modeliste' -if len(roles)<>0 : - if 'GestionaireDesigne' in roles : - used_roles['GestionaireDesigne']='Gestionaire client' -else : - used_roles['ModelisteDesigne']='Modeliste' - used_roles['GestionaireDesigne']='Gestionaire client' -local_roles = {} -key_roles = used_roles.keys() - -for user_roles in raw_local_roles: - for role in key_roles: - if role in user_roles[1]: - local_roles[used_roles[role]]=[] - local_roles[used_roles[role]].append(user_roles[0]) - -formated_roles='' - -key_roles = local_roles.keys() -for role in key_roles: - if formated==1 : - formated_roles += role+':' - for user in local_roles[role]: - formated_roles += user +',' - formated_roles += ' ' - - return str(formated_roles) diff --git a/product/Coramy/skins/coramy_pdm/modele_sql_default_search.zsql b/product/Coramy/skins/coramy_pdm/modele_sql_default_search.zsql deleted file mode 100755 index a88813b7b3..0000000000 --- a/product/Coramy/skins/coramy_pdm/modele_sql_default_search.zsql +++ /dev/null @@ -1,107 +0,0 @@ -<dtml-comment> -title: -connection_id:erp5_sql_connection -max_rows:1000 -max_cache:100 -cache_time:0 -class_name:ZSQLBrain -class_file:zsqlbrain.py -</dtml-comment> -<params>modele_id_list="" -forme_id_list="" -gamme_id_list="" -collection_list="" -eip_list="" -marque_list="" -modele_origine_list=""</params> -SELECT DISTINCT modele.id, modele.relative_url, modele.path, modele.Description, modele.modele_state, modele.default_destination_title -FROM catalog AS modele -<dtml-if expr="_.len(collection_list)>0"> -, category AS cat1 -</dtml-if> -<dtml-if expr="_.len(eip_list)>0"> -, category AS cat2 -</dtml-if> -<dtml-if expr="_.len(marque_list)>0"> -, category AS cat3 -</dtml-if> -<dtml-if expr="_.len(modele_origine_list)>0"> -<dtml-if expr="not (_.len(modele_origine_list)==1 and modele_origine_list[0]=='')"> -, category AS cat4 -</dtml-if> -</dtml-if> -WHERE modele.portal_type = "Modele" - -<dtml-if expr="_.len(modele_id_list)>0"> -AND ( modele.id LIKE "<dtml-var expr="modele_id_list[0]">" -<dtml-in prefix="loop" expr="_.range(_.len(modele_id_list)-1)"> -OR modele.id LIKE "<dtml-var expr="modele_id_list[loop_item+1]">" -</dtml-in> -) -</dtml-if> - -<dtml-if expr="_.len(forme_id_list)>0"> -AND ( modele.forme_id LIKE "<dtml-var expr="forme_id_list[0]">" -<dtml-in prefix="loop" expr="_.range(_.len(forme_id_list)-1)"> -OR modele.forme_id LIKE "<dtml-var expr="forme_id_list[loop_item+1]">" -</dtml-in> -) -</dtml-if> - -<dtml-if expr="_.len(gamme_id_list)>0"> -AND ( modele.gamme_id LIKE "<dtml-var expr="gamme_id_list[0]">" -<dtml-in prefix="loop" expr="_.range(_.len(gamme_id_list)-1)"> -OR modele.gamme_id LIKE "<dtml-var expr="gamme_id_list[loop_item+1]">" -</dtml-in> -) -</dtml-if> - -<dtml-if expr="_.len(collection_list)>0"> -AND cat1.uid=modele.uid -AND ( cat1.category_uid=<dtml-var expr="identify_category(base_category='collection',category=collection_list[0])"> -<dtml-in prefix="loop" expr="_.range(_.len(collection_list)-1)"> -OR cat1.category_uid=<dtml-var expr="identify_category(base_category='collection',category=collection_list[loop_item+1])"> -</dtml-in> -) -AND cat1.base_category_uid=<dtml-var "portal_categories.collection.uid"> -</dtml-if> - - -<dtml-if expr="_.len(eip_list)>0"> -AND cat2.uid=modele.uid -AND ( cat2.category_uid=<dtml-var expr="identify_category(base_category='eip',category=eip_list[0])"> -<dtml-in prefix="loop" expr="_.range(_.len(eip_list)-1)"> -OR cat2.category_uid=<dtml-var expr="identify_category(base_category='eip',category=eip_list[loop_item+1])"> -</dtml-in> -) -AND cat2.base_category_uid=<dtml-var "portal_categories.eip.uid"> -</dtml-if> - -<dtml-if expr="_.len(marque_list)>0"> -AND cat3.uid=modele.uid -AND ( cat3.category_uid=<dtml-var expr="identify_category(base_category='marque',category=marque_list[0])"> -<dtml-in prefix="loop" expr="_.range(_.len(marque_list)-1)"> -OR cat3.category_uid=<dtml-var expr="identify_category(base_category='marque',category=marque_list[loop_item+1])"> -</dtml-in> -) -AND cat3.base_category_uid=<dtml-var "portal_categories.marque.uid"> -</dtml-if> - -<dtml-if expr="_.len(modele_origine_list)>0"> -<dtml-if expr="not (_.len(modele_origine_list)==1 and modele_origine_list[0]=='')"> -AND cat4.uid=modele.uid -<dtml-if expr="modele_origine_list[0]<>''"> -AND ( cat4.category_uid=<dtml-var expr="identify_category(base_category='modele_origine',category=modele_origine_list[0])"> -<dtml-else> -AND ( cat4.category_uid <> 0 -</dtml-if> -<dtml-in prefix="loop" expr="_.range(_.len(modele_origine_list)-1)"> -<dtml-if expr="modele_origine_list[loop_item+1]<>''"> -OR cat4.category_uid=<dtml-var expr="identify_category(base_category='modele_origine',category=modele_origine_list[loop_item+1])"> -</dtml-if> -</dtml-in> -) -AND cat4.base_category_uid=<dtml-var "portal_categories.modele_origine.uid"> -</dtml-if> -</dtml-if> - diff --git a/product/Coramy/skins/coramy_pdm/modele_sql_search_destination_reference.zsql b/product/Coramy/skins/coramy_pdm/modele_sql_search_destination_reference.zsql deleted file mode 100755 index 8151aa336d..0000000000 --- a/product/Coramy/skins/coramy_pdm/modele_sql_search_destination_reference.zsql +++ /dev/null @@ -1,14 +0,0 @@ -<dtml-comment> -title: -connection_id:erp5_sql_connection -max_rows:1000 -max_cache:100 -cache_time:0 -class_name:ZSQLBrain -class_file:zsqlbrain.py -</dtml-comment> -<params>dest_ref_id</params> -SELECT DISTINCT modele.id, modele.relative_url, modele.path, modele.Description, modele.modele_state -FROM catalog AS modele -WHERE modele.destination_reference LIKE "<dtml-var dest_ref_id>" -AND modele.portal_type = "Modele" diff --git a/product/Coramy/skins/coramy_pdm/modele_sql_search_id.zsql b/product/Coramy/skins/coramy_pdm/modele_sql_search_id.zsql deleted file mode 100755 index eff8608aec..0000000000 --- a/product/Coramy/skins/coramy_pdm/modele_sql_search_id.zsql +++ /dev/null @@ -1,14 +0,0 @@ -<dtml-comment> -title: -connection_id:erp5_sql_connection -max_rows:1000 -max_cache:100 -cache_time:0 -class_name:ZSQLBrain -class_file:zsqlbrain.py -</dtml-comment> -<params>modele_id</params> -SELECT DISTINCT modele.id, modele.relative_url, modele.path, modele.Description, modele.modele_state -FROM catalog AS modele -WHERE modele.id LIKE "<dtml-var modele_id>" -AND modele.portal_type = "Modele" diff --git a/product/Coramy/skins/coramy_pdm/modele_sql_search_origine.zsql b/product/Coramy/skins/coramy_pdm/modele_sql_search_origine.zsql deleted file mode 100755 index deb9e28860..0000000000 --- a/product/Coramy/skins/coramy_pdm/modele_sql_search_origine.zsql +++ /dev/null @@ -1,17 +0,0 @@ -<dtml-comment> -title: -connection_id:erp5_sql_connection -max_rows:1000 -max_cache:100 -cache_time:0 -class_name:ZSQLBrain -class_file:zsqlbrain.py -</dtml-comment> -<params></params> -SELECT DISTINCT modele.id, modele.relative_url, modele.path, modele.Description, modele.modele_state, modele.forme_id, -modele.gamme_id, modele.default_destination_title -FROM catalog AS modele, category -WHERE modele.portal_type = "Modele" -AND modele.uid=category.uid -AND category.base_category_uid = <dtml-var "portal_categories.modele_origine.uid"> -AND category.category_uid = <dtml-var "portal_categories.modele_origine.Creation.uid"> diff --git a/product/Coramy/skins/coramy_pdm/modele_transformation.py b/product/Coramy/skins/coramy_pdm/modele_transformation.py deleted file mode 100755 index 1281a48d0a..0000000000 --- a/product/Coramy/skins/coramy_pdm/modele_transformation.py +++ /dev/null @@ -1,25 +0,0 @@ -## Script (Python) "modele_transformation" -##bind container=container -##bind context=context -##bind namespace= -##bind script=script -##bind subpath=traverse_subpath -##parameters= -##title= -## -modele = context - -# Find a transformation which allows to compute a price -transformation_list = modele.transformation_sql_search(modele_id = modele.getId()) - -# We search a transformation which state is "fini" -pricing_transformation = None -for transformation in transformation_list: - transformation = transformation.getObject() - if transformation is not None: - if transformation.portal_type == 'Transformation': - if transformation.getTransformationState() == 'fini': - pricing_transformation = transformation - break - -return pricing_transformation diff --git a/product/Coramy/skins/coramy_pdm/modele_update_price.py b/product/Coramy/skins/coramy_pdm/modele_update_price.py deleted file mode 100755 index 4e250f4a1a..0000000000 --- a/product/Coramy/skins/coramy_pdm/modele_update_price.py +++ /dev/null @@ -1,30 +0,0 @@ -## Script (Python) "modele_update_price" -##bind container=container -##bind context=context -##bind namespace= -##bind script=script -##bind subpath=traverse_subpath -##parameters=form_id, selection_index, selection_name, batch_mode=0 -##title= -## -message = "" -request = context.REQUEST - -for o in context.searchFolder(portal_type='Element Tarif'): - o = o.getObject() - error = o.element_tarif_compute_price(form_id=form_id, selection_index=selection_index, selection_name=selection_name, batch_mode=1) - if error is not None: - message += error - -if batch_mode: - return message -else: - if message is None: - message = "Prix mis à jour" - redirect_url = '%s/%s?selection_index=%s&selection_name=%s&%s' % ( context.absolute_url() - , form_id - , selection_index - , selection_name - , 'portal_status_message=%s' % message - ) - request[ 'RESPONSE' ].redirect( redirect_url ) diff --git a/product/Coramy/skins/coramy_pdm/modele_variante_morphologique_view.form b/product/Coramy/skins/coramy_pdm/modele_variante_morphologique_view.form deleted file mode 100755 index 79b8c49f4f..0000000000 --- a/product/Coramy/skins/coramy_pdm/modele_variante_morphologique_view.form +++ /dev/null @@ -1,86 +0,0 @@ -<?xml version="1.0"?> - -<form> - <title>Modèle</title> - <row_length>4</row_length> - <name>modele_variante_morphologique_view</name> - <pt>form_view</pt> - <action>base_edit</action> - <method>POST</method> - <enctype>multipart/form-data</enctype> - <encoding>UTF-8</encoding> - <stored_encoding>ISO-8859-1</stored_encoding> - <unicode_mode>false</unicode_mode> - <groups> - <group> - <title>left</title> - <fields> - - </fields> - </group> - <group> - <title>right</title> - <fields> - - </fields> - </group> - <group> - <title>center</title> - <fields> - - </fields> - </group> - <group> - <title>bottom</title> - <fields> - - <field><id>listbox</id> <type>ListBox</type> - <values> - <all_columns type="list">[('id', 'Variante'), ('getMorphoType', 'Morphologie'), ('Description', 'Description')]</all_columns> - <all_editable_columns type="list">[]</all_editable_columns> - <alternate_name></alternate_name> - <columns type="list">[('id', 'Variante'), ('getMorphoType', 'Morphologie'), ('Description', 'Description')]</columns> - <css_class></css_class> - <default></default> - <default_params type="list">[('id', "''")]</default_params> - <description></description> - <domain_root_list type="list">[]</domain_root_list> - <domain_tree type="int">0</domain_tree> - <editable type="int">1</editable> - <editable_columns type="list">[]</editable_columns> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <global_attributes type="list">[]</global_attributes> - <hidden type="int">0</hidden> - <lines type="int">30</lines> - <list_action>list</list_action> - <list_method type="method">searchFolder</list_method> - <meta_types type="list">[]</meta_types> - <portal_types type="list">[('Variante Morphologique', 'Variante Morphologique')]</portal_types> - <report_root_list type="list">[]</report_root_list> - <report_tree type="int">0</report_tree> - <search type="int">0</search> - <search_columns></search_columns> - <select type="int">0</select> - <selection_name>variante_morphologique_selection</selection_name> - <sort type="list">[('id', 'id')]</sort> - <sort_columns></sort_columns> - <stat_method></stat_method> - <title>Variantes morphologiques</title> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>hidden</title> - <fields> - - </fields> - </group> - </groups> -</form> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_pdm/modele_variated_reference_view.form b/product/Coramy/skins/coramy_pdm/modele_variated_reference_view.form deleted file mode 100755 index 65035c021e..0000000000 --- a/product/Coramy/skins/coramy_pdm/modele_variated_reference_view.form +++ /dev/null @@ -1,211 +0,0 @@ -<?xml version="1.0"?> - -<form> - <title>Modèle</title> - <row_length>4</row_length> - <name>modele_variated_reference_list</name> - <pt>form_view</pt> - <action>base_edit</action> - <method>POST</method> - <enctype>multipart/form-data</enctype> - <encoding>UTF-8</encoding> - <stored_encoding>ISO-8859-1</stored_encoding> - <unicode_mode>false</unicode_mode> - <groups> - <group> - <title>left</title> - <fields> - - <field><id>my_correspondance_tailles_id</id> <type>RelationStringField</type> - <values> - <alternate_name></alternate_name> - <base_category>specialise</base_category> - <catalog_index>id</catalog_index> - <css_class></css_class> - <default></default> - <default_module>correspondance_tailles</default_module> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <jump_method>base_jump_relation</jump_method> - <max_length></max_length> - <portal_type type="list">[('Correspondance Tailles', 'Correspondance Tailles')]</portal_type> - <required type="int">0</required> - <title>Correspondance tailles</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <update_method>base_update_relation</update_method> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - <field><id>my_correspondance_mesures_id</id> <type>RelationStringField</type> - <values> - <alternate_name></alternate_name> - <base_category>specialise</base_category> - <catalog_index>id</catalog_index> - <css_class></css_class> - <default></default> - <default_module>correspondance_mesures</default_module> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <jump_method>base_jump_relation</jump_method> - <max_length></max_length> - <portal_type type="list">[('Correspondance Mesures', 'Correspondance Mesures')]</portal_type> - <required type="int">0</required> - <title>Correspondance mesures</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <update_method>base_update_relation</update_method> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>right</title> - <fields> - - </fields> - </group> - <group> - <title>center</title> - <fields> - - </fields> - </group> - <group> - <title>bottom</title> - <fields> - - <field><id>listbox</id> <type>ListBox</type> - <values> - <all_columns type="list">[('id', 'R\xe9f\xe9rence'), ('mapped_value_property_list', 'Type'), ('Description', 'Description'), ('variation_base_category_list', 'Variable selon')]</all_columns> - <all_editable_columns type="list">[('variation_base_category_list', 'variation_base_category_list')]</all_editable_columns> - <alternate_name></alternate_name> - <columns type="list">[('id', 'R\xe9f\xe9rence'), ('mapped_value_property_list', 'Type'), ('Description', 'Description'), ('variation_base_category_list', 'Variable selon')]</columns> - <css_class></css_class> - <default></default> - <default_params type="list">[('id', "''")]</default_params> - <description></description> - <domain_root_list type="list">[]</domain_root_list> - <domain_tree type="int">0</domain_tree> - <editable type="int">1</editable> - <editable_columns type="list">[('variation_base_category_list', 'variation_base_category_list')]</editable_columns> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <global_attributes type="list">[]</global_attributes> - <hidden type="int">0</hidden> - <lines type="int">30</lines> - <list_action>list</list_action> - <list_method type="method">searchFolder</list_method> - <meta_types type="list">[]</meta_types> - <portal_types type="list">[('Variated Reference', 'Variated Reference')]</portal_types> - <report_root_list type="list">[]</report_root_list> - <report_tree type="int">0</report_tree> - <search type="int">0</search> - <search_columns></search_columns> - <select type="int">0</select> - <selection_name>variated_reference_selection</selection_name> - <sort type="list">[('id', 'id')]</sort> - <sort_columns></sort_columns> - <stat_method></stat_method> - <title>Références variables</title> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>hidden</title> - <fields> - - <field><id>listbox_variation_base_category_list</id> <type>MultiListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default type="list">[]</default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <extra_item></extra_item> - <hidden type="int">0</hidden> - <items type="list">[]</items> - <required type="int">0</required> - <size type="int">5</size> - <title>Axes variation</title> - <unicode type="int">0</unicode> - <view_separator><br /> -</view_separator> - </values> - <tales> - <items>python:here.getVariationBaseCategoryList()</items> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - <field><id>listbox_mapped_value_property_list</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <max_length></max_length> - <required type="int">0</required> - <title>Type</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - </fields> - </group> - </groups> -</form> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_pdm/modele_view.form b/product/Coramy/skins/coramy_pdm/modele_view.form deleted file mode 100755 index e127de7e8f..0000000000 --- a/product/Coramy/skins/coramy_pdm/modele_view.form +++ /dev/null @@ -1,697 +0,0 @@ -<?xml version="1.0"?> - -<form> - <title>Modèle</title> - <row_length>4</row_length> - <name>modele_view</name> - <pt>form_view</pt> - <action>base_edit</action> - <method>POST</method> - <enctype></enctype> - <encoding>UTF-8</encoding> - <stored_encoding>ISO-8859-1</stored_encoding> - <unicode_mode>false</unicode_mode> - <groups> - <group> - <title>left</title> - <fields> - - <field><id>my_id</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <max_length></max_length> - <required type="int">1</required> - <title>Modèle</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - <field><id>my_forme_id</id> <type>RelationStringField</type> - <values> - <alternate_name></alternate_name> - <base_category>specialise</base_category> - <catalog_index>id</catalog_index> - <css_class></css_class> - <default></default> - <default_module>forme</default_module> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <jump_method>base_jump_relation</jump_method> - <max_length></max_length> - <portal_type type="list">[('Forme', 'Forme')]</portal_type> - <required type="int">0</required> - <title>Forme</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <update_method>base_update_relation</update_method> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - <field><id>my_gamme_id</id> <type>RelationStringField</type> - <values> - <alternate_name></alternate_name> - <base_category>specialise</base_category> - <catalog_index>id</catalog_index> - <css_class></css_class> - <default></default> - <default_module>gamme</default_module> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <jump_method>base_jump_relation</jump_method> - <max_length></max_length> - <portal_type type="list">[('Gamme', 'Gamme')]</portal_type> - <required type="int">0</required> - <title>Gamme</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <update_method>base_update_relation</update_method> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - <field><id>my_description</id> <type>TextAreaField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <height type="int">3</height> - <hidden type="int">0</hidden> - <max_length></max_length> - <max_linelength></max_linelength> - <max_lines></max_lines> - <required type="int">0</required> - <title>Description</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - <width type="int">40</width> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_many_lines">You entered too many lines.</message> - <message name="line_too_long">A line was too long.</message> - <message name="too_long">You entered too many characters.</message> - </messages> - </field> - <field><id>my_modele_origine</id> <type>ListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <extra_item></extra_item> - <first_item type="int">0</first_item> - <hidden type="int">0</hidden> - <items type="list">[]</items> - <required type="int">0</required> - <size type="int">1</size> - <title>Origine</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <items>here/portal_categories/modele_origine/getFormItemList</items> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - <field><id>my_modele_template</id> <type>RelationStringField</type> - <values> - <alternate_name></alternate_name> - <base_category>specialise</base_category> - <catalog_index>id</catalog_index> - <css_class></css_class> - <default></default> - <default_module>modele</default_module> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <jump_method>base_jump_relation</jump_method> - <max_length></max_length> - <portal_type type="list">[('Modele', 'Modele')]</portal_type> - <required type="int">0</required> - <title>Modèle père</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <update_method>base_update_relation</update_method> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - <field><id>my_vetement_id_list</id> <type>MultiRelationStringField</type> - <values> - <alternate_name></alternate_name> - <base_category>specialise</base_category> - <catalog_index>id</catalog_index> - <css_class></css_class> - <default type="list">[]</default> - <default_module>forme</default_module> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <height type="int">2</height> - <hidden type="int">0</hidden> - <jump_method>base_jump_relation</jump_method> - <max_length></max_length> - <max_linelength></max_linelength> - <max_lines></max_lines> - <portal_type type="list">[('Vetement', 'Vetement')]</portal_type> - <required type="int">0</required> - <title>Vêtements</title> - <unicode type="int">0</unicode> - <update_method>base_update_relation</update_method> - <view_separator><br /> -</view_separator> - <whitespace_preserve type="int">0</whitespace_preserve> - <width type="int">20</width> - </values> - <tales> - <default>here/getVetementIdList</default> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_many_lines">You entered too many lines.</message> - <message name="line_too_long">A line was too long.</message> - <message name="too_long">You entered too many characters.</message> - </messages> - </field> - <field><id>my_composition</id> <type>TextAreaField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <height type="int">1</height> - <hidden type="int">0</hidden> - <max_length></max_length> - <max_linelength></max_linelength> - <max_lines></max_lines> - <required type="int">0</required> - <title>Composition</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - <width type="int">40</width> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_many_lines">You entered too many lines.</message> - <message name="line_too_long">A line was too long.</message> - <message name="too_long">You entered too many characters.</message> - </messages> - </field> - <field><id>my_code_ean13</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <max_length></max_length> - <required type="int">0</required> - <title>Gencod</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - <field><id>my_nomenclature_douane</id> <type>ListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <extra_item></extra_item> - <first_item type="int">0</first_item> - <hidden type="int">0</hidden> - <items type="list">[]</items> - <required type="int">0</required> - <size type="int">1</size> - <title>Nomenclature douanière</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <items>here/portal_categories/nomenclature_douane/getFormItemList</items> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - <field><id>my_code_entretien_list</id> <type>MultiListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default type="list">[]</default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <extra_item></extra_item> - <hidden type="int">0</hidden> - <items type="list">[]</items> - <required type="int">0</required> - <size type="int">5</size> - <title>Entretien</title> - <unicode type="int">0</unicode> - <view_separator><br /> -</view_separator> - </values> - <tales> - <items>here/portal_categories/code_entretien/getFormItemList</items> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>right</title> - <fields> - - <field><id>my_collection</id> <type>ListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <extra_item></extra_item> - <first_item type="int">0</first_item> - <hidden type="int">0</hidden> - <items type="list">[]</items> - <required type="int">1</required> - <size type="int">1</size> - <title>Collection</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <items>here/portal_categories/collection/getFormItemList</items> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - <field><id>my_eip</id> <type>ListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <extra_item></extra_item> - <first_item type="int">0</first_item> - <hidden type="int">0</hidden> - <items type="list">[]</items> - <required type="int">1</required> - <size type="int">1</size> - <title>Famille</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <items>here/portal_categories/eip/getFormItemList</items> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - <field><id>my_marque</id> <type>ListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <extra_item></extra_item> - <first_item type="int">0</first_item> - <hidden type="int">0</hidden> - <items type="list">[]</items> - <required type="int">0</required> - <size type="int">1</size> - <title>Marque</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <items>here/portal_categories/marque/getFormItemList</items> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - <field><id>my_destination_title</id> <type>RelationStringField</type> - <values> - <alternate_name></alternate_name> - <base_category>destination</base_category> - <catalog_index>Title</catalog_index> - <css_class></css_class> - <default></default> - <default_module>organisation</default_module> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <jump_method>base_jump_relation</jump_method> - <max_length></max_length> - <portal_type type="list">[('Organisation', 'Organisation')]</portal_type> - <required type="int">0</required> - <title>Client</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <update_method>base_update_relation</update_method> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <default>here/getDefaultDestinationTitle</default> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - <field><id>my_destination_reference</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <max_length></max_length> - <required type="int">0</required> - <title>Référence client</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - <field><id>my_taille_list</id> <type>MultiListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default type="list">[]</default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <extra_item></extra_item> - <hidden type="int">0</hidden> - <items type="list">[]</items> - <required type="int">0</required> - <size type="int">5</size> - <title>Plage de tailles</title> - <unicode type="int">0</unicode> - <view_separator><br /> -</view_separator> - </values> - <tales> - <default>here/getTailleList</default> - <items>here/portal_categories/taille/getFormItemList</items> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - <field><id>my_transformation_state_list</id> <type>MultiListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default type="list">[]</default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <extra_item></extra_item> - <hidden type="int">0</hidden> - <items type="list">[]</items> - <required type="int">0</required> - <size type="int">3</size> - <title>Stades de production</title> - <unicode type="int">0</unicode> - <view_separator><br /> -</view_separator> - </values> - <tales> - <default>here/getTransformationStateList</default> - <items>here/portal_categories/transformation_state/getFormItemList</items> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - <field><id>modele_state</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <max_length></max_length> - <required type="int">0</required> - <title>Etat</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <default>python:here.portal_workflow.getInfoFor(here, 'modele_state')</default> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>center</title> - <fields> - - <field><id>my_commentaires</id> <type>TextAreaField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <height type="int">3</height> - <hidden type="int">0</hidden> - <max_length></max_length> - <max_linelength></max_linelength> - <max_lines></max_lines> - <required type="int">0</required> - <title>Commentaires</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - <width type="int">80</width> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_many_lines">You entered too many lines.</message> - <message name="line_too_long">A line was too long.</message> - <message name="too_long">You entered too many characters.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>bottom</title> - <fields> - - <field><id>listbox</id> <type>ListBox</type> - <values> - <all_columns type="list">[('id', 'Variante'), ('description', 'Description'), ('getPrototype', 'Prototype')]</all_columns> - <all_editable_columns type="list">[]</all_editable_columns> - <alternate_name></alternate_name> - <columns type="list">[('id', 'Variante'), ('description', 'Description'), ('getPrototype', 'Prototype')]</columns> - <css_class></css_class> - <default></default> - <default_params type="list">[('id', "''"), ('description', "''")]</default_params> - <description></description> - <domain_root_list type="list">[]</domain_root_list> - <domain_tree type="int">0</domain_tree> - <editable type="int">1</editable> - <editable_columns type="list">[]</editable_columns> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <global_attributes type="list">[]</global_attributes> - <hidden type="int">0</hidden> - <lines type="int">10</lines> - <list_action>list</list_action> - <list_method type="method">searchFolder</list_method> - <meta_types type="list">[]</meta_types> - <portal_types type="list">[('Variante Modele', 'Variante Modele')]</portal_types> - <report_root_list type="list">[]</report_root_list> - <report_tree type="int">0</report_tree> - <search type="int">0</search> - <search_columns></search_columns> - <select type="int">0</select> - <selection_name>variante_modele</selection_name> - <sort type="list">[]</sort> - <sort_columns></sort_columns> - <stat_method></stat_method> - <title>Variantes coloris</title> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - </messages> - </field> - </fields> - </group> - </groups> -</form> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_pdm/modele_workflow_abandonner_modele.form b/product/Coramy/skins/coramy_pdm/modele_workflow_abandonner_modele.form deleted file mode 100755 index 06d8c1c407..0000000000 --- a/product/Coramy/skins/coramy_pdm/modele_workflow_abandonner_modele.form +++ /dev/null @@ -1,81 +0,0 @@ -<?xml version="1.0"?> - -<form> - <title>Abandonner le modèle</title> - <row_length>4</row_length> - <name>main</name> - <pt>form_view_dialog</pt> - <action>workflow_status_modify</action> - <method>POST</method> - <enctype>multipart/form-data</enctype> - <encoding>UTF-8</encoding> - <stored_encoding>ISO-8859-1</stored_encoding> - <unicode_mode>false</unicode_mode> - <groups> - <group> - <title>Default</title> - <fields> - - <field><id>my_comment</id> <type>TextAreaField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <height type="int">5</height> - <hidden type="int">0</hidden> - <max_length></max_length> - <max_linelength></max_linelength> - <max_lines></max_lines> - <required type="int">1</required> - <title>Commentaires</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - <width type="int">80</width> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_many_lines">You entered too many lines.</message> - <message name="line_too_long">A line was too long.</message> - <message name="too_long">You entered too many characters.</message> - </messages> - </field> - <field><id>my_workflow_action</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default>abandonner_modele</default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">1</hidden> - <max_length></max_length> - <required type="int">1</required> - <title> </title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - </fields> - </group> - </groups> -</form> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_pdm/modele_workflow_confirmer_accord_client.form b/product/Coramy/skins/coramy_pdm/modele_workflow_confirmer_accord_client.form deleted file mode 100755 index f8e4574695..0000000000 --- a/product/Coramy/skins/coramy_pdm/modele_workflow_confirmer_accord_client.form +++ /dev/null @@ -1,81 +0,0 @@ -<?xml version="1.0"?> - -<form> - <title>Confirmer accord client</title> - <row_length>4</row_length> - <name>main</name> - <pt>form_view_dialog</pt> - <action>workflow_status_modify</action> - <method>POST</method> - <enctype>multipart/form-data</enctype> - <encoding>UTF-8</encoding> - <stored_encoding>ISO-8859-1</stored_encoding> - <unicode_mode>false</unicode_mode> - <groups> - <group> - <title>Default</title> - <fields> - - <field><id>my_comment</id> <type>TextAreaField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <height type="int">5</height> - <hidden type="int">0</hidden> - <max_length></max_length> - <max_linelength></max_linelength> - <max_lines></max_lines> - <required type="int">0</required> - <title>Commentaires</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - <width type="int">80</width> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_many_lines">You entered too many lines.</message> - <message name="line_too_long">A line was too long.</message> - <message name="too_long">You entered too many characters.</message> - </messages> - </field> - <field><id>my_workflow_action</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default>confirmer_accord_client</default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">1</hidden> - <max_length></max_length> - <required type="int">1</required> - <title> </title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - </fields> - </group> - </groups> -</form> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_pdm/modele_workflow_correction.form b/product/Coramy/skins/coramy_pdm/modele_workflow_correction.form deleted file mode 100755 index 0dc98fb915..0000000000 --- a/product/Coramy/skins/coramy_pdm/modele_workflow_correction.form +++ /dev/null @@ -1,81 +0,0 @@ -<?xml version="1.0"?> - -<form> - <title>Corriger l'état</title> - <row_length>4</row_length> - <name>main</name> - <pt>form_view_dialog</pt> - <action>workflow_status_modify</action> - <method>POST</method> - <enctype>multipart/form-data</enctype> - <encoding>UTF-8</encoding> - <stored_encoding>ISO-8859-1</stored_encoding> - <unicode_mode>false</unicode_mode> - <groups> - <group> - <title>Default</title> - <fields> - - <field><id>my_comment</id> <type>TextAreaField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <height type="int">5</height> - <hidden type="int">0</hidden> - <max_length></max_length> - <max_linelength></max_linelength> - <max_lines></max_lines> - <required type="int">0</required> - <title>Commentaires</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - <width type="int">80</width> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_many_lines">You entered too many lines.</message> - <message name="line_too_long">A line was too long.</message> - <message name="too_long">You entered too many characters.</message> - </messages> - </field> - <field><id>my_workflow_action</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default>corriger_etat</default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">1</hidden> - <max_length></max_length> - <required type="int">1</required> - <title>action</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - </fields> - </group> - </groups> -</form> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_pdm/modele_workflow_designer_gestionaire.form b/product/Coramy/skins/coramy_pdm/modele_workflow_designer_gestionaire.form deleted file mode 100755 index f157584479..0000000000 --- a/product/Coramy/skins/coramy_pdm/modele_workflow_designer_gestionaire.form +++ /dev/null @@ -1,109 +0,0 @@ -<?xml version="1.0"?> - -<form> - <title>Désigner un gestionaire client</title> - <row_length>4</row_length> - <name>main</name> - <pt>form_view_dialog</pt> - <action>workflow_status_modify</action> - <method>POST</method> - <enctype>multipart/form-data</enctype> - <encoding>UTF-8</encoding> - <stored_encoding>ISO-8859-1</stored_encoding> - <unicode_mode>false</unicode_mode> - <groups> - <group> - <title>Default</title> - <fields> - - <field><id>my_local_gestionaire_list</id> <type>MultiListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default type="list">[]</default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <extra_item></extra_item> - <hidden type="int">0</hidden> - <items type="list">[('Maryvonne_Mathon', 'Maryvonne_Mathon'), ('Magdalena_Cousin', 'Magdalena_Cousin'), ('Carole_Billant', 'Carole_Billant'), ('Michele_Kmiecik', 'Michele_Kmiecik'), ('Laurence_Caron', 'Laurence_Caron'), ('Veronique_Tronet', 'Veronique_Tronet'), ('Michele_Grisolet', 'Michele_Grisolet'), ('Martine_Cirot', 'Martine_Cirot')]</items> - <required type="int">1</required> - <size type="int">5</size> - <title>Gestionaires client</title> - <unicode type="int">0</unicode> - <view_separator><br /> -</view_separator> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - <field><id>my_comment</id> <type>TextAreaField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <height type="int">5</height> - <hidden type="int">0</hidden> - <max_length></max_length> - <max_linelength></max_linelength> - <max_lines></max_lines> - <required type="int">0</required> - <title>Commentaires</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - <width type="int">80</width> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_many_lines">You entered too many lines.</message> - <message name="line_too_long">A line was too long.</message> - <message name="too_long">You entered too many characters.</message> - </messages> - </field> - <field><id>my_workflow_action</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default>designer_gestionaire_client</default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">1</hidden> - <max_length></max_length> - <required type="int">1</required> - <title> </title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - </fields> - </group> - </groups> -</form> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_pdm/modele_workflow_designer_modeliste.form b/product/Coramy/skins/coramy_pdm/modele_workflow_designer_modeliste.form deleted file mode 100755 index 55961fd475..0000000000 --- a/product/Coramy/skins/coramy_pdm/modele_workflow_designer_modeliste.form +++ /dev/null @@ -1,109 +0,0 @@ -<?xml version="1.0"?> - -<form> - <title>Désigner un modéliste</title> - <row_length>4</row_length> - <name>main</name> - <pt>form_view_dialog</pt> - <action>workflow_status_modify</action> - <method>POST</method> - <enctype>multipart/form-data</enctype> - <encoding>UTF-8</encoding> - <stored_encoding>ISO-8859-1</stored_encoding> - <unicode_mode>false</unicode_mode> - <groups> - <group> - <title>Default</title> - <fields> - - <field><id>my_local_modeliste_list</id> <type>MultiListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default type="list">[]</default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <extra_item></extra_item> - <hidden type="int">0</hidden> - <items type="list">[('Catherine_Bouchard', 'Catherine_Bouchard'), ('Christine_Deniel', 'Christine_Deniel'), ('Eric_Deguelte', 'Eric_Deguelte'), ('Josette_Leroy', 'Josette_Leroy'), ('Sylvie_Fevre', 'Sylvie_Fevre'), ('Marie-Claire_Godin', 'Marie-Claire_Godin'), ('Nathalie_Courquin', 'Nathalie_Courquin'), ('Sandrine_Dericke', 'Sandrine_Dericke')]</items> - <required type="int">1</required> - <size type="int">5</size> - <title>Modélistes</title> - <unicode type="int">0</unicode> - <view_separator><br /> -</view_separator> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - <field><id>my_comment</id> <type>TextAreaField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <height type="int">5</height> - <hidden type="int">0</hidden> - <max_length></max_length> - <max_linelength></max_linelength> - <max_lines></max_lines> - <required type="int">0</required> - <title>Commentaires</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - <width type="int">80</width> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_many_lines">You entered too many lines.</message> - <message name="line_too_long">A line was too long.</message> - <message name="too_long">You entered too many characters.</message> - </messages> - </field> - <field><id>my_workflow_action</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default>designer_modeliste</default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">1</hidden> - <max_length></max_length> - <required type="int">1</required> - <title> </title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - </fields> - </group> - </groups> -</form> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_pdm/modele_workflow_industrialiser_modele_brouillon.form b/product/Coramy/skins/coramy_pdm/modele_workflow_industrialiser_modele_brouillon.form deleted file mode 100755 index 6e4e2f32ca..0000000000 --- a/product/Coramy/skins/coramy_pdm/modele_workflow_industrialiser_modele_brouillon.form +++ /dev/null @@ -1,81 +0,0 @@ -<?xml version="1.0"?> - -<form> - <title>Industrialiser le modèle</title> - <row_length>4</row_length> - <name>main</name> - <pt>form_view_dialog</pt> - <action>workflow_status_modify</action> - <method>POST</method> - <enctype>multipart/form-data</enctype> - <encoding>UTF-8</encoding> - <stored_encoding>ISO-8859-1</stored_encoding> - <unicode_mode>false</unicode_mode> - <groups> - <group> - <title>Default</title> - <fields> - - <field><id>my_comment</id> <type>TextAreaField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <height type="int">5</height> - <hidden type="int">0</hidden> - <max_length></max_length> - <max_linelength></max_linelength> - <max_lines></max_lines> - <required type="int">0</required> - <title>Commentaires</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - <width type="int">80</width> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_many_lines">You entered too many lines.</message> - <message name="line_too_long">A line was too long.</message> - <message name="too_long">You entered too many characters.</message> - </messages> - </field> - <field><id>my_workflow_action</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default>industrialiser_modele_brouillon</default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">1</hidden> - <max_length></max_length> - <required type="int">1</required> - <title> </title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - </fields> - </group> - </groups> -</form> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_pdm/modele_workflow_industrialiser_modele_collection.form b/product/Coramy/skins/coramy_pdm/modele_workflow_industrialiser_modele_collection.form deleted file mode 100755 index fbeabbd086..0000000000 --- a/product/Coramy/skins/coramy_pdm/modele_workflow_industrialiser_modele_collection.form +++ /dev/null @@ -1,81 +0,0 @@ -<?xml version="1.0"?> - -<form> - <title>Industrialiser le modèle</title> - <row_length>4</row_length> - <name>main</name> - <pt>form_view_dialog</pt> - <action>workflow_status_modify</action> - <method>POST</method> - <enctype>multipart/form-data</enctype> - <encoding>UTF-8</encoding> - <stored_encoding>ISO-8859-1</stored_encoding> - <unicode_mode>false</unicode_mode> - <groups> - <group> - <title>Default</title> - <fields> - - <field><id>my_comment</id> <type>TextAreaField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <height type="int">5</height> - <hidden type="int">0</hidden> - <max_length></max_length> - <max_linelength></max_linelength> - <max_lines></max_lines> - <required type="int">0</required> - <title>Commentaires</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - <width type="int">80</width> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_many_lines">You entered too many lines.</message> - <message name="line_too_long">A line was too long.</message> - <message name="too_long">You entered too many characters.</message> - </messages> - </field> - <field><id>my_workflow_action</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default>industrialiser_modele_collection</default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">1</hidden> - <max_length></max_length> - <required type="int">1</required> - <title> </title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - </fields> - </group> - </groups> -</form> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_pdm/modele_workflow_lancer_etude.form b/product/Coramy/skins/coramy_pdm/modele_workflow_lancer_etude.form deleted file mode 100755 index 99fe2a757f..0000000000 --- a/product/Coramy/skins/coramy_pdm/modele_workflow_lancer_etude.form +++ /dev/null @@ -1,81 +0,0 @@ -<?xml version="1.0"?> - -<form> - <title>Lancer l'étude</title> - <row_length>4</row_length> - <name>main</name> - <pt>form_view_dialog</pt> - <action>workflow_status_modify</action> - <method>POST</method> - <enctype>multipart/form-data</enctype> - <encoding>UTF-8</encoding> - <stored_encoding>ISO-8859-1</stored_encoding> - <unicode_mode>false</unicode_mode> - <groups> - <group> - <title>Default</title> - <fields> - - <field><id>my_comment</id> <type>TextAreaField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <height type="int">5</height> - <hidden type="int">0</hidden> - <max_length></max_length> - <max_linelength></max_linelength> - <max_lines></max_lines> - <required type="int">0</required> - <title>Commentaires</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - <width type="int">80</width> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_many_lines">You entered too many lines.</message> - <message name="line_too_long">A line was too long.</message> - <message name="too_long">You entered too many characters.</message> - </messages> - </field> - <field><id>my_workflow_action</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default>lancer_etude</default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">1</hidden> - <max_length></max_length> - <required type="int">1</required> - <title> </title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - </fields> - </group> - </groups> -</form> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_pdm/modele_workflow_lancer_prototype.form b/product/Coramy/skins/coramy_pdm/modele_workflow_lancer_prototype.form deleted file mode 100755 index 8aa934ff8b..0000000000 --- a/product/Coramy/skins/coramy_pdm/modele_workflow_lancer_prototype.form +++ /dev/null @@ -1,81 +0,0 @@ -<?xml version="1.0"?> - -<form> - <title>Lancer un prototype</title> - <row_length>4</row_length> - <name>main</name> - <pt>form_view_dialog</pt> - <action>workflow_status_modify</action> - <method>POST</method> - <enctype>multipart/form-data</enctype> - <encoding>UTF-8</encoding> - <stored_encoding>ISO-8859-1</stored_encoding> - <unicode_mode>false</unicode_mode> - <groups> - <group> - <title>Default</title> - <fields> - - <field><id>my_comment</id> <type>TextAreaField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <height type="int">5</height> - <hidden type="int">0</hidden> - <max_length></max_length> - <max_linelength></max_linelength> - <max_lines></max_lines> - <required type="int">0</required> - <title>Commentaires</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - <width type="int">80</width> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_many_lines">You entered too many lines.</message> - <message name="line_too_long">A line was too long.</message> - <message name="too_long">You entered too many characters.</message> - </messages> - </field> - <field><id>my_workflow_action</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default>lancer_prototype</default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">1</hidden> - <max_length></max_length> - <required type="int">1</required> - <title> </title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - </fields> - </group> - </groups> -</form> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_pdm/modele_workflow_proposer_collection.form b/product/Coramy/skins/coramy_pdm/modele_workflow_proposer_collection.form deleted file mode 100755 index c849927617..0000000000 --- a/product/Coramy/skins/coramy_pdm/modele_workflow_proposer_collection.form +++ /dev/null @@ -1,81 +0,0 @@ -<?xml version="1.0"?> - -<form> - <title>Proposer en collection</title> - <row_length>4</row_length> - <name>main</name> - <pt>form_view_dialog</pt> - <action>workflow_status_modify</action> - <method>POST</method> - <enctype>multipart/form-data</enctype> - <encoding>UTF-8</encoding> - <stored_encoding>ISO-8859-1</stored_encoding> - <unicode_mode>false</unicode_mode> - <groups> - <group> - <title>Default</title> - <fields> - - <field><id>my_comment</id> <type>TextAreaField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <height type="int">5</height> - <hidden type="int">0</hidden> - <max_length></max_length> - <max_linelength></max_linelength> - <max_lines></max_lines> - <required type="int">0</required> - <title>Commentaires</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - <width type="int">80</width> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_many_lines">You entered too many lines.</message> - <message name="line_too_long">A line was too long.</message> - <message name="too_long">You entered too many characters.</message> - </messages> - </field> - <field><id>my_workflow_action</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default>proposer_collection</default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">1</hidden> - <max_length></max_length> - <required type="int">1</required> - <title> </title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - </fields> - </group> - </groups> -</form> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_pdm/modele_workflow_rectifier_modele.form b/product/Coramy/skins/coramy_pdm/modele_workflow_rectifier_modele.form deleted file mode 100755 index f4464219e5..0000000000 --- a/product/Coramy/skins/coramy_pdm/modele_workflow_rectifier_modele.form +++ /dev/null @@ -1,81 +0,0 @@ -<?xml version="1.0"?> - -<form> - <title>Rectifier le modèle</title> - <row_length>4</row_length> - <name>main</name> - <pt>form_view_dialog</pt> - <action>workflow_status_modify</action> - <method>POST</method> - <enctype>multipart/form-data</enctype> - <encoding>UTF-8</encoding> - <stored_encoding>ISO-8859-1</stored_encoding> - <unicode_mode>false</unicode_mode> - <groups> - <group> - <title>Default</title> - <fields> - - <field><id>my_comment</id> <type>TextAreaField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <height type="int">5</height> - <hidden type="int">0</hidden> - <max_length></max_length> - <max_linelength></max_linelength> - <max_lines></max_lines> - <required type="int">1</required> - <title>Commentaires</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - <width type="int">80</width> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_many_lines">You entered too many lines.</message> - <message name="line_too_long">A line was too long.</message> - <message name="too_long">You entered too many characters.</message> - </messages> - </field> - <field><id>my_workflow_action</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default>rectifier_modele</default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">1</hidden> - <max_length></max_length> - <required type="int">1</required> - <title> </title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - </fields> - </group> - </groups> -</form> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_pdm/modele_workflow_refuser_brouillon.form b/product/Coramy/skins/coramy_pdm/modele_workflow_refuser_brouillon.form deleted file mode 100755 index c5f5bf0685..0000000000 --- a/product/Coramy/skins/coramy_pdm/modele_workflow_refuser_brouillon.form +++ /dev/null @@ -1,81 +0,0 @@ -<?xml version="1.0"?> - -<form> - <title>Refuser le modèle</title> - <row_length>4</row_length> - <name>main</name> - <pt>form_view_dialog</pt> - <action>workflow_status_modify</action> - <method>POST</method> - <enctype>multipart/form-data</enctype> - <encoding>UTF-8</encoding> - <stored_encoding>ISO-8859-1</stored_encoding> - <unicode_mode>false</unicode_mode> - <groups> - <group> - <title>Default</title> - <fields> - - <field><id>my_comment</id> <type>TextAreaField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <height type="int">5</height> - <hidden type="int">0</hidden> - <max_length></max_length> - <max_linelength></max_linelength> - <max_lines></max_lines> - <required type="int">1</required> - <title>Commentaires</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - <width type="int">80</width> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_many_lines">You entered too many lines.</message> - <message name="line_too_long">A line was too long.</message> - <message name="too_long">You entered too many characters.</message> - </messages> - </field> - <field><id>my_workflow_action</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default>refuser_brouillon</default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">1</hidden> - <max_length></max_length> - <required type="int">1</required> - <title> </title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - </fields> - </group> - </groups> -</form> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_pdm/modele_workflow_revendiquer_propriete.form b/product/Coramy/skins/coramy_pdm/modele_workflow_revendiquer_propriete.form deleted file mode 100755 index 2217a7cc45..0000000000 --- a/product/Coramy/skins/coramy_pdm/modele_workflow_revendiquer_propriete.form +++ /dev/null @@ -1,81 +0,0 @@ -<?xml version="1.0"?> - -<form> - <title>Revendiquer la propriété</title> - <row_length>4</row_length> - <name>main</name> - <pt>form_view_dialog</pt> - <action>workflow_status_modify</action> - <method>POST</method> - <enctype>multipart/form-data</enctype> - <encoding>UTF-8</encoding> - <stored_encoding>ISO-8859-1</stored_encoding> - <unicode_mode>false</unicode_mode> - <groups> - <group> - <title>Default</title> - <fields> - - <field><id>my_comment</id> <type>TextAreaField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <height type="int">5</height> - <hidden type="int">0</hidden> - <max_length></max_length> - <max_linelength></max_linelength> - <max_lines></max_lines> - <required type="int">0</required> - <title>Commentaires</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - <width type="int">80</width> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_many_lines">You entered too many lines.</message> - <message name="line_too_long">A line was too long.</message> - <message name="too_long">You entered too many characters.</message> - </messages> - </field> - <field><id>my_workflow_action</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default>revendiquer_propriete</default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">1</hidden> - <max_length></max_length> - <required type="int">1</required> - <title> </title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - </fields> - </group> - </groups> -</form> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_pdm/modele_workflow_solutionner_probleme_modelisme.form b/product/Coramy/skins/coramy_pdm/modele_workflow_solutionner_probleme_modelisme.form deleted file mode 100755 index 1bf337a41a..0000000000 --- a/product/Coramy/skins/coramy_pdm/modele_workflow_solutionner_probleme_modelisme.form +++ /dev/null @@ -1,81 +0,0 @@ -<?xml version="1.0"?> - -<form> - <title>Solutionner le problème</title> - <row_length>4</row_length> - <name>main</name> - <pt>form_view_dialog</pt> - <action>workflow_status_modify</action> - <method>POST</method> - <enctype>multipart/form-data</enctype> - <encoding>UTF-8</encoding> - <stored_encoding>ISO-8859-1</stored_encoding> - <unicode_mode>false</unicode_mode> - <groups> - <group> - <title>Default</title> - <fields> - - <field><id>my_comment</id> <type>TextAreaField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <height type="int">5</height> - <hidden type="int">0</hidden> - <max_length></max_length> - <max_linelength></max_linelength> - <max_lines></max_lines> - <required type="int">1</required> - <title>Commentaires</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - <width type="int">80</width> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_many_lines">You entered too many lines.</message> - <message name="line_too_long">A line was too long.</message> - <message name="too_long">You entered too many characters.</message> - </messages> - </field> - <field><id>my_workflow_action</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default>solutionner_probleme_modelisme</default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">1</hidden> - <max_length></max_length> - <required type="int">1</required> - <title> </title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - </fields> - </group> - </groups> -</form> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_pdm/modele_workflow_soumettre_modelisme.form b/product/Coramy/skins/coramy_pdm/modele_workflow_soumettre_modelisme.form deleted file mode 100755 index cb4473dfb2..0000000000 --- a/product/Coramy/skins/coramy_pdm/modele_workflow_soumettre_modelisme.form +++ /dev/null @@ -1,81 +0,0 @@ -<?xml version="1.0"?> - -<form> - <title>Soumettre au modélisme</title> - <row_length>4</row_length> - <name>main</name> - <pt>form_view_dialog</pt> - <action>workflow_status_modify</action> - <method>POST</method> - <enctype>multipart/form-data</enctype> - <encoding>UTF-8</encoding> - <stored_encoding>ISO-8859-1</stored_encoding> - <unicode_mode>false</unicode_mode> - <groups> - <group> - <title>Default</title> - <fields> - - <field><id>my_comment</id> <type>TextAreaField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <height type="int">5</height> - <hidden type="int">0</hidden> - <max_length></max_length> - <max_linelength></max_linelength> - <max_lines></max_lines> - <required type="int">0</required> - <title>Commentaires</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - <width type="int">80</width> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_many_lines">You entered too many lines.</message> - <message name="line_too_long">A line was too long.</message> - <message name="too_long">You entered too many characters.</message> - </messages> - </field> - <field><id>my_workflow_action</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default>soumettre_modelisme</default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">1</hidden> - <max_length></max_length> - <required type="int">1</required> - <title> </title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - </fields> - </group> - </groups> -</form> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_pdm/modele_workflow_soumettre_probleme_modelisme.form b/product/Coramy/skins/coramy_pdm/modele_workflow_soumettre_probleme_modelisme.form deleted file mode 100755 index 3a3e53ff67..0000000000 --- a/product/Coramy/skins/coramy_pdm/modele_workflow_soumettre_probleme_modelisme.form +++ /dev/null @@ -1,81 +0,0 @@ -<?xml version="1.0"?> - -<form> - <title>Soumettre un problème</title> - <row_length>4</row_length> - <name>main</name> - <pt>form_view_dialog</pt> - <action>workflow_status_modify</action> - <method>POST</method> - <enctype>multipart/form-data</enctype> - <encoding>UTF-8</encoding> - <stored_encoding>ISO-8859-1</stored_encoding> - <unicode_mode>false</unicode_mode> - <groups> - <group> - <title>Default</title> - <fields> - - <field><id>my_comment</id> <type>TextAreaField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <height type="int">5</height> - <hidden type="int">0</hidden> - <max_length></max_length> - <max_linelength></max_linelength> - <max_lines></max_lines> - <required type="int">1</required> - <title>Commentaires</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - <width type="int">80</width> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_many_lines">You entered too many lines.</message> - <message name="line_too_long">A line was too long.</message> - <message name="too_long">You entered too many characters.</message> - </messages> - </field> - <field><id>my_workflow_action</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default>soumettre_probleme_modelisme</default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">1</hidden> - <max_length></max_length> - <required type="int">1</required> - <title> </title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - </fields> - </group> - </groups> -</form> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_pdm/modele_workflow_valider_dabord_finition.form b/product/Coramy/skins/coramy_pdm/modele_workflow_valider_dabord_finition.form deleted file mode 100755 index a5ac844c72..0000000000 --- a/product/Coramy/skins/coramy_pdm/modele_workflow_valider_dabord_finition.form +++ /dev/null @@ -1,81 +0,0 @@ -<?xml version="1.0"?> - -<form> - <title>Valider la finition</title> - <row_length>4</row_length> - <name>main</name> - <pt>form_view_dialog</pt> - <action>workflow_status_modify</action> - <method>POST</method> - <enctype>multipart/form-data</enctype> - <encoding>UTF-8</encoding> - <stored_encoding>ISO-8859-1</stored_encoding> - <unicode_mode>false</unicode_mode> - <groups> - <group> - <title>Default</title> - <fields> - - <field><id>my_comment</id> <type>TextAreaField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <height type="int">5</height> - <hidden type="int">0</hidden> - <max_length></max_length> - <max_linelength></max_linelength> - <max_lines></max_lines> - <required type="int">0</required> - <title>Commentaires</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - <width type="int">80</width> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_many_lines">You entered too many lines.</message> - <message name="line_too_long">A line was too long.</message> - <message name="too_long">You entered too many characters.</message> - </messages> - </field> - <field><id>my_workflow_action</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default>valider_dabord_finition</default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">1</hidden> - <max_length></max_length> - <required type="int">1</required> - <title> </title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - </fields> - </group> - </groups> -</form> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_pdm/modele_workflow_valider_dabord_gamme.form b/product/Coramy/skins/coramy_pdm/modele_workflow_valider_dabord_gamme.form deleted file mode 100755 index c40c175a19..0000000000 --- a/product/Coramy/skins/coramy_pdm/modele_workflow_valider_dabord_gamme.form +++ /dev/null @@ -1,81 +0,0 @@ -<?xml version="1.0"?> - -<form> - <title>Valider la gamme opératoire</title> - <row_length>4</row_length> - <name>main</name> - <pt>form_view_dialog</pt> - <action>workflow_status_modify</action> - <method>POST</method> - <enctype>multipart/form-data</enctype> - <encoding>UTF-8</encoding> - <stored_encoding>ISO-8859-1</stored_encoding> - <unicode_mode>false</unicode_mode> - <groups> - <group> - <title>Default</title> - <fields> - - <field><id>my_comment</id> <type>TextAreaField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <height type="int">5</height> - <hidden type="int">0</hidden> - <max_length></max_length> - <max_linelength></max_linelength> - <max_lines></max_lines> - <required type="int">0</required> - <title>Commentaires</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - <width type="int">80</width> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_many_lines">You entered too many lines.</message> - <message name="line_too_long">A line was too long.</message> - <message name="too_long">You entered too many characters.</message> - </messages> - </field> - <field><id>my_workflow_action</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default>valider_dabord_gamme</default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">1</hidden> - <max_length></max_length> - <required type="int">1</required> - <title> </title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - </fields> - </group> - </groups> -</form> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_pdm/modele_workflow_valider_dabord_gradation.form b/product/Coramy/skins/coramy_pdm/modele_workflow_valider_dabord_gradation.form deleted file mode 100755 index 0f95ba0841..0000000000 --- a/product/Coramy/skins/coramy_pdm/modele_workflow_valider_dabord_gradation.form +++ /dev/null @@ -1,81 +0,0 @@ -<?xml version="1.0"?> - -<form> - <title>Valider la gradation</title> - <row_length>4</row_length> - <name>main</name> - <pt>form_view_dialog</pt> - <action>workflow_status_modify</action> - <method>POST</method> - <enctype>multipart/form-data</enctype> - <encoding>UTF-8</encoding> - <stored_encoding>ISO-8859-1</stored_encoding> - <unicode_mode>false</unicode_mode> - <groups> - <group> - <title>Default</title> - <fields> - - <field><id>my_comment</id> <type>TextAreaField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <height type="int">5</height> - <hidden type="int">0</hidden> - <max_length></max_length> - <max_linelength></max_linelength> - <max_lines></max_lines> - <required type="int">0</required> - <title>Commentaires</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - <width type="int">80</width> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_many_lines">You entered too many lines.</message> - <message name="line_too_long">A line was too long.</message> - <message name="too_long">You entered too many characters.</message> - </messages> - </field> - <field><id>my_workflow_action</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default>valider_dabord_gradation</default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">1</hidden> - <max_length></max_length> - <required type="int">1</required> - <title> </title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - </fields> - </group> - </groups> -</form> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_pdm/modele_workflow_valider_dabord_nomenclature.form b/product/Coramy/skins/coramy_pdm/modele_workflow_valider_dabord_nomenclature.form deleted file mode 100755 index defaeb2555..0000000000 --- a/product/Coramy/skins/coramy_pdm/modele_workflow_valider_dabord_nomenclature.form +++ /dev/null @@ -1,81 +0,0 @@ -<?xml version="1.0"?> - -<form> - <title>Valider la nomenclature</title> - <row_length>4</row_length> - <name>main</name> - <pt>form_view_dialog</pt> - <action>workflow_status_modify</action> - <method>POST</method> - <enctype>multipart/form-data</enctype> - <encoding>UTF-8</encoding> - <stored_encoding>ISO-8859-1</stored_encoding> - <unicode_mode>false</unicode_mode> - <groups> - <group> - <title>Default</title> - <fields> - - <field><id>my_comment</id> <type>TextAreaField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <height type="int">5</height> - <hidden type="int">0</hidden> - <max_length></max_length> - <max_linelength></max_linelength> - <max_lines></max_lines> - <required type="int">0</required> - <title>Commentaires</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - <width type="int">80</width> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_many_lines">You entered too many lines.</message> - <message name="line_too_long">A line was too long.</message> - <message name="too_long">You entered too many characters.</message> - </messages> - </field> - <field><id>my_workflow_action</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default>valider_dabord_nomenclature</default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">1</hidden> - <max_length></max_length> - <required type="int">1</required> - <title> </title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - </fields> - </group> - </groups> -</form> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_pdm/modele_workflow_valider_ensuite_finition.form b/product/Coramy/skins/coramy_pdm/modele_workflow_valider_ensuite_finition.form deleted file mode 100755 index 4eb6a3b379..0000000000 --- a/product/Coramy/skins/coramy_pdm/modele_workflow_valider_ensuite_finition.form +++ /dev/null @@ -1,81 +0,0 @@ -<?xml version="1.0"?> - -<form> - <title>Valider la finition</title> - <row_length>4</row_length> - <name>main</name> - <pt>form_view_dialog</pt> - <action>workflow_status_modify</action> - <method>POST</method> - <enctype>multipart/form-data</enctype> - <encoding>UTF-8</encoding> - <stored_encoding>ISO-8859-1</stored_encoding> - <unicode_mode>false</unicode_mode> - <groups> - <group> - <title>Default</title> - <fields> - - <field><id>my_comment</id> <type>TextAreaField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <height type="int">5</height> - <hidden type="int">0</hidden> - <max_length></max_length> - <max_linelength></max_linelength> - <max_lines></max_lines> - <required type="int">0</required> - <title>Commentaires</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - <width type="int">80</width> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_many_lines">You entered too many lines.</message> - <message name="line_too_long">A line was too long.</message> - <message name="too_long">You entered too many characters.</message> - </messages> - </field> - <field><id>my_workflow_action</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default>valider_ensuite_finition</default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">1</hidden> - <max_length></max_length> - <required type="int">1</required> - <title> </title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - </fields> - </group> - </groups> -</form> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_pdm/modele_workflow_valider_ensuite_gamme.form b/product/Coramy/skins/coramy_pdm/modele_workflow_valider_ensuite_gamme.form deleted file mode 100755 index a687ea0e8a..0000000000 --- a/product/Coramy/skins/coramy_pdm/modele_workflow_valider_ensuite_gamme.form +++ /dev/null @@ -1,81 +0,0 @@ -<?xml version="1.0"?> - -<form> - <title>Valider la gamme opératoire</title> - <row_length>4</row_length> - <name>main</name> - <pt>form_view_dialog</pt> - <action>workflow_status_modify</action> - <method>POST</method> - <enctype>multipart/form-data</enctype> - <encoding>UTF-8</encoding> - <stored_encoding>ISO-8859-1</stored_encoding> - <unicode_mode>false</unicode_mode> - <groups> - <group> - <title>Default</title> - <fields> - - <field><id>my_comment</id> <type>TextAreaField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <height type="int">5</height> - <hidden type="int">0</hidden> - <max_length></max_length> - <max_linelength></max_linelength> - <max_lines></max_lines> - <required type="int">0</required> - <title>Commentaires</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - <width type="int">80</width> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_many_lines">You entered too many lines.</message> - <message name="line_too_long">A line was too long.</message> - <message name="too_long">You entered too many characters.</message> - </messages> - </field> - <field><id>my_workflow_action</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default>valider_ensuite_gamme</default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">1</hidden> - <max_length></max_length> - <required type="int">1</required> - <title> </title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - </fields> - </group> - </groups> -</form> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_pdm/modele_workflow_valider_ensuite_gradation.form b/product/Coramy/skins/coramy_pdm/modele_workflow_valider_ensuite_gradation.form deleted file mode 100755 index 60f97e8624..0000000000 --- a/product/Coramy/skins/coramy_pdm/modele_workflow_valider_ensuite_gradation.form +++ /dev/null @@ -1,81 +0,0 @@ -<?xml version="1.0"?> - -<form> - <title>Valider la gradation</title> - <row_length>4</row_length> - <name>main</name> - <pt>form_view_dialog</pt> - <action>workflow_status_modify</action> - <method>POST</method> - <enctype>multipart/form-data</enctype> - <encoding>UTF-8</encoding> - <stored_encoding>ISO-8859-1</stored_encoding> - <unicode_mode>false</unicode_mode> - <groups> - <group> - <title>Default</title> - <fields> - - <field><id>my_comment</id> <type>TextAreaField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <height type="int">5</height> - <hidden type="int">0</hidden> - <max_length></max_length> - <max_linelength></max_linelength> - <max_lines></max_lines> - <required type="int">0</required> - <title>Commentaires</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - <width type="int">80</width> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_many_lines">You entered too many lines.</message> - <message name="line_too_long">A line was too long.</message> - <message name="too_long">You entered too many characters.</message> - </messages> - </field> - <field><id>my_workflow_action</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default>valider_ensuite_gradation</default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">1</hidden> - <max_length></max_length> - <required type="int">1</required> - <title> </title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - </fields> - </group> - </groups> -</form> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_pdm/modele_workflow_valider_ensuite_nomenclature.form b/product/Coramy/skins/coramy_pdm/modele_workflow_valider_ensuite_nomenclature.form deleted file mode 100755 index 7d1f94dc91..0000000000 --- a/product/Coramy/skins/coramy_pdm/modele_workflow_valider_ensuite_nomenclature.form +++ /dev/null @@ -1,81 +0,0 @@ -<?xml version="1.0"?> - -<form> - <title>Valider la nomenclature</title> - <row_length>4</row_length> - <name>main</name> - <pt>form_view_dialog</pt> - <action>workflow_status_modify</action> - <method>POST</method> - <enctype>multipart/form-data</enctype> - <encoding>UTF-8</encoding> - <stored_encoding>ISO-8859-1</stored_encoding> - <unicode_mode>false</unicode_mode> - <groups> - <group> - <title>Default</title> - <fields> - - <field><id>my_comment</id> <type>TextAreaField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <height type="int">5</height> - <hidden type="int">0</hidden> - <max_length></max_length> - <max_linelength></max_linelength> - <max_lines></max_lines> - <required type="int">0</required> - <title>Commentaires</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - <width type="int">80</width> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_many_lines">You entered too many lines.</message> - <message name="line_too_long">A line was too long.</message> - <message name="too_long">You entered too many characters.</message> - </messages> - </field> - <field><id>my_workflow_action</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default>valider_ensuite_nomenclature</default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">1</hidden> - <max_length></max_length> - <required type="int">1</required> - <title> </title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - </fields> - </group> - </groups> -</form> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_pdm/modele_workflow_valider_infos_client.form b/product/Coramy/skins/coramy_pdm/modele_workflow_valider_infos_client.form deleted file mode 100755 index 3ad533ba3b..0000000000 --- a/product/Coramy/skins/coramy_pdm/modele_workflow_valider_infos_client.form +++ /dev/null @@ -1,81 +0,0 @@ -<?xml version="1.0"?> - -<form> - <title>Valider informations client</title> - <row_length>4</row_length> - <name>main</name> - <pt>form_view_dialog</pt> - <action>workflow_status_modify</action> - <method>POST</method> - <enctype>multipart/form-data</enctype> - <encoding>UTF-8</encoding> - <stored_encoding>ISO-8859-1</stored_encoding> - <unicode_mode>false</unicode_mode> - <groups> - <group> - <title>Default</title> - <fields> - - <field><id>my_comment</id> <type>TextAreaField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <height type="int">5</height> - <hidden type="int">0</hidden> - <max_length></max_length> - <max_linelength></max_linelength> - <max_lines></max_lines> - <required type="int">0</required> - <title>Commentaires</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - <width type="int">80</width> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_many_lines">You entered too many lines.</message> - <message name="line_too_long">A line was too long.</message> - <message name="too_long">You entered too many characters.</message> - </messages> - </field> - <field><id>my_workflow_action</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default>valider_infos_client</default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">1</hidden> - <max_length></max_length> - <required type="int">1</required> - <title> </title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - </fields> - </group> - </groups> -</form> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_pdm/modele_workflow_valider_modele.form b/product/Coramy/skins/coramy_pdm/modele_workflow_valider_modele.form deleted file mode 100755 index a8a569a1d3..0000000000 --- a/product/Coramy/skins/coramy_pdm/modele_workflow_valider_modele.form +++ /dev/null @@ -1,81 +0,0 @@ -<?xml version="1.0"?> - -<form> - <title>Valider le modèle</title> - <row_length>4</row_length> - <name>main</name> - <pt>form_view_dialog</pt> - <action>workflow_status_modify</action> - <method>POST</method> - <enctype>multipart/form-data</enctype> - <encoding>UTF-8</encoding> - <stored_encoding>ISO-8859-1</stored_encoding> - <unicode_mode>false</unicode_mode> - <groups> - <group> - <title>Default</title> - <fields> - - <field><id>my_comment</id> <type>TextAreaField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <height type="int">5</height> - <hidden type="int">0</hidden> - <max_length></max_length> - <max_linelength></max_linelength> - <max_lines></max_lines> - <required type="int">0</required> - <title>Commentaires</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - <width type="int">80</width> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_many_lines">You entered too many lines.</message> - <message name="line_too_long">A line was too long.</message> - <message name="too_long">You entered too many characters.</message> - </messages> - </field> - <field><id>my_workflow_action</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default>valider_modele</default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">1</hidden> - <max_length></max_length> - <required type="int">1</required> - <title> </title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - </fields> - </group> - </groups> -</form> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_pdm/modele_workflow_valider_modele_reconduit.form b/product/Coramy/skins/coramy_pdm/modele_workflow_valider_modele_reconduit.form deleted file mode 100755 index 6167083544..0000000000 --- a/product/Coramy/skins/coramy_pdm/modele_workflow_valider_modele_reconduit.form +++ /dev/null @@ -1,81 +0,0 @@ -<?xml version="1.0"?> - -<form> - <title>Valider le modèle</title> - <row_length>4</row_length> - <name>main</name> - <pt>form_view_dialog</pt> - <action>workflow_status_modify</action> - <method>POST</method> - <enctype>multipart/form-data</enctype> - <encoding>UTF-8</encoding> - <stored_encoding>ISO-8859-1</stored_encoding> - <unicode_mode>false</unicode_mode> - <groups> - <group> - <title>Default</title> - <fields> - - <field><id>my_comment</id> <type>TextAreaField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <height type="int">5</height> - <hidden type="int">0</hidden> - <max_length></max_length> - <max_linelength></max_linelength> - <max_lines></max_lines> - <required type="int">0</required> - <title>Commentaires</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - <width type="int">80</width> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_many_lines">You entered too many lines.</message> - <message name="line_too_long">A line was too long.</message> - <message name="too_long">You entered too many characters.</message> - </messages> - </field> - <field><id>my_workflow_action</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default>valider_modele_reconduit</default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">1</hidden> - <max_length></max_length> - <required type="int">1</required> - <title> </title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - </fields> - </group> - </groups> -</form> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_pdm/modele_workflow_valider_prix.form b/product/Coramy/skins/coramy_pdm/modele_workflow_valider_prix.form deleted file mode 100755 index 393d25d879..0000000000 --- a/product/Coramy/skins/coramy_pdm/modele_workflow_valider_prix.form +++ /dev/null @@ -1,81 +0,0 @@ -<?xml version="1.0"?> - -<form> - <title>Valider le prix</title> - <row_length>4</row_length> - <name>main</name> - <pt>form_view_dialog</pt> - <action>workflow_status_modify</action> - <method>POST</method> - <enctype>multipart/form-data</enctype> - <encoding>UTF-8</encoding> - <stored_encoding>ISO-8859-1</stored_encoding> - <unicode_mode>false</unicode_mode> - <groups> - <group> - <title>Default</title> - <fields> - - <field><id>my_comment</id> <type>TextAreaField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <height type="int">5</height> - <hidden type="int">0</hidden> - <max_length></max_length> - <max_linelength></max_linelength> - <max_lines></max_lines> - <required type="int">0</required> - <title>Commentaires</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - <width type="int">80</width> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_many_lines">You entered too many lines.</message> - <message name="line_too_long">A line was too long.</message> - <message name="too_long">You entered too many characters.</message> - </messages> - </field> - <field><id>my_workflow_action</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default>valider_prix</default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">1</hidden> - <max_length></max_length> - <required type="int">1</required> - <title> </title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - </fields> - </group> - </groups> -</form> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_pdm/modele_workflow_valider_prix_reconduit.form b/product/Coramy/skins/coramy_pdm/modele_workflow_valider_prix_reconduit.form deleted file mode 100755 index 7bdf4afae5..0000000000 --- a/product/Coramy/skins/coramy_pdm/modele_workflow_valider_prix_reconduit.form +++ /dev/null @@ -1,81 +0,0 @@ -<?xml version="1.0"?> - -<form> - <title>Valider le prix</title> - <row_length>4</row_length> - <name>main</name> - <pt>form_view_dialog</pt> - <action>workflow_status_modify</action> - <method>POST</method> - <enctype>multipart/form-data</enctype> - <encoding>UTF-8</encoding> - <stored_encoding>ISO-8859-1</stored_encoding> - <unicode_mode>false</unicode_mode> - <groups> - <group> - <title>Default</title> - <fields> - - <field><id>my_comment</id> <type>TextAreaField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <height type="int">5</height> - <hidden type="int">0</hidden> - <max_length></max_length> - <max_linelength></max_linelength> - <max_lines></max_lines> - <required type="int">0</required> - <title>Commentaires</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - <width type="int">80</width> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_many_lines">You entered too many lines.</message> - <message name="line_too_long">A line was too long.</message> - <message name="too_long">You entered too many characters.</message> - </messages> - </field> - <field><id>my_workflow_action</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default>valider_prix_reconduit</default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">1</hidden> - <max_length></max_length> - <required type="int">1</required> - <title> </title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - </fields> - </group> - </groups> -</form> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_pdm/modeles_apply.py b/product/Coramy/skins/coramy_pdm/modeles_apply.py deleted file mode 100755 index a493031e91..0000000000 --- a/product/Coramy/skins/coramy_pdm/modeles_apply.py +++ /dev/null @@ -1,50 +0,0 @@ -## Script (Python) "modeles_apply" -##bind container=container -##bind context=context -##bind namespace= -##bind script=script -##bind subpath=traverse_subpath -##parameters=form_id,dialog_id,modeles -##title= -## -request=context.REQUEST -modele_module = context.getObject() -error_modeles = [] - -for modele_item in modeles : - modele_list = modele_module.modele_sql_search_id(modele_id = modele_item) - - if len(modele_list) > 0 : - modele = modele_list[0].getObject() - - if modele <> None : - modele_categories = modele.getCategories() - new_categories = () - - for categorie_item in modele_categories : - if categorie_item[0:15] == 'modele_origine/': - new_categories += ('modele_origine/Reconduction/Cognis',) - else : - new_categories += (categorie_item,) - - modele.edit(categories = new_categories) - - else : - error_modeles.append(modele_item) - - else : - modele = None - error_modeles.append(modele_item) - - -if len(error_modeles)>0 : - redirect_url = '%s/%s?%s' % ( context.absolute_url(), form_id - , 'portal_status_message=%s+modeles+mis+a+jour.+%s+modeles+non+trouves:%s.' - %(len(modeles),len(error_modeles), str(error_modeles)) - ) -else : - redirect_url = '%s/%s?%s' % ( context.absolute_url(), form_id - , 'portal_status_message=%s+modeles+mis+a+jour.' - %len(modeles) - ) -context.REQUEST[ 'RESPONSE' ].redirect( redirect_url ) diff --git a/product/Coramy/skins/coramy_pdm/modeles_apply_form.form b/product/Coramy/skins/coramy_pdm/modeles_apply_form.form deleted file mode 100755 index ca860a5135..0000000000 --- a/product/Coramy/skins/coramy_pdm/modeles_apply_form.form +++ /dev/null @@ -1,61 +0,0 @@ -<?xml version="1.0"?> - -<form> - <title>Saisie rapide</title> - <row_length>4</row_length> - <name>speed_order_input_form</name> - <pt>form_view_dialog</pt> - <action>modeles_apply</action> - <method>POST</method> - <enctype>multipart/form-data</enctype> - <encoding>UTF-8</encoding> - <stored_encoding>ISO-8859-1</stored_encoding> - <unicode_mode>false</unicode_mode> - <groups> - <group> - <title>left</title> - <fields> - - <field><id>my_modeles</id> <type>LinesField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default type="list">[]</default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <height type="int">10</height> - <hidden type="int">0</hidden> - <max_length></max_length> - <max_linelength></max_linelength> - <max_lines></max_lines> - <required type="int">1</required> - <title>Liste de modèles</title> - <unicode type="int">0</unicode> - <view_separator><br /> -</view_separator> - <whitespace_preserve type="int">0</whitespace_preserve> - <width type="int">40</width> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_many_lines">You entered too many lines.</message> - <message name="line_too_long">A line was too long.</message> - <message name="too_long">You entered too many characters.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>right</title> - <fields> - - </fields> - </group> - </groups> -</form> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_pdm/modeles_print_list.py b/product/Coramy/skins/coramy_pdm/modeles_print_list.py deleted file mode 100755 index f789e28146..0000000000 --- a/product/Coramy/skins/coramy_pdm/modeles_print_list.py +++ /dev/null @@ -1,31 +0,0 @@ -## Script (Python) "modeles_print_list" -##bind container=container -##bind context=context -##bind namespace= -##bind script=script -##bind subpath=traverse_subpath -##parameters=form_id,dialog_id,modeles -##title= -## -request=context.REQUEST -modele_module = context.getObject() -error_modeles = [] - -for modele_item in modeles : - modele_list = modele_module.modele_sql_search_id(modele_id = modele_item) - - if len(modele_list) > 0 : - modele = modele_list[0].getObject() - - if modele <> None : - print str(modele.getId())+'\t'+str(modele.portal_workflow.getInfoFor(modele, 'modele_state'))+'\t'+str(modele.getModeleOrigine()) - - else : - error_modeles.append(modele_item) - - else : - modele = None - error_modeles.append(modele_item) - - -return printed + str(error_modeles) diff --git a/product/Coramy/skins/coramy_pdm/modeles_print_list_form.form b/product/Coramy/skins/coramy_pdm/modeles_print_list_form.form deleted file mode 100755 index 1489d93585..0000000000 --- a/product/Coramy/skins/coramy_pdm/modeles_print_list_form.form +++ /dev/null @@ -1,61 +0,0 @@ -<?xml version="1.0"?> - -<form> - <title>Saisie rapide</title> - <row_length>4</row_length> - <name>speed_order_input_form</name> - <pt>form_view_dialog</pt> - <action>modeles_print_list</action> - <method>POST</method> - <enctype>multipart/form-data</enctype> - <encoding>UTF-8</encoding> - <stored_encoding>ISO-8859-1</stored_encoding> - <unicode_mode>false</unicode_mode> - <groups> - <group> - <title>left</title> - <fields> - - <field><id>my_modeles</id> <type>LinesField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default type="list">[]</default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <height type="int">10</height> - <hidden type="int">0</hidden> - <max_length></max_length> - <max_linelength></max_linelength> - <max_lines></max_lines> - <required type="int">1</required> - <title>Liste de modèles</title> - <unicode type="int">0</unicode> - <view_separator><br /> -</view_separator> - <whitespace_preserve type="int">0</whitespace_preserve> - <width type="int">40</width> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_many_lines">You entered too many lines.</message> - <message name="line_too_long">A line was too long.</message> - <message name="too_long">You entered too many characters.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>right</title> - <fields> - - </fields> - </group> - </groups> -</form> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_pdm/morceau_view.form b/product/Coramy/skins/coramy_pdm/morceau_view.form deleted file mode 100755 index 713c7dfaf1..0000000000 --- a/product/Coramy/skins/coramy_pdm/morceau_view.form +++ /dev/null @@ -1,231 +0,0 @@ -<?xml version="1.0"?> - -<form> - <title>Morceau</title> - <row_length>4</row_length> - <name>morceau_view</name> - <pt>form_view</pt> - <action>base_edit</action> - <method>POST</method> - <enctype></enctype> - <encoding>UTF-8</encoding> - <stored_encoding>ISO-8859-1</stored_encoding> - <unicode_mode>false</unicode_mode> - <groups> - <group> - <title>left</title> - <fields> - - <field><id>my_id</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <max_length></max_length> - <required type="int">1</required> - <title>Morceau</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - <field><id>my_description</id> <type>TextAreaField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <height type="int">3</height> - <hidden type="int">0</hidden> - <max_length></max_length> - <max_linelength></max_linelength> - <max_lines></max_lines> - <required type="int">0</required> - <title>Description</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - <width type="int">40</width> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_many_lines">You entered too many lines.</message> - <message name="line_too_long">A line was too long.</message> - <message name="too_long">You entered too many characters.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>right</title> - <fields> - - <field><id>my_quantite_simple</id> <type>IntegerField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <end></end> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <required type="int">0</required> - <start></start> - <title>Simple</title> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="not_integer">You did not enter an integer.</message> - <message name="integer_out_of_range">The integer you entered was out of range.</message> - </messages> - </field> - <field><id>my_quantite_double</id> <type>IntegerField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <end></end> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <required type="int">0</required> - <start></start> - <title>Double</title> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="not_integer">You did not enter an integer.</message> - <message name="integer_out_of_range">The integer you entered was out of range.</message> - </messages> - </field> - <field><id>my_type_tissu</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <max_length></max_length> - <required type="int">0</required> - <title>Type tissu</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - <field><id>my_type_cran</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <max_length></max_length> - <required type="int">0</required> - <title>Type cran</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - <field><id>my_fao</id> <type>CheckBoxField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default type="int">0</default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <title>Traitement FAO</title> - </values> - <tales> - <default>here/getFao</default> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>center</title> - <fields> - - </fields> - </group> - <group> - <title>bottom</title> - <fields> - - </fields> - </group> - </groups> -</form> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_pdm/operation_view.form b/product/Coramy/skins/coramy_pdm/operation_view.form deleted file mode 100755 index 4956fe6b91..0000000000 --- a/product/Coramy/skins/coramy_pdm/operation_view.form +++ /dev/null @@ -1,324 +0,0 @@ -<?xml version="1.0"?> - -<form> - <title>Opération</title> - <row_length>4</row_length> - <name>operation_view</name> - <pt>form_view</pt> - <action>base_edit</action> - <method>POST</method> - <enctype></enctype> - <encoding>UTF-8</encoding> - <stored_encoding>ISO-8859-1</stored_encoding> - <unicode_mode>false</unicode_mode> - <groups> - <group> - <title>left</title> - <fields> - - <field><id>my_id</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <max_length></max_length> - <required type="int">1</required> - <title>Operation</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - <field><id>my_description</id> <type>TextAreaField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <height type="int">3</height> - <hidden type="int">0</hidden> - <max_length></max_length> - <max_linelength></max_linelength> - <max_lines></max_lines> - <required type="int">0</required> - <title>Description</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - <width type="int">40</width> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_many_lines">You entered too many lines.</message> - <message name="line_too_long">A line was too long.</message> - <message name="too_long">You entered too many characters.</message> - </messages> - </field> - <field><id>my_composition</id> <type>TextAreaField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <height type="int">1</height> - <hidden type="int">0</hidden> - <max_length></max_length> - <max_linelength></max_linelength> - <max_lines></max_lines> - <required type="int">0</required> - <title>Composition</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - <width type="int">40</width> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_many_lines">You entered too many lines.</message> - <message name="line_too_long">A line was too long.</message> - <message name="too_long">You entered too many characters.</message> - </messages> - </field> - <field><id>operation_state</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <max_length></max_length> - <required type="int">0</required> - <title>Etat</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <default>python:here.portal_workflow.getInfoFor(here, 'operation_state')</default> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>right</title> - <fields> - - <field><id>my_frequence</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <max_length></max_length> - <required type="int">0</required> - <title>Frequence</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - <field><id>my_temps</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <max_length></max_length> - <required type="int">0</required> - <title>Temps</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - <field><id>my_machine</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <max_length></max_length> - <required type="int">0</required> - <title>Machine</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - <field><id>my_equipement</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <max_length></max_length> - <required type="int">0</required> - <title>Equipement</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - <field><id>my_etape</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <max_length></max_length> - <required type="int">0</required> - <title>Etape</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>center</title> - <fields> - - <field><id>my_commentaires</id> <type>TextAreaField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <height type="int">3</height> - <hidden type="int">0</hidden> - <max_length></max_length> - <max_linelength></max_linelength> - <max_lines></max_lines> - <required type="int">0</required> - <title>Commentaires</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - <width type="int">80</width> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_many_lines">You entered too many lines.</message> - <message name="line_too_long">A line was too long.</message> - <message name="too_long">You entered too many characters.</message> - </messages> - </field> - </fields> - </group> - </groups> -</form> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_pdm/resource_variation_view.form b/product/Coramy/skins/coramy_pdm/resource_variation_view.form deleted file mode 100755 index 97b36c57df..0000000000 --- a/product/Coramy/skins/coramy_pdm/resource_variation_view.form +++ /dev/null @@ -1,82 +0,0 @@ -<?xml version="1.0"?> - -<form> - <title>Definition of Resource Variations</title> - <row_length>4</row_length> - <name>resource_variation_view</name> - <pt>form_view</pt> - <action>base_edit</action> - <method>POST</method> - <enctype></enctype> - <encoding>UTF-8</encoding> - <stored_encoding>ISO-8859-1</stored_encoding> - <unicode_mode>false</unicode_mode> - <groups> - <group> - <title>Default</title> - <fields> - - <field><id>my_variation_base_category_list</id> <type>MultiListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default type="list">[]</default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <extra_item></extra_item> - <hidden type="int">0</hidden> - <items type="list">[]</items> - <required type="int">1</required> - <size type="int">5</size> - <title>Discrete Variation</title> - <unicode type="int">0</unicode> - <view_separator><br /> -</view_separator> - </values> - <tales> - <default>here/getVariationBaseCategoryList</default> - <items>here/portal_categories/getBaseCategoryIds</items> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - <field><id>my_variation_category_list</id> <type>MultiListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default type="list">[]</default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <extra_item></extra_item> - <hidden type="int">0</hidden> - <items type="list">[]</items> - <required type="int">1</required> - <size type="int">5</size> - <title>Variation Values</title> - <unicode type="int">0</unicode> - <view_separator><br /> -</view_separator> - </values> - <tales> - <default>here/getVariationCategoryList</default> - <items>here/portal_categories/taille/getFormItemList</items> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - </fields> - </group> - </groups> -</form> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_pdm/setEan13Modele.py b/product/Coramy/skins/coramy_pdm/setEan13Modele.py deleted file mode 100755 index 398a9b0e28..0000000000 --- a/product/Coramy/skins/coramy_pdm/setEan13Modele.py +++ /dev/null @@ -1,22 +0,0 @@ -## Script (Python) "setEan13Modele" -##bind container=container -##bind context=context -##bind namespace= -##bind script=script -##bind subpath=traverse_subpath -##parameters=societe -##title= -## -# retourne un code ean pour un modele -# "societe" pointe vers la categorie correspondant à la societe souhaitee (base category group) -# cette category possède des attributs CNUF, CIP et country - -request = context.REQUEST -modele = context - -country = societe.country -CNUF = societe.CNUF -CIP = societe.CIP - -modele.edit(code_ean13 = modele.new_ean13_code(country,CNUF,CIP)) -societe.edit(CIP = CIP+1) diff --git a/product/Coramy/skins/coramy_pdm/sql_id_search.zsql b/product/Coramy/skins/coramy_pdm/sql_id_search.zsql deleted file mode 100755 index 15d4ec455e..0000000000 --- a/product/Coramy/skins/coramy_pdm/sql_id_search.zsql +++ /dev/null @@ -1,12 +0,0 @@ -<dtml-comment> -title: -connection_id:erp5_sql_connection -max_rows:1000 -max_cache:100 -cache_time:0 -class_name: -class_file: -</dtml-comment> -<params>id -portal_type</params> -select * from catalog where id LIKE "%<dtml-var id>%" AND <dtml-sqltest portal_type type="string" op="eq"> diff --git a/product/Coramy/skins/coramy_pdm/tissu_list.form b/product/Coramy/skins/coramy_pdm/tissu_list.form deleted file mode 100755 index ed2162a950..0000000000 --- a/product/Coramy/skins/coramy_pdm/tissu_list.form +++ /dev/null @@ -1,62 +0,0 @@ -<?xml version="1.0"?> - -<form> - <title>Liste de tissus</title> - <row_length>4</row_length> - <name>tissu_list</name> - <pt>form_list</pt> - <action></action> - <method>POST</method> - <enctype>multipart/form-data</enctype> - <encoding>UTF-8</encoding> - <stored_encoding>ISO-8859-1</stored_encoding> - <unicode_mode>false</unicode_mode> - <groups> - <group> - <title>Default</title> - <fields> - - <field><id>listbox</id> <type>ListBox</type> - <values> - <all_columns type="list">[('id', 'R\xe9f\xe9rence'), ('default_source_title', 'Fournisseur'), ('default_source_reference', 'R\xe9f\xe9rence Fournisseur'), ('getLaizeUtile', 'Laize utile'), ('Description', 'Description'), ('getBasePrice', 'Prix Coramy'), ('getSourceBasePrice', 'Prix fournisseur'), ('composant_state', 'Etat')]</all_columns> - <all_editable_columns type="list">[]</all_editable_columns> - <alternate_name></alternate_name> - <columns type="list">[('id', 'R\xe9f\xe9rence'), ('default_source_title', 'Fournisseur'), ('source_id', 'No fournisseur'), ('default_source_reference', 'R\xe9f\xe9rence Fournisseur'), ('getLaizeUtile', 'Laize utile'), ('Description', 'Description'), ('getBasePrice', 'Prix Coramy'), ('getSourceBasePrice', 'Prix fournisseur'), ('composant_state', 'Etat')]</columns> - <css_class></css_class> - <default></default> - <default_params type="list">[('id', "''"), ('title', "''")]</default_params> - <description></description> - <domain_root_list type="list">[]</domain_root_list> - <domain_tree type="int">0</domain_tree> - <editable type="int">1</editable> - <editable_columns type="list">[]</editable_columns> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <global_attributes type="list">[]</global_attributes> - <hidden type="int">0</hidden> - <lines type="int">30</lines> - <list_action>list</list_action> - <list_method type="method">portal_catalog</list_method> - <meta_types type="list">[]</meta_types> - <portal_types type="list">[('Tissu', 'Tissu')]</portal_types> - <report_root_list type="list">[]</report_root_list> - <report_tree type="int">0</report_tree> - <search type="int">1</search> - <search_columns type="list">[]</search_columns> - <select type="int">1</select> - <selection_name>tissu_selection</selection_name> - <sort type="list">[('id', 'id')]</sort> - <sort_columns></sort_columns> - <stat_method></stat_method> - <title>Tissus</title> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - </messages> - </field> - </fields> - </group> - </groups> -</form> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_pdm/tissu_list_export.py b/product/Coramy/skins/coramy_pdm/tissu_list_export.py deleted file mode 100755 index 3180ddeb42..0000000000 --- a/product/Coramy/skins/coramy_pdm/tissu_list_export.py +++ /dev/null @@ -1,31 +0,0 @@ -## Script (Python) "tissu_list_export" -##bind container=container -##bind context=context -##bind namespace= -##bind script=script -##bind subpath=traverse_subpath -##parameters= -##title= -## -selection = context.portal_selections.getSelectionFor('tissu_selection',REQUEST=context.REQUEST) -tissu_list = selection(context=context) -request = context.REQUEST -tab = '\t' -cr = '\n' - -export ="Référence"+tab+"Fournisseur"+tab+"Réf. Fournisseur"+tab+"Collection"+tab+"Description"+cr -for tissu_item in tissu_list: - tissu=tissu_item.getObject() - if tissu <> None : - ligne_tissu = '' - ligne_tissu += str(tissu.getId())+tab - ligne_tissu += str(tissu.getDefaultSourceTitle())+tab - ligne_tissu += str(tissu.getSourceReference())+tab - ligne_tissu += str(tissu.getCollection())+tab - ligne_tissu += str(tissu.getDescription())+tab - - export += ligne_tissu+cr - -request.RESPONSE.setHeader('Content-Type','application/text') - -return export diff --git a/product/Coramy/skins/coramy_pdm/tissu_list_sort_on.form b/product/Coramy/skins/coramy_pdm/tissu_list_sort_on.form deleted file mode 100755 index cd9979e805..0000000000 --- a/product/Coramy/skins/coramy_pdm/tissu_list_sort_on.form +++ /dev/null @@ -1,50 +0,0 @@ -<?xml version="1.0"?> - -<form> - <title>Trier</title> - <row_length>4</row_length> - <name>modele_list_sort_on</name> - <pt>form_sort</pt> - <action>base_sort_on</action> - <method>POST</method> - <enctype></enctype> - <encoding>UTF-8</encoding> - <stored_encoding>ISO-8859-1</stored_encoding> - <unicode_mode>false</unicode_mode> - <groups> - <group> - <title>Default</title> - <fields> - - <field><id>sort_order</id> <type>ListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <extra_item></extra_item> - <first_item type="int">0</first_item> - <hidden type="int">0</hidden> - <items type="list">[('Ascending', 'ascending'), ('Descending', 'descending')]</items> - <required type="int">1</required> - <size type="int">1</size> - <title>sort_order</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - </fields> - </group> - </groups> -</form> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_pdm/tissu_list_ui.form b/product/Coramy/skins/coramy_pdm/tissu_list_ui.form deleted file mode 100755 index 21fb15a2cf..0000000000 --- a/product/Coramy/skins/coramy_pdm/tissu_list_ui.form +++ /dev/null @@ -1,28 +0,0 @@ -<?xml version="1.0"?> - -<form> - <title>Enregistrer les paramètres</title> - <row_length>4</row_length> - <name>tissu_list_ui</name> - <pt>form_list_ui</pt> - <action>base_list_ui</action> - <method>POST</method> - <enctype></enctype> - <encoding>UTF-8</encoding> - <stored_encoding>ISO-8859-1</stored_encoding> - <unicode_mode>false</unicode_mode> - <groups> - <group> - <title>left</title> - <fields> - - </fields> - </group> - <group> - <title>right</title> - <fields> - - </fields> - </group> - </groups> -</form> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_pdm/tissu_search.form b/product/Coramy/skins/coramy_pdm/tissu_search.form deleted file mode 100755 index ed97c15124..0000000000 --- a/product/Coramy/skins/coramy_pdm/tissu_search.form +++ /dev/null @@ -1,112 +0,0 @@ -<?xml version="1.0"?> - -<form> - <title>Rechercher</title> - <row_length>4</row_length> - <name>search</name> - <pt>form_dialog</pt> - <action>tissu_list</action> - <method>POST</method> - <enctype></enctype> - <encoding>UTF-8</encoding> - <stored_encoding>ISO-8859-1</stored_encoding> - <unicode_mode>false</unicode_mode> - <groups> - <group> - <title>left</title> - <fields> - - <field><id>my_id</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default>%</default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">60</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <max_length></max_length> - <required type="int">1</required> - <title>Tissu</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - <field><id>my_description</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default>%</default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">60</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <max_length></max_length> - <required type="int">1</required> - <title>Description</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - <field><id>my_source_reference</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default>%</default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">60</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <max_length></max_length> - <required type="int">1</required> - <title>Référence fournisseur</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>right</title> - <fields> - - </fields> - </group> - </groups> -</form> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_pdm/tissu_variante_view.pt b/product/Coramy/skins/coramy_pdm/tissu_variante_view.pt deleted file mode 100755 index 204d1f0458..0000000000 --- a/product/Coramy/skins/coramy_pdm/tissu_variante_view.pt +++ /dev/null @@ -1,56 +0,0 @@ -<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" - "DTD/xhtml1-strict.dtd"> -<?xml-stylesheet href="erp5.css" rel="stylesheet" type="text/css"?> - -<span tal:replace="nothing"> -<!-- -Copyright (c) 2002 Nexedi SARL and Contributors. All Rights Reserved. - Thierry Faucher <tf@nexedi.com> - -This program is Free Software; you can redistribute it and/or -modify it under the terms of the GNU General Public License -as published by the Free Software Foundation; either version 2 -of the License, or (at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program; if not, write to the Free Software -Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. ---> -</span> - -<html xmlns="http://www.w3.org/1999/xhtml" lang="en" - xml:lang="en" - xmlns:tal="http://xml.zope.org/namespaces/tal" - xmlns:metal="http://xml.zope.org/namespaces/metal" - metal:use-macro="here/view_master/macros/master"> - - <head> - <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /> - <title tal:content="template/title_or_id">The title</title> - <link href="erp5.css" rel="stylesheet" type="text/css"/> - </head> - - <body><div metal:fill-slot="main"> - <div class="Main"> - -<br> - -<table border=1> - <tr align=center> - <td></td> - </tr> - <tr> - <td> - </td> - </tr> -</table> - - </div> - </div> - </body> -</html> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_pdm/tissu_view.form b/product/Coramy/skins/coramy_pdm/tissu_view.form deleted file mode 100755 index 4108eedabe..0000000000 --- a/product/Coramy/skins/coramy_pdm/tissu_view.form +++ /dev/null @@ -1,649 +0,0 @@ -<?xml version="1.0"?> - -<form> - <title>Tissu</title> - <row_length>4</row_length> - <name>tissu_view</name> - <pt>form_view</pt> - <action>base_edit</action> - <method>POST</method> - <enctype>multipart/form-data</enctype> - <encoding>UTF-8</encoding> - <stored_encoding>ISO-8859-1</stored_encoding> - <unicode_mode>false</unicode_mode> - <groups> - <group> - <title>left</title> - <fields> - - <field><id>my_id</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <max_length></max_length> - <required type="int">1</required> - <title>Tissu</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - <field><id>my_source_title</id> <type>RelationStringField</type> - <values> - <alternate_name></alternate_name> - <base_category>source</base_category> - <catalog_index>Title</catalog_index> - <css_class></css_class> - <default></default> - <default_module>organisation</default_module> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <jump_method>base_jump_relation</jump_method> - <max_length></max_length> - <portal_type type="list">[('Organisation', 'Organisation')]</portal_type> - <required type="int">0</required> - <title>Fournisseur</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <update_method>base_update_relation</update_method> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - <field><id>my_source_reference</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <max_length></max_length> - <required type="int">0</required> - <title>Référence fournisseur</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - <field><id>my_categorie_tissu</id> <type>ListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <extra_item></extra_item> - <first_item type="int">0</first_item> - <hidden type="int">0</hidden> - <items type="list">[]</items> - <required type="int">0</required> - <size type="int">1</size> - <title>Type tissu</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <items>here/portal_categories/categorie_tissu/getFormItemList</items> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - <field><id>my_motif</id> <type>ListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <extra_item></extra_item> - <first_item type="int">0</first_item> - <hidden type="int">0</hidden> - <items type="list">[]</items> - <required type="int">0</required> - <size type="int">1</size> - <title>Motif</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <items>here/portal_categories/motif/getFormItemList</items> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - <field><id>my_description</id> <type>TextAreaField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <height type="int">3</height> - <hidden type="int">0</hidden> - <max_length></max_length> - <max_linelength></max_linelength> - <max_lines></max_lines> - <required type="int">0</required> - <title>Description</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - <width type="int">40</width> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_many_lines">You entered too many lines.</message> - <message name="line_too_long">A line was too long.</message> - <message name="too_long">You entered too many characters.</message> - </messages> - </field> - <field><id>my_source_base_price</id> <type>FloatField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <required type="int">0</required> - <title>Prix fournisseur</title> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="not_float">You did not enter a floating point number.</message> - </messages> - </field> - <field><id>my_base_price</id> <type>FloatField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <required type="int">0</required> - <title>Prix Coramy</title> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="not_float">You did not enter a floating point number.</message> - </messages> - </field> - <field><id>my_source_base_price_validity</id> <type>DateTimeField</type> - <values> - <allow_empty_time type="int">0</allow_empty_time> - <alternate_name></alternate_name> - <ampm_time_style type="int">0</ampm_time_style> - <css_class></css_class> - <date_only type="int">1</date_only> - <date_separator>/</date_separator> - <default_now type="int">0</default_now> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <hidden type="int">0</hidden> - <input_order>dmy</input_order> - <input_style>text</input_style> - <required type="int">0</required> - <time_separator>:</time_separator> - <title>Validité du prix</title> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="not_datetime">You did not enter a valid date and time.</message> - <message name="datetime_out_of_range">The date and time you entered were out of range.</message> - </messages> - </field> - <field><id>my_quantity_unit</id> <type>ListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <extra_item></extra_item> - <first_item type="int">0</first_item> - <hidden type="int">0</hidden> - <items type="list">[]</items> - <required type="int">0</required> - <size type="int">1</size> - <title>Unité de gestion</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <items>here/portal_categories/quantity_unit/getFormItemList</items> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - <field><id>my_nb_couleurs</id> <type>IntegerField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <end></end> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <required type="int">0</required> - <start></start> - <title>Nombre de couleurs</title> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="not_integer">You did not enter an integer.</message> - <message name="integer_out_of_range">The integer you entered was out of range.</message> - </messages> - </field> - <field><id>composant_state</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <max_length></max_length> - <required type="int">0</required> - <title>Etat</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <default>python:here.portal_workflow.getInfoFor(here, 'composant_state')</default> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>right</title> - <fields> - - <field><id>my_collection_list</id> <type>MultiListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default type="list">[]</default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <extra_item></extra_item> - <hidden type="int">0</hidden> - <items type="list">[]</items> - <required type="int">0</required> - <size type="int">5</size> - <title>Collection</title> - <unicode type="int">0</unicode> - <view_separator><br /> -</view_separator> - </values> - <tales> - <default>here/getCollectionList</default> - <items>here/portal_categories/collection/getFormItemList</items> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - <field><id>my_eip_list</id> <type>MultiListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default type="list">[]</default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <extra_item></extra_item> - <hidden type="int">0</hidden> - <items type="list">[]</items> - <required type="int">0</required> - <size type="int">5</size> - <title>Famille</title> - <unicode type="int">0</unicode> - <view_separator><br /> -</view_separator> - </values> - <tales> - <default>here/getEipList</default> - <items>here/portal_categories/eip/getFormItemList</items> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - <field><id>my_composition_list</id> <type>MultiListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default type="list">[]</default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <extra_item></extra_item> - <hidden type="int">0</hidden> - <items type="list">[]</items> - <required type="int">0</required> - <size type="int">5</size> - <title>Composition</title> - <unicode type="int">0</unicode> - <view_separator><br /> -</view_separator> - </values> - <tales> - <default>here/getCompositionList</default> - <items>here/portal_categories/composition/getFormItemList</items> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - <field><id>my_code_entretien_list</id> <type>MultiListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default type="list">[]</default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <extra_item></extra_item> - <hidden type="int">0</hidden> - <items type="list">[]</items> - <required type="int">0</required> - <size type="int">3</size> - <title>Entretien</title> - <unicode type="int">0</unicode> - <view_separator><br /> -</view_separator> - </values> - <tales> - <items>here/portal_categories/code_entretien/getFormItemList</items> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - <field><id>my_laize_totale</id> <type>FloatField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <required type="int">0</required> - <title>Laize totale (cm)</title> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="not_float">You did not enter a floating point number.</message> - </messages> - </field> - <field><id>my_laize_utile</id> <type>FloatField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <required type="int">0</required> - <title>Laize utile (cm)</title> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="not_float">You did not enter a floating point number.</message> - </messages> - </field> - <field><id>my_base_weight</id> <type>FloatField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <required type="int">0</required> - <title>Poids (g/m2)</title> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="not_float">You did not enter a floating point number.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>center</title> - <fields> - - <field><id>my_commentaires</id> <type>TextAreaField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <height type="int">3</height> - <hidden type="int">0</hidden> - <max_length></max_length> - <max_linelength></max_linelength> - <max_lines></max_lines> - <required type="int">0</required> - <title>Commentaires</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - <width type="int">80</width> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_many_lines">You entered too many lines.</message> - <message name="line_too_long">A line was too long.</message> - <message name="too_long">You entered too many characters.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>bottom</title> - <fields> - - <field><id>listbox</id> <type>ListBox</type> - <values> - <all_columns type="list">[('id', 'Variante'), ('description', 'Description')]</all_columns> - <all_editable_columns type="list">[]</all_editable_columns> - <alternate_name></alternate_name> - <columns type="list">[('id', 'Variante'), ('description', 'Description')]</columns> - <css_class></css_class> - <default></default> - <default_params type="list">[('id', "''"), ('description', "''"), ('portal_type', "''")]</default_params> - <description></description> - <domain_root_list type="list">[]</domain_root_list> - <domain_tree type="int">0</domain_tree> - <editable type="int">1</editable> - <editable_columns type="list">[]</editable_columns> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <global_attributes type="list">[]</global_attributes> - <hidden type="int">0</hidden> - <lines type="int">30</lines> - <list_action>list</list_action> - <list_method type="method">searchFolder</list_method> - <meta_types type="list">[]</meta_types> - <portal_types type="list">[]</portal_types> - <report_root_list type="list">[]</report_root_list> - <report_tree type="int">0</report_tree> - <search type="int">0</search> - <search_columns></search_columns> - <select type="int">0</select> - <selection_name>variantes</selection_name> - <sort type="list">[('id', 'id')]</sort> - <sort_columns></sort_columns> - <stat_method></stat_method> - <title>Variantes</title> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - </messages> - </field> - </fields> - </group> - </groups> -</form> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_pdm/transformation_aggregated_view.form b/product/Coramy/skins/coramy_pdm/transformation_aggregated_view.form deleted file mode 100755 index 38ec6a47b4..0000000000 --- a/product/Coramy/skins/coramy_pdm/transformation_aggregated_view.form +++ /dev/null @@ -1,140 +0,0 @@ -<?xml version="1.0"?> - -<form> - <title>Transformation</title> - <row_length>4</row_length> - <name>transformation_view</name> - <pt>form_view</pt> - <action>base_edit</action> - <method>POST</method> - <enctype>multipart/form-data</enctype> - <encoding>UTF-8</encoding> - <stored_encoding>ISO-8859-1</stored_encoding> - <unicode_mode>false</unicode_mode> - <groups> - <group> - <title>left</title> - <fields> - - </fields> - </group> - <group> - <title>right</title> - <fields> - - </fields> - </group> - <group> - <title>center</title> - <fields> - - </fields> - </group> - <group> - <title>bottom</title> - <fields> - - <field><id>listbox</id> <type>ListBox</type> - <values> - <all_columns type="list">[('id', 'Ligne'), ('Description', 'Description'), ('getResourceRelativeUrl', 'Ressource consomm\xe9e'), ('quantity', 'Quantit\xe9'), ('quantity_unit', 'Unit\xe9')]</all_columns> - <all_editable_columns type="list">[('quantity', 'Quantit\xe9'), ('quantity_unit', 'Unit\xe9')]</all_editable_columns> - <alternate_name></alternate_name> - <columns type="list">[('id', 'Ligne'), ('Description', 'Description'), ('getResourceRelativeUrl', 'Ressource consomm\xe9e'), ('quantity', 'Quantit\xe9'), ('quantity_unit', 'Unit\xe9')]</columns> - <css_class></css_class> - <default></default> - <default_params type="list">[]</default_params> - <description></description> - <domain_root_list type="list">[]</domain_root_list> - <domain_tree type="int">0</domain_tree> - <editable type="int">1</editable> - <editable_columns type="list">[('quantity', 'Quantit\xe9'), ('quantity_unit', 'Unit\xe9')]</editable_columns> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <global_attributes></global_attributes> - <hidden type="int">0</hidden> - <lines type="int">10</lines> - <list_action>folder_contents</list_action> - <list_method type="method">searchFolder</list_method> - <meta_types type="list">[]</meta_types> - <portal_types type="list">[('Transformation Component', 'Transformation Component')]</portal_types> - <report_root_list type="list">[]</report_root_list> - <report_tree type="int">0</report_tree> - <search type="int">0</search> - <search_columns></search_columns> - <select type="int">0</select> - <selection_name>transformed_resource_selection</selection_name> - <sort type="list">[]</sort> - <sort_columns></sort_columns> - <stat_method></stat_method> - <title>Consommations</title> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>hidden</title> - <fields> - - <field><id>listbox_quantity</id> <type>FloatField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <required type="int">0</required> - <title>listbox_quantity</title> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="not_float">You did not enter a floating point number.</message> - </messages> - </field> - <field><id>listbox_quantity_unit</id> <type>ListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <extra_item></extra_item> - <first_item type="int">0</first_item> - <hidden type="int">0</hidden> - <items type="list">[]</items> - <required type="int">0</required> - <size type="int">1</size> - <title>Unité</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <items>here/portal_categories/quantity_unit/getFormItemList</items> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - </fields> - </group> - </groups> -</form> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_pdm/transformation_assorted_view.form b/product/Coramy/skins/coramy_pdm/transformation_assorted_view.form deleted file mode 100755 index 43a723ab0f..0000000000 --- a/product/Coramy/skins/coramy_pdm/transformation_assorted_view.form +++ /dev/null @@ -1,505 +0,0 @@ -<?xml version="1.0"?> - -<form> - <title></title> - <row_length>4</row_length> - <name>Edit Transformation</name> - <pt>form_view</pt> - <action>base_edit</action> - <method>POST</method> - <enctype>multipart/form-data</enctype> - <encoding>UTF-8</encoding> - <stored_encoding>ISO-8859-1</stored_encoding> - <unicode_mode>false</unicode_mode> - <groups> - <group> - <title>Default</title> - <fields> - - <field><id>my_id</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <max_length></max_length> - <required type="int">1</required> - <title>Transformation</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - <field><id>my_description</id> <type>TextAreaField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <height type="int">4</height> - <hidden type="int">0</hidden> - <max_length></max_length> - <max_linelength></max_linelength> - <max_lines></max_lines> - <required type="int">0</required> - <title>Description</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - <width type="int">40</width> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_many_lines">You entered too many lines.</message> - <message name="line_too_long">A line was too long.</message> - <message name="too_long">You entered too many characters.</message> - </messages> - </field> - <field><id>my_resource_url</id> <type>RelationStringField</type> - <values> - <alternate_name></alternate_name> - <base_category>resource</base_category> - <catalog_index>relative_url</catalog_index> - <css_class></css_class> - <default></default> - <default_module>composant</default_module> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">40</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <jump_method>base_jump_relation</jump_method> - <max_length></max_length> - <portal_type type="list">[('Resource', 'Resource'), ('Composant', 'Resource'), ('Modele', 'Modele'), ('Tissu', 'Tissu'), ('Category', 'Category'), ('Gamme', 'Gamme'), ('Vetement', 'Vetement'), ('Forme', 'Forme')]</portal_type> - <required type="int">0</required> - <title>Produit principal</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <update_method>base_update_relation</update_method> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - <field><id>my_default_domain_base_category</id> <type>ListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <extra_item></extra_item> - <first_item type="int">0</first_item> - <hidden type="int">0</hidden> - <items type="list">[]</items> - <required type="int">0</required> - <size type="int">1</size> - <title>Axe d'état</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <items>python: [''] + list(here.getVariationRangeBaseCategoryList())</items> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - <field><id>my_transformation_state</id> <type>ListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <extra_item></extra_item> - <first_item type="int">0</first_item> - <hidden type="int">0</hidden> - <items type="list">[]</items> - <required type="int">0</required> - <size type="int">1</size> - <title>Stade de production</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <items>here/portal_categories/transformation_state/getFormItemList</items> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - <field><id>my_template_transformation_id_list</id> <type>MultiRelationStringField</type> - <values> - <alternate_name></alternate_name> - <base_category>specialise</base_category> - <catalog_index>id</catalog_index> - <css_class></css_class> - <default type="list">[]</default> - <default_module>transformation</default_module> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <height type="int">3</height> - <hidden type="int">0</hidden> - <jump_method>base_jump_relation</jump_method> - <max_length></max_length> - <max_linelength></max_linelength> - <max_lines></max_lines> - <portal_type type="list">[('Transformation', 'Transformation')]</portal_type> - <required type="int">0</required> - <title>Transformations utilisées</title> - <unicode type="int">0</unicode> - <update_method>base_update_relation</update_method> - <view_separator><br /> -</view_separator> - <whitespace_preserve type="int">0</whitespace_preserve> - <width type="int">40</width> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_many_lines">You entered too many lines.</message> - <message name="line_too_long">A line was too long.</message> - <message name="too_long">You entered too many characters.</message> - </messages> - </field> - <field><id>transform_state</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <max_length></max_length> - <required type="int">0</required> - <title>Etat</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <default>python:here.portal_workflow.getInfoFor(here, 'transform_state')</default> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>right</title> - <fields> - - <field><id>my_variation_base_category_list</id> <type>MultiListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default type="list">[]</default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <extra_item></extra_item> - <hidden type="int">0</hidden> - <items type="list">[]</items> - <required type="int">0</required> - <size type="int">3</size> - <title>Axes de variantage</title> - <unicode type="int">0</unicode> - <view_separator><br /> -</view_separator> - </values> - <tales> - <items>here/getTransformationVariationRangeBaseCategoryItemList</items> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - <field><id>my_variation_category_list</id> <type>MultiListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default type="list">[]</default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <extra_item></extra_item> - <hidden type="int">0</hidden> - <items type="list">[]</items> - <required type="int">0</required> - <size type="int">5</size> - <title>Variantes possibles</title> - <unicode type="int">0</unicode> - <view_separator><br /> -</view_separator> - </values> - <tales> - <default>here/getVariationCategoryList</default> - <items>here/getVariationRangeCategoryItemList</items> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - <field><id>my_variation_base_category_line</id> <type>ListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <extra_item></extra_item> - <first_item type="int">0</first_item> - <hidden type="int">0</hidden> - <items type="list">[]</items> - <required type="int">0</required> - <size type="int">1</size> - <title>Affichage en lignes</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <items>here/getTransformationVariationRangeBaseCategoryItemList</items> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - <field><id>my_variation_base_category_column</id> <type>ListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <extra_item></extra_item> - <first_item type="int">0</first_item> - <hidden type="int">0</hidden> - <items type="list">[]</items> - <required type="int">0</required> - <size type="int">1</size> - <title>Affichage en colonnes</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <items>here/getTransformationVariationRangeBaseCategoryItemList</items> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - <field><id>my_variation_base_category_tab</id> <type>MultiListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default type="list">[]</default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <extra_item></extra_item> - <hidden type="int">0</hidden> - <items type="list">[]</items> - <required type="int">0</required> - <size type="int">3</size> - <title>Affichage en tableaux</title> - <unicode type="int">0</unicode> - <view_separator><br /> -</view_separator> - </values> - <tales> - <items>here/getTransformationVariationRangeBaseCategoryItemList</items> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>center</title> - <fields> - - </fields> - </group> - <group> - <title>bottom</title> - <fields> - - <field><id>listbox</id> <type>ListBox</type> - <values> - <all_columns type="list">[('id', 'Ligne'), ('Description', 'Description'), ('getResourceRelativeUrl', 'Composant'), ('quantity', 'Quantit\xe9'), ('quantity_unit', 'Unit\xe9')]</all_columns> - <all_editable_columns type="list">[('quantity', 'Quantit\xe9'), ('quantity_unit', 'Unit\xe9')]</all_editable_columns> - <alternate_name></alternate_name> - <columns type="list">[('id', 'Ligne'), ('Description', 'Description'), ('getResourceRelativeUrl', 'Composant'), ('quantity', 'Quantit\xe9'), ('quantity_unit', 'Unit\xe9')]</columns> - <css_class></css_class> - <default></default> - <default_params type="list">[]</default_params> - <description></description> - <domain_root_list type="list">[]</domain_root_list> - <domain_tree type="int">0</domain_tree> - <editable type="int">1</editable> - <editable_columns type="list">[('quantity', 'Quantit\xe9'), ('quantity_unit', 'Unit\xe9')]</editable_columns> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <global_attributes type="list">[]</global_attributes> - <hidden type="int">0</hidden> - <lines type="int">10</lines> - <list_action>folder_contents</list_action> - <list_method type="method">searchFolder</list_method> - <meta_types type="list">[]</meta_types> - <portal_types type="list">[('Assorted Component', 'Assorted Component')]</portal_types> - <report_root_list type="list">[]</report_root_list> - <report_tree type="int">0</report_tree> - <search type="int">0</search> - <search_columns type="list">[]</search_columns> - <select type="int">0</select> - <selection_name>assorted_resource_selection</selection_name> - <sort type="list">[('id', 'id')]</sort> - <sort_columns></sort_columns> - <stat_method></stat_method> - <title>Composants assortis</title> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>hidden</title> - <fields> - - <field><id>listbox_quantity</id> <type>FloatField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <required type="int">0</required> - <title>listbox_quantity</title> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="not_float">You did not enter a floating point number.</message> - </messages> - </field> - <field><id>listbox_quantity_unit</id> <type>ListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <extra_item></extra_item> - <first_item type="int">0</first_item> - <hidden type="int">0</hidden> - <items type="list">[]</items> - <required type="int">0</required> - <size type="int">1</size> - <title>Unité</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <items>here/portal_categories/quantity_unit/getFormItemList</items> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - </fields> - </group> - </groups> -</form> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_pdm/transformation_consommation_update.py b/product/Coramy/skins/coramy_pdm/transformation_consommation_update.py deleted file mode 100755 index 6ca95a4c1b..0000000000 --- a/product/Coramy/skins/coramy_pdm/transformation_consommation_update.py +++ /dev/null @@ -1,47 +0,0 @@ -## Script (Python) "transformation_consommation_update" -##bind container=container -##bind context=context -##bind namespace= -##bind script=script -##bind subpath=traverse_subpath -##parameters=reference_taille, quantity, form_id -##title= -## -l_items = context.getQLineItemList() -l_items = map(lambda x: x[0], l_items) -c_items = context.getQColumnItemList() -c_items = map(lambda x: x[0], c_items) -grille = context.getDefaultValue('specialise', portal_type=('Grille Consommation',)) -request = context.REQUEST -quantity = float(quantity) - -for i in l_items: - for j in c_items: - try: - cell = grille.getCell(reference_taille[7:], j[7:], base_id='quantity') - if cell is None: - return "Erreur à signaler à TB/JPS %s %s %s:" % (grille.getUrl(), reference_taille[7:], j[7:]) - default_quantity = float(cell.quantity) - except: - default_quantity = None - if default_quantity is not None: - cell = context.newCell(i, j, base_id='quantity') - new_quantity = default_quantity * quantity - cell.edit(mapped_value_property_list = ['quantity'], - quantity = new_quantity, force_update=1) - else: - cell = context.newCell(i, j, base_id='quantity') - cell.edit(mapped_value_property_list = ['quantity'], - quantity = 99999.999) - -# Required to set Mapped Value Parameters -# This is a bit simple but it works -# Another method consists in setting by hand each cell, but that is a bit -# like repeating the same code again and again -context.fixConsistency() - -redirect_url = '%s/%s?%s' % ( context.absolute_url() - , form_id - , 'portal_status_message=Grille+Consommation+Updated.' - ) -return request[ 'RESPONSE' ].redirect( redirect_url ) diff --git a/product/Coramy/skins/coramy_pdm/transformation_consommation_update_form.form b/product/Coramy/skins/coramy_pdm/transformation_consommation_update_form.form deleted file mode 100755 index 01fdb17316..0000000000 --- a/product/Coramy/skins/coramy_pdm/transformation_consommation_update_form.form +++ /dev/null @@ -1,77 +0,0 @@ -<?xml version="1.0"?> - -<form> - <title>Update</title> - <row_length>4</row_length> - <name>consommation_update_form</name> - <pt>form_view_dialog</pt> - <action>transformation_consommation_update</action> - <method>POST</method> - <enctype>multipart/form-data</enctype> - <encoding>UTF-8</encoding> - <stored_encoding>ISO-8859-1</stored_encoding> - <unicode_mode>false</unicode_mode> - <groups> - <group> - <title>Default</title> - <fields> - - <field><id>my_reference_taille</id> <type>ListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <extra_item></extra_item> - <first_item type="int">0</first_item> - <hidden type="int">0</hidden> - <items type="list">[]</items> - <required type="int">1</required> - <size type="int">5</size> - <title>Taille de réference</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <items>here/getQColumnItemList</items> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - <field><id>my_quantity</id> <type>FloatField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <required type="int">1</required> - <title>Quantité</title> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <default>here/getQuantity</default> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="not_float">You did not enter a floating point number.</message> - </messages> - </field> - </fields> - </group> - </groups> -</form> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_pdm/transformation_correspondances_print.pt b/product/Coramy/skins/coramy_pdm/transformation_correspondances_print.pt deleted file mode 100755 index 10897cfcd4..0000000000 --- a/product/Coramy/skins/coramy_pdm/transformation_correspondances_print.pt +++ /dev/null @@ -1,138 +0,0 @@ -<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> - -<html> - - <head> - <meta http-equiv="content-type" content="text/html;charset=ISO-8859-1"> - <title tal:content="here/getTitle">Coramy</title> - <link rel=stylesheet type="text/css" href="modele_catalog_c"> - </head> - - <body bgcolor="#ffffff" tal:define="transformation_list python:here.object_action_list(selection_name='transformation_selection',max_nb=20)"> - <TABLE tal:repeat="transformation transformation_list" width="660" height="955" cellpadding="0" cellspacing="0" class="PageA4"> -<table width="675" border="0" cellpadding="0" cellspacing="0" - tal:define="transformed_resource_list python:transformation.Transformation_getAllTransformedResource()"> - <tr> <!-- Ligne Titre --> - <td><img src="spacer1.png" width="1" height="1"></td> - <td> <div align="center"> - <p><font size="+3" color="red"><span tal:replace="python:'Transformation : %s' %transformation.getId()">Modèle - </span></font></p> - </div></td> - <td><img src="spacer1.png" width="1" height="1"></td> - </tr> - <tr> <!-- Border-top info --> - <td class="line"><img src="spacer.png" width="1" height="1"></td> - <td class="line"><img src="spacer.png" width="673" height="1"></td> - <td class="line"><img src="spacer.png" width="1" height="1"></td> - </tr> - <tr> <!-- Info --> - <td class="line"><img src="spacer.png" width="1" height="100%"></td> - <td><table class="border" width="100%"> - - </table></td> - <td class="line"><img src="spacer.png" width="1" height="100%"></td> - </tr> - <tr> <!-- Border Bottom info --> - <td class="line"><img src="spacer.png" width="1" height="1"></td> - <td><img src="spacer.png" width="673" height="1"></td> - <td class="line"><img src="spacer.png" width="1" height="1"></td> - </tr> - <tr> <!-- spacer --> - <td><img src="spacer1.png" width="1" height="1"></td> - <td><img src="spacer1.png" width="1" height="1"></td> - <td><img src="spacer1.png" width="1" height="1"></td> - </tr> - <tr> <!-- Border Top Ligne commande --> - <td><img src="spacer.png" width="1" height="1"></td> - <td><img src="spacer.png" width="673" height="1"></td> - <td><img src="spacer.png" width="1" height="1"></td> - </tr> - <tr> <!-- Ligne commande --> - <td><img src="spacer.png" width="1" height="100%"></td> - <td> - - <table class="border" border="1"> - <tr> - <th> - Composant - </th> - <th> - Description - </th> - <th> - Quantité - </th> - <th> - Unité - </th> - </tr> - <span tal:repeat="transformed_resource transformed_resource_list"> - <tr> - <td rowspan="3" valign="top"><b tal:content="python:transformed_resource.getResource()"> - The resource name - </b></td> - <td colspan="3" tal:content="python:transformed_resource.getDescription()"> - The description - </td> - </tr> - <tr> - <td tal:content="python:transformed_resource.getTransformationSubpart()"> - The transformation_subpart - </td> - <td align="right" tal:content="python: '%.2f' %(transformed_resource.getQuantity(0)/transformed_resource.getEfficiency(1))"> - The quantity - </td> - <td tal:define="unit_items python:transformed_resource.getQuantityUnit().split('/')" - tal:content="python:unit_items[len(unit_items)-1]"> - The quantity unit - </td> - </tr> - <tr> - <td colspan="3" > - <table class="border" border="0" width="100%" - tal:define="correspondances_list python:transformed_resource.TransformedComponent_getCorrespondanceList()"> - <tr tal:condition="python:len(correspondances_list)==0"> - <td> - <span tal:repeat="variation_item python:transformed_resource.getVariationCategoryList()"> - <font size="-1" tal:content="python:'- '+variation_item"/> - </span> - </td> - </tr> - <tr tal:repeat="correspondance correspondances_list"> - <td valign="top"><font size="-1" tal:content="python:correspondance[0]"> - The resource variation</font> - </td> - - <td valign="top"> - <span tal:condition="python:correspondance[1]<>''"> - <font size="-1" tal:content="python: '%.2f' %(float(correspondance[1])/transformed_resource.getEfficiency())"> - </font> - </span> - </td> - <td valign="top"><font size="-1" tal:content="python:correspondance[2]"> - The component variation</font> - </td> - </tr> - </table> - </td> - </tr> - </span> - </table> - - <br> - -</td> - <td><img src="spacer.png" width="1" height="100%"></td> - </tr> - <tr> <!-- Border Bottom Ligne commande --> - <td><img src="spacer.png" width="1" height="1"></td> - <td><img src="spacer.png" width="673" height="1"></td> - <td><img src="spacer.png" width="1" height="1"></td> - </tr> - -</table> -</table> - -</body> - -</html> diff --git a/product/Coramy/skins/coramy_pdm/transformation_expanded_view.pt b/product/Coramy/skins/coramy_pdm/transformation_expanded_view.pt deleted file mode 100755 index 3a4f56010b..0000000000 --- a/product/Coramy/skins/coramy_pdm/transformation_expanded_view.pt +++ /dev/null @@ -1,182 +0,0 @@ -<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" - "DTD/xhtml1-strict.dtd"> -<?xml-stylesheet href="erp5.css" rel="stylesheet" type="text/css"?> - -<span tal:replace="nothing"> -<!-- -Copyright (c) 2002 Nexedi SARL and Contributors. All Rights Reserved. - Jean-Paul Smets <jp@nexedi.com> - -This program is Free Software; you can redistribute it and/or -modify it under the terms of the GNU General Public License -as published by the Free Software Foundation; either version 2 -of the License, or (at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program; if not, write to the Free Software -Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. ---> -</span> - -<html xmlns="http://www.w3.org/1999/xhtml" lang="en" - xml:lang="en" - xmlns:tal="http://xml.zope.org/namespaces/tal" - xmlns:metal="http://xml.zope.org/namespaces/metal" - metal:use-macro="here/main_template/macros/master"> - - <head> - <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /> - <title tal:content="template/title_or_id">The title</title> - <link href="erp5.css" rel="stylesheet" type="text/css"/> - </head> - - <body><div metal:fill-slot="main"> - <div class="Main"> - -<span tal:repeat="reference_taille python:here.getExpandedViewVariationList(request,'reference_taille_list')"> - <span tal:repeat="reference_coloris python:here.getExpandedViewVariationList(request,'reference_coloris_list')"> - <span tal:repeat="reference_morphologie python:here.getExpandedViewVariationList(request,'reference_morphologie_list')"> - Détail de la transformation <strong><span tal:replace="reference_coloris"/></strong> - - taille <strong><span tal:replace="reference_taille"/></strong> - - morphologie <strong><span tal:replace="reference_morphologie"/></strong><br><br> - <font size="-2"> - - <table border="1"> - <tr> - <th> - Transformation - </th> - <th> - Composant/Opération - </th> - <th> - Description - </th> - <th> - Quantité saisie - </th> - <th> - Unité saisie - </th> - <th> - Quantité convertie - </th> - <th> - Unité composant - </th> - <th> - Prix unitaire - </th> - <th> - Temps - </th> - <th> - Efficience - </th> - <th> - Prix total - </th> - <th> - Origine prix - </th> - <th> - Origine quantité - </th> - <th> - Origine variante - </th> - <th> - Erreurs - </th> - </tr> - <span tal:define="test_request python:here.expandedViewRequestBuilder( - reference_taille=reference_taille, - reference_coloris=reference_coloris, - reference_morphologie=reference_morphologie); - summary python:here.getAggregatedAmountList(REQUEST=test_request); - grand_total_base_price python:'%.3f' % summary[1]; - grand_total_source_base_price python:'%.3f' % summary[2]; - grand_total_duration python:'%.3f' % summary[3]; - grand_total_duration_france python:'%.3f' % summary[4]"> - <tr tal:repeat="amount python:summary[0]"> - <td tal:content="amount/transformation_id"> - The Id of this transformation - </td> - <td> - <span tal:replace="amount/resource_relative_url">The url of this resource</span> - <i tal:condition="amount/pretty_variation" tal:content="structure amount/pretty_variation"> - </i> - </td> - <td tal:content="amount/description"> - The resource name - </td> - <td tal:content="python: '%.3f' % amount['quantity']"> - The resource quantity - </td> - <td tal:content="amount/quantity_unit"> - The item unit - </td> - <td tal:content="python: '%.3f' % amount['converted_quantity']"> - The resource unit - </td> - <td tal:content="amount/resource_quantity_unit | string:"> - The resource unit - </td> - <td tal:content="python: '%.3f' % amount['unit_base_price']"> - The resource price - </td> - <td tal:content="python: '%.3f' % amount['duration']"> - The resource duration - </td> - <td tal:content="python: '%.3f' % amount['efficiency']"> - The resource efficiency - </td> - <td tal:content="python: '%.3f' % amount['total_base_price']" > - The resource total price - </td> - <td tal:content="amount/base_price_defined_by"> - The price origin - </td> - <td tal:content="amount/quantity_defined_by"> - The quantity origin - </td> - <td tal:content="amount/variation_defined_by"> - The quantity origin - </td> - <td> - <span tal:condition="amount/error_list | nothing" - tal:replace="amount/error_list" /> - </td> - </tr> - <tr> - <th colspan="8" align="right"> - Total - </th> - <th> - <span tal:replace="grand_total_duration">Total Duration</span><br> - <i><span tal:replace="grand_total_duration_france">Total Duration for France</span></i> - </th> - <th> - </th> - <th colspan="4" tal:content="grand_total_base_price" align="left"> - Total Price - </th> - - </tr> - </span> - </table> - - </font> - <br> - </span> - </span> -</span> - </div> - </div> - </body> -</html> diff --git a/product/Coramy/skins/coramy_pdm/transformation_expanded_view2.pt b/product/Coramy/skins/coramy_pdm/transformation_expanded_view2.pt deleted file mode 100755 index 3a15be7929..0000000000 --- a/product/Coramy/skins/coramy_pdm/transformation_expanded_view2.pt +++ /dev/null @@ -1,167 +0,0 @@ -<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" - "DTD/xhtml1-strict.dtd"> -<?xml-stylesheet href="erp5.css" rel="stylesheet" type="text/css"?> - -<span tal:replace="nothing"> -<!-- -Copyright (c) 2002 Nexedi SARL and Contributors. All Rights Reserved. - Jean-Paul Smets <jp@nexedi.com> - -This program is Free Software; you can redistribute it and/or -modify it under the terms of the GNU General Public License -as published by the Free Software Foundation; either version 2 -of the License, or (at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program; if not, write to the Free Software -Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. ---> -</span> - -<html xmlns="http://www.w3.org/1999/xhtml" lang="en" - xml:lang="en" - xmlns:tal="http://xml.zope.org/namespaces/tal" - xmlns:metal="http://xml.zope.org/namespaces/metal" - metal:use-macro="here/main_template/macros/master"> - - <head> - <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /> - <title tal:content="template/title_or_id">The title</title> - <link href="erp5.css" rel="stylesheet" type="text/css"/> - </head> - - <body><div metal:fill-slot="main"> - <div class="Main"> - -<span tal:repeat="reference_taille python:request.reference_taille_list"> - <span tal:repeat="reference_coloris python:request.reference_coloris_list"> - Détail de la transformation <strong><span tal:replace="reference_coloris"/></strong> - taille <strong><span tal:replace="reference_taille"/></strong><br><br> - <font size="-2"> - - <table border="1"> - <tr> - <th> - Transformation - </th> - <th> - Composant/Opération - </th> - <th> - Description - </th> - <th> - Quantité saisie - </th> - <th> - Unité saisie - </th> - <th> - Quantité convertie - </th> - <th> - Unité composant - </th> - <th> - Prix unitaire - </th> - <th> - Temps - </th> - <th> - Efficience - </th> - <th> - Prix total - </th> - <th> - Origine prix - </th> - <th> - Origine quantité - </th> - <th> - Origine variante - </th> - </tr> - <span tal:define="test_request python:{'categories': ('taille/%s' % reference_taille,'coloris/%s' % reference_coloris)}; - summary python:here.getAggregatedSummary(REQUEST=test_request); - grand_total_price python:'%.3f' % summary[1]; - grand_total_duration python:'%.3f' % summary[2]"> - <tr tal:repeat="res python:summary[0]"> - <td tal:content="res/transformation_id"> - The Id of this transformation - </td> - <td> - <span tal:replace="res/resource_url">The url of this resource</span> - <i tal:condition="res/pretty_variation" tal:content="structure res/pretty_variation"> - </i> - </td> - <td tal:content="res/transformed_resource_description"> - The resource name - </td> - <td tal:content="python: '%.3f' % res['quantity']"> - The resource quantity - </td> - <td tal:content="res/unit"> - The item unit - </td> - <td tal:content="python: '%.3f' % res['converted_quantity']"> - The resource unit - </td> - <td tal:content="res/resource_unit"> - The resource unit - </td> - <td tal:content="python: '%.3f' % res['price']"> - The resource price - </td> - <td tal:content="python: '%.3f' % res['duration']"> - The resource duration - </td> - <td tal:content="python: '%.3f' % res['efficiency']"> - The resource efficiency - </td> - <td tal:content="python: '%.3f' % res['total_price']" > - The resource total price - </td> - <td tal:content="res/price_defined_by"> - The price origin - </td> - <td tal:content="res/quantity_defined_by"> - The quantity origin - </td> - <td tal:content="res/variation_defined_by"> - The quantity origin - </td> - </tr> - <tr> - <th colspan="8" align="right"> - Total - </th> - <th tal:content="grand_total_duration"> - Temps total opérations - </th> - <th> - </th> - <th tal:content="grand_total_price" align="left"> - Prix total composants - </th> - <th colspan="3"> - </th> - </tr> - </span> - </table> - - </font> - <br> - </span> -</span> - </div> - </div> - </body> -</html> diff --git a/product/Coramy/skins/coramy_pdm/transformation_expanded_view_form.form b/product/Coramy/skins/coramy_pdm/transformation_expanded_view_form.form deleted file mode 100755 index 63cb3200ee..0000000000 --- a/product/Coramy/skins/coramy_pdm/transformation_expanded_view_form.form +++ /dev/null @@ -1,109 +0,0 @@ -<?xml version="1.0"?> - -<form> - <title>Calculer la vue détaillée</title> - <row_length>4</row_length> - <name>consommation_update_form</name> - <pt>form_view_dialog</pt> - <action>transformation_expanded_view</action> - <method>POST</method> - <enctype>multipart/form-data</enctype> - <encoding>UTF-8</encoding> - <stored_encoding>ISO-8859-1</stored_encoding> - <unicode_mode>false</unicode_mode> - <groups> - <group> - <title>Default</title> - <fields> - - <field><id>my_reference_taille_list</id> <type>MultiListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default type="list">[]</default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <extra_item></extra_item> - <hidden type="int">0</hidden> - <items type="list">[]</items> - <required type="int">0</required> - <size type="int">5</size> - <title>Tailles</title> - <unicode type="int">0</unicode> - <view_separator><br /> -</view_separator> - </values> - <tales> - <items>python:here.getCategoryMembershipList('taille')</items> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - <field><id>my_reference_coloris_list</id> <type>MultiListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default type="list">[]</default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <extra_item></extra_item> - <hidden type="int">0</hidden> - <items type="list">[]</items> - <required type="int">0</required> - <size type="int">5</size> - <title>Coloris</title> - <unicode type="int">0</unicode> - <view_separator><br /> -</view_separator> - </values> - <tales> - <items>python:here.getCategoryMembershipList('coloris')</items> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - <field><id>my_reference_morphologie_list</id> <type>MultiListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default type="list">[]</default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <extra_item></extra_item> - <hidden type="int">0</hidden> - <items type="list">[]</items> - <required type="int">0</required> - <size type="int">5</size> - <title>Morphologies</title> - <unicode type="int">0</unicode> - <view_separator><br /> -</view_separator> - </values> - <tales> - <items>python:here.getCategoryMembershipList('morphologie')</items> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - </fields> - </group> - </groups> -</form> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_pdm/transformation_getAggregatedList.py b/product/Coramy/skins/coramy_pdm/transformation_getAggregatedList.py deleted file mode 100755 index 9e41884ab6..0000000000 --- a/product/Coramy/skins/coramy_pdm/transformation_getAggregatedList.py +++ /dev/null @@ -1,76 +0,0 @@ -## Script (Python) "transformation_getAggregatedList" -##bind container=container -##bind context=context -##bind namespace= -##bind script=script -##bind subpath=traverse_subpath -##parameters=request=None -##title= -## -from Products.ERP5.XML.Base import Base -return "toto" - -# Example code: -transformation_list = [context] + context.getSpecialiseValueList() -if request is None: request = {'categories': ('taille/enfant/08 ans','coloris/modele/701C402/2')} -result = [] -price = 0.0 -duration = 0.0 - -for transformation in transformation_list: - for t in transformation.objectValues(): - variation_category_list = [] - quantity = t.getQuantity() - r = t.getDefaultResourceValue() - unit_price = 0.0 - item_duration = 0.0 - if r.hasDefaultBasePrice(): - unit_price = r.getBasePrice() - else: - item_duration = t.quantity - # Start filing the value holder - line_item = Base() - line_item.edit( - resource_id = r.getId(), - resource_url = r.getRelativeUrl(), - transformation_id = transformation.getId(), - transformation_url = transformation.getRelativeUrl(), - transformed_resource_id = t.getId(), - transformed_resource_description = t.getDescription(), - unit = t.getQuantityUnit(), - duration = item_duration, - quantity = quantity, - price = unit_price, - total_price = 0.0 - ) - # Add variable values - for c in t.objectValues(): - if c.test(request): - #v = self.restrictedTraverse() - #if c.hasDefaultBasePrice(): - # variation_unit_price = r.getBasePrice() - # Upgrade the request with the variation values - for a in c.getDomainDomainPropertyList(): - kw = {} - kw[a] = c.get(a) - line_item.edit(**kw) - bc_list = [] - for bc in c.getDomainBaseCategoryList(): - self.portal_categories.setCategoryMembership(line_item, bc, c.getCategoryMembershipList(bc)) - bc_list += [bc] - # Update the price - if len(bc_list) > 0: - for variation in c.getValueList(bc_list, portal_type=('Variante Tissu',)): - if variation.hasDefaultBasePrice(): - new_price = variation.getBasePrice() - if new_price > 0.0: - unit_price = new_price - # Calculate total - line_item.price = unit_price - line_item.total_price = quantity * unit_price - result += [line_item] - price += total_price - duration += item_duration - - -#return result diff --git a/product/Coramy/skins/coramy_pdm/transformation_history_view2.pt b/product/Coramy/skins/coramy_pdm/transformation_history_view2.pt deleted file mode 100755 index 78d2c8c028..0000000000 --- a/product/Coramy/skins/coramy_pdm/transformation_history_view2.pt +++ /dev/null @@ -1,79 +0,0 @@ -<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" - "DTD/xhtml1-strict.dtd"> -<?xml-stylesheet href="erp5.css" rel="stylesheet" type="text/css"?> - -<span tal:replace="nothing"> -<!-- -Copyright (c) 2002 Nexedi SARL and Contributors. All Rights Reserved. - Thierry Faucher <tf@nexedi.com> - -This program is Free Software; you can redistribute it and/or -modify it under the terms of the GNU General Public License -as published by the Free Software Foundation; either version 2 -of the License, or (at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program; if not, write to the Free Software -Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. ---> -</span> - -<html xmlns="http://www.w3.org/1999/xhtml" lang="en" - xml:lang="en" - xmlns:tal="http://xml.zope.org/namespaces/tal" - xmlns:metal="http://xml.zope.org/namespaces/metal" - metal:use-macro="here/main_template/macros/master"> - - <head> - <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /> - <title tal:content="template/title_or_id">The title</title> - <link href="erp5.css" rel="stylesheet" type="text/css"/> - </head> - - <body><div metal:fill-slot="main"> - <div class="Main"> - - -<strong>Historique</strong><br><br> - -<table border=1> - <tr align=center> - <td><b>Etat</b></td><td><b>Date - Heure</b></td><td><b>Utilisateur</b></td><td><b>Action</b></td><td><b>Commentaires</b></td> - </tr> - <span tal:repeat="history_item python:here.portal_workflow.getInfoFor(here, 'transformation_history')"> - - <tr> - <td> - <span tal:condition="history_item/transform_state | nothing" - tal:content="history_item/transform_state"/> - </td> - <td> - <span tal:condition="history_item/transformation_time | nothing" - tal:content="history_item/transformation_time"/> - </td> - <td> - <span tal:condition="history_item/transformation_actor | nothing" - tal:content="history_item/transformation_actor"/> - </td> - <td> - <span tal:condition="history_item/transformation_action | nothing" - tal:content="history_item/transformation_action"/> - </td> - <td> - <span tal:condition="history_item/transformation_comment | nothing" - tal:content="history_item/transformation_comment"/> - </td> - </tr> - - </span> -</table> - - </div> - </div> - </body> -</html> diff --git a/product/Coramy/skins/coramy_pdm/transformation_identity_update.py b/product/Coramy/skins/coramy_pdm/transformation_identity_update.py deleted file mode 100755 index 94d36044eb..0000000000 --- a/product/Coramy/skins/coramy_pdm/transformation_identity_update.py +++ /dev/null @@ -1,39 +0,0 @@ -## Script (Python) "transformation_identity_update" -##bind container=container -##bind context=context -##bind namespace= -##bind script=script -##bind subpath=traverse_subpath -##parameters=form_id -##title= -## -l_items = context.getVLineItemList() -l_items = map(lambda x: x[0], l_items) -l_id = context.getVariationBaseCategoryLine() -c_items = context.getVColumnItemList() -c_items = map(lambda x: x[0], c_items) -c_id = context.getVariationBaseCategoryColumn() -t_items = context.getVTabItemList() -t_items = map(lambda x: x[0], c_items) - -request = context.REQUEST - -# We must still inlude the tab variations - -for i in l_items: - for j in c_items: - cell = context.newCell(i, j, base_id='variation') - cell.setCategoryMembership([l_id,c_id] + list(context.getVariationBaseCategoryList()) , - [i,j] + list(context.getVariationCategoryList())) - -# Required to set Mapped Value Parameters -# This is a bit simple but it works -# Another method consists in setting by hand each cell, but that is a bit -# like repeating the same code again and again -context.fixConsistency() - -redirect_url = '%s/%s?%s' % ( context.absolute_url() - , form_id - , 'portal_status_message=Variation+Updated.' - ) -return request[ 'RESPONSE' ].redirect( redirect_url ) diff --git a/product/Coramy/skins/coramy_pdm/transformation_list.form b/product/Coramy/skins/coramy_pdm/transformation_list.form deleted file mode 100755 index dc6fb0ee7c..0000000000 --- a/product/Coramy/skins/coramy_pdm/transformation_list.form +++ /dev/null @@ -1,62 +0,0 @@ -<?xml version="1.0"?> - -<form> - <title>Liste de transformations</title> - <row_length>4</row_length> - <name>composant_list</name> - <pt>form_list</pt> - <action></action> - <method>POST</method> - <enctype>multipart/form-data</enctype> - <encoding>UTF-8</encoding> - <stored_encoding>ISO-8859-1</stored_encoding> - <unicode_mode>false</unicode_mode> - <groups> - <group> - <title>Default</title> - <fields> - - <field><id>listbox</id> <type>ListBox</type> - <values> - <all_columns type="list">[('id', 'Transformation'), ('getDefaultResourceUrl', 'Produit'), ('Description', 'Description'), ('transform_state', 'Etat')]</all_columns> - <all_editable_columns type="list">[]</all_editable_columns> - <alternate_name></alternate_name> - <columns type="list">[('id', 'Transformation'), ('getDefaultResourceUrl', 'Produit'), ('Description', 'Description'), ('transform_state', 'Etat')]</columns> - <css_class></css_class> - <default></default> - <default_params type="list">[('id', "''")]</default_params> - <description></description> - <domain_root_list type="list">[]</domain_root_list> - <domain_tree type="int">0</domain_tree> - <editable type="int">1</editable> - <editable_columns type="list">[]</editable_columns> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <global_attributes type="list">[]</global_attributes> - <hidden type="int">0</hidden> - <lines type="int">30</lines> - <list_action>list</list_action> - <list_method type="method">portal_catalog</list_method> - <meta_types type="list">[]</meta_types> - <portal_types type="list">[('Transformation', 'Transformation')]</portal_types> - <report_root_list type="list">[]</report_root_list> - <report_tree type="int">0</report_tree> - <search type="int">1</search> - <search_columns></search_columns> - <select type="int">1</select> - <selection_name>transformation_selection</selection_name> - <sort type="list">[('id', 'id')]</sort> - <sort_columns></sort_columns> - <stat_method></stat_method> - <title>Transformations</title> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - </messages> - </field> - </fields> - </group> - </groups> -</form> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_pdm/transformation_operation_aggregated_view.form b/product/Coramy/skins/coramy_pdm/transformation_operation_aggregated_view.form deleted file mode 100755 index 012668cf71..0000000000 --- a/product/Coramy/skins/coramy_pdm/transformation_operation_aggregated_view.form +++ /dev/null @@ -1,140 +0,0 @@ -<?xml version="1.0"?> - -<form> - <title>Transformation</title> - <row_length>4</row_length> - <name>transformation_view</name> - <pt>form_view</pt> - <action>base_edit</action> - <method>POST</method> - <enctype>multipart/form-data</enctype> - <encoding>UTF-8</encoding> - <stored_encoding>ISO-8859-1</stored_encoding> - <unicode_mode>false</unicode_mode> - <groups> - <group> - <title>left</title> - <fields> - - </fields> - </group> - <group> - <title>right</title> - <fields> - - </fields> - </group> - <group> - <title>center</title> - <fields> - - </fields> - </group> - <group> - <title>bottom</title> - <fields> - - <field><id>listbox</id> <type>ListBox</type> - <values> - <all_columns type="list">[('id', 'Ligne'), ('Description', 'Description'), ('getResourceRelativeUrl', 'Ressource consomm\xe9e'), ('quantity', 'Quantit\xe9'), ('quantity_unit', 'Unit\xe9')]</all_columns> - <all_editable_columns type="list">[('quantity', 'Quantit\xe9'), ('quantity_unit', 'Unit\xe9')]</all_editable_columns> - <alternate_name></alternate_name> - <columns type="list">[('id', 'Ligne'), ('Description', 'Description'), ('getResourceRelativeUrl', 'Ressource consomm\xe9e'), ('quantity', 'Quantit\xe9'), ('quantity_unit', 'Unit\xe9')]</columns> - <css_class></css_class> - <default></default> - <default_params type="list">[]</default_params> - <description></description> - <domain_root_list type="list">[]</domain_root_list> - <domain_tree type="int">0</domain_tree> - <editable type="int">1</editable> - <editable_columns type="list">[('quantity', 'Quantit\xe9'), ('quantity_unit', 'Unit\xe9')]</editable_columns> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <global_attributes></global_attributes> - <hidden type="int">0</hidden> - <lines type="int">10</lines> - <list_action>folder_contents</list_action> - <list_method type="method">searchFolder</list_method> - <meta_types type="list">[]</meta_types> - <portal_types type="list">[('Transformation Operation', 'Transformation Operation')]</portal_types> - <report_root_list type="list">[]</report_root_list> - <report_tree type="int">0</report_tree> - <search type="int">0</search> - <search_columns></search_columns> - <select type="int">0</select> - <selection_name>transformed_resource_selection</selection_name> - <sort type="list">[]</sort> - <sort_columns></sort_columns> - <stat_method></stat_method> - <title>Consommations</title> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>hidden</title> - <fields> - - <field><id>listbox_quantity</id> <type>FloatField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <required type="int">0</required> - <title>listbox_quantity</title> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="not_float">You did not enter a floating point number.</message> - </messages> - </field> - <field><id>listbox_quantity_unit</id> <type>ListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <extra_item></extra_item> - <first_item type="int">0</first_item> - <hidden type="int">0</hidden> - <items type="list">[]</items> - <required type="int">0</required> - <size type="int">1</size> - <title>Unité</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <items>here/portal_categories/quantity_unit/getFormItemList</items> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - </fields> - </group> - </groups> -</form> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_pdm/transformation_operation_view.form b/product/Coramy/skins/coramy_pdm/transformation_operation_view.form deleted file mode 100755 index 83234e70fa..0000000000 --- a/product/Coramy/skins/coramy_pdm/transformation_operation_view.form +++ /dev/null @@ -1,505 +0,0 @@ -<?xml version="1.0"?> - -<form> - <title></title> - <row_length>4</row_length> - <name>Edit Transformation</name> - <pt>form_view</pt> - <action>base_edit</action> - <method>POST</method> - <enctype>multipart/form-data</enctype> - <encoding>UTF-8</encoding> - <stored_encoding>ISO-8859-1</stored_encoding> - <unicode_mode>false</unicode_mode> - <groups> - <group> - <title>Default</title> - <fields> - - <field><id>my_id</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <max_length></max_length> - <required type="int">1</required> - <title>Transformation</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - <field><id>my_description</id> <type>TextAreaField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <height type="int">4</height> - <hidden type="int">0</hidden> - <max_length></max_length> - <max_linelength></max_linelength> - <max_lines></max_lines> - <required type="int">0</required> - <title>Description</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - <width type="int">40</width> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_many_lines">You entered too many lines.</message> - <message name="line_too_long">A line was too long.</message> - <message name="too_long">You entered too many characters.</message> - </messages> - </field> - <field><id>my_resource_url</id> <type>RelationStringField</type> - <values> - <alternate_name></alternate_name> - <base_category>resource</base_category> - <catalog_index>relative_url</catalog_index> - <css_class></css_class> - <default></default> - <default_module>composant</default_module> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">40</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <jump_method>base_jump_relation</jump_method> - <max_length></max_length> - <portal_type type="list">[('Resource', 'Resource'), ('Composant', 'Resource'), ('Modele', 'Modele'), ('Tissu', 'Tissu'), ('Category', 'Category'), ('Gamme', 'Gamme'), ('Vetement', 'Vetement'), ('Forme', 'Forme')]</portal_type> - <required type="int">0</required> - <title>Produit principal</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <update_method>base_update_relation</update_method> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - <field><id>my_default_domain_base_category</id> <type>ListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <extra_item></extra_item> - <first_item type="int">0</first_item> - <hidden type="int">0</hidden> - <items type="list">[]</items> - <required type="int">0</required> - <size type="int">1</size> - <title>Axe d'état</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <items>python: [''] + list(here.getVariationRangeBaseCategoryList())</items> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - <field><id>my_transformation_state</id> <type>ListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <extra_item></extra_item> - <first_item type="int">0</first_item> - <hidden type="int">0</hidden> - <items type="list">[]</items> - <required type="int">0</required> - <size type="int">1</size> - <title>Stade de production</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <items>here/portal_categories/transformation_state/getFormItemList</items> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - <field><id>my_template_transformation_id_list</id> <type>MultiRelationStringField</type> - <values> - <alternate_name></alternate_name> - <base_category>specialise</base_category> - <catalog_index>id</catalog_index> - <css_class></css_class> - <default type="list">[]</default> - <default_module>transformation</default_module> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <height type="int">3</height> - <hidden type="int">0</hidden> - <jump_method>base_jump_relation</jump_method> - <max_length></max_length> - <max_linelength></max_linelength> - <max_lines></max_lines> - <portal_type type="list">[('Transformation', 'Transformation')]</portal_type> - <required type="int">0</required> - <title>Transformations utilisées</title> - <unicode type="int">0</unicode> - <update_method>base_update_relation</update_method> - <view_separator><br /> -</view_separator> - <whitespace_preserve type="int">0</whitespace_preserve> - <width type="int">40</width> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_many_lines">You entered too many lines.</message> - <message name="line_too_long">A line was too long.</message> - <message name="too_long">You entered too many characters.</message> - </messages> - </field> - <field><id>transform_state</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <max_length></max_length> - <required type="int">0</required> - <title>Etat</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <default>python:here.portal_workflow.getInfoFor(here, 'transform_state')</default> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>right</title> - <fields> - - <field><id>my_variation_base_category_list</id> <type>MultiListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default type="list">[]</default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <extra_item></extra_item> - <hidden type="int">0</hidden> - <items type="list">[]</items> - <required type="int">0</required> - <size type="int">3</size> - <title>Axes de variantage</title> - <unicode type="int">0</unicode> - <view_separator><br /> -</view_separator> - </values> - <tales> - <items>here/getTransformationVariationRangeBaseCategoryItemList</items> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - <field><id>my_variation_category_list</id> <type>MultiListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default type="list">[]</default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <extra_item></extra_item> - <hidden type="int">0</hidden> - <items type="list">[]</items> - <required type="int">0</required> - <size type="int">5</size> - <title>Variantes possibles</title> - <unicode type="int">0</unicode> - <view_separator><br /> -</view_separator> - </values> - <tales> - <default>here/getVariationCategoryList</default> - <items>here/getVariationRangeCategoryItemList</items> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - <field><id>my_variation_base_category_line</id> <type>ListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <extra_item></extra_item> - <first_item type="int">0</first_item> - <hidden type="int">0</hidden> - <items type="list">[]</items> - <required type="int">0</required> - <size type="int">1</size> - <title>Affichage en lignes</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <items>here/getTransformationVariationRangeBaseCategoryItemList</items> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - <field><id>my_variation_base_category_column</id> <type>ListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <extra_item></extra_item> - <first_item type="int">0</first_item> - <hidden type="int">0</hidden> - <items type="list">[]</items> - <required type="int">0</required> - <size type="int">1</size> - <title>Affichage en colonnes</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <items>here/getTransformationVariationRangeBaseCategoryItemList</items> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - <field><id>my_variation_base_category_tab</id> <type>MultiListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default type="list">[]</default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <extra_item></extra_item> - <hidden type="int">0</hidden> - <items type="list">[]</items> - <required type="int">0</required> - <size type="int">3</size> - <title>Affichage en tableaux</title> - <unicode type="int">0</unicode> - <view_separator><br /> -</view_separator> - </values> - <tales> - <items>here/getTransformationVariationRangeBaseCategoryItemList</items> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>center</title> - <fields> - - </fields> - </group> - <group> - <title>bottom</title> - <fields> - - <field><id>listbox</id> <type>ListBox</type> - <values> - <all_columns type="list">[('id', 'Ligne'), ('Description', 'Description'), ('getResourceRelativeUrl', 'Op\xe9ration'), ('quantity', 'Quantit\xe9'), ('quantity_unit', 'Unit\xe9')]</all_columns> - <all_editable_columns type="list">[('quantity', 'Quantit\xe9'), ('quantity_unit', 'Unit\xe9')]</all_editable_columns> - <alternate_name></alternate_name> - <columns type="list">[('id', 'Ligne'), ('Description', 'Description'), ('getResourceRelativeUrl', 'Op\xe9ration'), ('quantity', 'Quantit\xe9'), ('quantity_unit', 'Unit\xe9')]</columns> - <css_class></css_class> - <default></default> - <default_params type="list">[]</default_params> - <description></description> - <domain_root_list type="list">[]</domain_root_list> - <domain_tree type="int">0</domain_tree> - <editable type="int">1</editable> - <editable_columns type="list">[('quantity', 'Quantit\xe9'), ('quantity_unit', 'Unit\xe9')]</editable_columns> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <global_attributes></global_attributes> - <hidden type="int">0</hidden> - <lines type="int">10</lines> - <list_action>folder_contents</list_action> - <list_method type="method">searchFolder</list_method> - <meta_types type="list">[]</meta_types> - <portal_types type="list">[('Transformation Operation', 'Transformation Operation')]</portal_types> - <report_root_list type="list">[]</report_root_list> - <report_tree type="int">0</report_tree> - <search type="int">0</search> - <search_columns></search_columns> - <select type="int">0</select> - <selection_name>transformed_resource_selection</selection_name> - <sort type="list">[('id', 'id')]</sort> - <sort_columns></sort_columns> - <stat_method></stat_method> - <title>Opérations</title> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>hidden</title> - <fields> - - <field><id>listbox_quantity</id> <type>FloatField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <required type="int">0</required> - <title>listbox_quantity</title> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="not_float">You did not enter a floating point number.</message> - </messages> - </field> - <field><id>listbox_quantity_unit</id> <type>ListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <extra_item></extra_item> - <first_item type="int">0</first_item> - <hidden type="int">0</hidden> - <items type="list">[]</items> - <required type="int">0</required> - <size type="int">1</size> - <title>Unité</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <items>here/portal_categories/quantity_unit/getFormItemList</items> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - </fields> - </group> - </groups> -</form> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_pdm/transformation_operation_view_old.form b/product/Coramy/skins/coramy_pdm/transformation_operation_view_old.form deleted file mode 100755 index b63986529e..0000000000 --- a/product/Coramy/skins/coramy_pdm/transformation_operation_view_old.form +++ /dev/null @@ -1,476 +0,0 @@ -<?xml version="1.0"?> - -<form> - <title></title> - <row_length>4</row_length> - <name>Edit Transformation</name> - <pt>form_view</pt> - <action>base_edit</action> - <method>POST</method> - <enctype>multipart/form-data</enctype> - <encoding>UTF-8</encoding> - <stored_encoding>ISO-8859-1</stored_encoding> - <unicode_mode>false</unicode_mode> - <groups> - <group> - <title>Default</title> - <fields> - - <field><id>my_id</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <max_length></max_length> - <required type="int">1</required> - <title>Transformation</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - <field><id>my_description</id> <type>TextAreaField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <height type="int">4</height> - <hidden type="int">0</hidden> - <max_length></max_length> - <max_linelength></max_linelength> - <max_lines></max_lines> - <required type="int">0</required> - <title>Description</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - <width type="int">40</width> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_many_lines">You entered too many lines.</message> - <message name="line_too_long">A line was too long.</message> - <message name="too_long">You entered too many characters.</message> - </messages> - </field> - <field><id>my_resource</id> <type>RelationStringField</type> - <values> - <alternate_name></alternate_name> - <base_category>resource</base_category> - <catalog_index>relative_url</catalog_index> - <css_class></css_class> - <default></default> - <default_module>composant</default_module> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">40</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <jump_method>base_jump_relation</jump_method> - <max_length></max_length> - <portal_type type="list">[('Resource', 'Resource'), ('Composant', 'Resource'), ('Modele', 'Modele'), ('Tissu', 'Tissu'), ('Category', 'Category')]</portal_type> - <required type="int">0</required> - <title>Produit principal</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <update_method>base_update_relation</update_method> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <default>here/getDefaultResource | string:</default> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - <field><id>my_domain_base_category_list</id> <type>ListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <extra_item></extra_item> - <first_item type="int">0</first_item> - <hidden type="int">0</hidden> - <items type="list">[]</items> - <required type="int">0</required> - <size type="int">1</size> - <title>Axe d'état</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <items>python: [''] + list(here.getVariationRangeBaseCategoryList())</items> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - <field><id>my_state</id> <type>ListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <extra_item></extra_item> - <first_item type="int">0</first_item> - <hidden type="int">0</hidden> - <items type="list">[('Coup\xe9', 'Coup\xe9'), ('Mont\xe9', 'Mont\xe9')]</items> - <required type="int">0</required> - <size type="int">1</size> - <title>Etat du produit</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - <field><id>my_template_transformation_url_list</id> <type>MultiRelationStringField</type> - <values> - <alternate_name></alternate_name> - <base_category>specialise</base_category> - <catalog_index>relative_url</catalog_index> - <css_class></css_class> - <default type="list">[]</default> - <default_module>transformation</default_module> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <height type="int">5</height> - <hidden type="int">0</hidden> - <jump_method>base_jump_relation</jump_method> - <max_length></max_length> - <max_linelength></max_linelength> - <max_lines></max_lines> - <portal_type type="list">[('Transformation', 'Transformation')]</portal_type> - <required type="int">0</required> - <title>Transformations utilisées</title> - <unicode type="int">0</unicode> - <update_method>base_update_relation</update_method> - <view_separator><br /> -</view_separator> - <whitespace_preserve type="int">0</whitespace_preserve> - <width type="int">40</width> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_many_lines">You entered too many lines.</message> - <message name="line_too_long">A line was too long.</message> - <message name="too_long">You entered too many characters.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>right</title> - <fields> - - <field><id>my_variation_base_category_list</id> <type>MultiListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default type="list">[]</default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <extra_item></extra_item> - <hidden type="int">0</hidden> - <items type="list">[]</items> - <required type="int">0</required> - <size type="int">3</size> - <title>Axes de variantage</title> - <unicode type="int">0</unicode> - <view_separator><br /> -</view_separator> - </values> - <tales> - <items>here/getBaseCategoryIds</items> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - <field><id>my_variation_category_list</id> <type>MultiListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default type="list">[]</default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <extra_item></extra_item> - <hidden type="int">0</hidden> - <items type="list">[]</items> - <required type="int">0</required> - <size type="int">5</size> - <title>Variantes possibles</title> - <unicode type="int">0</unicode> - <view_separator><br /> -</view_separator> - </values> - <tales> - <default>here/getVariationCategoryList</default> - <items>here/getVariationRangeCategoryItemList</items> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - <field><id>my_variation_base_category_line</id> <type>ListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <extra_item></extra_item> - <first_item type="int">0</first_item> - <hidden type="int">0</hidden> - <items type="list">[]</items> - <required type="int">0</required> - <size type="int">1</size> - <title>Affichage en lignes</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <items>here/getVariationBaseCategoryList</items> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - <field><id>my_variation_base_category_column</id> <type>ListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <extra_item></extra_item> - <first_item type="int">0</first_item> - <hidden type="int">0</hidden> - <items type="list">[]</items> - <required type="int">0</required> - <size type="int">1</size> - <title>Affichage en colonnes</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <items>here/getVariationBaseCategoryList</items> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - <field><id>my_variation_base_category_tab</id> <type>MultiListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default type="list">[]</default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <extra_item></extra_item> - <hidden type="int">0</hidden> - <items type="list">[]</items> - <required type="int">0</required> - <size type="int">3</size> - <title>Affichage en tableaux</title> - <unicode type="int">0</unicode> - <view_separator><br /> -</view_separator> - </values> - <tales> - <items>here/getVariationBaseCategoryList</items> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>center</title> - <fields> - - </fields> - </group> - <group> - <title>bottom</title> - <fields> - - <field><id>listbox</id> <type>ListBox</type> - <values> - <all_columns type="list">[('id', 'Ligne'), ('Description', 'Description'), ('getResourceRelativeUrl', 'Op\xe9ration'), ('quantity', 'Quantit\xe9'), ('quantity_unit', 'Unit\xe9')]</all_columns> - <all_editable_columns type="list">[('quantity', 'Quantit\xe9'), ('quantity_unit', 'Unit\xe9')]</all_editable_columns> - <alternate_name></alternate_name> - <columns type="list">[('id', 'Ligne'), ('Description', 'Description'), ('getResourceRelativeUrl', 'Op\xe9ration'), ('quantity', 'Quantit\xe9'), ('quantity_unit', 'Unit\xe9')]</columns> - <css_class></css_class> - <default></default> - <default_params type="list">[]</default_params> - <description></description> - <domain_root_list type="list">[]</domain_root_list> - <domain_tree type="int">0</domain_tree> - <editable type="int">1</editable> - <editable_columns type="list">[('quantity', 'Quantit\xe9'), ('quantity_unit', 'Unit\xe9')]</editable_columns> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <global_attributes></global_attributes> - <hidden type="int">0</hidden> - <lines type="int">10</lines> - <list_action>folder_contents</list_action> - <list_method type="method">searchFolder</list_method> - <meta_types type="list">[]</meta_types> - <portal_types type="list">[('Transformation Operation', 'Transformation Operation')]</portal_types> - <report_root_list type="list">[]</report_root_list> - <report_tree type="int">0</report_tree> - <search type="int">0</search> - <search_columns></search_columns> - <select type="int">0</select> - <selection_name>transformed_resource_selection</selection_name> - <sort type="list">[('id', 'id')]</sort> - <sort_columns></sort_columns> - <stat_method></stat_method> - <title>Opérations</title> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>hidden</title> - <fields> - - <field><id>listbox_quantity</id> <type>FloatField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <required type="int">0</required> - <title>listbox_quantity</title> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="not_float">You did not enter a floating point number.</message> - </messages> - </field> - <field><id>listbox_quantity_unit</id> <type>ListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <extra_item></extra_item> - <first_item type="int">0</first_item> - <hidden type="int">0</hidden> - <items type="list">[]</items> - <required type="int">0</required> - <size type="int">1</size> - <title>Unité</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <items>here/portal_categories/quantity_unit/getFormItemList</items> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - </fields> - </group> - </groups> -</form> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_pdm/transformation_print.pt b/product/Coramy/skins/coramy_pdm/transformation_print.pt deleted file mode 100755 index cb79790562..0000000000 --- a/product/Coramy/skins/coramy_pdm/transformation_print.pt +++ /dev/null @@ -1,127 +0,0 @@ -<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> - -<html> - - <head> - <meta http-equiv="content-type" content="text/html;charset=ISO-8859-1"> - <title tal:content="here/getTitle">Coramy</title> - - </head> - - <body bgcolor="#ffffff"> - -<table width="675" border="0" cellpadding="0" cellspacing="0"> - <tr> <!-- Ligne Titre --> - <td><img src="spacer1.png" width="1" height="1"></td> - <td> <div align="center"> - <p><font size="+3" color="red"><span tal:replace="python:'Transformation : %s' %here.getId()">Modèle - </span></font></p> - </div></td> - <td><img src="spacer1.png" width="1" height="1"></td> - </tr> - <tr> <!-- Border-top info --> - <td class="line"><img src="spacer.png" width="1" height="1"></td> - <td class="line"><img src="spacer.png" width="673" height="1"></td> - <td class="line"><img src="spacer.png" width="1" height="1"></td> - </tr> - <tr> <!-- Info --> - <td class="line"><img src="spacer.png" width="1" height="100%"></td> - <td><table class="border" width="100%"> - - </table></td> - <td class="line"><img src="spacer.png" width="1" height="100%"></td> - </tr> - <tr> <!-- Border Bottom info --> - <td class="line"><img src="spacer.png" width="1" height="1"></td> - <td><img src="spacer.png" width="673" height="1"></td> - <td class="line"><img src="spacer.png" width="1" height="1"></td> - </tr> - <tr> <!-- spacer --> - <td><img src="spacer1.png" width="1" height="1"></td> - <td><img src="spacer1.png" width="1" height="1"></td> - <td><img src="spacer1.png" width="1" height="1"></td> - </tr> - <tr> <!-- Border Top Ligne commande --> - <td><img src="spacer.png" width="1" height="1"></td> - <td><img src="spacer.png" width="673" height="1"></td> - <td><img src="spacer.png" width="1" height="1"></td> - </tr> - <tr> <!-- Ligne commande --> - <td><img src="spacer.png" width="1" height="100%"></td> - <td> -<span tal:repeat="reference_taille python:here.getExpandedViewVariationList(request,'reference_taille_list')"> - <span tal:repeat="reference_coloris python:here.getExpandedViewVariationList(request,'reference_coloris_list')"> - <span tal:repeat="reference_morphologie python:here.getExpandedViewVariationList(request,'reference_morphologie_list')"> - <strong><span tal:replace="reference_coloris"/></strong> - - taille <strong><span tal:replace="reference_taille"/></strong> - - morphologie <strong><span tal:replace="reference_morphologie"/></strong><br><br> - <font size="-2"> - - <table class="border" border="1"> - <tr> - <th> - Composant - </th> - <th> - Variantes - </th> - <th> - Description - </th> - <th> - Quantité - </th> - <th> - Unité - </th> - </tr> - <span tal:define="test_request python:here.expandedViewRequestBuilder( - reference_taille=reference_taille, - reference_coloris=reference_coloris, - reference_morphologie=reference_morphologie); - summary python:here.getAggregatedAmountList(REQUEST=test_request); - grand_total_base_price python:'%.3f' % summary[1]; - grand_total_source_base_price python:'%.3f' % summary[2]; - grand_total_duration python:'%.3f' % summary[3]; - grand_total_duration_france python:'%.3f' % summary[4]"> - <tr tal:repeat="amount python:summary[0]"> - <td> - <span tal:replace="amount/resource_relative_url">The url of this resource</span> - </td> - <td> - <span tal:condition="amount/pretty_variation" tal:content="structure amount/pretty_variation"> - </span> - </td> - <td tal:content="amount/description"> - The resource name - </td> - <td tal:content="python: '%.3f' %(amount['converted_quantity']/amount['efficiency'])"> - The resource unit - </td> - <td tal:content="amount/resource_quantity_unit | string:"> - The resource unit - </td> - </tr> - - </span> - </table> - - </font> - <br> - </span> - </span> -</span> -</td> - <td><img src="spacer.png" width="1" height="100%"></td> - </tr> - <tr> <!-- Border Bottom Ligne commande --> - <td><img src="spacer.png" width="1" height="1"></td> - <td><img src="spacer.png" width="673" height="1"></td> - <td><img src="spacer.png" width="1" height="1"></td> - </tr> - -</table> - -</body> - -</html> diff --git a/product/Coramy/skins/coramy_pdm/transformation_print_form.form b/product/Coramy/skins/coramy_pdm/transformation_print_form.form deleted file mode 100755 index 8f85d874f5..0000000000 --- a/product/Coramy/skins/coramy_pdm/transformation_print_form.form +++ /dev/null @@ -1,109 +0,0 @@ -<?xml version="1.0"?> - -<form> - <title>Imprimer la transformation</title> - <row_length>4</row_length> - <name>transformation_print_form</name> - <pt>form_view_dialog</pt> - <action>transformation_print</action> - <method>POST</method> - <enctype>multipart/form-data</enctype> - <encoding>UTF-8</encoding> - <stored_encoding>ISO-8859-1</stored_encoding> - <unicode_mode>false</unicode_mode> - <groups> - <group> - <title>Default</title> - <fields> - - <field><id>my_reference_taille_list</id> <type>MultiListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default type="list">[]</default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <extra_item></extra_item> - <hidden type="int">0</hidden> - <items type="list">[]</items> - <required type="int">0</required> - <size type="int">5</size> - <title>Tailles</title> - <unicode type="int">0</unicode> - <view_separator><br /> -</view_separator> - </values> - <tales> - <items>python:here.getCategoryMembershipList('taille')</items> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - <field><id>my_reference_coloris_list</id> <type>MultiListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default type="list">[]</default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <extra_item></extra_item> - <hidden type="int">0</hidden> - <items type="list">[]</items> - <required type="int">0</required> - <size type="int">5</size> - <title>Coloris</title> - <unicode type="int">0</unicode> - <view_separator><br /> -</view_separator> - </values> - <tales> - <items>python:here.getCategoryMembershipList('coloris')</items> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - <field><id>my_reference_morphologie_list</id> <type>MultiListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default type="list">[]</default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <extra_item></extra_item> - <hidden type="int">0</hidden> - <items type="list">[]</items> - <required type="int">0</required> - <size type="int">5</size> - <title>Morphologies</title> - <unicode type="int">0</unicode> - <view_separator><br /> -</view_separator> - </values> - <tales> - <items>python:here.getCategoryMembershipList('morphologie')</items> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - </fields> - </group> - </groups> -</form> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_pdm/transformation_speed_test.py b/product/Coramy/skins/coramy_pdm/transformation_speed_test.py deleted file mode 100755 index f53d4e6807..0000000000 --- a/product/Coramy/skins/coramy_pdm/transformation_speed_test.py +++ /dev/null @@ -1,28 +0,0 @@ -## Script (Python) "transformation_speed_test" -##bind container=container -##bind context=context -##bind namespace= -##bind script=script -##bind subpath=traverse_subpath -##parameters= -##title= -## -# Example code: -print "<html><p>Begin</p>" - -transformation_list = [context] + context.getSpecialiseValueList() -#print "%s<br>" % context.getValueList('specialise', portal_type=()) -#print "%s<br>" % context.getCategoryMembershipList('specialise', portal_type=()) -#print "%s<br>" % context.portal_categories.restrictedTraverse('transformation/70170').id -print "%s<br>" % map(lambda x: x.id, transformation_list ) - -for transformation in transformation_list: - for t in transformation.objectValues(): - r = t.getResourceDefaultValue() - print '-%s %s<br>' % (t.id, r.getBasePrice()) - for c in t.objectValues(): - print ' +%s<br>' % c.id - -print "<p>End</p></html>" - -return printed diff --git a/product/Coramy/skins/coramy_pdm/transformation_sql_search.zsql b/product/Coramy/skins/coramy_pdm/transformation_sql_search.zsql deleted file mode 100755 index 90d44e010d..0000000000 --- a/product/Coramy/skins/coramy_pdm/transformation_sql_search.zsql +++ /dev/null @@ -1,17 +0,0 @@ -<dtml-comment> -title: -connection_id:erp5_sql_connection -max_rows:1000 -max_cache:100 -cache_time:0 -class_name:ZSQLBrain -class_file:zsqlbrain.py -</dtml-comment> -<params>modele_id</params> -SELECT DISTINCT transformation.id, transformation.relative_url, transformation.path, transformation.Description -FROM catalog AS transformation, catalog AS modele, category -WHERE transformation.uid=category.uid -AND modele.uid = category.category_uid -AND modele.id = "<dtml-var modele_id>" -AND category.base_category_uid = <dtml-var "portal_categories.resource.uid"> -AND transformation.portal_type="Transformation" \ No newline at end of file diff --git a/product/Coramy/skins/coramy_pdm/transformation_view.form b/product/Coramy/skins/coramy_pdm/transformation_view.form deleted file mode 100755 index bbf5e83a3f..0000000000 --- a/product/Coramy/skins/coramy_pdm/transformation_view.form +++ /dev/null @@ -1,505 +0,0 @@ -<?xml version="1.0"?> - -<form> - <title></title> - <row_length>4</row_length> - <name>Edit Transformation</name> - <pt>form_view</pt> - <action>base_edit</action> - <method>POST</method> - <enctype>multipart/form-data</enctype> - <encoding>UTF-8</encoding> - <stored_encoding>ISO-8859-1</stored_encoding> - <unicode_mode>false</unicode_mode> - <groups> - <group> - <title>Default</title> - <fields> - - <field><id>my_id</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <max_length></max_length> - <required type="int">1</required> - <title>Transformation</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - <field><id>my_description</id> <type>TextAreaField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <height type="int">4</height> - <hidden type="int">0</hidden> - <max_length></max_length> - <max_linelength></max_linelength> - <max_lines></max_lines> - <required type="int">0</required> - <title>Description</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - <width type="int">40</width> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_many_lines">You entered too many lines.</message> - <message name="line_too_long">A line was too long.</message> - <message name="too_long">You entered too many characters.</message> - </messages> - </field> - <field><id>my_resource_url</id> <type>RelationStringField</type> - <values> - <alternate_name></alternate_name> - <base_category>resource</base_category> - <catalog_index>relative_url</catalog_index> - <css_class></css_class> - <default></default> - <default_module>composant</default_module> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">40</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <jump_method>base_jump_relation</jump_method> - <max_length></max_length> - <portal_type type="list">[('Resource', 'Resource'), ('Composant', 'Resource'), ('Modele', 'Modele'), ('Tissu', 'Tissu'), ('Category', 'Category'), ('Gamme', 'Gamme'), ('Vetement', 'Vetement'), ('Forme', 'Forme'), ('Assortiment', 'Assortiment')]</portal_type> - <required type="int">0</required> - <title>Produit principal</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <update_method>base_update_relation</update_method> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - <field><id>my_domain_base_category</id> <type>ListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <extra_item></extra_item> - <first_item type="int">0</first_item> - <hidden type="int">0</hidden> - <items type="list">[]</items> - <required type="int">0</required> - <size type="int">1</size> - <title>Axe d'état</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <items>python: [''] + list(here.getVariationRangeBaseCategoryList())</items> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - <field><id>my_transformation_state</id> <type>ListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <extra_item></extra_item> - <first_item type="int">0</first_item> - <hidden type="int">0</hidden> - <items type="list">[]</items> - <required type="int">0</required> - <size type="int">1</size> - <title>Stade de production</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <items>here/portal_categories/transformation_state/getFormItemList</items> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - <field><id>my_template_transformation_id_list</id> <type>MultiRelationStringField</type> - <values> - <alternate_name></alternate_name> - <base_category>specialise</base_category> - <catalog_index>id</catalog_index> - <css_class></css_class> - <default type="list">[]</default> - <default_module>transformation</default_module> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <height type="int">3</height> - <hidden type="int">0</hidden> - <jump_method>base_jump_relation</jump_method> - <max_length></max_length> - <max_linelength></max_linelength> - <max_lines></max_lines> - <portal_type type="list">[('Transformation', 'Transformation')]</portal_type> - <required type="int">0</required> - <title>Transformations utilisées</title> - <unicode type="int">0</unicode> - <update_method>base_update_relation</update_method> - <view_separator><br /> -</view_separator> - <whitespace_preserve type="int">0</whitespace_preserve> - <width type="int">40</width> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_many_lines">You entered too many lines.</message> - <message name="line_too_long">A line was too long.</message> - <message name="too_long">You entered too many characters.</message> - </messages> - </field> - <field><id>transform_state</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <max_length></max_length> - <required type="int">0</required> - <title>Etat</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <default>python:here.portal_workflow.getInfoFor(here, 'transform_state')</default> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>right</title> - <fields> - - <field><id>my_variation_base_category_list</id> <type>MultiListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default type="list">[]</default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <extra_item></extra_item> - <hidden type="int">0</hidden> - <items type="list">[]</items> - <required type="int">0</required> - <size type="int">3</size> - <title>Axes de variantage</title> - <unicode type="int">0</unicode> - <view_separator><br /> -</view_separator> - </values> - <tales> - <items>here/getTransformationVariationRangeBaseCategoryItemList</items> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - <field><id>my_variation_category_list</id> <type>MultiListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default type="list">[]</default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <extra_item></extra_item> - <hidden type="int">0</hidden> - <items type="list">[]</items> - <required type="int">0</required> - <size type="int">5</size> - <title>Variantes possibles</title> - <unicode type="int">0</unicode> - <view_separator><br /> -</view_separator> - </values> - <tales> - <default>here/getVariationCategoryList</default> - <items>here/getVariationRangeCategoryItemList</items> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - <field><id>my_variation_base_category_line</id> <type>ListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <extra_item></extra_item> - <first_item type="int">0</first_item> - <hidden type="int">0</hidden> - <items type="list">[]</items> - <required type="int">0</required> - <size type="int">1</size> - <title>Affichage en lignes</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <items>here/getTransformationVariationRangeBaseCategoryItemList</items> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - <field><id>my_variation_base_category_column</id> <type>ListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <extra_item></extra_item> - <first_item type="int">0</first_item> - <hidden type="int">0</hidden> - <items type="list">[]</items> - <required type="int">0</required> - <size type="int">1</size> - <title>Affichage en colonnes</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <items>here/getTransformationVariationRangeBaseCategoryItemList</items> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - <field><id>my_variation_base_category_tab</id> <type>MultiListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default type="list">[]</default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <extra_item></extra_item> - <hidden type="int">0</hidden> - <items type="list">[]</items> - <required type="int">0</required> - <size type="int">3</size> - <title>Affichage en tableaux</title> - <unicode type="int">0</unicode> - <view_separator><br /> -</view_separator> - </values> - <tales> - <items>here/getTransformationVariationRangeBaseCategoryItemList</items> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>center</title> - <fields> - - </fields> - </group> - <group> - <title>bottom</title> - <fields> - - <field><id>listbox</id> <type>ListBox</type> - <values> - <all_columns type="list">[('id', 'Ligne'), ('Description', 'Description'), ('getResourceRelativeUrl', 'Composant'), ('quantity', 'Quantit\xe9'), ('quantity_unit', 'Unit\xe9')]</all_columns> - <all_editable_columns type="list">[('quantity', 'Quantit\xe9'), ('quantity_unit', 'Unit\xe9')]</all_editable_columns> - <alternate_name></alternate_name> - <columns type="list">[('id', 'Ligne'), ('Description', 'Description'), ('getResourceRelativeUrl', 'Composant'), ('quantity', 'Quantit\xe9'), ('quantity_unit', 'Unit\xe9')]</columns> - <css_class></css_class> - <default></default> - <default_params type="list">[]</default_params> - <description></description> - <domain_root_list type="list">[]</domain_root_list> - <domain_tree type="int">0</domain_tree> - <editable type="int">1</editable> - <editable_columns type="list">[('quantity', 'Quantit\xe9'), ('quantity_unit', 'Unit\xe9')]</editable_columns> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <global_attributes></global_attributes> - <hidden type="int">0</hidden> - <lines type="int">10</lines> - <list_action>folder_contents</list_action> - <list_method type="method">searchFolder</list_method> - <meta_types type="list">[]</meta_types> - <portal_types type="list">[('Transformation Component', 'Transformation Component')]</portal_types> - <report_root_list type="list">[]</report_root_list> - <report_tree type="int">0</report_tree> - <search type="int">0</search> - <search_columns></search_columns> - <select type="int">0</select> - <selection_name>transformed_resource_selection</selection_name> - <sort type="list">[('id', 'id')]</sort> - <sort_columns></sort_columns> - <stat_method></stat_method> - <title>Composants</title> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>hidden</title> - <fields> - - <field><id>listbox_quantity</id> <type>FloatField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <required type="int">0</required> - <title>listbox_quantity</title> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="not_float">You did not enter a floating point number.</message> - </messages> - </field> - <field><id>listbox_quantity_unit</id> <type>ListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <extra_item></extra_item> - <first_item type="int">0</first_item> - <hidden type="int">0</hidden> - <items type="list">[]</items> - <required type="int">0</required> - <size type="int">1</size> - <title>Unité</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <items>here/portal_categories/quantity_unit/getFormItemList</items> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - </fields> - </group> - </groups> -</form> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_pdm/transformation_workflow_valider_transformation.form b/product/Coramy/skins/coramy_pdm/transformation_workflow_valider_transformation.form deleted file mode 100755 index 514505fc3e..0000000000 --- a/product/Coramy/skins/coramy_pdm/transformation_workflow_valider_transformation.form +++ /dev/null @@ -1,81 +0,0 @@ -<?xml version="1.0"?> - -<form> - <title>Valider la transformation</title> - <row_length>4</row_length> - <name>main</name> - <pt>form_view_dialog</pt> - <action>workflow_status_modify</action> - <method>POST</method> - <enctype>multipart/form-data</enctype> - <encoding>UTF-8</encoding> - <stored_encoding>ISO-8859-1</stored_encoding> - <unicode_mode>false</unicode_mode> - <groups> - <group> - <title>Default</title> - <fields> - - <field><id>my_comment</id> <type>TextAreaField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <height type="int">5</height> - <hidden type="int">0</hidden> - <max_length></max_length> - <max_linelength></max_linelength> - <max_lines></max_lines> - <required type="int">0</required> - <title>Commentaires</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - <width type="int">80</width> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_many_lines">You entered too many lines.</message> - <message name="line_too_long">A line was too long.</message> - <message name="too_long">You entered too many characters.</message> - </messages> - </field> - <field><id>my_workflow_action</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default>valider_transformation</default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">1</hidden> - <max_length></max_length> - <required type="int">1</required> - <title> </title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - </fields> - </group> - </groups> -</form> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_pdm/transformed_resource_operation_view.form b/product/Coramy/skins/coramy_pdm/transformed_resource_operation_view.form deleted file mode 100755 index 587f737931..0000000000 --- a/product/Coramy/skins/coramy_pdm/transformed_resource_operation_view.form +++ /dev/null @@ -1,400 +0,0 @@ -<?xml version="1.0"?> - -<form> - <title>Transformation</title> - <row_length>4</row_length> - <name>transformation_view</name> - <pt>form_view</pt> - <action>base_edit</action> - <method>POST</method> - <enctype>multipart/form-data</enctype> - <encoding>UTF-8</encoding> - <stored_encoding>ISO-8859-1</stored_encoding> - <unicode_mode>false</unicode_mode> - <groups> - <group> - <title>Default</title> - <fields> - - <field><id>my_id</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">5</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <max_length></max_length> - <required type="int">1</required> - <title>Ligne n°</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - <field><id>my_resource_relative_url</id> <type>RelationStringField</type> - <values> - <alternate_name></alternate_name> - <base_category>resource</base_category> - <catalog_index>relative_url</catalog_index> - <css_class></css_class> - <default></default> - <default_module>composant</default_module> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">40</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <jump_method>base_jump_relation</jump_method> - <max_length></max_length> - <portal_type type="list">[('Composant', 'Composant'), ('Tissu', 'Tissu'), ('Modele', 'Modele'), ('Forme', 'Forme'), ('Vetement', 'Vetement'), ('Category', 'Category'), ('Composant', 'Composant'), ('Gamme', 'Gamme')]</portal_type> - <required type="int">0</required> - <title>Opération</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <update_method>base_update_relation</update_method> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - <field><id>my_description</id> <type>TextAreaField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <height type="int">3</height> - <hidden type="int">0</hidden> - <max_length></max_length> - <max_linelength></max_linelength> - <max_lines></max_lines> - <required type="int">0</required> - <title>Description</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - <width type="int">40</width> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_many_lines">You entered too many lines.</message> - <message name="line_too_long">A line was too long.</message> - <message name="too_long">You entered too many characters.</message> - </messages> - </field> - <field><id>my_transformation_subpart</id> <type>ListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <extra_item></extra_item> - <first_item type="int">0</first_item> - <hidden type="int">0</hidden> - <items type="list">[]</items> - <required type="int">0</required> - <size type="int">1</size> - <title>Sous-ensemble</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <items>here/portal_categories/transformation_subpart/getFormItemList</items> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - <field><id>my_element_composition</id> <type>CheckBoxField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default type="int">0</default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <title>Entre dans la composition</title> - </values> - <tales> - <default>here/getElementComposition</default> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>right</title> - <fields> - - <field><id>my_v_variation_base_category_list</id> <type>MultiListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default type="list">[]</default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <extra_item></extra_item> - <hidden type="int">0</hidden> - <items type="list">[]</items> - <required type="int">0</required> - <size type="int">3</size> - <title>La variante change selon</title> - <unicode type="int">0</unicode> - <view_separator><br /> -</view_separator> - </values> - <tales> - <items>here/getTransformationVariationBaseCategoryItemList | python:[]</items> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - <field><id>my_variation_category_list</id> <type>MultiListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default type="list">[]</default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <extra_item></extra_item> - <hidden type="int">0</hidden> - <items type="list">[]</items> - <required type="int">0</required> - <size type="int">3</size> - <title>Variante par défaut</title> - <unicode type="int">0</unicode> - <view_separator><br /> -</view_separator> - </values> - <tales> - <default>here/getVariationCategoryList</default> - <items>here/getVariationRangeCategoryItemList</items> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - <field><id>my_identical_variation_base_category_list</id> <type>MultiListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default type="list">[]</default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <extra_item></extra_item> - <hidden type="int">0</hidden> - <items type="list">[]</items> - <required type="int">0</required> - <size type="int">3</size> - <title>Variante identique au produit pour</title> - <unicode type="int">0</unicode> - <view_separator><br /> -</view_separator> - </values> - <tales> - <items>here/getVVariationBaseCategoryList | python:[]</items> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - <field><id>my_q_variation_base_category_list</id> <type>MultiListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default type="list">[]</default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <extra_item></extra_item> - <hidden type="int">0</hidden> - <items type="list">[]</items> - <required type="int">0</required> - <size type="int">3</size> - <title>La quantité change selon</title> - <unicode type="int">0</unicode> - <view_separator><br /> -</view_separator> - </values> - <tales> - <items>here/getTransformationVariationBaseCategoryItemList | python:[]</items> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - <field><id>my_quantity</id> <type>FloatField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">10</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <required type="int">0</required> - <title>Quantité par défaut</title> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="not_float">You did not enter a floating point number.</message> - </messages> - </field> - <field><id>my_quantity_unit</id> <type>ListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <extra_item></extra_item> - <first_item type="int">0</first_item> - <hidden type="int">0</hidden> - <items type="list">[]</items> - <required type="int">0</required> - <size type="int">1</size> - <title>Unité</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <items>here/getQuantityUnitRangeItemList</items> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - <field><id>my_efficiency</id> <type>FloatField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">10</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <required type="int">0</required> - <title>Efficience (%)</title> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="not_float">You did not enter a floating point number.</message> - </messages> - </field> - <field><id>my_specialise_id</id> <type>RelationStringField</type> - <values> - <alternate_name></alternate_name> - <base_category>specialise</base_category> - <catalog_index>id</catalog_index> - <css_class></css_class> - <default></default> - <default_module>consommation</default_module> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <jump_method>base_jump_relation</jump_method> - <max_length></max_length> - <portal_type type="list">[('Grille Consommation', 'Grille Consommation')]</portal_type> - <required type="int">0</required> - <title>Grille de consommations</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <update_method>base_update_relation</update_method> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - </fields> - </group> - </groups> -</form> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_pdm/transformed_resource_quantity_view.form b/product/Coramy/skins/coramy_pdm/transformed_resource_quantity_view.form deleted file mode 100755 index e278ef7926..0000000000 --- a/product/Coramy/skins/coramy_pdm/transformed_resource_quantity_view.form +++ /dev/null @@ -1,165 +0,0 @@ -<?xml version="1.0"?> - -<form> - <title></title> - <row_length>4</row_length> - <name>transformed_resource_variation_view</name> - <pt>form_view</pt> - <action>base_edit</action> - <method>POST</method> - <enctype></enctype> - <encoding>UTF-8</encoding> - <stored_encoding>ISO-8859-1</stored_encoding> - <unicode_mode>false</unicode_mode> - <groups> - <group> - <title>Default</title> - <fields> - - <field><id>my_id</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">5</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <max_length></max_length> - <required type="int">1</required> - <title>Ligne n°</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>right</title> - <fields> - - </fields> - </group> - <group> - <title>center</title> - <fields> - - </fields> - </group> - <group> - <title>bottom</title> - <fields> - - <field><id>matrixbox</id> <type>MatrixBox</type> - <values> - <all_editable_attributes type="list">[('quantity', 'Quantity'), ('id', 'id')]</all_editable_attributes> - <alternate_name></alternate_name> - <cell_base_id>quantity</cell_base_id> - <cell_range type="list">[]</cell_range> - <columns type="list">[('32', '32'), ('34', '34'), ('36', '36'), ('38', '38')]</columns> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <editable_attributes type="list">[('quantity', 'Quantity')]</editable_attributes> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <getter_method></getter_method> - <global_attributes type="list">[('mapped_value_property_list', 'mapped_value_property_list')]</global_attributes> - <hidden type="int">0</hidden> - <lines type="list">[('Bleu', 'Bleu'), ('Rouge', 'Rouge'), ('Verts', 'Verts')]</lines> - <setter_method></setter_method> - <tabs type="list">[('A', 'A'), ('B', 'B'), ('C', 'C')]</tabs> - <title>matrixbox</title> - <update_cell_range type="int">0</update_cell_range> - </values> - <tales> - <columns>here/getQColumnItemList</columns> - <lines>here/getQLineItemList</lines> - <tabs>here/getQTabItemList</tabs> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - </messages> - </field> - <field><id>mapped_value_property_list</id> <type>LinesField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default type="list">['quantity']</default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <height type="int">5</height> - <hidden type="int">1</hidden> - <max_length></max_length> - <max_linelength></max_linelength> - <max_lines></max_lines> - <required type="int">0</required> - <title>Modified categories</title> - <unicode type="int">0</unicode> - <view_separator><br /> -</view_separator> - <whitespace_preserve type="int">0</whitespace_preserve> - <width type="int">40</width> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_many_lines">You entered too many lines.</message> - <message name="line_too_long">A line was too long.</message> - <message name="too_long">You entered too many characters.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>hidden</title> - <fields> - - <field><id>matrixbox_quantity</id> <type>FloatField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">10</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <required type="int">0</required> - <title>Quantity</title> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <default>cell/quantity | string:</default> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="not_float">You did not enter a floating point number.</message> - </messages> - </field> - </fields> - </group> - </groups> -</form> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_pdm/transformed_resource_variation_view.form b/product/Coramy/skins/coramy_pdm/transformed_resource_variation_view.form deleted file mode 100755 index 17282c0187..0000000000 --- a/product/Coramy/skins/coramy_pdm/transformed_resource_variation_view.form +++ /dev/null @@ -1,266 +0,0 @@ -<?xml version="1.0"?> - -<form> - <title></title> - <row_length>4</row_length> - <name>transformed_resource_variation_view</name> - <pt>form_view</pt> - <action>base_edit</action> - <method>POST</method> - <enctype>multipart/form-data</enctype> - <encoding>UTF-8</encoding> - <stored_encoding>ISO-8859-1</stored_encoding> - <unicode_mode>false</unicode_mode> - <groups> - <group> - <title>Default</title> - <fields> - - <field><id>my_id</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">5</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <max_length></max_length> - <required type="int">1</required> - <title>Ligne n°</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>right</title> - <fields> - - </fields> - </group> - <group> - <title>center</title> - <fields> - - </fields> - </group> - <group> - <title>bottom</title> - <fields> - - <field><id>matrixbox</id> <type>MatrixBox</type> - <values> - <all_editable_attributes type="list">[('variation_category_list', 'variation_category_list'), ('predicate_value', 'predicate_value')]</all_editable_attributes> - <alternate_name></alternate_name> - <cell_base_id>variation</cell_base_id> - <cell_range type="list">[]</cell_range> - <columns type="list">[('32', '32'), ('34', '34'), ('36', '36'), ('38', '38')]</columns> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <editable_attributes type="list">[('variation_category_list', 'variation_category_list'), ('predicate_value', 'predicate_value')]</editable_attributes> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <getter_method></getter_method> - <global_attributes type="list">[('domain_base_category_list', 'domain_base_category_list'), ('mapped_value_base_category_list', 'mapped_value_base_category_list'), ('predicate_operator', 'predicate_operator')]</global_attributes> - <hidden type="int">0</hidden> - <lines type="list">[('Bleu', 'Bleu'), ('Rouge', 'Rouge'), ('Verts', 'Verts')]</lines> - <setter_method></setter_method> - <tabs type="list">[('32', '32'), ('34', '34'), ('36', '36'), ('38', '38')]</tabs> - <title>matrixbox</title> - <update_cell_range type="int">0</update_cell_range> - </values> - <tales> - <columns>here/getVColumnItemList</columns> - <lines>here/getVLineItemList</lines> - <tabs>here/getVTabItemList</tabs> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - </messages> - </field> - <field><id>domain_base_category_list</id> <type>LinesField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default type="list">[]</default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <height type="int">5</height> - <hidden type="int">1</hidden> - <max_length></max_length> - <max_linelength></max_linelength> - <max_lines></max_lines> - <required type="int">0</required> - <title>Valid Domain</title> - <unicode type="int">0</unicode> - <view_separator><br /> -</view_separator> - <whitespace_preserve type="int">0</whitespace_preserve> - <width type="int">40</width> - </values> - <tales> - <default>here/getVVariationBaseCategoryList</default> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_many_lines">You entered too many lines.</message> - <message name="line_too_long">A line was too long.</message> - <message name="too_long">You entered too many characters.</message> - </messages> - </field> - <field><id>predicate_operator</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default>SUPERSET_OF</default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">1</hidden> - <max_length></max_length> - <required type="int">0</required> - <title>Operator</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - <field><id>mapped_value_base_category_list</id> <type>LinesField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default type="list">['quantity']</default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <height type="int">5</height> - <hidden type="int">1</hidden> - <max_length></max_length> - <max_linelength></max_linelength> - <max_lines></max_lines> - <required type="int">0</required> - <title>Modified categories</title> - <unicode type="int">0</unicode> - <view_separator><br /> -</view_separator> - <whitespace_preserve type="int">0</whitespace_preserve> - <width type="int">40</width> - </values> - <tales> - <default>here/getVariationBaseCategoryList</default> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_many_lines">You entered too many lines.</message> - <message name="line_too_long">A line was too long.</message> - <message name="too_long">You entered too many characters.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>hidden</title> - <fields> - - <field><id>matrixbox_variation_category_list</id> <type>MultiListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default type="list">[]</default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <extra_item></extra_item> - <hidden type="int">0</hidden> - <items type="list">[]</items> - <required type="int">0</required> - <size type="int">5</size> - <title>matrixbox_value</title> - <unicode type="int">0</unicode> - <view_separator><br /> -</view_separator> - </values> - <tales> - <default>cell/getVariationCategoryList | string:Error</default> - <items>here/getVariationRangeCategoryItemList</items> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - <field><id>matrixbox_predicate_value</id> <type>LinesField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default type="list">[]</default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <height type="int">5</height> - <hidden type="int">1</hidden> - <max_length></max_length> - <max_linelength></max_linelength> - <max_lines></max_lines> - <required type="int">0</required> - <title>matrixbox_predicate_value</title> - <unicode type="int">0</unicode> - <view_separator><br /> -</view_separator> - <whitespace_preserve type="int">0</whitespace_preserve> - <width type="int">40</width> - </values> - <tales> - <default>python:filter(lambda x: x is not None,cell_index)</default> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_many_lines">You entered too many lines.</message> - <message name="line_too_long">A line was too long.</message> - <message name="too_long">You entered too many characters.</message> - </messages> - </field> - </fields> - </group> - </groups> -</form> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_pdm/transformed_resource_view.form b/product/Coramy/skins/coramy_pdm/transformed_resource_view.form deleted file mode 100755 index 85f3aa5eba..0000000000 --- a/product/Coramy/skins/coramy_pdm/transformed_resource_view.form +++ /dev/null @@ -1,429 +0,0 @@ -<?xml version="1.0"?> - -<form> - <title>Transformation</title> - <row_length>4</row_length> - <name>transformation_view</name> - <pt>form_view</pt> - <action>base_edit</action> - <method>POST</method> - <enctype>multipart/form-data</enctype> - <encoding>UTF-8</encoding> - <stored_encoding>ISO-8859-1</stored_encoding> - <unicode_mode>false</unicode_mode> - <groups> - <group> - <title>Default</title> - <fields> - - <field><id>my_id</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">5</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <max_length></max_length> - <required type="int">1</required> - <title>Ligne n°</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - <field><id>my_resource_relative_url</id> <type>RelationStringField</type> - <values> - <alternate_name></alternate_name> - <base_category>resource</base_category> - <catalog_index>relative_url</catalog_index> - <css_class></css_class> - <default></default> - <default_module>composant</default_module> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">40</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <jump_method>base_jump_relation</jump_method> - <max_length></max_length> - <portal_type type="list">[('Composant', 'Composant'), ('Tissu', 'Tissu'), ('Modele', 'Modele'), ('Forme', 'Forme'), ('Vetement', 'Vetement'), ('Category', 'Category'), ('Composant', 'Composant'), ('Gamme', 'Gamme'), ('Assortiment', 'Assortiment')]</portal_type> - <required type="int">0</required> - <title>Composant</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <update_method>base_update_relation</update_method> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - <field><id>my_description</id> <type>TextAreaField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <height type="int">3</height> - <hidden type="int">0</hidden> - <max_length></max_length> - <max_linelength></max_linelength> - <max_lines></max_lines> - <required type="int">0</required> - <title>Description</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - <width type="int">40</width> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_many_lines">You entered too many lines.</message> - <message name="line_too_long">A line was too long.</message> - <message name="too_long">You entered too many characters.</message> - </messages> - </field> - <field><id>my_transformation_subpart</id> <type>ListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <extra_item></extra_item> - <first_item type="int">0</first_item> - <hidden type="int">0</hidden> - <items type="list">[]</items> - <required type="int">0</required> - <size type="int">1</size> - <title>Sous-ensemble</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <items>here/portal_categories/transformation_subpart/getFormItemList</items> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - <field><id>my_element_composition</id> <type>CheckBoxField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default type="int">0</default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <title>Entre dans la composition</title> - </values> - <tales> - <default>here/getElementComposition</default> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - </messages> - </field> - <field><id>my_industrial_phase</id> <type>ListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <extra_item></extra_item> - <first_item type="int">0</first_item> - <hidden type="int">0</hidden> - <items type="list">[]</items> - <required type="int">0</required> - <size type="int">1</size> - <title>Phase Industrialisation</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <items>here/portal_categories/industrial_phase/getFormItemList</items> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>right</title> - <fields> - - <field><id>my_v_variation_base_category_list</id> <type>MultiListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default type="list">[]</default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <extra_item></extra_item> - <hidden type="int">0</hidden> - <items type="list">[]</items> - <required type="int">0</required> - <size type="int">3</size> - <title>La variante change selon</title> - <unicode type="int">0</unicode> - <view_separator><br /> -</view_separator> - </values> - <tales> - <items>here/getTransformationVariationBaseCategoryItemList | python:[]</items> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - <field><id>my_variation_category_list</id> <type>MultiListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default type="list">[]</default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <extra_item></extra_item> - <hidden type="int">0</hidden> - <items type="list">[]</items> - <required type="int">0</required> - <size type="int">3</size> - <title>Variante par défaut</title> - <unicode type="int">0</unicode> - <view_separator><br /> -</view_separator> - </values> - <tales> - <default>here/getVariationCategoryList</default> - <items>here/getVariationRangeCategoryItemList</items> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - <field><id>my_identical_variation_base_category_list</id> <type>MultiListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default type="list">[]</default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <extra_item></extra_item> - <hidden type="int">0</hidden> - <items type="list">[]</items> - <required type="int">0</required> - <size type="int">3</size> - <title>Variante identique au produit pour</title> - <unicode type="int">0</unicode> - <view_separator><br /> -</view_separator> - </values> - <tales> - <items>here/getVVariationBaseCategoryList | python:[]</items> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - <field><id>my_q_variation_base_category_list</id> <type>MultiListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default type="list">[]</default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <extra_item></extra_item> - <hidden type="int">0</hidden> - <items type="list">[]</items> - <required type="int">0</required> - <size type="int">3</size> - <title>La quantité change selon</title> - <unicode type="int">0</unicode> - <view_separator><br /> -</view_separator> - </values> - <tales> - <items>here/getTransformationVariationBaseCategoryItemList | python:[]</items> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - <field><id>my_quantity</id> <type>FloatField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">10</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <required type="int">0</required> - <title>Quantité par défaut</title> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="not_float">You did not enter a floating point number.</message> - </messages> - </field> - <field><id>my_quantity_unit</id> <type>ListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <extra_item></extra_item> - <first_item type="int">0</first_item> - <hidden type="int">0</hidden> - <items type="list">[]</items> - <required type="int">0</required> - <size type="int">1</size> - <title>Unité</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <items>here/getQuantityUnitRangeItemList</items> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - <field><id>my_efficiency</id> <type>FloatField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">10</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <required type="int">0</required> - <title>Efficience (%)</title> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="not_float">You did not enter a floating point number.</message> - </messages> - </field> - <field><id>my_specialise_id</id> <type>RelationStringField</type> - <values> - <alternate_name></alternate_name> - <base_category>specialise</base_category> - <catalog_index>id</catalog_index> - <css_class></css_class> - <default></default> - <default_module>consommation</default_module> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <jump_method>base_jump_relation</jump_method> - <max_length></max_length> - <portal_type type="list">[('Grille Consommation', 'Grille Consommation')]</portal_type> - <required type="int">0</required> - <title>Grille de consommations</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <update_method>base_update_relation</update_method> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - </fields> - </group> - </groups> -</form> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_pdm/variante_composant_view.form b/product/Coramy/skins/coramy_pdm/variante_composant_view.form deleted file mode 100755 index e4a581c7f4..0000000000 --- a/product/Coramy/skins/coramy_pdm/variante_composant_view.form +++ /dev/null @@ -1,348 +0,0 @@ -<?xml version="1.0"?> - -<form> - <title>Variante composant</title> - <row_length>4</row_length> - <name>variante_composant_view</name> - <pt>form_view</pt> - <action>base_edit</action> - <method>POST</method> - <enctype>multipart/form-data</enctype> - <encoding>UTF-8</encoding> - <stored_encoding>ISO-8859-1</stored_encoding> - <unicode_mode>false</unicode_mode> - <groups> - <group> - <title>left</title> - <fields> - - <field><id>my_id</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <max_length></max_length> - <required type="int">1</required> - <title>Variante</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - <field><id>my_description</id> <type>TextAreaField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <height type="int">5</height> - <hidden type="int">0</hidden> - <max_length></max_length> - <max_linelength></max_linelength> - <max_lines></max_lines> - <required type="int">0</required> - <title>Description</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - <width type="int">40</width> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_many_lines">You entered too many lines.</message> - <message name="line_too_long">A line was too long.</message> - <message name="too_long">You entered too many characters.</message> - </messages> - </field> - <field><id>my_source_reference</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <max_length></max_length> - <required type="int">0</required> - <title>Référence fournisseur</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - <field><id>my_source_base_price</id> <type>FloatField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <required type="int">0</required> - <title>Prix fournisseur</title> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="not_float">You did not enter a floating point number.</message> - </messages> - </field> - <field><id>my_base_price</id> <type>FloatField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <required type="int">0</required> - <title>Prix Coramy</title> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="not_float">You did not enter a floating point number.</message> - </messages> - </field> - <field><id>my_file</id> <type>FileField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <title>Fichier image</title> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>right</title> - <fields> - - <field><id>my_collection_list</id> <type>MultiListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default type="list">[]</default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <extra_item></extra_item> - <hidden type="int">0</hidden> - <items type="list">[]</items> - <required type="int">0</required> - <size type="int">5</size> - <title>Collection</title> - <unicode type="int">0</unicode> - <view_separator><br /> -</view_separator> - </values> - <tales> - <default>here/getCollectionList</default> - <items>here/portal_categories/collection/getFormItemList</items> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - <field><id>my_base_weight</id> <type>FloatField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <required type="int">0</required> - <title>Poids (g)</title> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="not_float">You did not enter a floating point number.</message> - </messages> - </field> - <field><id>my_base_length</id> <type>FloatField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <required type="int">0</required> - <title>Longueur (cm)</title> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="not_float">You did not enter a floating point number.</message> - </messages> - </field> - <field><id>my_base_width</id> <type>FloatField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <required type="int">0</required> - <title>Largeur (cm)</title> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="not_float">You did not enter a floating point number.</message> - </messages> - </field> - <field><id>my_base_height</id> <type>FloatField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <required type="int">0</required> - <title>Hauteur (cm)</title> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="not_float">You did not enter a floating point number.</message> - </messages> - </field> - <field><id>image</id> <type>ImageField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <image_display>thumbnail</image_display> - <image_format>jpg</image_format> - <image_resolution type="int">75</image_resolution> - <max_length></max_length> - <required type="int">0</required> - <title> </title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <default>here/absolute_url</default> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - </fields> - </group> - </groups> -</form> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_pdm/variante_gamme_view.form b/product/Coramy/skins/coramy_pdm/variante_gamme_view.form deleted file mode 100755 index bd45a293c8..0000000000 --- a/product/Coramy/skins/coramy_pdm/variante_gamme_view.form +++ /dev/null @@ -1,127 +0,0 @@ -<?xml version="1.0"?> - -<form> - <title>Variante gamme</title> - <row_length>4</row_length> - <name>variantegamme_view</name> - <pt>form_view</pt> - <action>base_edit</action> - <method>POST</method> - <enctype></enctype> - <encoding>UTF-8</encoding> - <stored_encoding>ISO-8859-1</stored_encoding> - <unicode_mode>false</unicode_mode> - <groups> - <group> - <title>left</title> - <fields> - - <field><id>my_id</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <max_length></max_length> - <required type="int">1</required> - <title>Variante</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - <field><id>my_description</id> <type>TextAreaField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <height type="int">3</height> - <hidden type="int">0</hidden> - <max_length></max_length> - <max_linelength></max_linelength> - <max_lines></max_lines> - <required type="int">0</required> - <title>Description</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - <width type="int">40</width> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_many_lines">You entered too many lines.</message> - <message name="line_too_long">A line was too long.</message> - <message name="too_long">You entered too many characters.</message> - </messages> - </field> - <field><id>my_couleur_relative_url_list</id> <type>MultiRelationStringField</type> - <values> - <alternate_name></alternate_name> - <base_category>couleur</base_category> - <catalog_index>relative_url</catalog_index> - <css_class></css_class> - <default type="list">[]</default> - <default_module>tissu</default_module> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <height type="int">5</height> - <hidden type="int">0</hidden> - <jump_method>base_jump_relation</jump_method> - <max_length></max_length> - <max_linelength></max_linelength> - <max_lines></max_lines> - <portal_type type="list">[('Variante Tissu', 'Variante Tissu')]</portal_type> - <required type="int">0</required> - <title>Coloris tissu</title> - <unicode type="int">0</unicode> - <update_method>base_update_relation</update_method> - <view_separator><br /> -</view_separator> - <whitespace_preserve type="int">0</whitespace_preserve> - <width type="int">40</width> - </values> - <tales> - <default>here/getCouleurRelativeUrlList</default> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_many_lines">You entered too many lines.</message> - <message name="line_too_long">A line was too long.</message> - <message name="too_long">You entered too many characters.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>right</title> - <fields> - - </fields> - </group> - </groups> -</form> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_pdm/variante_modele_view.form b/product/Coramy/skins/coramy_pdm/variante_modele_view.form deleted file mode 100755 index c65538f9e1..0000000000 --- a/product/Coramy/skins/coramy_pdm/variante_modele_view.form +++ /dev/null @@ -1,188 +0,0 @@ -<?xml version="1.0"?> - -<form> - <title>Variante modèle</title> - <row_length>4</row_length> - <name>variante_modele_view</name> - <pt>form_view</pt> - <action>base_edit</action> - <method>POST</method> - <enctype>multipart/form-data</enctype> - <encoding>UTF-8</encoding> - <stored_encoding>ISO-8859-1</stored_encoding> - <unicode_mode>false</unicode_mode> - <groups> - <group> - <title>left</title> - <fields> - - <field><id>my_id</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <max_length></max_length> - <required type="int">1</required> - <title>Variante</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - <field><id>my_description</id> <type>TextAreaField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <height type="int">3</height> - <hidden type="int">0</hidden> - <max_length></max_length> - <max_linelength></max_linelength> - <max_lines></max_lines> - <required type="int">0</required> - <title>Description</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - <width type="int">40</width> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_many_lines">You entered too many lines.</message> - <message name="line_too_long">A line was too long.</message> - <message name="too_long">You entered too many characters.</message> - </messages> - </field> - <field><id>my_destination_reference</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <max_length></max_length> - <required type="int">0</required> - <title>Coloris client</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - <field><id>my_prototype</id> <type>CheckBoxField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default type="int">0</default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <title>Prototype</title> - </values> - <tales> - <default>here/getPrototype</default> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - </messages> - </field> - <field><id>my_file</id> <type>FileField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <title>Fichier image</title> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>right</title> - <fields> - - <field><id>image</id> <type>ImageField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <image_display>thumbnail</image_display> - <image_format>jpg</image_format> - <image_resolution type="int">75</image_resolution> - <max_length></max_length> - <required type="int">0</required> - <title> </title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <default>here/absolute_url</default> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - </fields> - </group> - </groups> -</form> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_pdm/variante_morphologique_view.form b/product/Coramy/skins/coramy_pdm/variante_morphologique_view.form deleted file mode 100755 index 23ddc9ce39..0000000000 --- a/product/Coramy/skins/coramy_pdm/variante_morphologique_view.form +++ /dev/null @@ -1,156 +0,0 @@ -<?xml version="1.0"?> - -<form> - <title>Variante morphologique</title> - <row_length>4</row_length> - <name>variante_morphologique_view</name> - <pt>form_view</pt> - <action>base_edit</action> - <method>POST</method> - <enctype></enctype> - <encoding>UTF-8</encoding> - <stored_encoding>ISO-8859-1</stored_encoding> - <unicode_mode>false</unicode_mode> - <groups> - <group> - <title>left</title> - <fields> - - <field><id>my_id</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <max_length></max_length> - <required type="int">1</required> - <title>Variante morphologique</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - <field><id>my_morpho_type</id> <type>ListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <extra_item></extra_item> - <first_item type="int">0</first_item> - <hidden type="int">0</hidden> - <items type="list">[]</items> - <required type="int">0</required> - <size type="int">1</size> - <title>Morphologie</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <items>here/portal_categories/morpho_type/getFormItemList</items> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - <field><id>my_description</id> <type>TextAreaField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <height type="int">3</height> - <hidden type="int">0</hidden> - <max_length></max_length> - <max_linelength></max_linelength> - <max_lines></max_lines> - <required type="int">0</required> - <title>Description</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - <width type="int">40</width> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_many_lines">You entered too many lines.</message> - <message name="line_too_long">A line was too long.</message> - <message name="too_long">You entered too many characters.</message> - </messages> - </field> - <field><id>my_vetement_id_list</id> <type>MultiRelationStringField</type> - <values> - <alternate_name></alternate_name> - <base_category>specialise</base_category> - <catalog_index>id</catalog_index> - <css_class></css_class> - <default type="list">[]</default> - <default_module>forme</default_module> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <height type="int">2</height> - <hidden type="int">0</hidden> - <jump_method>base_jump_relation</jump_method> - <max_length></max_length> - <max_linelength></max_linelength> - <max_lines></max_lines> - <portal_type type="list">[('Vetement', 'Vetement')]</portal_type> - <required type="int">0</required> - <title>Vêtements</title> - <unicode type="int">0</unicode> - <update_method>base_update_relation</update_method> - <view_separator><br /> -</view_separator> - <whitespace_preserve type="int">0</whitespace_preserve> - <width type="int">20</width> - </values> - <tales> - <default>here/getVetementIdList</default> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_many_lines">You entered too many lines.</message> - <message name="line_too_long">A line was too long.</message> - <message name="too_long">You entered too many characters.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>right</title> - <fields> - - </fields> - </group> - </groups> -</form> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_pdm/variante_tissu_view.form b/product/Coramy/skins/coramy_pdm/variante_tissu_view.form deleted file mode 100755 index 814bd7a4ae..0000000000 --- a/product/Coramy/skins/coramy_pdm/variante_tissu_view.form +++ /dev/null @@ -1,278 +0,0 @@ -<?xml version="1.0"?> - -<form> - <title>Variante tissu</title> - <row_length>4</row_length> - <name>variante_modele_view</name> - <pt>form_view</pt> - <action>base_edit</action> - <method>POST</method> - <enctype>multipart/form-data</enctype> - <encoding>UTF-8</encoding> - <stored_encoding>ISO-8859-1</stored_encoding> - <unicode_mode>false</unicode_mode> - <groups> - <group> - <title>left</title> - <fields> - - <field><id>my_id</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <max_length></max_length> - <required type="int">1</required> - <title>Variante</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - <field><id>my_description</id> <type>TextAreaField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <height type="int">3</height> - <hidden type="int">0</hidden> - <max_length></max_length> - <max_linelength></max_linelength> - <max_lines></max_lines> - <required type="int">0</required> - <title>Description</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - <width type="int">40</width> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_many_lines">You entered too many lines.</message> - <message name="line_too_long">A line was too long.</message> - <message name="too_long">You entered too many characters.</message> - </messages> - </field> - <field><id>my_source_reference</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <max_length></max_length> - <required type="int">0</required> - <title>Référence fournisseur</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - <field><id>my_source_base_price</id> <type>FloatField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <required type="int">0</required> - <title>Prix fournisseur</title> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="not_float">You did not enter a floating point number.</message> - </messages> - </field> - <field><id>my_base_price</id> <type>FloatField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <required type="int">0</required> - <title>Prix Coramy</title> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="not_float">You did not enter a floating point number.</message> - </messages> - </field> - <field><id>my_file</id> <type>FileField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <title>Fichier image</title> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>right</title> - <fields> - - <field><id>my_collection_list</id> <type>MultiListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default type="list">[]</default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <extra_item></extra_item> - <hidden type="int">0</hidden> - <items type="list">[]</items> - <required type="int">0</required> - <size type="int">5</size> - <title>Collection</title> - <unicode type="int">0</unicode> - <view_separator><br /> -</view_separator> - </values> - <tales> - <default>here/getCollectionList</default> - <items>here/portal_categories/collection/getFormItemList</items> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - <field><id>my_referentiel_couleur_list</id> <type>MultiListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default type="list">[]</default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <extra_item></extra_item> - <hidden type="int">0</hidden> - <items type="list">[]</items> - <required type="int">0</required> - <size type="int">5</size> - <title>Référentiel couleur</title> - <unicode type="int">0</unicode> - <view_separator><br /> -</view_separator> - </values> - <tales> - <default>here/getReferentielCouleurList</default> - <items>here/portal_categories/referentiel_couleur/getFormItemList</items> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - <field><id>image</id> <type>ImageField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <image_display>thumbnail</image_display> - <image_format>jpg</image_format> - <image_resolution type="int">75</image_resolution> - <max_length></max_length> - <required type="int">0</required> - <title> </title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <default>here/absolute_url</default> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - </fields> - </group> - </groups> -</form> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_pdm/variated_property_view.form b/product/Coramy/skins/coramy_pdm/variated_property_view.form deleted file mode 100755 index 1bd0dbcc2f..0000000000 --- a/product/Coramy/skins/coramy_pdm/variated_property_view.form +++ /dev/null @@ -1,357 +0,0 @@ -<?xml version="1.0"?> - -<form> - <title></title> - <row_length>4</row_length> - <name>transformed_resource_variation_view</name> - <pt>form_view</pt> - <action>base_edit</action> - <method>POST</method> - <enctype>multipart/form-data</enctype> - <encoding>UTF-8</encoding> - <stored_encoding>ISO-8859-1</stored_encoding> - <unicode_mode>false</unicode_mode> - <groups> - <group> - <title>Default</title> - <fields> - - <field><id>my_variation_base_category_column</id> <type>ListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <extra_item></extra_item> - <first_item type="int">0</first_item> - <hidden type="int">0</hidden> - <items type="list">[]</items> - <required type="int">0</required> - <size type="int">1</size> - <title>Affichage en colonnes</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <items>here/getVariationRangeBaseCategoryItemList</items> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - <field><id>my_variation_base_category_line</id> <type>ListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <extra_item></extra_item> - <first_item type="int">0</first_item> - <hidden type="int">0</hidden> - <items type="list">[]</items> - <required type="int">0</required> - <size type="int">1</size> - <title>Affichage en lignes</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <items>here/getVariationRangeBaseCategoryItemList</items> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - <field><id>my_mapped_value_property_list</id> <type>LinesField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default type="list">[]</default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <height type="int">5</height> - <hidden type="int">0</hidden> - <max_length></max_length> - <max_linelength></max_linelength> - <max_lines></max_lines> - <required type="int">0</required> - <title>Modified properties</title> - <unicode type="int">0</unicode> - <view_separator><br /> -</view_separator> - <whitespace_preserve type="int">0</whitespace_preserve> - <width type="int">40</width> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_many_lines">You entered too many lines.</message> - <message name="line_too_long">A line was too long.</message> - <message name="too_long">You entered too many characters.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>right</title> - <fields> - - <field><id>my_variation_base_category_tab</id> <type>MultiListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default type="list">[]</default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <extra_item></extra_item> - <hidden type="int">0</hidden> - <items type="list">[]</items> - <required type="int">0</required> - <size type="int">3</size> - <title>Affichage en tableaux</title> - <unicode type="int">0</unicode> - <view_separator><br /> -</view_separator> - </values> - <tales> - <items>here/getVariationRangeBaseCategoryItemList</items> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>center</title> - <fields> - - </fields> - </group> - <group> - <title>bottom</title> - <fields> - - <field><id>matrixbox</id> <type>MatrixBox</type> - <values> - <all_editable_attributes type="list">[('variated_property', 'variated_property'), ('predicate_value', 'predicate_value')]</all_editable_attributes> - <alternate_name></alternate_name> - <cell_base_id>cell</cell_base_id> - <cell_range type="list">[]</cell_range> - <columns type="list">[('32', '32'), ('34', '34'), ('36', '36'), ('38', '38')]</columns> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <editable_attributes type="list">[('variated_property', 'variated_property'), ('predicate_value', 'predicate_value')]</editable_attributes> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <getter_method></getter_method> - <global_attributes type="list">[('domain_base_category_list', 'domain_base_category_list'), ('mapped_value_property_list', 'mapped_value_property_list'), ('predicate_operator', 'predicate_operator')]</global_attributes> - <hidden type="int">0</hidden> - <lines type="list">[('Bleu', 'Bleu'), ('Rouge', 'Rouge'), ('Verts', 'Verts')]</lines> - <setter_method></setter_method> - <tabs type="list">[('32', '32'), ('34', '34'), ('36', '36'), ('38', '38')]</tabs> - <title>matrixbox</title> - <update_cell_range type="int">1</update_cell_range> - </values> - <tales> - <columns>here/getColumnVariationRangeCategoryItemList</columns> - <lines>here/getLineVariationRangeCategoryItemList</lines> - <tabs>here/getTabVariationRangeCategoryItemList</tabs> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - </messages> - </field> - <field><id>domain_base_category_list</id> <type>LinesField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default type="list">[]</default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <height type="int">5</height> - <hidden type="int">1</hidden> - <max_length></max_length> - <max_linelength></max_linelength> - <max_lines></max_lines> - <required type="int">0</required> - <title>Valid Domain</title> - <unicode type="int">0</unicode> - <view_separator><br /> -</view_separator> - <whitespace_preserve type="int">0</whitespace_preserve> - <width type="int">40</width> - </values> - <tales> - <default>here/getMatrixVariationRangeBaseCategoryList</default> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_many_lines">You entered too many lines.</message> - <message name="line_too_long">A line was too long.</message> - <message name="too_long">You entered too many characters.</message> - </messages> - </field> - <field><id>predicate_operator</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default>SUPERSET_OF</default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">1</hidden> - <max_length></max_length> - <required type="int">0</required> - <title>Operator</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - <field><id>mapped_value_property_list</id> <type>LinesField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default type="list">[]</default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <height type="int">5</height> - <hidden type="int">1</hidden> - <max_length></max_length> - <max_linelength></max_linelength> - <max_lines></max_lines> - <required type="int">0</required> - <title>Modified categories</title> - <unicode type="int">0</unicode> - <view_separator><br /> -</view_separator> - <whitespace_preserve type="int">0</whitespace_preserve> - <width type="int">40</width> - </values> - <tales> - <default>here/getMappedValuePropertyList</default> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_many_lines">You entered too many lines.</message> - <message name="line_too_long">A line was too long.</message> - <message name="too_long">You entered too many characters.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>hidden</title> - <fields> - - <field><id>matrixbox_predicate_value</id> <type>LinesField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default type="list">[]</default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <height type="int">5</height> - <hidden type="int">1</hidden> - <max_length></max_length> - <max_linelength></max_linelength> - <max_lines></max_lines> - <required type="int">0</required> - <title>matrixbox_predicate_value</title> - <unicode type="int">0</unicode> - <view_separator><br /> -</view_separator> - <whitespace_preserve type="int">0</whitespace_preserve> - <width type="int">40</width> - </values> - <tales> - <default>python:cell_index</default> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_many_lines">You entered too many lines.</message> - <message name="line_too_long">A line was too long.</message> - <message name="too_long">You entered too many characters.</message> - </messages> - </field> - <field><id>matrixbox_variated_property</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">5</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <max_length></max_length> - <required type="int">0</required> - <title>matrixbox_value</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <default>python:cell.getProperty(here.mapped_value_property_list[0])</default> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - </fields> - </group> - </groups> -</form> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_pdm/variated_reference_matrix_item_list.py b/product/Coramy/skins/coramy_pdm/variated_reference_matrix_item_list.py deleted file mode 100755 index 10346d1d94..0000000000 --- a/product/Coramy/skins/coramy_pdm/variated_reference_matrix_item_list.py +++ /dev/null @@ -1,41 +0,0 @@ -## Script (Python) "variated_reference_matrix_item_list" -##bind container=container -##bind context=context -##bind namespace= -##bind script=script -##bind subpath=traverse_subpath -##parameters=base_category_list=[], base=1, include=1 -##title= -## -clist = [] -variation_category_list=[] - -if include == 1 : - for category in context.getVariationBaseCategoryList(): - if category in base_category_list : - variation_category_list.append(category) -else : - for category in context.getVariationBaseCategoryList(): - if not category in base_category_list : - variation_category_list.append(category) - -for base_category in variation_category_list : - if base_category in ('coloris','morphologie','variante'): - raw_list = context.aq_parent.getVariationRangeCategoryItemList(base_category, base=0) - value_list = [] - title_list = [] - for item in raw_list : - title_list.append(item[0]) - value_list.append(base_category+'/'+item[1]) - for index in range(len(title_list)) : - clist += [(value_list[index],title_list[index])] - else : - title_list = context.aq_parent.getCategoryMembershipList(base_category, base=0) - value_list = context.aq_parent.getCategoryMembershipList(base_category, base=base) - for index in range(len(title_list)) : - clist += [(value_list[index],title_list[index])] - -if len(clist)==0 : - clist.append((None,None)) - -return clist diff --git a/product/Coramy/skins/coramy_pdm/variated_reference_view.form b/product/Coramy/skins/coramy_pdm/variated_reference_view.form deleted file mode 100755 index 31be2c4f84..0000000000 --- a/product/Coramy/skins/coramy_pdm/variated_reference_view.form +++ /dev/null @@ -1,355 +0,0 @@ -<?xml version="1.0"?> - -<form> - <title></title> - <row_length>4</row_length> - <name>transformed_resource_variation_view</name> - <pt>form_view</pt> - <action>base_edit</action> - <method>POST</method> - <enctype>multipart/form-data</enctype> - <encoding>UTF-8</encoding> - <stored_encoding>ISO-8859-1</stored_encoding> - <unicode_mode>false</unicode_mode> - <groups> - <group> - <title>Default</title> - <fields> - - <field><id>my_id</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <max_length></max_length> - <required type="int">1</required> - <title>Référence</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - <field><id>my_mapped_value_property_list</id> <type>ListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <extra_item></extra_item> - <first_item type="int">0</first_item> - <hidden type="int">0</hidden> - <items type="list">[]</items> - <required type="int">0</required> - <size type="int">1</size> - <title>Type</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <default>python:here.getMappedValuePropertyList()[0]</default> - <items>here/portal_categories/reference_article/getFormItemList</items> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - <field><id>my_description</id> <type>TextAreaField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <height type="int">3</height> - <hidden type="int">0</hidden> - <max_length></max_length> - <max_linelength></max_linelength> - <max_lines></max_lines> - <required type="int">0</required> - <title>Description</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - <width type="int">40</width> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_many_lines">You entered too many lines.</message> - <message name="line_too_long">A line was too long.</message> - <message name="too_long">You entered too many characters.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>right</title> - <fields> - - <field><id>my_variation_base_category_list</id> <type>MultiListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default type="list">[]</default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <extra_item></extra_item> - <hidden type="int">0</hidden> - <items type="list">[]</items> - <required type="int">0</required> - <size type="int">5</size> - <title>Axes variation</title> - <unicode type="int">0</unicode> - <view_separator><br /> -</view_separator> - </values> - <tales> - <items>python:here.aq_parent.getVariationBaseCategoryList()</items> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>center</title> - <fields> - - </fields> - </group> - <group> - <title>bottom</title> - <fields> - - <field><id>matrixbox</id> <type>MatrixBox</type> - <values> - <all_editable_attributes type="list">[('variated_property', 'variated_property'), ('predicate_value', 'predicate_value')]</all_editable_attributes> - <alternate_name></alternate_name> - <cell_base_id>cell</cell_base_id> - <cell_range type="list">[]</cell_range> - <columns type="list">[('None', 'None')]</columns> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <editable_attributes type="list">[('variated_property', 'variated_property'), ('predicate_value', 'predicate_value')]</editable_attributes> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <getter_method></getter_method> - <global_attributes type="list">[('domain_base_category_list', 'domain_base_category_list'), ('mapped_value_property_list', 'mapped_value_property_list'), ('predicate_operator', 'predicate_operator')]</global_attributes> - <hidden type="int">0</hidden> - <lines type="list">[('None', 'None')]</lines> - <setter_method></setter_method> - <tabs type="list">[('None', 'None')]</tabs> - <title>matrixbox</title> - <update_cell_range type="int">1</update_cell_range> - </values> - <tales> - <columns>python:here.variated_reference_matrix_item_list(base_category_list = ('taille',), base=1)</columns> - <lines>python:here.variated_reference_matrix_item_list(base_category_list = ('coloris',), base=1)</lines> - <tabs>python:here.variated_reference_matrix_item_list(base_category_list = ('taille','coloris',), base=1, include=0)</tabs> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - </messages> - </field> - <field><id>domain_base_category_list</id> <type>LinesField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default type="list">[]</default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <height type="int">5</height> - <hidden type="int">1</hidden> - <max_length></max_length> - <max_linelength></max_linelength> - <max_lines></max_lines> - <required type="int">0</required> - <title>Valid Domain</title> - <unicode type="int">0</unicode> - <view_separator><br /> -</view_separator> - <whitespace_preserve type="int">0</whitespace_preserve> - <width type="int">40</width> - </values> - <tales> - <default>here/getVariationBaseCategoryList</default> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_many_lines">You entered too many lines.</message> - <message name="line_too_long">A line was too long.</message> - <message name="too_long">You entered too many characters.</message> - </messages> - </field> - <field><id>predicate_operator</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default>SUPERSET_OF</default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">1</hidden> - <max_length></max_length> - <required type="int">0</required> - <title>Operator</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - <field><id>mapped_value_property_list</id> <type>LinesField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default type="list">[]</default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <height type="int">5</height> - <hidden type="int">1</hidden> - <max_length></max_length> - <max_linelength></max_linelength> - <max_lines></max_lines> - <required type="int">0</required> - <title>Modified categories</title> - <unicode type="int">0</unicode> - <view_separator><br /> -</view_separator> - <whitespace_preserve type="int">0</whitespace_preserve> - <width type="int">40</width> - </values> - <tales> - <default>here/getMappedValuePropertyList</default> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_many_lines">You entered too many lines.</message> - <message name="line_too_long">A line was too long.</message> - <message name="too_long">You entered too many characters.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>hidden</title> - <fields> - - <field><id>matrixbox_predicate_value</id> <type>LinesField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default type="list">[]</default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <height type="int">5</height> - <hidden type="int">1</hidden> - <max_length></max_length> - <max_linelength></max_linelength> - <max_lines></max_lines> - <required type="int">0</required> - <title>matrixbox_predicate_value</title> - <unicode type="int">0</unicode> - <view_separator><br /> -</view_separator> - <whitespace_preserve type="int">0</whitespace_preserve> - <width type="int">40</width> - </values> - <tales> - <default>python:filter(lambda x: x is not None,cell_index)</default> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_many_lines">You entered too many lines.</message> - <message name="line_too_long">A line was too long.</message> - <message name="too_long">You entered too many characters.</message> - </messages> - </field> - <field><id>matrixbox_variated_property</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <max_length></max_length> - <required type="int">0</required> - <title>matrixbox_value</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <default>python:cell.getProperty(here.mapped_value_property_list[0])</default> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - </fields> - </group> - </groups> -</form> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_pdm/variated_references_set_gencod_coramy.py b/product/Coramy/skins/coramy_pdm/variated_references_set_gencod_coramy.py deleted file mode 100755 index 1ca7545023..0000000000 --- a/product/Coramy/skins/coramy_pdm/variated_references_set_gencod_coramy.py +++ /dev/null @@ -1,67 +0,0 @@ -## Script (Python) "variated_references_set_gencod_coramy" -##bind container=container -##bind context=context -##bind namespace= -##bind script=script -##bind subpath=traverse_subpath -##parameters=form_id='' -##title= -## -request = context.REQUEST - -# mise à jour du range de la matrice - -line = map((lambda x:x[0]),context.variated_reference_matrix_item_list(base_category_list = ('coloris','variante'), base=1)) -column = map((lambda x:x[0]),context.variated_reference_matrix_item_list(base_category_list = ('taille',), base=1)) -tab = map((lambda x:x[0]),context.variated_reference_matrix_item_list(base_category_list = ('taille','coloris','variante'), base=1, include=0)) - -if line <> [None] : - if column <> [None] : - if tab <> [None] : - context.setCellRange(line,column,tab,base_id="cell") - else : - context.setCellRange(line,column,base_id="cell") - else : - if tab <> [None] : - context.setCellRange(line,tab,base_id="cell") - else : - context.setCellRange(line,base_id="cell") -elif column <> [None] : - if tab <> [None] : - context.setCellRange(column,tab,base_id="cell") - else : - context.setCellRange(column,base_id="cell") -elif tab <> [None] : - context.setCellRange(tab,base_id="cell") - -# boucle sur les cellules de matrice pour les remplir -cell_keys = context.getCellKeys(base_id="cell") -for keys_item in cell_keys : - cancel = 0 - if len(keys_item) == 3 : - cell = context.newCell(keys_item[0],keys_item[1],keys_item[2], base_id='cell') - elif len(keys_item) == 2 : - cell = context.newCell(keys_item[0],keys_item[1], base_id='cell') - elif len(keys_item) == 1 : - cell = context.newCell(keys_item[0], base_id='cell') - else : - cancel = 1 - - if cancel == 0: - cell.edit(mapped_value_property_list = 'code_ean13', - domain_base_category_list = context.getVariationBaseCategoryList(), - predicate_operator = 'SUPERSET_OF', - predicate_value_list = keys_item) - societe = context.portal_categories.group.Coramy - country = societe.country - CNUF = societe.CNUF - CIP = societe.CIP - cell.edit(code_ean13 = context.new_ean13_code(country,CNUF,CIP)) - societe.edit(CIP = CIP+1) - -redirect_url = '%s/%s?%s' % ( context.absolute_url() - , form_id - , 'portal_status_message=Gencods+mis+a+jour.' - ) - -request[ 'RESPONSE' ].redirect( redirect_url ) diff --git a/product/Coramy/skins/coramy_pdm/verif_modele.py b/product/Coramy/skins/coramy_pdm/verif_modele.py deleted file mode 100755 index 62cdf77e6e..0000000000 --- a/product/Coramy/skins/coramy_pdm/verif_modele.py +++ /dev/null @@ -1,50 +0,0 @@ -## Script (Python) "verif_modele" -##bind container=container -##bind context=context -##bind namespace= -##bind script=script -##bind subpath=traverse_subpath -##parameters= -##title= -## -# in the case where there's nothing to print -print " " - -for o in context.objectValues("CORAMY Modele"): - print o.id - nb_forme = 0 - for forme in o.getCategoryMembershipList(('eid','specialise'),portal_type='Forme'): - nb_forme+=1 - forme_path = '/coramy/' + forme - ob_search = context.restrictedTraverse(path=forme_path,default=None) - if ob_search is None: - print " cette forme n'existe pas: " + forme - else: - ob_search_list = context.portal_catalog.searchResults(path=forme_path) - if len(ob_search_list) == 0: - print " cette forme existe mais n'est pas dans le catalog: " + forme - - if nb_forme == 2: - print " Il y a deux Formes pour : " + o.id - if nb_forme == 0: - print " Il n'y a pas de Formes pour : " + o.id - - nb_vetement = 0 - for vetement in o.getCategoryMembershipList(('eid','specialise'),portal_type='Vetement'): - nb_vetement+=1 - vetement_path = '/coramy/' + vetement - ob_search = context.restrictedTraverse(path=vetement_path,default=None) - if ob_search is None: - print " ce vetement n'existe pas: " + vetement - else: - ob_search_list = context.portal_catalog.searchResults(path=vetement_path) - if len(ob_search_list) == 0: - print " ce vetement existe mais n'est pas dans le catalog: " + vetement - if nb_vetement == 2: - print " Il y a deux Vetements pour : " + o.id - - if nb_vetement == 0: - print " Il n'y a pas de Vetements pour : " + o.id - - -return printed diff --git a/product/Coramy/skins/coramy_pdm/vetement_bareme_mesures_view.form b/product/Coramy/skins/coramy_pdm/vetement_bareme_mesures_view.form deleted file mode 100755 index 3d7f87a402..0000000000 --- a/product/Coramy/skins/coramy_pdm/vetement_bareme_mesures_view.form +++ /dev/null @@ -1,290 +0,0 @@ -<?xml version="1.0"?> - -<form> - <title>Vetement</title> - <row_length>4</row_length> - <name>transformed_resource_variation_view</name> - <pt>form_view</pt> - <action>base_edit</action> - <method>POST</method> - <enctype></enctype> - <encoding>UTF-8</encoding> - <stored_encoding>ISO-8859-1</stored_encoding> - <unicode_mode>false</unicode_mode> - <groups> - <group> - <title>Default</title> - <fields> - - <field><id>my_id</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <max_length></max_length> - <required type="int">1</required> - <title>Vêtement</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>right</title> - <fields> - - </fields> - </group> - <group> - <title>center</title> - <fields> - - </fields> - </group> - <group> - <title>bottom</title> - <fields> - - <field><id>matrixbox</id> <type>MatrixBox</type> - <values> - <all_editable_attributes type="list">[('mesure_coramy', 'mesure_coramy'), ('predicate_value', 'predicate_value')]</all_editable_attributes> - <alternate_name></alternate_name> - <cell_base_id>mesure_coramy</cell_base_id> - <cell_range type="list">[]</cell_range> - <columns type="list">[('32', '32'), ('34', '34'), ('36', '36'), ('38', '38')]</columns> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <editable_attributes type="list">[('mesure_coramy', 'mesure_coramy'), ('predicate_value', 'predicate_value')]</editable_attributes> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <getter_method></getter_method> - <global_attributes type="list">[('domain_base_category_list', 'domain_base_category_list'), ('mapped_value_property_list', 'mapped_value_property_list'), ('predicate_operator', 'predicate_operator')]</global_attributes> - <hidden type="int">0</hidden> - <lines type="list">[('Bleu', 'Bleu'), ('Rouge', 'Rouge'), ('Verts', 'Verts')]</lines> - <setter_method></setter_method> - <tabs type="list">[]</tabs> - <title>matrixbox</title> - <update_cell_range type="int">0</update_cell_range> - </values> - <tales> - <columns>here/getTailleItemList</columns> - <lines>here/getMesureVetementItemList</lines> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - </messages> - </field> - <field><id>domain_base_category_list</id> <type>LinesField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default type="list">[]</default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <height type="int">5</height> - <hidden type="int">1</hidden> - <max_length></max_length> - <max_linelength></max_linelength> - <max_lines></max_lines> - <required type="int">0</required> - <title>Valid Domain</title> - <unicode type="int">0</unicode> - <view_separator><br /> -</view_separator> - <whitespace_preserve type="int">0</whitespace_preserve> - <width type="int">40</width> - </values> - <tales> - <default>python:here.portal_categories.mesure_vetement.id</default> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_many_lines">You entered too many lines.</message> - <message name="line_too_long">A line was too long.</message> - <message name="too_long">You entered too many characters.</message> - </messages> - </field> - <field><id>mapped_value_property_list</id> <type>LinesField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default type="list">['mesure_coramy']</default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <height type="int">5</height> - <hidden type="int">1</hidden> - <max_length></max_length> - <max_linelength></max_linelength> - <max_lines></max_lines> - <required type="int">0</required> - <title>Modified categories</title> - <unicode type="int">0</unicode> - <view_separator><br /> -</view_separator> - <whitespace_preserve type="int">0</whitespace_preserve> - <width type="int">40</width> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_many_lines">You entered too many lines.</message> - <message name="line_too_long">A line was too long.</message> - <message name="too_long">You entered too many characters.</message> - </messages> - </field> - <field><id>predicate_operator</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default>SUPERSET_OF</default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">1</hidden> - <max_length></max_length> - <required type="int">0</required> - <title>Operator</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>hidden</title> - <fields> - - <field><id>matrixbox_predicate_value</id> <type>LinesField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default type="list">[]</default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <height type="int">5</height> - <hidden type="int">1</hidden> - <max_length></max_length> - <max_linelength></max_linelength> - <max_lines></max_lines> - <required type="int">0</required> - <title>matrixbox_predicate_value</title> - <unicode type="int">0</unicode> - <view_separator><br /> -</view_separator> - <whitespace_preserve type="int">0</whitespace_preserve> - <width type="int">40</width> - </values> - <tales> - <default>python:cell_index</default> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_many_lines">You entered too many lines.</message> - <message name="line_too_long">A line was too long.</message> - <message name="too_long">You entered too many characters.</message> - </messages> - </field> - <field><id>matrixbox_variation_category_list</id> <type>MultiListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default type="list">[]</default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <extra_item></extra_item> - <hidden type="int">0</hidden> - <items type="list">[]</items> - <required type="int">0</required> - <size type="int">5</size> - <title>matrixbox_value</title> - <unicode type="int">0</unicode> - <view_separator><br /> -</view_separator> - </values> - <tales> - <default>cell/getVariationCategoryList | string:Error</default> - <items>here/getVariationRangeCategoryItemList</items> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - <field><id>matrixbox_mesure_coramy</id> <type>FloatField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">10</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <required type="int">0</required> - <title>Mesure Coramy</title> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <default>cell/mesure_coramy | string:</default> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="not_float">You did not enter a floating point number.</message> - </messages> - </field> - </fields> - </group> - </groups> -</form> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_pdm/vetement_list.form b/product/Coramy/skins/coramy_pdm/vetement_list.form deleted file mode 100755 index 2ce70fad54..0000000000 --- a/product/Coramy/skins/coramy_pdm/vetement_list.form +++ /dev/null @@ -1,67 +0,0 @@ -<?xml version="1.0"?> - -<form> - <title>Liste de vêtements</title> - <row_length>4</row_length> - <name>vetement_list</name> - <pt>form_list</pt> - <action></action> - <method>POST</method> - <enctype></enctype> - <encoding>UTF-8</encoding> - <stored_encoding>ISO-8859-1</stored_encoding> - <unicode_mode>false</unicode_mode> - <groups> - <group> - <title>Default</title> - <fields> - - <field><id>listbox</id> <type>ListBox</type> - <values> - <all_columns type="list">[('id', 'V\xeatement'), ('relative_url', "Chemin d'acc\xe8s"), ('Description', 'Description')]</all_columns> - <all_editable_columns type="list">[]</all_editable_columns> - <alternate_name></alternate_name> - <columns type="list">[('id', 'V\xeatement'), ('relative_url', "Chemin d'acc\xe8s"), ('Description', 'Description')]</columns> - <css_class></css_class> - <default></default> - <default_params type="list">[]</default_params> - <description></description> - <domain_root_list type="list">[]</domain_root_list> - <domain_tree type="int">0</domain_tree> - <editable type="int">1</editable> - <editable_columns type="list">[]</editable_columns> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <global_attributes type="list">[]</global_attributes> - <height type="int">5</height> - <hidden type="int">0</hidden> - <lines type="int">50</lines> - <list_action>list</list_action> - <list_cookie>SEARCH_LIST</list_cookie> - <list_method type="method">searchFolder</list_method> - <meta_types type="list">[]</meta_types> - <portal_types type="list">[('Vetement', 'Vetement')]</portal_types> - <report_root_list type="list">[]</report_root_list> - <report_tree type="int">0</report_tree> - <reverse type="int">0</reverse> - <search type="int">1</search> - <search_columns type="list">[]</search_columns> - <select type="int">1</select> - <selection_name>vetement_selection</selection_name> - <sort type="list">[('id', 'id')]</sort> - <sort_columns></sort_columns> - <stat_method></stat_method> - <title>Vêtements</title> - <width type="int">40</width> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - </messages> - </field> - </fields> - </group> - </groups> -</form> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_pdm/vetement_mesures_auto_selection.py b/product/Coramy/skins/coramy_pdm/vetement_mesures_auto_selection.py deleted file mode 100755 index 6229e10b2a..0000000000 --- a/product/Coramy/skins/coramy_pdm/vetement_mesures_auto_selection.py +++ /dev/null @@ -1,30 +0,0 @@ -## Script (Python) "vetement_mesures_auto_selection" -##bind container=container -##bind context=context -##bind namespace= -##bind script=script -##bind subpath=traverse_subpath -##parameters=form_id='' -##title= -## -request = context.REQUEST -vetement = context -correspondance = vetement.getDefaultValue('specialise',portal_type=['Correspondance Mesures']) - -if correspondance <> None : - mesures_list = correspondance.getMesureVetementList() - vetement.edit(mesure_vetement = mesures_list) - redirect_url = '%s/%s?%s' % ( context.absolute_url() - , form_id - , 'portal_status_message=Mesures+selectionnees.' - ) - -else : - - redirect_url = '%s/%s?%s' % ( context.absolute_url() - , form_id - , 'portal_status_message=Pas+de+correspondance+définie.' - ) - - -request[ 'RESPONSE' ].redirect( redirect_url ) diff --git a/product/Coramy/skins/coramy_pdm/vetement_mise_au_point_view.form b/product/Coramy/skins/coramy_pdm/vetement_mise_au_point_view.form deleted file mode 100755 index fe594537e7..0000000000 --- a/product/Coramy/skins/coramy_pdm/vetement_mise_au_point_view.form +++ /dev/null @@ -1,102 +0,0 @@ -<?xml version="1.0"?> - -<form> - <title>Vêtement</title> - <row_length>4</row_length> - <name>vetement_mise_au_point_view</name> - <pt>form_view</pt> - <action>base_edit</action> - <method>POST</method> - <enctype></enctype> - <encoding>UTF-8</encoding> - <stored_encoding>ISO-8859-1</stored_encoding> - <unicode_mode>false</unicode_mode> - <groups> - <group> - <title>left</title> - <fields> - - </fields> - </group> - <group> - <title>right</title> - <fields> - - </fields> - </group> - <group> - <title>center</title> - <fields> - - <field><id>my_nomenclature</id> <type>TextAreaField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <height type="int">10</height> - <hidden type="int">0</hidden> - <max_length></max_length> - <max_linelength></max_linelength> - <max_lines></max_lines> - <required type="int">0</required> - <title>Nomenclature</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - <width type="int">80</width> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_many_lines">You entered too many lines.</message> - <message name="line_too_long">A line was too long.</message> - <message name="too_long">You entered too many characters.</message> - </messages> - </field> - <field><id>my_mode_operatoire</id> <type>TextAreaField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <height type="int">10</height> - <hidden type="int">0</hidden> - <max_length></max_length> - <max_linelength></max_linelength> - <max_lines></max_lines> - <required type="int">0</required> - <title>Mode opératoire</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - <width type="int">80</width> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_many_lines">You entered too many lines.</message> - <message name="line_too_long">A line was too long.</message> - <message name="too_long">You entered too many characters.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>bottom</title> - <fields> - - </fields> - </group> - </groups> -</form> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_pdm/vetement_related_modele_view.form b/product/Coramy/skins/coramy_pdm/vetement_related_modele_view.form deleted file mode 100755 index 79b5d4d89a..0000000000 --- a/product/Coramy/skins/coramy_pdm/vetement_related_modele_view.form +++ /dev/null @@ -1,309 +0,0 @@ -<?xml version="1.0" encoding="iso-8859-1"?> - -<form> - <title>Vetement</title> - <name>vetement_view</name> - <action>base_edit</action> - <enctype></enctype> - <method>POST</method> - <pt>form_view</pt> - - <groups> - <group> - <title>left</title> - <fields> - - <field><id>my_id</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <max_length></max_length> - <required type="int">1</required> - <title>Vêtement</title> - <truncate type="int">0</truncate> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - <field><id>my_librairie</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <max_length></max_length> - <required type="int">0</required> - <title>Fichier Lectra</title> - <truncate type="int">0</truncate> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - <field><id>my_description</id> <type>TextAreaField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <external_validator></external_validator> - <extra></extra> - <height type="int">3</height> - <hidden type="int">0</hidden> - <max_length></max_length> - <max_linelength></max_linelength> - <max_lines></max_lines> - <required type="int">0</required> - <title>Description</title> - <width type="int">40</width> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_many_lines">You entered too many lines.</message> - <message name="line_too_long">A line was too long.</message> - <message name="too_long">You entered too many characters.</message> - </messages> - </field> - <field><id>my_forme_id_list</id> <type>MultiRelationStringField</type> - <values> - <alternate_name></alternate_name> - <base_category>specialise</base_category> - <catalog_index>id</catalog_index> - <css_class></css_class> - <default type="list">[]</default> - <default_module>forme</default_module> - <description></description> - <external_validator></external_validator> - <extra></extra> - <height type="int">5</height> - <hidden type="int">0</hidden> - <jump_method>base_jump_relation</jump_method> - <max_length></max_length> - <max_linelength></max_linelength> - <max_lines></max_lines> - <portal_type type="list">[('Forme', 'Forme')]</portal_type> - <required type="int">0</required> - <title>Formes concernées</title> - <update_method>base_update_relation</update_method> - <width type="int">20</width> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_many_lines">You entered too many lines.</message> - <message name="line_too_long">A line was too long.</message> - <message name="too_long">You entered too many characters.</message> - </messages> - </field> - <field><id>my_base_taille</id> <type>ListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <external_validator></external_validator> - <extra></extra> - <first_item type="int">0</first_item> - <hidden type="int">0</hidden> - <items type="list">[]</items> - <required type="int">0</required> - <size type="int">1</size> - <title>Taille de base</title> - </values> - <tales> - <items>here/portal_categories/taille/getFormItemList</items> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - <field><id>my_correspondance_id</id> <type>RelationStringField</type> - <values> - <alternate_name></alternate_name> - <base_category>specialise</base_category> - <catalog_index>id</catalog_index> - <css_class></css_class> - <default></default> - <default_module>correspondance_mesures</default_module> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <jump_method>base_jump_relation</jump_method> - <max_length></max_length> - <portal_type type="list">[('Correspondance Mesures', 'Correspondance Mesures')]</portal_type> - <required type="int">0</required> - <title>Correspondance mesures</title> - <truncate type="int">0</truncate> - <update_method>base_update_relation</update_method> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - <field><id>vetement_state</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <max_length></max_length> - <required type="int">0</required> - <title>Etat</title> - <truncate type="int">0</truncate> - </values> - <tales> - <default>python:here.portal_workflow.getInfoFor(here, 'vetement_state')</default> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>right</title> - <fields> - - <field><id>my_taille_list</id> <type>MultiListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default type="list">[]</default> - <description></description> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <items type="list">[]</items> - <required type="int">0</required> - <size type="int">6</size> - <title>Plage de tailles</title> - </values> - <tales> - <default>here/getTailleList</default> - <items>here/portal_categories/taille/getFormItemList</items> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - <field><id>my_mesure_vetement_list</id> <type>MultiListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default type="list">[]</default> - <description></description> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <items type="list">[]</items> - <required type="int">0</required> - <size type="int">7</size> - <title>Mesures Coramy</title> - </values> - <tales> - <default>here/getMesureVetementList</default> - <items>here/portal_categories/mesure_vetement/getFormItemList</items> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>center</title> - <fields> - - </fields> - </group> - <group> - <title>bottom</title> - <fields> - - <field><id>listbox</id> <type>ListBox</type> - <values> - <all_columns type="list">[]</all_columns> - <all_editable_columns type="list">[]</all_editable_columns> - <alternate_name></alternate_name> - <columns type="list">[('relative_url', 'Document'), ('portal_type', 'Type'), ('description', 'Description')]</columns> - <css_class></css_class> - <default></default> - <default_params type="list">[]</default_params> - <description></description> - <domain_root_list type="list">[]</domain_root_list> - <domain_tree type="int">0</domain_tree> - <editable_columns type="list">[]</editable_columns> - <external_validator></external_validator> - <global_attributes type="list">[]</global_attributes> - <hidden type="int">0</hidden> - <lines type="int">10</lines> - <list_action>list</list_action> - <list_method type="method">Vetement_zGetRelatedModeleList</list_method> - <meta_types type="list">[]</meta_types> - <portal_types type="list">[('Modele', 'Modele'), ('Variante Morphologique', 'Variante Morphologique')]</portal_types> - <report_root_list type="list">[]</report_root_list> - <report_tree type="int">0</report_tree> - <search type="int">0</search> - <search_columns type="list">[]</search_columns> - <select type="int">0</select> - <selection_name>related_modele_selection</selection_name> - <sort type="list">[]</sort> - <stat_method></stat_method> - <title>Modèles concernés</title> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - </messages> - </field> - </fields> - </group> - </groups> -</form> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_pdm/vetement_search_list.form b/product/Coramy/skins/coramy_pdm/vetement_search_list.form deleted file mode 100755 index 276e390bed..0000000000 --- a/product/Coramy/skins/coramy_pdm/vetement_search_list.form +++ /dev/null @@ -1,67 +0,0 @@ -<?xml version="1.0"?> - -<form> - <title>Liste de vêtements</title> - <row_length>4</row_length> - <name>vetement_search_list</name> - <pt>form_list</pt> - <action></action> - <method>POST</method> - <enctype></enctype> - <encoding>UTF-8</encoding> - <stored_encoding>ISO-8859-1</stored_encoding> - <unicode_mode>false</unicode_mode> - <groups> - <group> - <title>Default</title> - <fields> - - <field><id>search_list</id> <type>ListBox</type> - <values> - <all_columns type="list">[('id', 'V\xeatement'), ('relative_url', "Chemin d'acc\xe8s"), ('Description', 'Description'), ('vetement_state', 'Etat')]</all_columns> - <all_editable_columns type="list">[]</all_editable_columns> - <alternate_name></alternate_name> - <columns type="list">[('id', 'V\xeatement'), ('relative_url', "Chemin d'acc\xe8s"), ('Description', 'Description'), ('vetement_state', 'Etat')]</columns> - <css_class></css_class> - <default></default> - <default_params type="list">[]</default_params> - <description></description> - <domain_root_list type="list">[]</domain_root_list> - <domain_tree type="int">0</domain_tree> - <editable type="int">1</editable> - <editable_columns type="list">[]</editable_columns> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <global_attributes type="list">[]</global_attributes> - <height type="int">5</height> - <hidden type="int">0</hidden> - <lines type="int">50</lines> - <list_action>list</list_action> - <list_cookie>SEARCH_LIST</list_cookie> - <list_method type="method">portal_catalog</list_method> - <meta_types type="list">[]</meta_types> - <portal_types type="list">[('Vetement', 'Vetement')]</portal_types> - <report_root_list type="list">[]</report_root_list> - <report_tree type="int">0</report_tree> - <reverse type="int">0</reverse> - <search type="int">0</search> - <search_columns></search_columns> - <select type="int">0</select> - <selection_name></selection_name> - <sort type="list">[('id', 'id')]</sort> - <sort_columns></sort_columns> - <stat_method></stat_method> - <title>Vêtements</title> - <width type="int">40</width> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - </messages> - </field> - </fields> - </group> - </groups> -</form> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_pdm/vetement_view.form b/product/Coramy/skins/coramy_pdm/vetement_view.form deleted file mode 100755 index 4ad1fc917c..0000000000 --- a/product/Coramy/skins/coramy_pdm/vetement_view.form +++ /dev/null @@ -1,408 +0,0 @@ -<?xml version="1.0"?> - -<form> - <title>Vetement</title> - <row_length>4</row_length> - <name>vetement_view</name> - <pt>form_view</pt> - <action>base_edit</action> - <method>POST</method> - <enctype></enctype> - <encoding>UTF-8</encoding> - <stored_encoding>ISO-8859-1</stored_encoding> - <unicode_mode>false</unicode_mode> - <groups> - <group> - <title>left</title> - <fields> - - <field><id>my_id</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <max_length></max_length> - <required type="int">1</required> - <title>Vêtement</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - <field><id>my_librairie</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <max_length></max_length> - <required type="int">0</required> - <title>Fichier Lectra</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - <field><id>my_description</id> <type>TextAreaField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <height type="int">3</height> - <hidden type="int">0</hidden> - <max_length></max_length> - <max_linelength></max_linelength> - <max_lines></max_lines> - <required type="int">0</required> - <title>Description</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - <width type="int">40</width> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_many_lines">You entered too many lines.</message> - <message name="line_too_long">A line was too long.</message> - <message name="too_long">You entered too many characters.</message> - </messages> - </field> - <field><id>my_forme_id_list</id> <type>MultiRelationStringField</type> - <values> - <alternate_name></alternate_name> - <base_category>specialise</base_category> - <catalog_index>id</catalog_index> - <css_class></css_class> - <default type="list">[]</default> - <default_module>forme</default_module> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <height type="int">5</height> - <hidden type="int">0</hidden> - <jump_method>base_jump_relation</jump_method> - <max_length></max_length> - <max_linelength></max_linelength> - <max_lines></max_lines> - <portal_type type="list">[('Forme', 'Forme')]</portal_type> - <required type="int">0</required> - <title>Formes concernées</title> - <unicode type="int">0</unicode> - <update_method>base_update_relation</update_method> - <view_separator><br /> -</view_separator> - <whitespace_preserve type="int">0</whitespace_preserve> - <width type="int">20</width> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_many_lines">You entered too many lines.</message> - <message name="line_too_long">A line was too long.</message> - <message name="too_long">You entered too many characters.</message> - </messages> - </field> - <field><id>my_base_taille</id> <type>ListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <extra_item></extra_item> - <first_item type="int">0</first_item> - <hidden type="int">0</hidden> - <items type="list">[]</items> - <required type="int">0</required> - <size type="int">1</size> - <title>Taille de base</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <items>here/portal_categories/taille/getFormItemList</items> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - <field><id>my_correspondance_id</id> <type>RelationStringField</type> - <values> - <alternate_name></alternate_name> - <base_category>specialise</base_category> - <catalog_index>id</catalog_index> - <css_class></css_class> - <default></default> - <default_module>correspondance_mesures</default_module> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <jump_method>base_jump_relation</jump_method> - <max_length></max_length> - <portal_type type="list">[('Correspondance Mesures', 'Correspondance Mesures')]</portal_type> - <required type="int">0</required> - <title>Correspondance mesures</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <update_method>base_update_relation</update_method> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - <field><id>vetement_state</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <max_length></max_length> - <required type="int">0</required> - <title>Etat</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <default>python:here.portal_workflow.getInfoFor(here, 'vetement_state')</default> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>right</title> - <fields> - - <field><id>my_taille_list</id> <type>MultiListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default type="list">[]</default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <extra_item></extra_item> - <hidden type="int">0</hidden> - <items type="list">[]</items> - <required type="int">0</required> - <size type="int">6</size> - <title>Plage de tailles</title> - <unicode type="int">0</unicode> - <view_separator><br /> -</view_separator> - </values> - <tales> - <default>here/getTailleList</default> - <items>here/portal_categories/taille/getFormItemList</items> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - <field><id>my_mesure_vetement_list</id> <type>MultiListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default type="list">[]</default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <extra_item></extra_item> - <hidden type="int">0</hidden> - <items type="list">[]</items> - <required type="int">0</required> - <size type="int">7</size> - <title>Mesures Coramy</title> - <unicode type="int">0</unicode> - <view_separator><br /> -</view_separator> - </values> - <tales> - <default>here/getMesureVetementList</default> - <items>here/portal_categories/mesure_vetement/getFormItemList</items> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - <field><id>my_present_au_catalogue</id> <type>CheckBoxField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default type="int">0</default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <title>Présent au catalogue</title> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>center</title> - <fields> - - <field><id>my_commentaires</id> <type>TextAreaField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <height type="int">5</height> - <hidden type="int">0</hidden> - <max_length></max_length> - <max_linelength></max_linelength> - <max_lines></max_lines> - <required type="int">0</required> - <title>Commentaires</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - <width type="int">80</width> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_many_lines">You entered too many lines.</message> - <message name="line_too_long">A line was too long.</message> - <message name="too_long">You entered too many characters.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>bottom</title> - <fields> - - <field><id>listbox</id> <type>ListBox</type> - <values> - <all_columns type="list">[('id', 'Dessin'), ('description', 'Description')]</all_columns> - <all_editable_columns type="list">[]</all_editable_columns> - <alternate_name></alternate_name> - <columns type="list">[('id', 'Dessin'), ('description', 'Description')]</columns> - <css_class></css_class> - <default></default> - <default_params type="list">[('id', "''"), ('description', "''")]</default_params> - <description></description> - <domain_root_list type="list">[]</domain_root_list> - <domain_tree type="int">0</domain_tree> - <editable type="int">1</editable> - <editable_columns type="list">[]</editable_columns> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <global_attributes type="list">[]</global_attributes> - <hidden type="int">0</hidden> - <lines type="int">10</lines> - <list_action>list</list_action> - <list_method type="method">searchFolder</list_method> - <meta_types type="list">[]</meta_types> - <portal_types type="list">[('Dessin Technique', 'Dessin Technique')]</portal_types> - <report_root_list type="list">[]</report_root_list> - <report_tree type="int">0</report_tree> - <search type="int">0</search> - <search_columns></search_columns> - <select type="int">0</select> - <selection_name>folder_selection</selection_name> - <sort type="list">[]</sort> - <sort_columns></sort_columns> - <stat_method></stat_method> - <title>Dessins techniques</title> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - </messages> - </field> - </fields> - </group> - </groups> -</form> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_pdm/vetement_workflow_annuler_etude.form b/product/Coramy/skins/coramy_pdm/vetement_workflow_annuler_etude.form deleted file mode 100755 index 40cfa21094..0000000000 --- a/product/Coramy/skins/coramy_pdm/vetement_workflow_annuler_etude.form +++ /dev/null @@ -1,81 +0,0 @@ -<?xml version="1.0"?> - -<form> - <title>Annuler l'etude</title> - <row_length>4</row_length> - <name>main</name> - <pt>form_view_dialog</pt> - <action>workflow_status_modify</action> - <method>POST</method> - <enctype>multipart/form-data</enctype> - <encoding>UTF-8</encoding> - <stored_encoding>ISO-8859-1</stored_encoding> - <unicode_mode>false</unicode_mode> - <groups> - <group> - <title>Default</title> - <fields> - - <field><id>my_comment</id> <type>TextAreaField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <height type="int">5</height> - <hidden type="int">0</hidden> - <max_length></max_length> - <max_linelength></max_linelength> - <max_lines></max_lines> - <required type="int">1</required> - <title>Commentaires</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - <width type="int">80</width> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_many_lines">You entered too many lines.</message> - <message name="line_too_long">A line was too long.</message> - <message name="too_long">You entered too many characters.</message> - </messages> - </field> - <field><id>my_workflow_action</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default>annuler_etude</default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">1</hidden> - <max_length></max_length> - <required type="int">1</required> - <title> </title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - </fields> - </group> - </groups> -</form> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_pdm/vetement_workflow_etudier_gradation.form b/product/Coramy/skins/coramy_pdm/vetement_workflow_etudier_gradation.form deleted file mode 100755 index ee025c6a79..0000000000 --- a/product/Coramy/skins/coramy_pdm/vetement_workflow_etudier_gradation.form +++ /dev/null @@ -1,81 +0,0 @@ -<?xml version="1.0"?> - -<form> - <title>Etudier la gradation</title> - <row_length>4</row_length> - <name>main</name> - <pt>form_view_dialog</pt> - <action>workflow_status_modify</action> - <method>POST</method> - <enctype>multipart/form-data</enctype> - <encoding>UTF-8</encoding> - <stored_encoding>ISO-8859-1</stored_encoding> - <unicode_mode>false</unicode_mode> - <groups> - <group> - <title>Default</title> - <fields> - - <field><id>my_comment</id> <type>TextAreaField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <height type="int">5</height> - <hidden type="int">0</hidden> - <max_length></max_length> - <max_linelength></max_linelength> - <max_lines></max_lines> - <required type="int">0</required> - <title>Commentaires</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - <width type="int">80</width> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_many_lines">You entered too many lines.</message> - <message name="line_too_long">A line was too long.</message> - <message name="too_long">You entered too many characters.</message> - </messages> - </field> - <field><id>my_workflow_action</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default>etudier_gradation</default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">1</hidden> - <max_length></max_length> - <required type="int">1</required> - <title> </title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - </fields> - </group> - </groups> -</form> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_pdm/vetement_workflow_lancer_gamme_taille.form b/product/Coramy/skins/coramy_pdm/vetement_workflow_lancer_gamme_taille.form deleted file mode 100755 index ae30222496..0000000000 --- a/product/Coramy/skins/coramy_pdm/vetement_workflow_lancer_gamme_taille.form +++ /dev/null @@ -1,81 +0,0 @@ -<?xml version="1.0"?> - -<form> - <title>Lancer la gamme taille</title> - <row_length>4</row_length> - <name>main</name> - <pt>form_view_dialog</pt> - <action>workflow_status_modify</action> - <method>POST</method> - <enctype>multipart/form-data</enctype> - <encoding>UTF-8</encoding> - <stored_encoding>ISO-8859-1</stored_encoding> - <unicode_mode>false</unicode_mode> - <groups> - <group> - <title>Default</title> - <fields> - - <field><id>my_comment</id> <type>TextAreaField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <height type="int">5</height> - <hidden type="int">0</hidden> - <max_length></max_length> - <max_linelength></max_linelength> - <max_lines></max_lines> - <required type="int">0</required> - <title>Commentaires</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - <width type="int">80</width> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_many_lines">You entered too many lines.</message> - <message name="line_too_long">A line was too long.</message> - <message name="too_long">You entered too many characters.</message> - </messages> - </field> - <field><id>my_workflow_action</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default>lancer_gamme_taille</default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">1</hidden> - <max_length></max_length> - <required type="int">1</required> - <title> </title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - </fields> - </group> - </groups> -</form> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_pdm/vetement_workflow_lancer_prototype.form b/product/Coramy/skins/coramy_pdm/vetement_workflow_lancer_prototype.form deleted file mode 100755 index 1daa612fab..0000000000 --- a/product/Coramy/skins/coramy_pdm/vetement_workflow_lancer_prototype.form +++ /dev/null @@ -1,81 +0,0 @@ -<?xml version="1.0"?> - -<form> - <title>Lancer le prototype</title> - <row_length>4</row_length> - <name>main</name> - <pt>form_view_dialog</pt> - <action>workflow_status_modify</action> - <method>POST</method> - <enctype>multipart/form-data</enctype> - <encoding>UTF-8</encoding> - <stored_encoding>ISO-8859-1</stored_encoding> - <unicode_mode>false</unicode_mode> - <groups> - <group> - <title>Default</title> - <fields> - - <field><id>my_comment</id> <type>TextAreaField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <height type="int">5</height> - <hidden type="int">0</hidden> - <max_length></max_length> - <max_linelength></max_linelength> - <max_lines></max_lines> - <required type="int">0</required> - <title>Commentaires</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - <width type="int">80</width> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_many_lines">You entered too many lines.</message> - <message name="line_too_long">A line was too long.</message> - <message name="too_long">You entered too many characters.</message> - </messages> - </field> - <field><id>my_workflow_action</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default>lancer_prototype</default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">1</hidden> - <max_length></max_length> - <required type="int">1</required> - <title> </title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - </fields> - </group> - </groups> -</form> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_pdm/vetement_workflow_rectifier_dossier_technique.form b/product/Coramy/skins/coramy_pdm/vetement_workflow_rectifier_dossier_technique.form deleted file mode 100755 index bb875756e6..0000000000 --- a/product/Coramy/skins/coramy_pdm/vetement_workflow_rectifier_dossier_technique.form +++ /dev/null @@ -1,81 +0,0 @@ -<?xml version="1.0"?> - -<form> - <title>Rectifier le dossier technique</title> - <row_length>4</row_length> - <name>main</name> - <pt>form_view_dialog</pt> - <action>workflow_status_modify</action> - <method>POST</method> - <enctype>multipart/form-data</enctype> - <encoding>UTF-8</encoding> - <stored_encoding>ISO-8859-1</stored_encoding> - <unicode_mode>false</unicode_mode> - <groups> - <group> - <title>Default</title> - <fields> - - <field><id>my_comment</id> <type>TextAreaField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <height type="int">5</height> - <hidden type="int">0</hidden> - <max_length></max_length> - <max_linelength></max_linelength> - <max_lines></max_lines> - <required type="int">1</required> - <title>Commentaires</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - <width type="int">80</width> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_many_lines">You entered too many lines.</message> - <message name="line_too_long">A line was too long.</message> - <message name="too_long">You entered too many characters.</message> - </messages> - </field> - <field><id>my_workflow_action</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default>rectifier_dossier_technique</default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">1</hidden> - <max_length></max_length> - <required type="int">1</required> - <title> </title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - </fields> - </group> - </groups> -</form> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_pdm/vetement_workflow_rectifier_gradation.form b/product/Coramy/skins/coramy_pdm/vetement_workflow_rectifier_gradation.form deleted file mode 100755 index 6234f38bfe..0000000000 --- a/product/Coramy/skins/coramy_pdm/vetement_workflow_rectifier_gradation.form +++ /dev/null @@ -1,81 +0,0 @@ -<?xml version="1.0"?> - -<form> - <title>Rectifier la gradation</title> - <row_length>4</row_length> - <name>main</name> - <pt>form_view_dialog</pt> - <action>workflow_status_modify</action> - <method>POST</method> - <enctype>multipart/form-data</enctype> - <encoding>UTF-8</encoding> - <stored_encoding>ISO-8859-1</stored_encoding> - <unicode_mode>false</unicode_mode> - <groups> - <group> - <title>Default</title> - <fields> - - <field><id>my_comment</id> <type>TextAreaField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <height type="int">5</height> - <hidden type="int">0</hidden> - <max_length></max_length> - <max_linelength></max_linelength> - <max_lines></max_lines> - <required type="int">1</required> - <title>Commentaires</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - <width type="int">80</width> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_many_lines">You entered too many lines.</message> - <message name="line_too_long">A line was too long.</message> - <message name="too_long">You entered too many characters.</message> - </messages> - </field> - <field><id>my_workflow_action</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default>rectifier_gradation</default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">1</hidden> - <max_length></max_length> - <required type="int">1</required> - <title> </title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - </fields> - </group> - </groups> -</form> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_pdm/vetement_workflow_rectifier_vetement.form b/product/Coramy/skins/coramy_pdm/vetement_workflow_rectifier_vetement.form deleted file mode 100755 index b4d3fac847..0000000000 --- a/product/Coramy/skins/coramy_pdm/vetement_workflow_rectifier_vetement.form +++ /dev/null @@ -1,81 +0,0 @@ -<?xml version="1.0"?> - -<form> - <title>Rectifier le vetement</title> - <row_length>4</row_length> - <name>main</name> - <pt>form_view_dialog</pt> - <action>workflow_status_modify</action> - <method>POST</method> - <enctype>multipart/form-data</enctype> - <encoding>UTF-8</encoding> - <stored_encoding>ISO-8859-1</stored_encoding> - <unicode_mode>false</unicode_mode> - <groups> - <group> - <title>Default</title> - <fields> - - <field><id>my_comment</id> <type>TextAreaField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <height type="int">5</height> - <hidden type="int">0</hidden> - <max_length></max_length> - <max_linelength></max_linelength> - <max_lines></max_lines> - <required type="int">1</required> - <title>Commentaires</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - <width type="int">80</width> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_many_lines">You entered too many lines.</message> - <message name="line_too_long">A line was too long.</message> - <message name="too_long">You entered too many characters.</message> - </messages> - </field> - <field><id>my_workflow_action</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default>rectifier_vetement</default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">1</hidden> - <max_length></max_length> - <required type="int">1</required> - <title> </title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - </fields> - </group> - </groups> -</form> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_pdm/vetement_workflow_valider_dossier_technique.form b/product/Coramy/skins/coramy_pdm/vetement_workflow_valider_dossier_technique.form deleted file mode 100755 index ee9f80d160..0000000000 --- a/product/Coramy/skins/coramy_pdm/vetement_workflow_valider_dossier_technique.form +++ /dev/null @@ -1,81 +0,0 @@ -<?xml version="1.0"?> - -<form> - <title>Valider le dossier technique</title> - <row_length>4</row_length> - <name>main</name> - <pt>form_view_dialog</pt> - <action>workflow_status_modify</action> - <method>POST</method> - <enctype>multipart/form-data</enctype> - <encoding>UTF-8</encoding> - <stored_encoding>ISO-8859-1</stored_encoding> - <unicode_mode>false</unicode_mode> - <groups> - <group> - <title>Default</title> - <fields> - - <field><id>my_comment</id> <type>TextAreaField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <height type="int">5</height> - <hidden type="int">0</hidden> - <max_length></max_length> - <max_linelength></max_linelength> - <max_lines></max_lines> - <required type="int">0</required> - <title>Commentaires</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - <width type="int">80</width> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_many_lines">You entered too many lines.</message> - <message name="line_too_long">A line was too long.</message> - <message name="too_long">You entered too many characters.</message> - </messages> - </field> - <field><id>my_workflow_action</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default>valider_dossier_technique</default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">1</hidden> - <max_length></max_length> - <required type="int">1</required> - <title> </title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - </fields> - </group> - </groups> -</form> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_pdm/vetement_workflow_valider_gamme_taille.form b/product/Coramy/skins/coramy_pdm/vetement_workflow_valider_gamme_taille.form deleted file mode 100755 index a11f03f067..0000000000 --- a/product/Coramy/skins/coramy_pdm/vetement_workflow_valider_gamme_taille.form +++ /dev/null @@ -1,81 +0,0 @@ -<?xml version="1.0"?> - -<form> - <title>Valider la gamme taille</title> - <row_length>4</row_length> - <name>main</name> - <pt>form_view_dialog</pt> - <action>workflow_status_modify</action> - <method>POST</method> - <enctype>multipart/form-data</enctype> - <encoding>UTF-8</encoding> - <stored_encoding>ISO-8859-1</stored_encoding> - <unicode_mode>false</unicode_mode> - <groups> - <group> - <title>Default</title> - <fields> - - <field><id>my_comment</id> <type>TextAreaField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <height type="int">5</height> - <hidden type="int">0</hidden> - <max_length></max_length> - <max_linelength></max_linelength> - <max_lines></max_lines> - <required type="int">0</required> - <title>Commentaires</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - <width type="int">80</width> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_many_lines">You entered too many lines.</message> - <message name="line_too_long">A line was too long.</message> - <message name="too_long">You entered too many characters.</message> - </messages> - </field> - <field><id>my_workflow_action</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default>valider_gamme_taille</default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">1</hidden> - <max_length></max_length> - <required type="int">1</required> - <title> </title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - </fields> - </group> - </groups> -</form> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_pdm/vetement_workflow_valider_prototype.form b/product/Coramy/skins/coramy_pdm/vetement_workflow_valider_prototype.form deleted file mode 100755 index ef46bbe123..0000000000 --- a/product/Coramy/skins/coramy_pdm/vetement_workflow_valider_prototype.form +++ /dev/null @@ -1,81 +0,0 @@ -<?xml version="1.0"?> - -<form> - <title>Valider le prototype</title> - <row_length>4</row_length> - <name>main</name> - <pt>form_view_dialog</pt> - <action>workflow_status_modify</action> - <method>POST</method> - <enctype>multipart/form-data</enctype> - <encoding>UTF-8</encoding> - <stored_encoding>ISO-8859-1</stored_encoding> - <unicode_mode>false</unicode_mode> - <groups> - <group> - <title>Default</title> - <fields> - - <field><id>my_comment</id> <type>TextAreaField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <height type="int">5</height> - <hidden type="int">0</hidden> - <max_length></max_length> - <max_linelength></max_linelength> - <max_lines></max_lines> - <required type="int">0</required> - <title>Commentaires</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - <width type="int">80</width> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_many_lines">You entered too many lines.</message> - <message name="line_too_long">A line was too long.</message> - <message name="too_long">You entered too many characters.</message> - </messages> - </field> - <field><id>my_workflow_action</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default>valider_prototype</default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">1</hidden> - <max_length></max_length> - <required type="int">1</required> - <title> </title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - </fields> - </group> - </groups> -</form> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_pdm/zGetTissuSupplierList.zsql b/product/Coramy/skins/coramy_pdm/zGetTissuSupplierList.zsql deleted file mode 100755 index e6c0a681b7..0000000000 --- a/product/Coramy/skins/coramy_pdm/zGetTissuSupplierList.zsql +++ /dev/null @@ -1,17 +0,0 @@ -<dtml-comment> -title: -connection_id:MySQL -max_rows:10000 -max_cache:100 -cache_time:0 -class_name:ZSQLBrain -class_file:zsqlbrain.py -</dtml-comment> -<params></params> -SELECT DISTINCT catalog.relative_url, catalog.title, catalog.path, catalog.id -FROM catalog, catalog as resource, category -WHERE catalog.portal_type = "Organisation" -AND resource.portal_type = "Tissu" -AND category.uid = resource.uid -AND category.base_category_uid = <dtml-var "portal_categories.source.uid"> -AND category.category_uid = catalog.uid \ No newline at end of file diff --git a/product/Coramy/skins/coramy_trade/ContainerLine_zGetTotal.zsql b/product/Coramy/skins/coramy_trade/ContainerLine_zGetTotal.zsql deleted file mode 100755 index 21fe2d139c..0000000000 --- a/product/Coramy/skins/coramy_trade/ContainerLine_zGetTotal.zsql +++ /dev/null @@ -1,21 +0,0 @@ -<dtml-comment> -title: -connection_id:erp5_sql_connection -max_rows:1000 -max_cache:100 -cache_time:0 -class_name: -class_file: -</dtml-comment> -<params>uid</params> -SELECT - SUM(quantity) AS total_quantity, - SUM(total_price) AS total_price, - SUM(target_quantity) AS target_total_quantity, - SUM(target_total_price) AS target_total_price, - AVG(price) AS average_price -FROM catalog, movement -WHERE - catalog.parent_uid = <dtml-sqlvar uid type="int"> -AND - catalog.uid = movement.uid diff --git a/product/Coramy/skins/coramy_trade/Container_fastInput.py b/product/Coramy/skins/coramy_trade/Container_fastInput.py deleted file mode 100755 index 22cfc1d965..0000000000 --- a/product/Coramy/skins/coramy_trade/Container_fastInput.py +++ /dev/null @@ -1,112 +0,0 @@ -## Script (Python) "Container_fastInput" -##bind container=container -##bind context=context -##bind namespace= -##bind script=script -##bind subpath=traverse_subpath -##parameters=form_id='',selection_index=None,selection_name='',dialog_category='object_exchange',quantity=0,container_type='',gross_weight=0,listbox=None,cancel_url='',next_container_int_index=1 -##title= -## -# first we build a dict of desired container lines -# key of dict : id of resource -# item of dict : tuples (resource_value, variation_category_list, quantity) -delivery = context -next_container_number = next_container_int_index - -desired_lines = {} -for relative_url, listitem in listbox.items() : - container_quantity = listitem['container_quantity'] - if container_quantity : - listitem_value = context.restrictedTraverse(relative_url) - if listitem_value is not None : - my_resource = listitem_value.getResourceValue() - if my_resource is not None : - if my_resource.getRelativeUrl() in desired_lines.keys() : - desired_lines[my_resource.getRelativeUrl()].append((listitem_value.getVariationCategoryList(), container_quantity)) - else : - desired_lines[my_resource.getRelativeUrl()] = [(listitem_value.getVariationCategoryList(), container_quantity)] - -# we build 'quantity' containers -for colis_nb in range(quantity) : - - new_container_id = 'c'+str(next_container_number) - # we use container_type to know which are the resource (and variation) of the container - container_type_item_list = container_type.split('/') - container_resource_url = '/'.join(container_type_item_list[0:2]) - cointainer_resource_variation = 'variante/'+container_type - context.portal_types.constructContent(type_name = 'Container', - container = delivery, - int_index = next_container_number, - serial_number = "%06d%04d" % (int(delivery.getId()),next_container_number), - resource = container_resource_url, - variation_base_category_list = ['variante'], - variation_category_list = [cointainer_resource_variation], - gross_weight = gross_weight, - id = new_container_id, - ) - next_container_number += 1 - container = delivery[new_container_id] - container.flushActivity(invoke=1) - - # print container label - container.Container_printLabel() - - # now build container_lines - for key in desired_lines.keys() : - new_container_line_id = str(container.generateNewId()) - - # compute variation_base_category_list and variation_category_list for this line - line_variation_base_category_dict = {} - line_variation_category_list = [] - - for my_tuple in desired_lines[key] : - - for variation_item in my_tuple[0] : - if not variation_item in line_variation_category_list : - line_variation_category_list.append(variation_item) - variation_base_category_items = variation_item.split('/') - if len(variation_base_category_items) > 0 : - line_variation_base_category_dict[variation_base_category_items[0]] = 1 - - line_variation_base_category_list = line_variation_base_category_dict.keys() - - # construct new content (container_line) - my_resource_url = key - context.portal_types.constructContent(type_name = 'Container Line', - container = container, - id = new_container_line_id, - resource = my_resource_url, - variation_base_category_list = line_variation_base_category_list, - variation_category_list = line_variation_category_list - ) - container_line = container[new_container_line_id] - - # set target_quantities in container_lines - container_cell_list = container_line.contentValues() - for my_tuple in desired_lines[key] : - quantity_updated = 0 - for container_cell in container_cell_list : - if container_cell.test(context.asContext(categories=my_tuple[0])) : - container_cell.setTargetQuantity(my_tuple[1]) - container_cell.flushActivity(invoke=1) - quantity_updated = 1 - break - # if no cell according to variation_category_list was found - # or no variation at all, we update the container_line - if not quantity_updated : - container_line.setTargetQuantity(my_tuple[1]) - container_line.flushActivity(invoke=1) - - # update target_quantities on delivery_lines or cells - container.edit() - -redirect_url = '%s/%s?selection_name=%s&dialog_category=%s&form_id=%s&cancel_url=%s&%s' % ( context.absolute_url() - , 'Container_fastInputForm' - , selection_name - , dialog_category - , form_id - , cancel_url - , 'portal_status_message=%s+colis+créé(s)' % quantity - ) - -context.REQUEST[ 'RESPONSE' ].redirect( redirect_url ) diff --git a/product/Coramy/skins/coramy_trade/Container_fastInputForm.form b/product/Coramy/skins/coramy_trade/Container_fastInputForm.form deleted file mode 100755 index 6b6d639153..0000000000 --- a/product/Coramy/skins/coramy_trade/Container_fastInputForm.form +++ /dev/null @@ -1,222 +0,0 @@ -<?xml version="1.0"?> - -<form> - <title>Saisie rapide</title> - <row_length>4</row_length> - <name>Container_fastInputForm</name> - <pt>form_dialog</pt> - <action>Container_fastInput</action> - <method>POST</method> - <enctype>multipart/form-data</enctype> - <encoding>UTF-8</encoding> - <stored_encoding>ISO-8859-1</stored_encoding> - <unicode_mode>false</unicode_mode> - <groups> - <group> - <title>left</title> - <fields> - - <field><id>my_container_type</id> <type>ListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <extra_item></extra_item> - <first_item type="int">0</first_item> - <hidden type="int">0</hidden> - <items type="list">[('carton A', 'composant/CAame/A'), ('carton B', 'composant/CAame/B'), ('carton C', 'composant/CAame/C'), ('carton D1', 'composant/CAame/D1'), ('carton D2', 'composant/CAame/D2'), ('carton D3', 'composant/CAame/D3')]</items> - <required type="int">1</required> - <size type="int">1</size> - <title>Type de colis</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - <field><id>my_gross_weight</id> <type>FloatField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default>0.0</default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">10</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <required type="int">1</required> - <title>Poids brut (kg)</title> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="not_float">You did not enter a floating point number.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>right</title> - <fields> - - <field><id>my_next_container_int_index</id> <type>IntegerField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default>1</default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">10</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <end></end> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <required type="int">1</required> - <start></start> - <title>Prochain numéro</title> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <default>python:len(here.contentValues(filter={'portal_type':'Container'}))+1</default> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="not_integer">You did not enter an integer.</message> - <message name="integer_out_of_range">The integer you entered was out of range.</message> - </messages> - </field> - <field><id>my_quantity</id> <type>IntegerField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default>1</default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">10</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <end></end> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <required type="int">1</required> - <start></start> - <title>Nombre de colis</title> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="not_integer">You did not enter an integer.</message> - <message name="integer_out_of_range">The integer you entered was out of range.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>center</title> - <fields> - - </fields> - </group> - <group> - <title>bottom</title> - <fields> - - <field><id>listbox</id> <type>ListBox</type> - <values> - <all_columns type="list">[]</all_columns> - <all_editable_columns type="list">[]</all_editable_columns> - <alternate_name></alternate_name> - <columns type="list">[('resource_title', 'Produit'), ('variation_text', 'Variantes'), ('Amount_getTailleClient', 'Taille client'), ('quantity', 'Quantit\xe9e demand\xe9e'), ('DeliveryCell_getContainedTargetQuantity', 'Quantit\xe9e colis\xe9e'), ('container_quantity', 'Quantit\xe9'), ('quantity_unit', 'Unit\xe9')]</columns> - <css_class></css_class> - <default></default> - <default_params type="list">[]</default_params> - <description></description> - <domain_root_list type="list">[]</domain_root_list> - <domain_tree type="int">0</domain_tree> - <editable type="int">1</editable> - <editable_columns type="list">[('container_quantity', 'container_quantity')]</editable_columns> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <global_attributes type="list">[]</global_attributes> - <hidden type="int">0</hidden> - <lines type="int">100</lines> - <list_action>folder_contents</list_action> - <list_method type="method">Delivery_zGetNeededCellList</list_method> - <meta_types type="list">[]</meta_types> - <portal_types type="list">[]</portal_types> - <report_root_list type="list">[]</report_root_list> - <report_tree type="int">0</report_tree> - <search type="int">0</search> - <search_columns type="list">[]</search_columns> - <select type="int">0</select> - <selection_name>delivery_cells_selection</selection_name> - <sort type="list">[('variation_text', 'variation_text')]</sort> - <sort_columns></sort_columns> - <stat_method></stat_method> - <title>Contenu du colis</title> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>hidden</title> - <fields> - - <field><id>listbox_container_quantity</id> <type>FloatField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">10</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <required type="int">0</required> - <title>Inventory</title> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <default>string:</default> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="not_float">You did not enter a floating point number.</message> - </messages> - </field> - </fields> - </group> - </groups> -</form> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_trade/Container_oneClicInput.py b/product/Coramy/skins/coramy_trade/Container_oneClicInput.py deleted file mode 100755 index 3e2f11cb78..0000000000 --- a/product/Coramy/skins/coramy_trade/Container_oneClicInput.py +++ /dev/null @@ -1,121 +0,0 @@ -## Script (Python) "Container_oneClicInput" -##bind container=container -##bind context=context -##bind namespace= -##bind script=script -##bind subpath=traverse_subpath -##parameters=form_id='',selection_index=None,selection_name='',dialog_category='object_exchange',container_type='',gross_weight=0,listbox=None,cancel_url='',next_container_int_index=1 -##title= -## -# first we build a dict of desired container lines -# key of dict : id of resource -# item of dict : tuples (resource_value, variation_category_list, quantity) -delivery = context -next_container_number = next_container_int_index - -#desired_lines = {} -desired_containers = {} -for relative_url, listitem in listbox.items() : - container_index = listitem['container_index'] - if not container_index in desired_containers.keys() : - desired_containers[container_index] = {} - other_quantity = listitem['container_quantity'] - listitem_value = context.restrictedTraverse(relative_url) - if listitem_value is not None : - if other_quantity : - container_quantity = other_quantity - else : - container_quantity = listitem_value.getQuantity() - my_resource = listitem_value.getResourceValue() - if my_resource is not None : - if my_resource.getRelativeUrl() in desired_containers[container_index].keys() : - desired_containers[container_index][my_resource.getRelativeUrl()].append((listitem_value.getVariationCategoryList(), container_quantity)) - else : - desired_containers[container_index][my_resource.getRelativeUrl()] = [(listitem_value.getVariationCategoryList(), container_quantity)] - -# we build as many containers as needed -container_key_list = desired_containers.keys() -container_key_list.sort() -for key in container_key_list : - desired_lines = desired_containers[key] - new_container_id = 'c'+str(next_container_number) - # we use container_type to know which are the resource (and variation) of the container - container_type_item_list = container_type.split('/') - container_resource_url = '/'.join(container_type_item_list[0:2]) - cointainer_resource_variation = 'variante/'+container_type - context.portal_types.constructContent(type_name = 'Container', - container = delivery, - int_index = next_container_number, - serial_number = "%06d%04d" % (int(delivery.getId()),next_container_number), - resource = container_resource_url, - variation_base_category_list = ['variante'], - variation_category_list = [cointainer_resource_variation], - gross_weight = gross_weight, - id = new_container_id, - ) - next_container_number += 1 - container = delivery[new_container_id] - container.flushActivity(invoke=1) - - # print container label - container.Container_printLabel() - - # now build container_lines - for key in desired_lines.keys() : - new_container_line_id = str(container.generateNewId()) - - # compute variation_base_category_list and variation_category_list for this line - line_variation_base_category_dict = {} - line_variation_category_list = [] - - for my_tuple in desired_lines[key] : - - for variation_item in my_tuple[0] : - if not variation_item in line_variation_category_list : - line_variation_category_list.append(variation_item) - variation_base_category_items = variation_item.split('/') - if len(variation_base_category_items) > 0 : - line_variation_base_category_dict[variation_base_category_items[0]] = 1 - - line_variation_base_category_list = line_variation_base_category_dict.keys() - - # construct new content (container_line) - my_resource_url = key - context.portal_types.constructContent(type_name = 'Container Line', - container = container, - id = new_container_line_id, - resource = my_resource_url, - variation_base_category_list = line_variation_base_category_list, - variation_category_list = line_variation_category_list - ) - container_line = container[new_container_line_id] - - # set target_quantities in container_lines - container_cell_list = container_line.contentValues() - for my_tuple in desired_lines[key] : - quantity_updated = 0 - for container_cell in container_cell_list : - if container_cell.test(context.asContext(categories=my_tuple[0])) : - container_cell.setTargetQuantity(my_tuple[1]) - container_cell.flushActivity(invoke=1) - quantity_updated = 1 - break - # if no cell according to variation_category_list was found - # or no variation at all, we update the container_line - if not quantity_updated : - container_line.setTargetQuantity(my_tuple[1]) - container_line.flushActivity(invoke=1) - - # update target_quantities on delivery_lines or cells - container.edit() - -redirect_url = '%s/%s?selection_name=%s&dialog_category=%s&form_id=%s&cancel_url=%s&%s' % ( context.absolute_url() - , 'Container_fastInputForm' - , selection_name - , dialog_category - , form_id - , cancel_url - , 'portal_status_message=%s+colis+créé(s)' % len(container_key_list) - ) - -context.REQUEST[ 'RESPONSE' ].redirect( redirect_url ) diff --git a/product/Coramy/skins/coramy_trade/Container_oneClicInputForm.form b/product/Coramy/skins/coramy_trade/Container_oneClicInputForm.form deleted file mode 100755 index 56267f1590..0000000000 --- a/product/Coramy/skins/coramy_trade/Container_oneClicInputForm.form +++ /dev/null @@ -1,218 +0,0 @@ -<?xml version="1.0"?> - -<form> - <title>Saisie immédiate</title> - <row_length>4</row_length> - <name>Container_oneClicInputForm</name> - <pt>form_dialog</pt> - <action>Container_oneClicInput</action> - <method>POST</method> - <enctype>multipart/form-data</enctype> - <encoding>UTF-8</encoding> - <stored_encoding>ISO-8859-1</stored_encoding> - <unicode_mode>false</unicode_mode> - <groups> - <group> - <title>left</title> - <fields> - - <field><id>my_container_type</id> <type>ListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <extra_item></extra_item> - <first_item type="int">0</first_item> - <hidden type="int">0</hidden> - <items type="list">[('carton A', 'composant/CAame/A'), ('carton B', 'composant/CAame/B'), ('carton C', 'composant/CAame/C'), ('carton D1', 'composant/CAame/D1'), ('carton D2', 'composant/CAame/D2'), ('carton D3', 'composant/CAame/D3')]</items> - <required type="int">1</required> - <size type="int">1</size> - <title>Type de colis</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - <field><id>my_gross_weight</id> <type>FloatField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default>0.0</default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">10</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <required type="int">1</required> - <title>Poids brut (kg)</title> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="not_float">You did not enter a floating point number.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>right</title> - <fields> - - <field><id>my_next_container_int_index</id> <type>IntegerField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default>1</default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">10</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <end></end> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <required type="int">1</required> - <start></start> - <title>Prochain numéro</title> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <default>python:len(here.contentValues(filter={'portal_type':'Container'}))+1</default> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="not_integer">You did not enter an integer.</message> - <message name="integer_out_of_range">The integer you entered was out of range.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>center</title> - <fields> - - </fields> - </group> - <group> - <title>bottom</title> - <fields> - - <field><id>listbox</id> <type>ListBox</type> - <values> - <all_columns type="list">[]</all_columns> - <all_editable_columns type="list">[]</all_editable_columns> - <alternate_name></alternate_name> - <columns type="list">[('resource_title', 'Produit'), ('variation_text', 'Variantes'), ('Amount_getTailleClient', 'Taille client'), ('quantity', 'Quantit\xe9e demand\xe9e'), ('DeliveryCell_getContainedTargetQuantity', 'Quantit\xe9e colis\xe9e'), ('container_quantity', 'Autre quantit\xe9'), ('container_index', 'Ordre colis'), ('quantity_unit', 'Unit\xe9')]</columns> - <css_class></css_class> - <default></default> - <default_params type="list">[]</default_params> - <description></description> - <domain_root_list type="list">[]</domain_root_list> - <domain_tree type="int">0</domain_tree> - <editable type="int">1</editable> - <editable_columns type="list">[('container_quantity', 'container_quantity'), ('container_index', 'container_index')]</editable_columns> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <global_attributes type="list">[]</global_attributes> - <hidden type="int">0</hidden> - <lines type="int">100</lines> - <list_action>folder_contents</list_action> - <list_method type="method">Delivery_zGetNeededCellList</list_method> - <meta_types type="list">[]</meta_types> - <portal_types type="list">[]</portal_types> - <report_root_list type="list">[]</report_root_list> - <report_tree type="int">0</report_tree> - <search type="int">0</search> - <search_columns type="list">[]</search_columns> - <select type="int">0</select> - <selection_name>delivery_cells_selection</selection_name> - <sort type="list">[('variation_text', 'variation_text')]</sort> - <sort_columns></sort_columns> - <stat_method></stat_method> - <title>Contenu du colis</title> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>hidden</title> - <fields> - - <field><id>listbox_container_quantity</id> <type>FloatField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">10</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <required type="int">0</required> - <title>Autre quantité</title> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="not_float">You did not enter a floating point number.</message> - </messages> - </field> - <field><id>listbox_container_index</id> <type>FloatField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default>1</default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">5</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <required type="int">0</required> - <title>Ordre colis</title> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="not_float">You did not enter a floating point number.</message> - </messages> - </field> - </fields> - </group> - </groups> -</form> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_trade/Container_printExtandLabel.py b/product/Coramy/skins/coramy_trade/Container_printExtandLabel.py deleted file mode 100755 index 250440e012..0000000000 --- a/product/Coramy/skins/coramy_trade/Container_printExtandLabel.py +++ /dev/null @@ -1,174 +0,0 @@ -## Script (Python) "Container_printExtandLabel" -##bind container=container -##bind context=context -##bind namespace= -##bind script=script -##bind subpath=traverse_subpath -##parameters=printer_name='' -##title= -## -from Products.Coramy.MetoAPI import selectMeter, startFormat, setDecoration, setPrintSpeed, setPaperSpeed, setPixel, setTemparature, setNumber, endFormat, printText, printLine, printFrame, setAsdFont - - -def chaine(num, div): - case = { - 10 : 1, - 100 : 2, - 1000: 3, - 10000: 4, - 100000: 5, - 1000000: 6 - - } - longueur = case[div] - #longueur = div / 10 - tmp = str( int(num) % div) - - result = '' - for i in range(0,longueur): - result += '0' - - result = result[:-len(tmp)] + tmp - return result - - - -raw_string = '' -container = context - -""" -# selecting printer (user dependent) -local_user = container.portal_membership.getAuthenticatedMember().getUserName() -if local_user == 'Nicole_Denis' : - printer_name = 'Meto_XS40_2' -elif local_user == 'Christelle_Megret' : - printer_name = 'Meto_XS40_3' -elif local_user == 'Jocelyne_Olejarz' : - printer_name = 'Meto_XS40_4' -elif local_user == 'Nathalie_Wadoux' : - printer_name = 'Meto_XS40_5' -elif local_user == 'Joelle_Gorriez': - printer_name = 'Meto_XS40_6' -elif local_user == 'Chantal_Hannequin' : - printer_name = 'Meto_XS40_5' -elif local_user == 'Gaelle_Manier' : - printer_name = 'Meto_XS40_6' - -else : - printer_name = 'Meto_XS40_2' -""" -delivery = container.aq_parent - -# Destination -client_title = delivery.getDestinationValue(portal_type=['Organisation']).getTitle() -client_address_items = delivery.getDestinationValue(portal_type=['Organisation']).getDefaultAddress().asText(country='France').split('\n') -client_address_1 = client_address_items[0] -if len(client_address_items) > 2 : - client_address_2 = client_address_items[1] -else : - client_address_2 = '' -client_city = client_address_items[len(client_address_items)-1] -client_zip_code = delivery.getDestinationValue(portal_type=['Organisation']).getDefaultAddress().getZipCode() - -# Expediteur -source_section = delivery.getSourceSectionTitle() -list = delivery.portal_catalog(Title=source_section, portal_type = 'Organisation') -if len(list) > 0: - expe = list[0].getObject() - - expe_title = expe.getTitle() - expe_address_items = expe.getDefaultAddress().asText(country='France').split('\n') - expe_address = expe_address_items[0] - expe_city = expe_address_items[len(expe_address_items)-1] - - -# Printing protocol starts here -# first set some parameters -raw_string += selectMeter() -raw_string += setAsdFont() -#raw_string += setDecoration(1) -raw_string += startFormat() -raw_string += setPrintSpeed() -raw_string += setPaperSpeed() -raw_string += setTemparature() - - -# then design the label -# adress -raw_string += printFrame(1, 29, 41, 35, 99, 5, 5, 10) -# ref colis -raw_string += printFrame(1, 29, 8, 35, 33, 5, 5, 10) -# code produit extand -raw_string += printFrame(1, 3, 94, 26, 46, 5, 5, 10) -raw_string += printLine(1, 3, 64, 15, 30, 10) -# dpt -raw_string += printFrame(1, 18, 64, 11, 30, 5, 5, 10) -# expediteur -raw_string += printFrame(1, 3, 8, 26, 56, 5, 5, 10) - - -# calcul modulo -#recepisse = str(int(atof(delivery.getId())) % 1000000) + str( container.getIntIndex() % 100 ) -recepisse = chaine( delivery.getId() , 1000000) + chaine( container.getIntIndex() , 100 ) - - -case_society = { - 'BLS':'5433', - 'Houvenaegel':'1194', - 'Coramy':'0193' -} -code_client = case_society[ source_section ] - -code = '12119591'+code_client+'4012'+recepisse + chaine( container.getGrossWeight() * 10 , 1000 ) + '00' + client_zip_code[:2] -totpair = int(code[0]) -totimpair = 0 - -for i in range(15): - totimpair += int(code[(2*i)+1]) - totpair += int(code[(2*i)+2]) - -cal1 = str((totpair * 3) + totimpair) -digit = str ( 10 - int( cal1[ len(cal1) - 1 ] ) ) - -if digit == '10': - digit = '0' - -code_barre = code+digit - - - -# code barre -raw_string += printText(2, "d", 0, 0, 300, 70, 139, code_barre, 10) -raw_string += printText(2, "9", 0, 0, 300, 65, 111, code_barre, 10) - - -# expediteur -raw_string += printText(2, "9", 0, 0, 2, 22, 62, "Expediteur", 10) -raw_string += printText(2, "9", 0, 0, 2, 15, 62, expe_title , 10) -raw_string += printText(2, "9", 0, 0, 1, 10, 62, expe_address , 10) -raw_string += printText(2, "9", 0, 0, 1, 4, 62, expe_city , 10) - -# destinataire -raw_string += printText(2, "9", 0, 0, 2, 56, 139, client_title , 10) -raw_string += printText(2, "9", 0, 0, 2, 46, 139, client_address_1 , 10) -raw_string += printText(2, "9", 0, 0, 2, 41, 139, client_address_2 , 10) -raw_string += printText(2, "9", 0, 0, 3, 31, 139, client_city , 10) - -# colis -raw_string += printText(2, "9", 0, 0, 1, 58, 38, "Cde "+ delivery.getId() , 10) -raw_string += printText(2, "9", 0, 0, 1, 41, 38, "Poids "+ str( container.getGrossWeight()) + " Kg", 10) -raw_string += printText(2, "9", 0, 0, 1, 49, 38, "Colis "+ str(container.getIntIndex()), 10) -raw_string += printText(2, "9", 0, 0, 1, 32, 38, "Ref. "+ recepisse, 10) -raw_string += printText(2, "9", 0, 0, 4, 18, 134, "EXTAND", 10) -raw_string += printText(2, "9", 0, 0, 6, 3, 130, "B12", 10) -raw_string += printText(2, "9", 0, 0, 5, 17, 86, client_zip_code[:2] , 10) - -raw_string += printText(2, "9", 0, 0, 6, 2, 87, context.PlanTransportExtand(client_zip_code[:2])[1] , 10) - -# set the quentity to print -raw_string += setNumber() -raw_string += endFormat() - -# send data to printer -#return chaine(94.2,10000) -context.sendRawToCups(printer_name, raw_string) diff --git a/product/Coramy/skins/coramy_trade/Container_printLabel.py b/product/Coramy/skins/coramy_trade/Container_printLabel.py deleted file mode 100755 index 6abc2090d1..0000000000 --- a/product/Coramy/skins/coramy_trade/Container_printLabel.py +++ /dev/null @@ -1,19 +0,0 @@ -## Script (Python) "Container_printLabel" -##bind container=container -##bind context=context -##bind namespace= -##bind script=script -##bind subpath=traverse_subpath -##parameters=user_name=None -##title= -## -# get the name of the printer -printer_name = context.Coramy_userLabelPrinterDefinition(user_name=user_name) - -# print container label -container = context - -if container.aq_parent.getDeliveryMode() == 'Transporteur/Extand' : - container.Container_printExtandLabel(printer_name=printer_name) -else : - container.Container_printMetoLabel(printer_name=printer_name) diff --git a/product/Coramy/skins/coramy_trade/Container_printMetoLabel.py b/product/Coramy/skins/coramy_trade/Container_printMetoLabel.py deleted file mode 100755 index bb5d9f5db3..0000000000 --- a/product/Coramy/skins/coramy_trade/Container_printMetoLabel.py +++ /dev/null @@ -1,85 +0,0 @@ -## Script (Python) "Container_printMetoLabel" -##bind container=container -##bind context=context -##bind namespace= -##bind script=script -##bind subpath=traverse_subpath -##parameters=printer_name='' -##title= -## -from Products.Coramy.MetoAPI import selectMeter, startFormat, setDecoration, setPrintSpeed, setPaperSpeed, setPixel, setTemparature, setNumber, endFormat, printText, printLine, printFrame, setAsdFont - -raw_string = '' -container = context -""" -# selecting printer (user dependent) -local_user = container.portal_membership.getAuthenticatedMember().getUserName() -if local_user == 'Nicole_Denis' : - printer_name = 'Meto_XS40_2' -elif local_user == 'Christelle_Megret' : - printer_name = 'Meto_XS40_3' -elif local_user == 'Jocelyne_Olejarz' : - printer_name = 'Meto_XS40_4' -elif local_user == 'Nathalie_Wadoux' : - printer_name = 'Meto_XS40_5' -elif local_user == 'Joelle_Gorriez': - printer_name = 'Meto_XS40_6' -elif local_user == 'Chantal_Hannequin' : - printer_name = 'Meto_XS40_5' -elif local_user == 'Gaelle_Manier' : - printer_name = 'Meto_XS40_6' -else : - printer_name = 'Meto_XS40_2' -""" -delivery = container.aq_parent -client_title = delivery.getDestinationValue(portal_type=['Organisation']).getTitle() -client_address_items = delivery.getDestinationValue(portal_type=['Organisation']).getDefaultAddress().asText(country='France').split('\n') -client_address_1 = client_address_items[0] -if len(client_address_items) > 2 : - client_address_2 = client_address_items[1] -else : - client_address_2 = '' -client_city = client_address_items[len(client_address_items)-1] - -# Printing protocol starts here -# first set some parameters -raw_string += selectMeter() -raw_string += setAsdFont() -#raw_string += setDecoration(1) -raw_string += startFormat() -raw_string += setPrintSpeed() -raw_string += setPaperSpeed() -raw_string += setTemparature() - -# then design the label -raw_string += printLine(1, 3, 138, 100, 10, 10) -raw_string += printText(1, "9", 0, 0, 2, 8, 139, 'Expediteur', 10) -raw_string += printText(1, "9", 0, 0, 3, 52, 138, 'Destinataire', 10) -raw_string += printFrame(1, 3, 3, 100, 145, 2, 2, 10) -raw_string += printLine(1, 41, 3, 0.5, 145, 10) -raw_string += printLine(1, 11, 3, 0.2, 135, 10) - -raw_string += printText(2, "9", 0, 0, 2, 31, 131, 'Coramy', 10) -raw_string += printText(2, "9", 0, 0, 1, 24, 131, '5 bis, rue Denis Cordonnier', 10) -raw_string += printText(2, "9", 0, 0, 1, 16, 131, '59820 GRAVELINES', 10) - -raw_string += printText(2, "9", 0, 0, 2, 91, 131, client_title, 10) -raw_string += printText(2, "9", 0, 0, 2, 79, 131, client_address_1, 10) -raw_string += printText(2, "9", 0, 0, 2, 69, 131, client_address_2, 10) -raw_string += printText(2, "9", 0, 0, 3, 57, 131, client_city, 10) -raw_string += printText(2, "9", 0, 0, 3, 46, 131, '', 10) - -raw_string += printText(2, "9", 0, 0, 1, 5, 131, delivery.getId(), 10) -raw_string += printText(2, "9", 0, 0, 1, 5, 86, str(container.getIntIndex()), 10) - -if delivery.getDeliveryMode() != None: - raw_string += printText(2, "9", 0, 0, 1, 5, 46, delivery.getDeliveryMode(), 10) - -raw_string += printText(4, "d", 8, 2, 220, 37, 8, container.getSerialNumber(), 10) - -# set the quentity to print -raw_string += setNumber() -raw_string += endFormat() - -# send data to printer -context.sendRawToCups(printer_name, raw_string) diff --git a/product/Coramy/skins/coramy_trade/Container_sendExtandEdi.py b/product/Coramy/skins/coramy_trade/Container_sendExtandEdi.py deleted file mode 100755 index fff39be322..0000000000 --- a/product/Coramy/skins/coramy_trade/Container_sendExtandEdi.py +++ /dev/null @@ -1,99 +0,0 @@ -## Script (Python) "Container_sendExtandEdi" -##bind container=container -##bind context=context -##bind namespace= -##bind script=script -##bind subpath=traverse_subpath -##parameters= -##title= -## -from DateTime import DateTime -from string import zfill,ljust - -request = context.REQUEST -msg = '' - - -def decoupe(s,width): - from string import ljust - import string - if len(s) > width: - result = s[-width:] - else: - #result = string.ljust(s,width) - result = s + (' ' * (width-len(s))) - #return ' '+s - return result - -def chaine(num, width): - s = str(int(num)) - if len(s) > width: - result = s[-width:] - else: - result = zfill(s,width) - return result - - -object_list = context.object_action_list(selection_name='sales_packing_list_selection') -for delivery in object_list: - try: - if delivery.getDeliveryMode() == 'Transporteur/Extand': - - # Destination - client_title = delivery.getDestinationValue(portal_type=['Organisation']).getTitle() - client_address_items = delivery.getDestinationValue(portal_type=['Organisation']).getDefaultAddress().asText(country='France').split('\n') - client_address_1 = client_address_items[0] - if len(client_address_items) > 2 : - client_address_2 = client_address_items[1] - else : - client_address_2 = '' - if len(client_address_items) > 3 : - client_address_3 = client_address_items[2] - else : - client_address_3 = '' - - #client_city = client_address_items[len(client_address_items)-1] - client_city = delivery.getDestinationValue(portal_type=['Organisation']).getDefaultAddress().getCity() - - client_zip_code = delivery.getDestinationValue(portal_type=['Organisation']).getDefaultAddress().getZipCode() - - client_tel = delivery.getDestinationValue(portal_type=['Organisation']).getDefaultTelephone() - if client_tel != None: - client_tel = client_tel.asText().split('\n')[0] - else: - client_tel = '' - - - - plat = context.PlanTransportExtand(client_zip_code[:2])[0] - - - container_list = delivery.contentValues(filter={'portal_type':'Container'}) - for container in container_list: - - #recepisse = "%08d%02d" % (delivery.getId() ,container.getIntIndex()) - recepisse = chaine( delivery.getId(), 8 )+chaine(str(container.getIntIndex()) , 2) - - case_society = { - 'BLS':'5433', - 'Houvenaegel':'1194', - 'Coramy':'0193' - } - source_section = delivery.getSourceSectionTitle() - code_client = case_society[ source_section ] - - msg += "301959"+code_client+recepisse+"0100"+client_zip_code[:2]+chaine(container.getGrossWeight() * 10 , 3) - - msg += DateTime().strftime("%Y%m%d") - - num_com_client = delivery.getCausalityValue(portal_type=['Sales Order']).getDestinationReference() - msg += plat+"001000"+decoupe( num_com_client ,80)+decoupe(client_title ,32)+decoupe(client_address_1,32) - msg += decoupe(client_address_2,32)+decoupe(client_address_3,32)+decoupe(client_zip_code,10) - msg += decoupe(client_city,32)+decoupe(client_tel,16)+'\r\n' - except: - message='Erreur+sur+la+livraison:+identifiant+%s.' % (delivery.getId()) - redirect_url = '%s?%s%s' % ( context.absolute_url()+'/view', 'portal_status_message=',message) - request[ 'RESPONSE' ].redirect( redirect_url ) - -request.RESPONSE.setHeader('Content-Type','application/text') -return msg diff --git a/product/Coramy/skins/coramy_trade/Container_zGetCellList.org.zsql b/product/Coramy/skins/coramy_trade/Container_zGetCellList.org.zsql deleted file mode 100755 index 63b488087d..0000000000 --- a/product/Coramy/skins/coramy_trade/Container_zGetCellList.org.zsql +++ /dev/null @@ -1,41 +0,0 @@ -<dtml-comment> -title: -connection_id:MySQL -max_rows:1000 -max_cache:100 -cache_time:0 -class_name:ZSQLBrain -class_file:zsqlbrain.py -</dtml-comment> -<params>uid -sort_on</params> -SELECT - container_cell.uid, container_cell.Id, container_cell.path, container_cell.Description, movement.variation_text -FROM - catalog AS container_cell, catalog AS container_line, movement -WHERE -(( - container_cell.parent_uid = container_line.uid -AND - container_line.parent_uid = <dtml-sqlvar uid type="int"> -AND - movement.uid = container_cell.uid -AND - container_cell.portal_type = "Container Cell" -) -OR -( - container_line.parent_uid = <dtml-sqlvar uid type="int"> -AND - container_line.uid = container_cell.uid -AND - movement.uid = container_cell.uid -AND - movement.has_cell_content = 0 -AND - container_line.portal_type = "Container Line" -)) -AND container_cell.portal_type <> "Container" -<dtml-if sort_on>ORDER BY - <dtml-var sort_on> -</dtml-if> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_trade/Container_zGetCellList.zsql b/product/Coramy/skins/coramy_trade/Container_zGetCellList.zsql deleted file mode 100755 index 9bef19acc0..0000000000 --- a/product/Coramy/skins/coramy_trade/Container_zGetCellList.zsql +++ /dev/null @@ -1,43 +0,0 @@ -<dtml-comment> -title: -connection_id:erp5_sql_connection -max_rows:1000 -max_cache:100 -cache_time:0 -class_name:ZSQLBrain -class_file:zsqlbrain.py -</dtml-comment> -<params>uid -sort_on</params> -SELECT - container_cell.uid, container_cell.Id, container_cell.path, container_cell.Description, movement.variation_text, movement.delivery_uid -FROM - catalog AS container_cell, catalog AS container_line, movement -WHERE - movement.delivery_uid = <dtml-sqlvar getDeliveryUid type="int"> -AND -(( - container_cell.parent_uid = container_line.uid -AND - container_line.parent_uid = <dtml-sqlvar uid type="int"> -AND - movement.uid = container_cell.uid -AND - container_cell.portal_type = "Container Cell" -) -OR -( - container_line.parent_uid = <dtml-sqlvar uid type="int"> -AND - container_line.uid = container_cell.uid -AND - movement.uid = container_cell.uid -AND - movement.has_cell_content = 0 -AND - container_line.portal_type = "Container Line" -)) -AND container_cell.portal_type <> "Container" -<dtml-if sort_on>ORDER BY - <dtml-var sort_on> -</dtml-if> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_trade/Container_zGetTotal.zsql b/product/Coramy/skins/coramy_trade/Container_zGetTotal.zsql deleted file mode 100755 index 280b400631..0000000000 --- a/product/Coramy/skins/coramy_trade/Container_zGetTotal.zsql +++ /dev/null @@ -1,39 +0,0 @@ -<dtml-comment> -title: -connection_id:erp5_sql_connection -max_rows:1000 -max_cache:100 -cache_time:0 -class_name:ZSQLBrain -class_file:zsqlbrain.py -</dtml-comment> -<params>uid</params> -SELECT - SUM(movement.target_quantity) AS target_total_quantity -FROM - catalog AS container_cell, catalog AS container_line, movement -WHERE - movement.delivery_uid = <dtml-sqlvar getDeliveryUid type="int"> -AND -(( - container_cell.parent_uid = container_line.uid -AND - container_line.parent_uid = <dtml-sqlvar uid type="int"> -AND - movement.uid = container_cell.uid -AND - container_cell.portal_type = "Container Cell" -) -OR -( - container_line.parent_uid = <dtml-sqlvar uid type="int"> -AND - container_line.uid = container_cell.uid -AND - movement.uid = container_cell.uid -AND - movement.has_cell_content = 0 -AND - container_line.portal_type = "Container Line" -)) -AND container_cell.portal_type <> "Container" \ No newline at end of file diff --git a/product/Coramy/skins/coramy_trade/DeliveryCell_getContainedTargetQuantity.py b/product/Coramy/skins/coramy_trade/DeliveryCell_getContainedTargetQuantity.py deleted file mode 100755 index abb15bc686..0000000000 --- a/product/Coramy/skins/coramy_trade/DeliveryCell_getContainedTargetQuantity.py +++ /dev/null @@ -1,29 +0,0 @@ -## Script (Python) "DeliveryCell_getContainedTargetQuantity" -##bind container=container -##bind context=context -##bind namespace= -##bind script=script -##bind subpath=traverse_subpath -##parameters= -##title= -## -delivery_cell = context - -if delivery_cell.getPortalType() in ('Sales Packing List Line', 'Purchase Packing List Line') : - delivery_uid = delivery_cell.aq_parent.getUid() -else : -# we are on a Delivery Cell - delivery_uid = delivery_cell.aq_parent.aq_parent.getUid() - -resource_uid = delivery_cell.getResourceValue().getUid() -variation_text = delivery_cell.getVariationText() - -sql_list = delivery_cell.DeliveryCell_zGetContainedTargetQuantity(delivery_uid=delivery_uid,resource_uid=resource_uid,variation_text=variation_text) - -if len(sql_list)>0 : - if sql_list[0].target_quantity is not None : - return float(sql_list[0].target_quantity) - else : - return 0 -else : - return 0 diff --git a/product/Coramy/skins/coramy_trade/DeliveryCell_zGetContainedTargetQuantity.zsql b/product/Coramy/skins/coramy_trade/DeliveryCell_zGetContainedTargetQuantity.zsql deleted file mode 100755 index 1f9daee47f..0000000000 --- a/product/Coramy/skins/coramy_trade/DeliveryCell_zGetContainedTargetQuantity.zsql +++ /dev/null @@ -1,30 +0,0 @@ -<dtml-comment> -title: -connection_id:erp5_sql_connection -max_rows:1000 -max_cache:100 -cache_time:0 -class_name:ZSQLBrain -class_file:zsqlbrain.py -</dtml-comment> -<params>delivery_uid -resource_uid -variation_text</params> -SELECT - SUM(movement.target_quantity) AS target_quantity -FROM - catalog AS container_cell, movement -WHERE - movement.delivery_uid = <dtml-sqlvar delivery_uid type="int"> -AND - movement.has_cell_content = 0 -AND - container_cell.uid = movement.uid -AND - (container_cell.portal_type = "Container Cell" OR container_cell.portal_type = "Container Line") -<dtml-if resource_uid> -AND movement.resource_uid = <dtml-sqlvar resource_uid type="int"> -</dtml-if> -<dtml-if variation_text> -AND movement.variation_text = "<dtml-var variation_text>" -</dtml-if> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_trade/DeliveryCell_zGetItemList.zsql b/product/Coramy/skins/coramy_trade/DeliveryCell_zGetItemList.zsql deleted file mode 100755 index c66509b49c..0000000000 --- a/product/Coramy/skins/coramy_trade/DeliveryCell_zGetItemList.zsql +++ /dev/null @@ -1,25 +0,0 @@ -<dtml-comment> -title: -connection_id:erp5_sql_connection -max_rows:1000 -max_cache:100 -cache_time:0 -class_name:ZSQLBrain -class_file:zsqlbrain.py -</dtml-comment> -<params>uid -sort_on</params> -SELECT - item.uid, item.Id, item.path, item.Description -FROM - catalog AS item, category -WHERE - category.uid = <dtml-sqlvar uid type="int"> -AND - category.category_uid = item.uid -AND - category.base_category_uid = <dtml-var "portal_categories.aggregate.uid"> - -<dtml-if sort_on>ORDER BY - <dtml-var sort_on> -</dtml-if> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_trade/DeliveryLine_asCellRange.py b/product/Coramy/skins/coramy_trade/DeliveryLine_asCellRange.py deleted file mode 100755 index 71b6194ade..0000000000 --- a/product/Coramy/skins/coramy_trade/DeliveryLine_asCellRange.py +++ /dev/null @@ -1,25 +0,0 @@ -## Script (Python) "DeliveryLine_asCellRange" -##bind container=container -##bind context=context -##bind namespace= -##bind script=script -##bind subpath=traverse_subpath -##parameters= -##title= -## -line_ids = context.order_line_matrix_item_list(base_category_list = ('coloris', 'variante'), base=1) -column_ids = context.order_line_matrix_item_list(base_category_list = ('taille',), base=1) -tab_ids = context.order_line_matrix_item_list(base_category_list = ('taille','coloris','variante'), - base=1, include=0) - -line_ids = map(lambda x: x[0], line_ids) -column_ids = map(lambda x: x[0], column_ids) -tab_ids = map(lambda x: x[0], tab_ids) - - -if len(tab_ids) is 0: - return [line_ids, column_ids] -elif tab_ids[0] is None: - return [line_ids, column_ids] -else: - return [line_ids, column_ids, tab_ids] diff --git a/product/Coramy/skins/coramy_trade/DeliveryLine_getCorrespondanceDict.py b/product/Coramy/skins/coramy_trade/DeliveryLine_getCorrespondanceDict.py deleted file mode 100755 index de83da6833..0000000000 --- a/product/Coramy/skins/coramy_trade/DeliveryLine_getCorrespondanceDict.py +++ /dev/null @@ -1,28 +0,0 @@ -## Script (Python) "DeliveryLine_getCorrespondanceDict" -##bind container=container -##bind context=context -##bind namespace= -##bind script=script -##bind subpath=traverse_subpath -##parameters= -##title= -## -delivery_line = context -correspondance_dict = {} - -if delivery_line.hasCellContent() : - variation_base_category_list = delivery_line.getVariationBaseCategoryList() - for base_category in variation_base_category_list : - correspondance_dict[base_category] = {} - for cell in delivery_line.contentValues(filter={'portal_type' : ['Delivery Cell', 'Invoice Cell']}) : - if 'coloris' in variation_base_category_list : - correspondance_dict['coloris']['coloris/'+cell.getColoris()] = cell.Amount_getColorisClient() - if 'taille' in variation_base_category_list : - if 'morphologie' in variation_base_category_list : - correspondance_dict['taille']['taille/'+cell.getTaille()+'morphologie/'+cell.getMorphologie()] = cell.Amount_getTailleClient() - else : - correspondance_dict['taille']['taille/'+cell.getTaille()] = cell.Amount_getTailleClient() - if 'morphologie' in variation_base_category_list : - correspondance_dict['morphologie']['morphologie/'+cell.getMorphologie()] = cell.getMorphologieValue().getMorphoTypeTitle() - -return correspondance_dict diff --git a/product/Coramy/skins/coramy_trade/DeliveryLine_getTargetQuantityList.py b/product/Coramy/skins/coramy_trade/DeliveryLine_getTargetQuantityList.py deleted file mode 100755 index 99c62c1209..0000000000 --- a/product/Coramy/skins/coramy_trade/DeliveryLine_getTargetQuantityList.py +++ /dev/null @@ -1,65 +0,0 @@ -## Script (Python) "DeliveryLine_getTargetQuantityList" -##bind container=container -##bind context=context -##bind namespace= -##bind script=script -##bind subpath=traverse_subpath -##parameters=taille_list=[], coloris=None, morphologie=None -##title= -## -delivery_line = context -taille_list = taille_list -target_quantity_list = [] - -def category_property(category, property): - if category <> None : - if hasattr(category,property) : - return getattr(category,property) - else : - return " " - else : - return " " - -if len(taille_list) == 0 : - my_taille = None - if coloris is not None and morphologie is not None : - my_coloris = 'coloris/'+coloris - my_morphologie = 'morphologie/'+morphologie - if delivery_line.getCell(my_coloris, my_taille, my_morphologie, base_id='movement') <> None : - target_quantity_list.append(delivery_line.getCell(my_coloris, my_taille, my_morphologie, base_id='movement').getProperty(key="target_quantity")) - else : - target_quantity_list.append(0) - elif coloris is not None : - my_coloris = 'coloris/'+coloris - if delivery_line.getCell(my_coloris, my_taille, base_id='movement') <> None : - target_quantity_list.append(delivery_line.getCell(my_coloris, my_taille, base_id='movement').getProperty(key="target_quantity")) - else : - target_quantity_list.append(0) - else : # coloris is None : - if delivery_line.getCell(None, my_taille, base_id='movement') <> None : - target_quantity_list.append(delivery_line.getCell(None, my_taille, base_id='movement').getProperty(key="target_quantity")) - else : - target_quantity_list.append(0) -else : - for taille in taille_list : - my_taille = 'taille/'+taille - if coloris is not None and morphologie is not None : - my_coloris = 'coloris/'+coloris - my_morphologie = 'morphologie/'+morphologie - if delivery_line.getCell(my_coloris, my_taille, my_morphologie, base_id='movement') <> None : - target_quantity_list.append(delivery_line.getCell(my_coloris, my_taille, my_morphologie, base_id='movement').getProperty(key="target_quantity")) - else : - target_quantity_list.append(0) - elif coloris is not None : - my_coloris = 'coloris/'+coloris - if delivery_line.getCell(my_coloris, my_taille, base_id='movement') <> None : - target_quantity_list.append(delivery_line.getCell(my_coloris, my_taille, base_id='movement').getProperty(key="target_quantity")) - else : - target_quantity_list.append(0) - else : # coloris is None : - if delivery_line.getCell(None, my_taille, base_id='movement') <> None : - target_quantity_list.append(delivery_line.getCell(None, my_taille, base_id='movement').getProperty(key="target_quantity")) - else : - target_quantity_list.append(0) - -return target_quantity_list diff --git a/product/Coramy/skins/coramy_trade/DeliveryLine_zGetTotal.zsql b/product/Coramy/skins/coramy_trade/DeliveryLine_zGetTotal.zsql deleted file mode 100755 index 21fe2d139c..0000000000 --- a/product/Coramy/skins/coramy_trade/DeliveryLine_zGetTotal.zsql +++ /dev/null @@ -1,21 +0,0 @@ -<dtml-comment> -title: -connection_id:erp5_sql_connection -max_rows:1000 -max_cache:100 -cache_time:0 -class_name: -class_file: -</dtml-comment> -<params>uid</params> -SELECT - SUM(quantity) AS total_quantity, - SUM(total_price) AS total_price, - SUM(target_quantity) AS target_total_quantity, - SUM(target_total_price) AS target_total_price, - AVG(price) AS average_price -FROM catalog, movement -WHERE - catalog.parent_uid = <dtml-sqlvar uid type="int"> -AND - catalog.uid = movement.uid diff --git a/product/Coramy/skins/coramy_trade/DeliveryTest_selectionAssignLocalRoles.py b/product/Coramy/skins/coramy_trade/DeliveryTest_selectionAssignLocalRoles.py deleted file mode 100755 index a21179ccbe..0000000000 --- a/product/Coramy/skins/coramy_trade/DeliveryTest_selectionAssignLocalRoles.py +++ /dev/null @@ -1,28 +0,0 @@ -## Script (Python) "DeliveryTest_selectionAssignLocalRoles" -##bind container=container -##bind context=context -##bind namespace= -##bind script=script -##bind subpath=traverse_subpath -##parameters= -##title= -## -selection = context.portal_selections.getSelectionFor('purchase_packing_list_selection',REQUEST=context.REQUEST) -delivery_list = selection(context=context) -request = context.REQUEST - -for delivery_item in delivery_list: - delivery = delivery_item.getObject() - - if delivery is not None : - order_list = delivery.getCausalityValueList() - if len(order_list) > 0 : - order = order_list[0] - # what's the gestionaire of this order - user_name = '' - # are we on a sales order or puchase order ? - if order.getPortalType() == 'Purchase Order' : - user_name = order.getDestinationAdministrationPersonTitle().replace(' ','_') - delivery.assign_gestionaire_designe_roles(user_name = user_name) - -return 'fait' diff --git a/product/Coramy/skins/coramy_trade/Delivery_exportContainerList.py b/product/Coramy/skins/coramy_trade/Delivery_exportContainerList.py deleted file mode 100755 index 3172747499..0000000000 --- a/product/Coramy/skins/coramy_trade/Delivery_exportContainerList.py +++ /dev/null @@ -1,51 +0,0 @@ -## Script (Python) "Delivery_exportContainerList" -##bind container=container -##bind context=context -##bind namespace= -##bind script=script -##bind subpath=traverse_subpath -##parameters= -##title= -## -delivery = context -request = context.REQUEST -tab = '\t' -cr = '\r' -export = '' -container_list = delivery.contentValues(filter={'portal_type':'Container'}) -order = delivery.getCausalityValue(portal_type=['Sales Order']) - -for container_item in container_list : - ligne_container = '' - container=container_item.getObject() - container_line_list = container.contentValues(filter={'portal_type':'Container Line'}) - first_line = container_line_list[0] - - ligne_container += order.getId()+tab - ligne_container += order.getDestinationReference()+tab - ligne_container += order.getGroup()+tab - ligne_container += delivery.getId()+tab - ligne_container += str(container.getIntIndex())+tab - ligne_container += str(len(container_list))+tab - ligne_container += "%06d" % container.getTargetTotalQuantity()+tab - ligne_container += str(container.getGrossWeight())+tab - ligne_container += first_line.getResourceValue().getId()+tab - ligne_container += delivery.getDestinationSectionTitle()+tab - if first_line.getColorisValue() is not None : - ligne_container += first_line.getColorisValue().getId()+tab - else : - ligne_container += ''+tab - ligne_container += first_line.Amount_getTailleClient()+tab - ligne_container += "Maillot de bain"+tab - ligne_container += first_line.Amount_getCodeArticleClient()+tab - ligne_container += first_line.getResourceValue().getDestinationReference()+tab - ligne_container += ''+tab # prix conso - ligne_container += ''+tab # devise - ligne_container += ''+tab # gencod - - ligne_container += cr - export += ligne_container - -request.RESPONSE.setHeader('Content-Type','application/text') - -return export diff --git a/product/Coramy/skins/coramy_trade/Delivery_futureInventoryView.form b/product/Coramy/skins/coramy_trade/Delivery_futureInventoryView.form deleted file mode 100755 index 59be8445f0..0000000000 --- a/product/Coramy/skins/coramy_trade/Delivery_futureInventoryView.form +++ /dev/null @@ -1,140 +0,0 @@ -<?xml version="1.0"?> - -<form> - <title>Resource Inventory</title> - <row_length>4</row_length> - <name>Resource_inventoryView</name> - <pt>form_view</pt> - <action></action> - <method>POST</method> - <enctype></enctype> - <encoding>UTF-8</encoding> - <stored_encoding>ISO-8859-1</stored_encoding> - <unicode_mode>false</unicode_mode> - <groups> - <group> - <title>left</title> - <fields> - - <field><id>my_id</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <max_length></max_length> - <required type="int">1</required> - <title>Id</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>right</title> - <fields> - - </fields> - </group> - <group> - <title>center</title> - <fields> - - </fields> - </group> - <group> - <title>bottom</title> - <fields> - - <field><id>current_inventory_list_box</id> <type>ListBox</type> - <values> - <all_columns type="list">[]</all_columns> - <all_editable_columns type="list">[]</all_editable_columns> - <alternate_name></alternate_name> - <columns type="list">[('node_title', 'Stock'), ('section_title', 'Propri\xe9taire'), ('resource_title', 'Composant'), ('variation_text', 'Variante'), ('inventory', 'Quantit\xe9')]</columns> - <css_class></css_class> - <default></default> - <default_params type="list">[]</default_params> - <description></description> - <domain_root_list type="list">[]</domain_root_list> - <domain_tree type="int">0</domain_tree> - <editable type="int">1</editable> - <editable_columns type="list">[]</editable_columns> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <global_attributes type="list">[]</global_attributes> - <hidden type="int">0</hidden> - <lines type="int">20</lines> - <list_action>Delivery_inventoryView</list_action> - <list_method type="method">Delivery_getFutureInventoryList</list_method> - <meta_types type="list">[]</meta_types> - <portal_types type="list">[]</portal_types> - <report_root_list type="list">[]</report_root_list> - <report_tree type="int">0</report_tree> - <search type="int">0</search> - <search_columns></search_columns> - <select type="int">0</select> - <selection_name>delivery_future_inventory</selection_name> - <sort type="list">[]</sort> - <sort_columns></sort_columns> - <stat_method></stat_method> - <title>Stock futur par variantes</title> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>hidden</title> - <fields> - - <field><id>current_inventory_chart</id> <type>ZGDChart</type> - <values> - <alternate_name></alternate_name> - <bg_transparent type="int">1</bg_transparent> - <chart_style>pie_3d</chart_style> - <chart_title>Excédents Actuels</chart_title> - <css_class></css_class> - <data_method>Resource_getChartCurrentInventoryList</data_method> - <default></default> - <default_params type="list">[]</default_params> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <hidden type="int">0</hidden> - <selection_name>resource_current_inventory_chart</selection_name> - <title>Excédents Actuels</title> - <x_title></x_title> - <y_title></y_title> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - </messages> - </field> - </fields> - </group> - </groups> -</form> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_trade/Delivery_getFutureInventoryList.py b/product/Coramy/skins/coramy_trade/Delivery_getFutureInventoryList.py deleted file mode 100755 index e6881c3641..0000000000 --- a/product/Coramy/skins/coramy_trade/Delivery_getFutureInventoryList.py +++ /dev/null @@ -1,11 +0,0 @@ -## Script (Python) "Delivery_getFutureInventoryList" -##bind container=container -##bind context=context -##bind namespace= -##bind script=script -##bind subpath=traverse_subpath -##parameters=**kw -##title= -## -resource_uid_list = map(lambda o:o.getResourceUid(),context.contentValues(filter={'portal_type': context.getMovementTypeList()})) -return context.Delivery_zGetInventoryList(resource_uid_list=resource_uid_list, **kw) diff --git a/product/Coramy/skins/coramy_trade/Delivery_getInventoryList.py b/product/Coramy/skins/coramy_trade/Delivery_getInventoryList.py deleted file mode 100755 index 74f4837408..0000000000 --- a/product/Coramy/skins/coramy_trade/Delivery_getInventoryList.py +++ /dev/null @@ -1,12 +0,0 @@ -## Script (Python) "Delivery_getInventoryList" -##bind container=container -##bind context=context -##bind namespace= -##bind script=script -##bind subpath=traverse_subpath -##parameters=**kw -##title= -## -from DateTime import DateTime -resource_uid_list = map(lambda o:o.getResourceUid(),context.contentValues(filter={'portal_type': context.getMovementTypeList()})) -return context.Delivery_zGetInventoryList(to_date=DateTime(),resource_uid_list=resource_uid_list, **kw) diff --git a/product/Coramy/skins/coramy_trade/Delivery_inventoryView.form b/product/Coramy/skins/coramy_trade/Delivery_inventoryView.form deleted file mode 100755 index 6569c14441..0000000000 --- a/product/Coramy/skins/coramy_trade/Delivery_inventoryView.form +++ /dev/null @@ -1,140 +0,0 @@ -<?xml version="1.0"?> - -<form> - <title>Resource Inventory</title> - <row_length>4</row_length> - <name>Resource_inventoryView</name> - <pt>form_view</pt> - <action></action> - <method>POST</method> - <enctype></enctype> - <encoding>UTF-8</encoding> - <stored_encoding>ISO-8859-1</stored_encoding> - <unicode_mode>false</unicode_mode> - <groups> - <group> - <title>left</title> - <fields> - - <field><id>my_id</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <max_length></max_length> - <required type="int">1</required> - <title>Id</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>right</title> - <fields> - - </fields> - </group> - <group> - <title>center</title> - <fields> - - </fields> - </group> - <group> - <title>bottom</title> - <fields> - - <field><id>current_inventory_list_box</id> <type>ListBox</type> - <values> - <all_columns type="list">[]</all_columns> - <all_editable_columns type="list">[]</all_editable_columns> - <alternate_name></alternate_name> - <columns type="list">[('node_title', 'Stock'), ('section_title', 'Propri\xe9taire'), ('resource_relative_url', 'Composant'), ('variation_text', 'Variante'), ('getQuantity', 'Qt\xe9'), ('getCurrentInventory', 'Stock'), ('getAvailableInventory', 'Dispo'), ('inventory', 'Futur'), ('getQuantityUnit', 'Unit\xe9')]</columns> - <css_class></css_class> - <default></default> - <default_params type="list">[]</default_params> - <description></description> - <domain_root_list type="list">[]</domain_root_list> - <domain_tree type="int">0</domain_tree> - <editable type="int">1</editable> - <editable_columns type="list">[]</editable_columns> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <global_attributes type="list">[]</global_attributes> - <hidden type="int">0</hidden> - <lines type="int">20</lines> - <list_action>Resource_inventoryView</list_action> - <list_method type="method">getFutureInventoryList</list_method> - <meta_types type="list">[]</meta_types> - <portal_types type="list">[]</portal_types> - <report_root_list type="list">[]</report_root_list> - <report_tree type="int">0</report_tree> - <search type="int">0</search> - <search_columns></search_columns> - <select type="int">0</select> - <selection_name>resource_current_inventory</selection_name> - <sort type="list">[]</sort> - <sort_columns></sort_columns> - <stat_method></stat_method> - <title>Stock actuel par variantes</title> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - </messages> - </field> - <field><id>current_inventory_chart</id> <type>ZGDChart</type> - <values> - <alternate_name></alternate_name> - <bg_transparent type="int">1</bg_transparent> - <chart_style>line_2d</chart_style> - <chart_title>Prévisions</chart_title> - <css_class></css_class> - <data_method>getInventoryHistoryChart</data_method> - <default></default> - <default_params type="list">[]</default_params> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <hidden type="int">0</hidden> - <selection_name>resource_current_inventory_chart</selection_name> - <title>Prévisions</title> - <x_title></x_title> - <y_title></y_title> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>hidden</title> - <fields> - - </fields> - </group> - </groups> -</form> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_trade/Delivery_searchByResource.form b/product/Coramy/skins/coramy_trade/Delivery_searchByResource.form deleted file mode 100755 index 753842a181..0000000000 --- a/product/Coramy/skins/coramy_trade/Delivery_searchByResource.form +++ /dev/null @@ -1,170 +0,0 @@ -<?xml version="1.0"?> - -<form> - <title>Rechercher</title> - <row_length>4</row_length> - <name>Delivery_searchByResource</name> - <pt>form_view_dialog</pt> - <action>Base_searchHandler</action> - <method>POST</method> - <enctype></enctype> - <encoding>UTF-8</encoding> - <stored_encoding>ISO-8859-1</stored_encoding> - <unicode_mode>false</unicode_mode> - <groups> - <group> - <title>left</title> - <fields> - - <field><id>my_resource_id_list</id> <type>LinesField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default type="list">[]</default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <height type="int">5</height> - <hidden type="int">0</hidden> - <max_length></max_length> - <max_linelength></max_linelength> - <max_lines></max_lines> - <required type="int">0</required> - <title>Produits</title> - <unicode type="int">0</unicode> - <view_separator><br /> -</view_separator> - <whitespace_preserve type="int">0</whitespace_preserve> - <width type="int">40</width> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_many_lines">You entered too many lines.</message> - <message name="line_too_long">A line was too long.</message> - <message name="too_long">You entered too many characters.</message> - </messages> - </field> - <field><id>my_reset</id> <type>CheckBoxField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default type="int">1</default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <title>Recherche globale</title> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - </messages> - </field> - <field><id>my_list_method_id</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default>Delivery_zSearchResource</default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">1</hidden> - <max_length></max_length> - <required type="int">0</required> - <title>x</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - <field><id>my_list_form_id</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">1</hidden> - <max_length></max_length> - <required type="int">0</required> - <title></title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <default>python:here.REQUEST.form_id</default> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>right</title> - <fields> - - <field><id>my_variante_id_list</id> <type>LinesField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default type="list">[]</default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <height type="int">5</height> - <hidden type="int">0</hidden> - <max_length></max_length> - <max_linelength></max_linelength> - <max_lines></max_lines> - <required type="int">0</required> - <title>Variantes</title> - <unicode type="int">0</unicode> - <view_separator><br /> -</view_separator> - <whitespace_preserve type="int">0</whitespace_preserve> - <width type="int">40</width> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_many_lines">You entered too many lines.</message> - <message name="line_too_long">A line was too long.</message> - <message name="too_long">You entered too many characters.</message> - </messages> - </field> - </fields> - </group> - </groups> -</form> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_trade/Delivery_splitDeferTransitionForm.form b/product/Coramy/skins/coramy_trade/Delivery_splitDeferTransitionForm.form deleted file mode 100755 index 262174d790..0000000000 --- a/product/Coramy/skins/coramy_trade/Delivery_splitDeferTransitionForm.form +++ /dev/null @@ -1,149 +0,0 @@ -<?xml version="1.0"?> - -<form> - <title>Créer un reliquat</title> - <row_length>4</row_length> - <name>Delivery_splitDeferTransitionForm</name> - <pt>form_view_dialog</pt> - <action>workflow_status_modify</action> - <method>POST</method> - <enctype></enctype> - <encoding>UTF-8</encoding> - <stored_encoding>ISO-8859-1</stored_encoding> - <unicode_mode>false</unicode_mode> - <groups> - <group> - <title>Default</title> - <fields> - - <field><id>my_target_start_date</id> <type>DateTimeField</type> - <values> - <allow_empty_time type="int">0</allow_empty_time> - <alternate_name></alternate_name> - <ampm_time_style type="int">0</ampm_time_style> - <css_class></css_class> - <date_only type="int">1</date_only> - <date_separator>/</date_separator> - <default_now type="int">0</default_now> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <hidden type="int">0</hidden> - <input_order>dmy</input_order> - <input_style>text</input_style> - <required type="int">1</required> - <time_separator>:</time_separator> - <title>Nouvelle date d'expédition</title> - </values> - <tales> - <default>python:here.getTargetStartDate()</default> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="not_datetime">You did not enter a valid date and time.</message> - <message name="datetime_out_of_range">The date and time you entered were out of range.</message> - </messages> - </field> - <field><id>my_target_stop_date</id> <type>DateTimeField</type> - <values> - <allow_empty_time type="int">0</allow_empty_time> - <alternate_name></alternate_name> - <ampm_time_style type="int">0</ampm_time_style> - <css_class></css_class> - <date_only type="int">1</date_only> - <date_separator>/</date_separator> - <default_now type="int">0</default_now> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <hidden type="int">0</hidden> - <input_order>dmy</input_order> - <input_style>text</input_style> - <required type="int">1</required> - <time_separator>:</time_separator> - <title>Nouvelle date de livraison</title> - </values> - <tales> - <default>python:here.getTargetStopDate()</default> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="not_datetime">You did not enter a valid date and time.</message> - <message name="datetime_out_of_range">The date and time you entered were out of range.</message> - </messages> - </field> - <field><id>my_comment</id> <type>TextAreaField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <height type="int">5</height> - <hidden type="int">0</hidden> - <max_length></max_length> - <max_linelength></max_linelength> - <max_lines></max_lines> - <required type="int">0</required> - <title>Commentaires</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - <width type="int">40</width> - </values> - <tales> - <default>python:''</default> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_many_lines">You entered too many lines.</message> - <message name="line_too_long">A line was too long.</message> - <message name="too_long">You entered too many characters.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>hidden</title> - <fields> - - <field><id>my_workflow_action</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">1</hidden> - <max_length></max_length> - <required type="int">1</required> - <title></title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <default>python:here.REQUEST.workflow_action</default> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - </fields> - </group> - </groups> -</form> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_trade/Delivery_zGetCellList.zsql b/product/Coramy/skins/coramy_trade/Delivery_zGetCellList.zsql deleted file mode 100755 index 7cc575b099..0000000000 --- a/product/Coramy/skins/coramy_trade/Delivery_zGetCellList.zsql +++ /dev/null @@ -1,28 +0,0 @@ -<dtml-comment> -title: -connection_id:erp5_sql_connection -max_rows:1000 -max_cache:100 -cache_time:0 -class_name:ZSQLBrain -class_file:zsqlbrain.py -</dtml-comment> -<params>uid -sort_on</params> -SELECT - cell.uid, cell.Id, cell.path, cell.Description, movement.variation_text -FROM - catalog as cell, movement -WHERE - movement.delivery_uid = <dtml-sqlvar uid type="int"> -AND - movement.uid = cell.uid -AND - movement.is_accountable = 1 -AND - cell.portal_type <> "Simulation Movement" -AND - cell.portal_type <> "Container" -<dtml-if sort_on>ORDER BY - <dtml-var sort_on> -</dtml-if> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_trade/Delivery_zGetInventoryList.zsql b/product/Coramy/skins/coramy_trade/Delivery_zGetInventoryList.zsql deleted file mode 100755 index 5c698d6a19..0000000000 --- a/product/Coramy/skins/coramy_trade/Delivery_zGetInventoryList.zsql +++ /dev/null @@ -1,38 +0,0 @@ -<dtml-comment> -title: -connection_id:erp5_sql_connection -max_rows:1000 -max_cache:100 -cache_time:0 -class_name:ZSQLBrain -class_file:zsqlbrain.py -</dtml-comment> -<params>resource_uid_list:list -to_date -node_uid -section_uid -variation_text</params> -SELECT - SUM(stock.quantity) as inventory, - node.title AS node_title, - section.title AS section_title, - resource.title AS resource_title, - movement.variation_text AS variation_text -FROM - catalog, movement, stock, catalog as node, catalog as section, catalog as resource -WHERE - catalog.uid = movement.uid -AND catalog.uid = stock.uid -AND (<dtml-in resource_uid_list>movement.resource_uid = <dtml-sqlvar sequence-item type="int"><dtml-if sequence-end> <dtml-else> OR </dtml-if></dtml-in>) -AND movement.is_accountable = 1 -AND node.uid = stock.node_uid -AND section.uid = stock.node_uid -AND movement.resource_uid = resource.uid -<dtml-if to_date>AND movement.start_date < <dtml-sqlvar to_date type="string"> -</dtml-if><dtml-if node_uid>AND stock.node_uid = <dtml-sqlvar node_uid type="int"> -</dtml-if><dtml-if section_uid>AND stock.section_uid = <dtml-sqlvar section_uid type="int"> -</dtml-if><dtml-if variation_text>AND movement.variation_text = <dtml-sqlvar variation_text type="string"> -</dtml-if>GROUP BY - stock.node_uid, stock.section_uid, resource_uid, movement.variation_text -ORDER BY - inventory DESC \ No newline at end of file diff --git a/product/Coramy/skins/coramy_trade/Delivery_zGetNeededCellList.zsql b/product/Coramy/skins/coramy_trade/Delivery_zGetNeededCellList.zsql deleted file mode 100755 index f7e8ab1326..0000000000 --- a/product/Coramy/skins/coramy_trade/Delivery_zGetNeededCellList.zsql +++ /dev/null @@ -1,30 +0,0 @@ -<dtml-comment> -title: -connection_id:erp5_sql_connection -max_rows:1000 -max_cache:100 -cache_time:0 -class_name:ZSQLBrain -class_file:zsqlbrain.py -</dtml-comment> -<params>uid -sort_on</params> -SELECT - cell.uid, cell.Id, cell.path, cell.Description, movement.variation_text -FROM - catalog as cell, movement -WHERE - movement.delivery_uid = <dtml-sqlvar uid type="int"> -AND - movement.uid = cell.uid -AND - movement.is_accountable = 1 -AND - movement.quantity <> 0 -AND - cell.portal_type <> "Simulation Movement" -AND - cell.portal_type <> "Container" -<dtml-if sort_on>ORDER BY - <dtml-var sort_on> -</dtml-if> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_trade/Delivery_zGetTotal.zsql b/product/Coramy/skins/coramy_trade/Delivery_zGetTotal.zsql deleted file mode 100755 index 5327d6716a..0000000000 --- a/product/Coramy/skins/coramy_trade/Delivery_zGetTotal.zsql +++ /dev/null @@ -1,29 +0,0 @@ -<dtml-comment> -title: -connection_id:erp5_sql_connection -max_rows:1000 -max_cache:100 -cache_time:0 -class_name: -class_file: -</dtml-comment> -<params>uid -resource_uid -variation_text</params> -SELECT - SUM(quantity) AS inventory, - SUM(quantity) AS total_quantity, - SUM(total_price) AS total_price, - SUM(target_quantity) AS target_total_quantity, - SUM(target_total_price) AS target_total_price, - AVG(price) AS average_price -FROM movement, catalog -WHERE - movement.delivery_uid = <dtml-sqlvar uid type="int"> -<dtml-if resource_uid>AND (<dtml-in resource_uid> movement.resource_uid = <dtml-sqlvar sequence-item type="int"><dtml-if sequence-end><dtml-else> OR </dtml-if></dtml-in>) -</dtml-if><dtml-if variation_text>AND movement.variation_text = <dtml-sqlvar variation_text type="string"> -</dtml-if> -AND movement.is_accountable = 1 -AND catalog.portal_type <> "Container" -AND catalog.portal_type <> "Simulation Movement" -AND catalog.uid = movement.uid \ No newline at end of file diff --git a/product/Coramy/skins/coramy_trade/InvoiceLine_priceView.form b/product/Coramy/skins/coramy_trade/InvoiceLine_priceView.form deleted file mode 100755 index 1a06172b9a..0000000000 --- a/product/Coramy/skins/coramy_trade/InvoiceLine_priceView.form +++ /dev/null @@ -1,347 +0,0 @@ -<?xml version="1.0"?> - -<form> - <title>Ligne de livraison</title> - <row_length>4</row_length> - <name>packing_list_line_quantity_view</name> - <pt>form_view</pt> - <action>base_edit</action> - <method>POST</method> - <enctype>multipart/form-data</enctype> - <encoding>UTF-8</encoding> - <stored_encoding>ISO-8859-1</stored_encoding> - <unicode_mode>false</unicode_mode> - <groups> - <group> - <title>Default</title> - <fields> - - <field><id>my_id</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">10</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <max_length></max_length> - <required type="int">1</required> - <title>Ligne n°</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>right</title> - <fields> - - </fields> - </group> - <group> - <title>center</title> - <fields> - - </fields> - </group> - <group> - <title>bottom</title> - <fields> - - <field><id>matrixbox</id> <type>MatrixBox</type> - <values> - <all_editable_attributes type="list">[('ttarget_quantity', 'target_quantity'), ('quantity', 'quantity'), ('price', 'price'), ('predicate_value', 'predicate_value'), ('variation_category_list', 'variation_category_list')]</all_editable_attributes> - <alternate_name></alternate_name> - <cell_base_id>movement</cell_base_id> - <cell_range type="list">[]</cell_range> - <columns type="list">[('None', 'None')]</columns> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <editable_attributes type="list">[('target_quantity', 'target_quantity'), ('quantity', 'quantity'), ('price', 'price'), ('predicate_value', 'predicate_value'), ('variation_category_list', 'variation_category_list')]</editable_attributes> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <getter_method></getter_method> - <global_attributes type="list">[('domain_base_category_list', 'domain_base_category_list'), ('mapped_value_property_list', 'mapped_value_property_list'), ('predicate_operator', 'predicate_operator')]</global_attributes> - <hidden type="int">0</hidden> - <lines type="list">[('None', 'None')]</lines> - <setter_method></setter_method> - <tabs type="list">[('None', 'None')]</tabs> - <title>matrixbox</title> - <update_cell_range type="int">1</update_cell_range> - </values> - <tales> - <columns>python:here.order_line_matrix_item_list(base_category_list = ('taille',), base=1)</columns> - <lines>python:here.order_line_matrix_item_list(base_category_list = ('coloris','variante'), base=1)</lines> - <tabs>python:here.order_line_matrix_item_list(base_category_list = ('taille','coloris','variante'), base=1, include=0)</tabs> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - </messages> - </field> - <field><id>domain_base_category_list</id> <type>LinesField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default type="list">[]</default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <height type="int">5</height> - <hidden type="int">1</hidden> - <max_length></max_length> - <max_linelength></max_linelength> - <max_lines></max_lines> - <required type="int">0</required> - <title>Valid Domain</title> - <unicode type="int">0</unicode> - <view_separator><br /> -</view_separator> - <whitespace_preserve type="int">0</whitespace_preserve> - <width type="int">40</width> - </values> - <tales> - <default>here/getVariationBaseCategoryList</default> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_many_lines">You entered too many lines.</message> - <message name="line_too_long">A line was too long.</message> - <message name="too_long">You entered too many characters.</message> - </messages> - </field> - <field><id>predicate_operator</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default>SUPERSET_OF</default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">1</hidden> - <max_length></max_length> - <required type="int">0</required> - <title>Operator</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - <field><id>mapped_value_property_list</id> <type>LinesField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default type="list">['target_quantity', 'quantity', 'price']</default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <height type="int">5</height> - <hidden type="int">1</hidden> - <max_length></max_length> - <max_linelength></max_linelength> - <max_lines></max_lines> - <required type="int">0</required> - <title>Modified categories</title> - <unicode type="int">0</unicode> - <view_separator><br /> -</view_separator> - <whitespace_preserve type="int">0</whitespace_preserve> - <width type="int">40</width> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_many_lines">You entered too many lines.</message> - <message name="line_too_long">A line was too long.</message> - <message name="too_long">You entered too many characters.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>hidden</title> - <fields> - - <field><id>matrixbox_predicate_value</id> <type>LinesField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default type="list">[]</default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <height type="int">5</height> - <hidden type="int">1</hidden> - <max_length></max_length> - <max_linelength></max_linelength> - <max_lines></max_lines> - <required type="int">0</required> - <title>matrixbox_predicate_value</title> - <unicode type="int">0</unicode> - <view_separator><br /> -</view_separator> - <whitespace_preserve type="int">0</whitespace_preserve> - <width type="int">40</width> - </values> - <tales> - <default>python:cell_index</default> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_many_lines">You entered too many lines.</message> - <message name="line_too_long">A line was too long.</message> - <message name="too_long">You entered too many characters.</message> - </messages> - </field> - <field><id>matrixbox_variation_category_list</id> <type>LinesField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default type="list">[]</default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <height type="int">5</height> - <hidden type="int">1</hidden> - <max_length></max_length> - <max_linelength></max_linelength> - <max_lines></max_lines> - <required type="int">0</required> - <title>matrixbox_predicate_value</title> - <unicode type="int">0</unicode> - <view_separator><br /> -</view_separator> - <whitespace_preserve type="int">0</whitespace_preserve> - <width type="int">40</width> - </values> - <tales> - <default>python:cell_index</default> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_many_lines">You entered too many lines.</message> - <message name="line_too_long">A line was too long.</message> - <message name="too_long">You entered too many characters.</message> - </messages> - </field> - <field><id>matrixbox_price</id> <type>FloatField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">10</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <required type="int">0</required> - <title>matrixbox_price</title> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <default>python:cell.getProperty('price')</default> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="not_float">You did not enter a floating point number.</message> - </messages> - </field> - <field><id>matrixbox_quantity</id> <type>FloatField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">10</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">1</hidden> - <required type="int">0</required> - <title>matrixbox_quantity</title> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <default>python:cell.getProperty('quantity')</default> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="not_float">You did not enter a floating point number.</message> - </messages> - </field> - <field><id>matrixbox_target_quantity</id> <type>FloatField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">10</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">1</hidden> - <required type="int">0</required> - <title>matrixbox_target_quantity</title> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <default>python:cell.getProperty('target_quantity')</default> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="not_float">You did not enter a floating point number.</message> - </messages> - </field> - </fields> - </group> - </groups> -</form> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_trade/InvoiceLine_quantityView.form b/product/Coramy/skins/coramy_trade/InvoiceLine_quantityView.form deleted file mode 100755 index fe8b9ba980..0000000000 --- a/product/Coramy/skins/coramy_trade/InvoiceLine_quantityView.form +++ /dev/null @@ -1,321 +0,0 @@ -<?xml version="1.0"?> - -<form> - <title>Ligne de livraison</title> - <row_length>4</row_length> - <name>packing_list_line_quantity_view</name> - <pt>form_view</pt> - <action>base_edit</action> - <method>POST</method> - <enctype>multipart/form-data</enctype> - <encoding>UTF-8</encoding> - <stored_encoding>ISO-8859-1</stored_encoding> - <unicode_mode>false</unicode_mode> - <groups> - <group> - <title>Default</title> - <fields> - - <field><id>my_id</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">10</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <max_length></max_length> - <required type="int">1</required> - <title>Ligne n°</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>right</title> - <fields> - - </fields> - </group> - <group> - <title>center</title> - <fields> - - </fields> - </group> - <group> - <title>bottom</title> - <fields> - - <field><id>matrixbox</id> <type>MatrixBox</type> - <values> - <all_editable_attributes type="list">[('quantity', 'quantity'), ('price', 'price'), ('predicate_value', 'predicate_value'), ('variation_category_list', 'variation_category_list')]</all_editable_attributes> - <alternate_name></alternate_name> - <cell_base_id>movement</cell_base_id> - <cell_range type="list">[]</cell_range> - <columns type="list">[('None', 'None')]</columns> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <editable_attributes type="list">[('quantity', 'quantity'), ('price', 'price'), ('predicate_value', 'predicate_value'), ('variation_category_list', 'variation_category_list')]</editable_attributes> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <getter_method></getter_method> - <global_attributes type="list">[('domain_base_category_list', 'domain_base_category_list'), ('mapped_value_property_list', 'mapped_value_property_list'), ('predicate_operator', 'predicate_operator')]</global_attributes> - <hidden type="int">0</hidden> - <lines type="list">[('None', 'None')]</lines> - <setter_method></setter_method> - <tabs type="list">[('None', 'None')]</tabs> - <title>matrixbox</title> - <update_cell_range type="int">1</update_cell_range> - </values> - <tales> - <columns>python:here.order_line_matrix_item_list(base_category_list = ('taille',), base=1)</columns> - <lines>python:here.order_line_matrix_item_list(base_category_list = ('coloris','variante'), base=1)</lines> - <tabs>python:here.order_line_matrix_item_list(base_category_list = ('taille','coloris','variante'), base=1, include=0)</tabs> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - </messages> - </field> - <field><id>domain_base_category_list</id> <type>LinesField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default type="list">[]</default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <height type="int">5</height> - <hidden type="int">1</hidden> - <max_length></max_length> - <max_linelength></max_linelength> - <max_lines></max_lines> - <required type="int">0</required> - <title>Valid Domain</title> - <unicode type="int">0</unicode> - <view_separator><br /> -</view_separator> - <whitespace_preserve type="int">0</whitespace_preserve> - <width type="int">40</width> - </values> - <tales> - <default>here/getVariationBaseCategoryList</default> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_many_lines">You entered too many lines.</message> - <message name="line_too_long">A line was too long.</message> - <message name="too_long">You entered too many characters.</message> - </messages> - </field> - <field><id>predicate_operator</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default>SUPERSET_OF</default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">1</hidden> - <max_length></max_length> - <required type="int">0</required> - <title>Operator</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - <field><id>mapped_value_property_list</id> <type>LinesField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default type="list">['target_quantity', 'quantity', 'price']</default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <height type="int">5</height> - <hidden type="int">1</hidden> - <max_length></max_length> - <max_linelength></max_linelength> - <max_lines></max_lines> - <required type="int">0</required> - <title>Modified categories</title> - <unicode type="int">0</unicode> - <view_separator><br /> -</view_separator> - <whitespace_preserve type="int">0</whitespace_preserve> - <width type="int">40</width> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_many_lines">You entered too many lines.</message> - <message name="line_too_long">A line was too long.</message> - <message name="too_long">You entered too many characters.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>hidden</title> - <fields> - - <field><id>matrixbox_predicate_value</id> <type>LinesField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default type="list">[]</default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <height type="int">5</height> - <hidden type="int">1</hidden> - <max_length></max_length> - <max_linelength></max_linelength> - <max_lines></max_lines> - <required type="int">0</required> - <title>matrixbox_predicate_value</title> - <unicode type="int">0</unicode> - <view_separator><br /> -</view_separator> - <whitespace_preserve type="int">0</whitespace_preserve> - <width type="int">40</width> - </values> - <tales> - <default>python:cell_index</default> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_many_lines">You entered too many lines.</message> - <message name="line_too_long">A line was too long.</message> - <message name="too_long">You entered too many characters.</message> - </messages> - </field> - <field><id>matrixbox_variation_category_list</id> <type>LinesField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default type="list">[]</default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <height type="int">5</height> - <hidden type="int">1</hidden> - <max_length></max_length> - <max_linelength></max_linelength> - <max_lines></max_lines> - <required type="int">0</required> - <title>matrixbox_predicate_value</title> - <unicode type="int">0</unicode> - <view_separator><br /> -</view_separator> - <whitespace_preserve type="int">0</whitespace_preserve> - <width type="int">40</width> - </values> - <tales> - <default>python:cell_index</default> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_many_lines">You entered too many lines.</message> - <message name="line_too_long">A line was too long.</message> - <message name="too_long">You entered too many characters.</message> - </messages> - </field> - <field><id>matrixbox_price</id> <type>FloatField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">10</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">1</hidden> - <required type="int">0</required> - <title>matrixbox_price</title> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <default>python:cell.getProperty('price')</default> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="not_float">You did not enter a floating point number.</message> - </messages> - </field> - <field><id>matrixbox_quantity</id> <type>FloatField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">10</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <required type="int">0</required> - <title>matrixbox_quantity</title> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <default>python:cell.getProperty('quantity')</default> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="not_float">You did not enter a floating point number.</message> - </messages> - </field> - </fields> - </group> - </groups> -</form> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_trade/InvoiceLine_view.form b/product/Coramy/skins/coramy_trade/InvoiceLine_view.form deleted file mode 100755 index 2d8fb8ee1e..0000000000 --- a/product/Coramy/skins/coramy_trade/InvoiceLine_view.form +++ /dev/null @@ -1,384 +0,0 @@ -<?xml version="1.0"?> - -<form> - <title>Ligne de livraison</title> - <row_length>4</row_length> - <name>sales_packing_list_line_view</name> - <pt>form_view</pt> - <action>base_edit</action> - <method>POST</method> - <enctype>multipart/form-data</enctype> - <encoding>UTF-8</encoding> - <stored_encoding>ISO-8859-1</stored_encoding> - <unicode_mode>false</unicode_mode> - <groups> - <group> - <title>left</title> - <fields> - - <field><id>my_id</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">5</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <max_length></max_length> - <required type="int">1</required> - <title>Ligne n°</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - <field><id>my_description</id> <type>TextAreaField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <height type="int">2</height> - <hidden type="int">0</hidden> - <max_length></max_length> - <max_linelength></max_linelength> - <max_lines></max_lines> - <required type="int">0</required> - <title>Description</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - <width type="int">40</width> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_many_lines">You entered too many lines.</message> - <message name="line_too_long">A line was too long.</message> - <message name="too_long">You entered too many characters.</message> - </messages> - </field> - <field><id>my_resource_relative_url</id> <type>RelationStringField</type> - <values> - <alternate_name></alternate_name> - <base_category>resource</base_category> - <catalog_index>relative_url</catalog_index> - <css_class></css_class> - <default></default> - <default_module>modele</default_module> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">40</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <jump_method>base_jump_relation</jump_method> - <max_length></max_length> - <portal_type type="list">[('Composant', 'Composant'), ('Tissu', 'Tissu'), ('Modele', 'Modele'), ('Forme', 'Forme'), ('Vetement', 'Vetement'), ('Category', 'Category'), ('Gamme', 'Gamme')]</portal_type> - <required type="int">0</required> - <title>Produit</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <update_method>base_update_relation</update_method> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - <field><id>my_variation_base_category_list</id> <type>MultiListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default type="list">[]</default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <extra_item></extra_item> - <hidden type="int">0</hidden> - <items type="list">[]</items> - <required type="int">0</required> - <size type="int">3</size> - <title>Axes variation</title> - <unicode type="int">0</unicode> - <view_separator><br /> -</view_separator> - </values> - <tales> - <items>here/getVariationRangeBaseCategoryList</items> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - <field><id>my_variation_category_list</id> <type>MultiListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default type="list">[]</default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <extra_item></extra_item> - <hidden type="int">0</hidden> - <items type="list">[]</items> - <required type="int">0</required> - <size type="int">8</size> - <title>Variantes</title> - <unicode type="int">0</unicode> - <view_separator><br /> -</view_separator> - </values> - <tales> - <items>here/getVariationRangeCategoryItemList</items> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - <field><id>my_quantity</id> <type>FloatField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">10</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <required type="int">0</required> - <title>Quantité par défaut</title> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="not_float">You did not enter a floating point number.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>right</title> - <fields> - - <field><id>my_quantity_unit</id> <type>ListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <extra_item></extra_item> - <first_item type="int">0</first_item> - <hidden type="int">0</hidden> - <items type="list">[]</items> - <required type="int">0</required> - <size type="int">1</size> - <title>Unité</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <items>here/getQuantityUnitRangeItemList</items> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - <field><id>my_price</id> <type>FloatField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">10</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <required type="int">0</required> - <title>Prix par défaut</title> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="not_float">You did not enter a floating point number.</message> - </messages> - </field> - <field><id>spacer</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">1</hidden> - <max_length></max_length> - <required type="int">0</required> - <title> </title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - <field><id>my_total_quantity</id> <type>FloatField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">10</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">1</hidden> - <required type="int">0</required> - <title>Quantité facturée</title> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <title>python:'Quantité facturée : %.2f' % here.getTotalQuantity()</title> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="not_float">You did not enter a floating point number.</message> - </messages> - </field> - <field><id>my_value_added_tax_ratio</id> <type>FloatField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <required type="int">0</required> - <title>Taux de TVA</title> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="not_float">You did not enter a floating point number.</message> - </messages> - </field> - <field><id>my_value_added_tax_recoverable</id> <type>ListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <extra_item></extra_item> - <first_item type="int">0</first_item> - <hidden type="int">0</hidden> - <items type="list">[('Non', '0'), ('Oui', '1')]</items> - <required type="int">0</required> - <size type="int">1</size> - <title>Soumis à la TVA</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <default>python:str(here.getValueAddedTaxRecoverable())</default> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>center</title> - <fields> - - </fields> - </group> - <group> - <title>bottom</title> - <fields> - - </fields> - </group> - <group> - <title>hidden</title> - <fields> - - </fields> - </group> - </groups> -</form> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_trade/Invoice_print.pdf b/product/Coramy/skins/coramy_trade/Invoice_print.pdf deleted file mode 100755 index 4792da41b2..0000000000 --- a/product/Coramy/skins/coramy_trade/Invoice_print.pdf +++ /dev/null @@ -1,98 +0,0 @@ -<?xml version="1.0" encoding="iso-8859-1" ?> -<document filename="report01.pdf" - tal:define="invoice_line_list python:here.contentValues(filter={'portal_type':'Invoice Line'}); - from_organisation python:here.restrictedTraverse('organisation/27'); - client_invoice python:here.getDefaultValue('destination_section',spec=['Organisation', 'Person']); - client_delivery python:here.getDefaultValue('destination_section',spec=['Organisation', 'Person']); - total_price python:here.getDefaultTotalPrice();"> - <title>Invoice</title> - <author>Nexedi</author> - <subject>Coramy Invoice Example</subject> - <content> - - <tal:block tal:repeat="invoice_line invoice_line_list"> - <tal:block tal:define="cell_range_list python:invoice_line.getCellRange(base_id='movement')"> - - <table splitbyrow="1" repeatrows="0" repeatcols="0" style="HeadLine"> - <tr> - <td colwidth="5cm" tal:content="python: invoice_line.getResourceValue().getDescription()"> - 1 pi?ce 2unis - </td> - <td colwidth="5cm">12345009 858</td> - </tr> - </table> - - <table splitbyrow="1" repeatrows="0" repeatcols="0" style="HeadLine2"> - <tr> - <td colwidth="5cm">80% Polyamide 20% Elasthanne Lycra</td> - <td colwidth="5cm">61124110</td> - </tr> - </table> - - <table splitbyrow="1" repeatrows="1" repeatcols="0" style="CellTable" - tal:define="cell_x_range python: list(cell_range_list[1]); - cell_y_range python: list(cell_range_list[0])"> - <tal:block tal:define="dummy python: cell_x_range.sort(); - dummy python: cell_y_range.sort()"/> - <tr> - <td colwidth="0.6cm"> </td> - <td colwidth="5.4cm"> </td> - <tal:block tal:repeat="x cell_x_range"> - <td colwidth="1cm" tal:content="python: x.split('/')[-1]"> </td> - </tal:block> - <td tal:attributes="colwidth python: '%fcm' % (8.2 - len(cell_x_range))"> </td> - <td colwidth="1.5cm"></td> - <td colwidth="1.5cm"></td> - <td colwidth="2.2cm"> </td> - </tr> - <tal:block tal:repeat="y cell_y_range" tal:define="price_list python:[]"> - <tal:block tal:repeat="x cell_x_range"> - <tal:block tal:define="cell python:invoice_line.getCell(y, x, base_id='movement')"> - <tal:block tal:condition="python:cell is not None and cell.getPrice() not in price_list"> - <tal:block tal:define="dummy python:price_list.append(cell.getPrice())"/> - </tal:block> - </tal:block> - </tal:block> - <tal:block tal:repeat="price price_list"> - <tal:block tal:define="global quantity python: 0"/> - <tal:block tal:repeat="x cell_x_range"> - <tal:block tal:define="cell python:invoice_line.getCell(y, x, base_id='movement')"> - <tal:block tal:condition="python:cell is not None and cell.getPrice() == price"> - <tal:block tal:define="global quantity python: quantity + cell.getQuantity()"/> - </tal:block> - </tal:block> - </tal:block> - <tr> - <td> </td> - <td tal:content="python: y"> </td> - <tal:block tal:repeat="x cell_x_range"> - <tal:block tal:define="cell python:invoice_line.getCell(y, x, base_id='movement')"> - <td><tal:block tal:condition="python:cell is not None and cell.getPrice() == price"><span tal:replace="python: '%.0f ' % cell.getQuantity()"/></tal:block></td> - </tal:block> - </tal:block> - <td> </td> - <td tal:content="python: '%d' % quantity">413</td> - <td tal:content="python: '%.2f' % price">6,27</td> - <td tal:content="python: '%.2f' % (quantity * price)">2 589,51</td> - </tr> - </tal:block> - </tal:block> - </table> - - <spacer height="5"/> - - <table splitbyrow="1" repeatrows="1" repeatcols="0" style="TotalLine"> - <tr> - <td colwidth="12cm"> </td> - <td colwidth="1.2cm">Total</td> - <td colwidth="1cm"> </td> - <td colwidth="1.5cm" tal:content="python:invoice_line.getTotalQuantity() or 0">2 298</td> - <td colwidth="1.5cm">pi?ces</td> - </tr> - </table> - - </tal:block> - </tal:block> - - </content> -</document> diff --git a/product/Coramy/skins/coramy_trade/Invoice_zGetDescription.py b/product/Coramy/skins/coramy_trade/Invoice_zGetDescription.py deleted file mode 100755 index 9fd2231d88..0000000000 --- a/product/Coramy/skins/coramy_trade/Invoice_zGetDescription.py +++ /dev/null @@ -1,39 +0,0 @@ -## Script (Python) "Invoice_zGetDescription" -##bind container=container -##bind context=context -##bind namespace= -##bind script=script -##bind subpath=traverse_subpath -##parameters= -##title= -## -from string import join - -description = context.getComment('') -return description - -# Try to cut the comment without cutting the words -# pbl: capital letter are larger, and the test on the length of sentence isn't good ... -def recursive_string_cut(b,s): - l = 80 - if len(s) < l: - return b+s - else: - c = s[:l].split(' ') - if len(c) < 2: - # I don't think that a word with more than 80 caracters can exist ... and it can crash the memory - return s[:l] - else: - return recursive_string_cut(b+join(c[:-2],' ')+'\n', join(c[-2:],' ')+s[l:] ) - - -# get all the lines -description_lines = description.split('\n') - -# cut the too long lines -result_description_lines = map( ( lambda x: recursive_string_cut('',x) ),description_lines) - -# recreate a string -result = join(result_description_lines,'\n') - -return result diff --git a/product/Coramy/skins/coramy_trade/Invoice_zGetDueDate.py b/product/Coramy/skins/coramy_trade/Invoice_zGetDueDate.py deleted file mode 100755 index 3ee068fd26..0000000000 --- a/product/Coramy/skins/coramy_trade/Invoice_zGetDueDate.py +++ /dev/null @@ -1,49 +0,0 @@ -## Script (Python) "Invoice_zGetDueDate" -##bind container=container -##bind context=context -##bind namespace= -##bind script=script -##bind subpath=traverse_subpath -##parameters= -##title= -## -packing_list = context.getCausalityValueList(portal_type=['Sale Packing List','Sales Packing List'])[0] -order = packing_list.getCausalityValueList(portal_type=['Sale Order','Sales Order'])[0] - -""" -trade_ref = order.getTradeDateId() -case = { - 'Facture':context.getStartDate, - 'Commande':order.getStartDate, - 'Livraison':packing_list.getTargetStopDate -} -ref_date = case[trade_ref]() -""" -from DateTime import DateTime - -due_date = packing_list.getTargetStopDate( DateTime() ) - -due_date += context.getPaymentTerm(30) - -peom = context.getPaymentEndOfMonth() -pat = order.getPaymentAdditionalTerm() - -if peom: - i = 0 - month = due_date.month() - while (month == (due_date + i).month()): - i += 1 - due_date = (due_date + i - 1) - - if pat != None: - due_date += pat - -else: - if pat != None: - i = 0 - month = due_date.month() - while (month == (due_date + i).month()): - i -= 1 - due_date = (due_date + i + pat) - -return due_date diff --git a/product/Coramy/skins/coramy_trade/Invoice_zGetEscompteDescription.py b/product/Coramy/skins/coramy_trade/Invoice_zGetEscompteDescription.py deleted file mode 100755 index 7865d5a1d2..0000000000 --- a/product/Coramy/skins/coramy_trade/Invoice_zGetEscompteDescription.py +++ /dev/null @@ -1,25 +0,0 @@ -## Script (Python) "Invoice_zGetEscompteDescription" -##bind container=container -##bind context=context -##bind namespace= -##bind script=script -##bind subpath=traverse_subpath -##parameters= -##title= -## -tmp_list = context.contentValues(filter={'portal_type':'Remise', 'discount_type_title':'Escompte'}) - -escompte_list = filter(lambda item: item.getDiscountType() == 'Escompte', tmp_list) - -if escompte_list != []: - escompte_object = escompte_list[0] - if escompte_object.getDescription() != None: - escompte_description = string.replace(escompte_object.getDescription(),'%','%%')[:45] - elif escompte_object.getDiscountRatio() != None: - escompte_description = '%.2f' % (escompte_object.getDiscountRatio() * 100) + '%% sous 10 jours' - else: - escompte_description = '2%% sous 10 jours' -else: - escompte_description = '2%% sous 10 jours' - -return escompte_description diff --git a/product/Coramy/skins/coramy_trade/Invoice_zGetPaymentTime.py b/product/Coramy/skins/coramy_trade/Invoice_zGetPaymentTime.py deleted file mode 100755 index 385ad380c4..0000000000 --- a/product/Coramy/skins/coramy_trade/Invoice_zGetPaymentTime.py +++ /dev/null @@ -1,30 +0,0 @@ -## Script (Python) "Invoice_zGetPaymentTime" -##bind container=container -##bind context=context -##bind namespace= -##bind script=script -##bind subpath=traverse_subpath -##parameters= -##title= -## -packing_list = context.getCausalityValueList(portal_type=['Sale Packing List','Sales Packing List'])[0] -order = packing_list.getCausalityValueList(portal_type=['Sale Order','Sales Order'])[0] - -payment_term = context.getPaymentTerm(30) - -payment_end_of_month = context.getPaymentEndOfMonth() - -pat = order.getPaymentAdditionalTerm() - -result = '%i jours ' % payment_term - -if pat == None: - if payment_end_of_month: - result += 'en fin de mois' - else: - result += 'net' -else: - result += 'le %i' % pat - - -return result diff --git a/product/Coramy/skins/coramy_trade/Invoice_zGetSourceSectionDescription.py b/product/Coramy/skins/coramy_trade/Invoice_zGetSourceSectionDescription.py deleted file mode 100755 index 0495701242..0000000000 --- a/product/Coramy/skins/coramy_trade/Invoice_zGetSourceSectionDescription.py +++ /dev/null @@ -1,31 +0,0 @@ -## Script (Python) "Invoice_zGetSourceSectionDescription" -##bind container=container -##bind context=context -##bind namespace= -##bind script=script -##bind subpath=traverse_subpath -##parameters= -##title= -## -source_section_title = context.getSourceSectionTitle() - - -case = { - 'Coramy': ('Coramy', - '5 bis, rue Denis Cordonnier - 59820 Gravelines - Tél. : 33(0)3 28 51 91 51 - Fax : 33(0)3 28 23 34 96', - 'MAILLOTS DE BAIN - GYM - SWIMSUITS - FITNESS', - 'S.A.S. au capital de 435.200 € - T.V.A. FR 67 611 750 274 - R.C. Dunkerque 611 750 274 - SIRET 611 750 274 00023 - CNUF 15971', - '40'), - 'BLS': ('BLS' , - '5 bis, rue Denis Cordonnier - 59820 Gravelines - Tél. : 33(0)3 28 51 86 26 - Fax : 33(0)3 28 23 34 96', - 'LICENSE MAILLOTS DE BAIN DIM FEMME & HOMME', - 'S.A.R.L. au capital de 10.000 € - T.V.A. FR 51 442 959 243 - R.C. Dunkerque 442 959 243 - SIRET 442 959 243 00019' - '60'), - 'Houvenaegel':('Houvenaegel' , - '5 bis, rue Denis Cordonnier - 59820 Gravelines - Tél. : 33(0)3 28 51 91 55 - Fax : 33(0)3 28 23 34 96', - 'MAILLOTS DE BAIN - GYM - SWIMSUITS - FITNESS', - 'S.A.R.L. au capital de 7.622,45 € - T.V.A. FR 07 422 769 810 - R.C. Dunkerque 422 769 810 - SIRET 422 769 810 00025', - '20') -} - -return case[ source_section_title ] diff --git a/product/Coramy/skins/coramy_trade/Invoice_zGetTotal.zsql b/product/Coramy/skins/coramy_trade/Invoice_zGetTotal.zsql deleted file mode 100755 index 491496a3fb..0000000000 --- a/product/Coramy/skins/coramy_trade/Invoice_zGetTotal.zsql +++ /dev/null @@ -1,13 +0,0 @@ -<dtml-comment> -title: -connection_id:MySQL -max_rows:100000 -max_cache:100 -cache_time:0 -class_name:ZSQLBrain -class_file:zsqlbrain.py -</dtml-comment> -<params>uid</params> -SELECT sum(movement.quantity) AS total_quantity, sum(movement.total_price) AS total_price from movement -WHERE movement.delivery_uid = <dtml-var uid> -AND movement.has_cell_content = 0 \ No newline at end of file diff --git a/product/Coramy/skins/coramy_trade/Invoice_zGetTotalNetPrice.py b/product/Coramy/skins/coramy_trade/Invoice_zGetTotalNetPrice.py deleted file mode 100755 index f8158636bf..0000000000 --- a/product/Coramy/skins/coramy_trade/Invoice_zGetTotalNetPrice.py +++ /dev/null @@ -1,23 +0,0 @@ -## Script (Python) "Invoice_zGetTotalNetPrice" -##bind container=container -##bind context=context -##bind namespace= -##bind script=script -##bind subpath=traverse_subpath -##parameters= -##title= -## -# price = context.getTotalPrice() -price = context.Invoice_zGetTotal()[0].total_price - -discount_list_tmp = context.contentValues(filter={'portal_type':'Remise'}) -discount_list = filter(lambda x: x not in [None,0] ,discount_list_tmp) - -if len(discount_list) > 1: - discount_list.sort(lambda x,y: cmp(x.getIntIndex(),y.getIntIndex())) - -for discount_line in discount_list: - if discount_line.getImmediateDiscount(): - price *= (1 - discount_line.getDiscountRatio()) - -return price diff --git a/product/Coramy/skins/coramy_trade/Invoice_zGetTotalVat.py b/product/Coramy/skins/coramy_trade/Invoice_zGetTotalVat.py deleted file mode 100755 index 6c08aad87f..0000000000 --- a/product/Coramy/skins/coramy_trade/Invoice_zGetTotalVat.py +++ /dev/null @@ -1,21 +0,0 @@ -## Script (Python) "Invoice_zGetTotalVat" -##bind container=container -##bind context=context -##bind namespace= -##bind script=script -##bind subpath=traverse_subpath -##parameters= -##title= -## -price = context.Invoice_zGetTotalNetPrice() - -if context.getValueAddedTaxRecoverable(): - vat_ratio = context.getValueAddedTaxRatio() - if vat_ratio != None: - price *= vat_ratio - else: - price = 0 -else: - price = 0 - -return price diff --git a/product/Coramy/skins/coramy_trade/Movement_lookupPrice.py b/product/Coramy/skins/coramy_trade/Movement_lookupPrice.py deleted file mode 100755 index b923806a37..0000000000 --- a/product/Coramy/skins/coramy_trade/Movement_lookupPrice.py +++ /dev/null @@ -1,15 +0,0 @@ -## Script (Python) "Movement_lookupPrice" -##bind container=container -##bind context=context -##bind namespace= -##bind script=script -##bind subpath=traverse_subpath -##parameters= -##title= -## -resource = context.getResourceValue() -if resource is not None: - return resource.getSourceBasePrice(0)/resource.getPricedQuantity() - # return resource.getPrice(context=context) # calls a Resource_lookupPrice itself -else: - return None diff --git a/product/Coramy/skins/coramy_trade/Movement_zList.zsql b/product/Coramy/skins/coramy_trade/Movement_zList.zsql deleted file mode 100755 index 424f13ecf3..0000000000 --- a/product/Coramy/skins/coramy_trade/Movement_zList.zsql +++ /dev/null @@ -1,52 +0,0 @@ -<dtml-comment> -title: -connection_id:erp5_sql_connection -max_rows:1000 -max_cache:100 -cache_time:0 -class_name: -class_file: -</dtml-comment> -<params>query -sort_on</params> -<dtml-if sort_on> -<dtml-if query> -SELECT - DISTINCT catalog.* , movement.* -FROM - catalog, movement, category, roles_and_users -WHERE - catalog.uid=category.uid -AND catalog.uid = movement.uid -AND catalog.uid=roles_and_users.uid -AND <dtml-var query> -ORDER BY <dtml-var sort_on> -<dtml-else> -SELECT - DISTINCT catalog.* , movement.* -FROM - catalog, movement -WHERE - catalog.uid = movement.uid -ORDER BY <dtml-var sort_on> -</dtml-if> -<dtml-else> -<dtml-if query> -SELECT - DISTINCT catalog.* , movement.* -FROM - catalog, movement, category, roles_and_users -WHERE - catalog.uid=category.uid -AND catalog.uid = movement.uid -AND catalog.uid=roles_and_users.uid -AND <dtml-var query> -<dtml-else> -SELECT - DISTINCT catalog.* , movement.* -FROM - catalog, movement -WHERE - catalog.uid = movement.uid -</dtml-if> -</dtml-if> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_trade/Movement_zSetDestinationTotalAssetPrice.zsql b/product/Coramy/skins/coramy_trade/Movement_zSetDestinationTotalAssetPrice.zsql deleted file mode 100755 index 7257766037..0000000000 --- a/product/Coramy/skins/coramy_trade/Movement_zSetDestinationTotalAssetPrice.zsql +++ /dev/null @@ -1,20 +0,0 @@ -<dtml-comment> -title: -connection_id:MySQL -max_rows:1000 -max_cache:100 -cache_time:0 -class_name: -class_file: -</dtml-comment> -<params>uid -total_asset_price</params> -UPDATE - stock LEFT JOIN movement ON (stock.uid = movement.uid) -SET - stock.total_asset_price = <dtml-sqlvar total_asset_price type="float"> -WHERE - stock.uid = <dtml-sqlvar uid type="int"> -AND -( movement.quantity > 0 AND stock.quantity > 0 -OR movement.quantity < 0 AND stock.quantity < 0) \ No newline at end of file diff --git a/product/Coramy/skins/coramy_trade/Movement_zSetSourceTotalAssetPrice.zsql b/product/Coramy/skins/coramy_trade/Movement_zSetSourceTotalAssetPrice.zsql deleted file mode 100755 index fb49569675..0000000000 --- a/product/Coramy/skins/coramy_trade/Movement_zSetSourceTotalAssetPrice.zsql +++ /dev/null @@ -1,20 +0,0 @@ -<dtml-comment> -title: -connection_id:MySQL -max_rows:1000 -max_cache:100 -cache_time:0 -class_name: -class_file: -</dtml-comment> -<params>uid -total_asset_price</params> -UPDATE - stock LEFT JOIN movement ON (stock.uid = movement.uid) -SET - stock.total_asset_price = <dtml-sqlvar total_asset_price type="float"> -WHERE - stock.uid = <dtml-sqlvar uid type="int"> -AND -( movement.quantity > 0 AND stock.quantity < 0 -OR movement.quantity < 0 AND stock.quantity > 0) \ No newline at end of file diff --git a/product/Coramy/skins/coramy_trade/Order_heavyControl.py b/product/Coramy/skins/coramy_trade/Order_heavyControl.py deleted file mode 100755 index 54ed798e82..0000000000 --- a/product/Coramy/skins/coramy_trade/Order_heavyControl.py +++ /dev/null @@ -1,52 +0,0 @@ -## Script (Python) "Order_heavyControl" -##bind container=container -##bind context=context -##bind namespace= -##bind script=script -##bind subpath=traverse_subpath -##parameters= -##title= -## -# This script makes controls on an order -# this script is called from a workflow_script during transitions -# return an error message ou empty string if ok - -order = context -movement_list = [] - -# first make light control -error_message = order.Order_lightControl() - -# Check each movement -for m in context.getMovementList(): - if m.getPrice() in (None, '') : - error_message += 'Prix manquant: produit %s ou variante %s' % (m.getResource(), m.getVariationText()) - if m.getQuantity() in (None, '') : - error_message += 'Quantité manquante: produit %s ou variante %s' % (m.getResource(), m.getVariationText()) - -# then check every simulation_movement in relation with the order : -if order.getPortalType() == 'Purchase Order' : - filter_dict = {'portal_type': 'Purchase Order Line'} -elif order.getPortalType() == 'Sales Order' : - filter_dict = {'portal_type': 'Sales Order Line'} -else : - filter_dict = {'portal_type': 'Production Order Line'} - -movement_list += order.getOrderRelatedValueList(portal_type = 'Simulation Movement') -for order_line in order.contentValues(filter=filter_dict) : - movement_list += order_line.getOrderRelatedValueList(portal_type = 'Simulation Movement') - for cell in order_line.contentValues(filter={'portal_type': 'Delivery Cell'}) : - movement_list += cell.getOrderRelatedValueList(portal_type = 'Simulation Movement') - -# check each simulation movement : -for movement in movement_list : - if movement.getTargetQuantity() != 0 and movement.getPrice() == 0 or \ - movement.getTargetQuantity() != 0 and movement.getPrice() == '' or \ - movement.getTargetQuantity() != 0 and movement.getPrice() is None : - if len(error_message) == 0 : - error_message += 'Prix manquant: produit %s ou variante %s' % (movement.getResource(), movement.getVariationText()) - else : - error_message += ' - Prix manquant: produit %s ou variante %s' % (movement.getResource(), movement.getVariationText()) - break - -return error_message diff --git a/product/Coramy/skins/coramy_trade/Order_lightControl.py b/product/Coramy/skins/coramy_trade/Order_lightControl.py deleted file mode 100755 index 61ccae557a..0000000000 --- a/product/Coramy/skins/coramy_trade/Order_lightControl.py +++ /dev/null @@ -1,67 +0,0 @@ -## Script (Python) "Order_lightControl" -##bind container=container -##bind context=context -##bind namespace= -##bind script=script -##bind subpath=traverse_subpath -##parameters= -##title= -## -# This script makes a few controls on an order -# this script is called from a workflow_script during transitions -# return an error message ou empty string if ok - -error_message = '' -order = context - -# check if profile is completete -if order.getSourceValue() is None or \ - order.getDestinationValue() is None or \ - order.getSourceSectionValue() is None or \ - order.getDestinationSectionValue() is None or \ - order.getSourceDecisionValue() is None or \ - order.getDestinationDecisionValue() is None or \ - order.getSourceAdministrationValue() is None or \ - order.getDestinationAdministrationValue() is None or \ - order.getSourcePaymentValue() is None or \ - order.getDestinationPaymentValue() is None : - - if len(error_message) == 0 : - error_message += 'Profil incomplet' - else : - error_message += ' - Profil incomplet' - -# check if order is not empty -if order.getPortalType() == 'Purchase Order' : - filter_dict = {'portal_type': 'Purchase Order Line'} -elif order.getPortalType() == 'Sales Order': - filter_dict = {'portal_type': 'Sales Order Line'} -elif order.getPortalType() == 'Packing Order': - filter_dict = {'portal_type': 'Packing Order Line'} -else : - filter_dict = {'portal_type': 'Production Order Line'} -order_line_list = order.contentValues(filter=filter_dict) -if len(order_line_list)==0 : - if len(error_message) == 0 : - error_message += 'Commande vide' - else : - error_message += ' - Commande vide' -else : - # check if each line is linked to a resource - # and if variations are well defined - for order_line in order_line_list : - if order_line.getResourceValue() is None : - if len(error_message) == 0 : - error_message += 'Ligne sans produit' - else : - error_message += ' - Ligne sans produit' - break - if not order_line.getVariationBaseCategoryList() in (None, []) and not order_line.getVariationCategoryList() in (None, []) : - if len(order_line.getVariationBaseCategoryList()) == 0 and len(order_line.getVariationCategoryList()) <> 0 : - if len(error_message) == 0 : - error_message += 'Variantes mal définies' - else : - error_message += ' - Variantes mal définies' - break - -return error_message diff --git a/product/Coramy/skins/coramy_trade/Order_updateLocalRoles.py b/product/Coramy/skins/coramy_trade/Order_updateLocalRoles.py deleted file mode 100755 index 37b7a0e8ee..0000000000 --- a/product/Coramy/skins/coramy_trade/Order_updateLocalRoles.py +++ /dev/null @@ -1,33 +0,0 @@ -## Script (Python) "Order_updateLocalRoles" -##bind container=container -##bind context=context -##bind namespace= -##bind script=script -##bind subpath=traverse_subpath -##parameters=form_id='' -##title= -## -order = context -request = context.REQUEST - -# what's the gestionaire of this order -user_name = '' -# are we on a sales order or puchase order ? -if order.getPortalType() == 'Sales Order' : - user_name = order.getSourceAdministrationTitle().replace(' ','_') -elif order.getPortalType() in ('Purchase Order' , 'Production Order') : - user_name = order.getDestinationAdministrationPersonTitle().replace(' ','_') - -order.assign_gestionaire_designe_roles(user_name = user_name) - -delivery_list = order.getCausalityRelatedValueList(portal_type=["Purchase Packing List", "Sales Packing List", "Production Packing List"]) -for delivery in delivery_list : - # update local_roles - delivery.assign_gestionaire_designe_roles(user_name = user_name) - -redirect_url = '%s/%s?%s' % ( context.absolute_url() - , form_id - , 'portal_status_message=Roles+mis+a+jour.' - ) - -request[ 'RESPONSE' ].redirect( redirect_url ) diff --git a/product/Coramy/skins/coramy_trade/PackingList_getDistinctContainerList.py b/product/Coramy/skins/coramy_trade/PackingList_getDistinctContainerList.py deleted file mode 100755 index a29f029755..0000000000 --- a/product/Coramy/skins/coramy_trade/PackingList_getDistinctContainerList.py +++ /dev/null @@ -1,45 +0,0 @@ -## Script (Python) "PackingList_getDistinctContainerList" -##bind container=container -##bind context=context -##bind namespace= -##bind script=script -##bind subpath=traverse_subpath -##parameters= -##title= -## -# this method return a list of distinct containers -# it returns a sorted list of tuples (object container, range) -# the range is a tuple (first number of this container, last number of this container) - -delivery = context - -container_list = delivery.contentValues(filter={'portal_type' : 'Container'}) - -ordered_container_list = context.sort_object_list(unordered_list=container_list, sort_order = (('int_index', 'ASC'),) ) - -final_container_list = [] -if len(container_list) > 0 : - container_ref = container_list[0].getContainerText() - container_object = container_list[0] - first_container = 1 - last_container = 1 -else : - container_ref = '' - container_object = None - first_container = 0 - last_container = 0 - -for container in ordered_container_list : - if container.getContainerText() != container_ref : - # append tuple in final_container_list - final_container_list.append((container_object,(first_container,last_container))) - # reset variables - container_object = container - first_container = container.getIntIndex() - container_ref = container.getContainerText() - last_container = container.getIntIndex() - -# append final container in final_container_list -final_container_list.append((container_object,(first_container,last_container))) - -return final_container_list diff --git a/product/Coramy/skins/coramy_trade/PackingList_getTotalGrossWeight.py b/product/Coramy/skins/coramy_trade/PackingList_getTotalGrossWeight.py deleted file mode 100755 index 451aac4090..0000000000 --- a/product/Coramy/skins/coramy_trade/PackingList_getTotalGrossWeight.py +++ /dev/null @@ -1,17 +0,0 @@ -## Script (Python) "PackingList_getTotalGrossWeight" -##bind container=container -##bind context=context -##bind namespace= -##bind script=script -##bind subpath=traverse_subpath -##parameters= -##title= -## -packing_list = context -total_gross_weight = 0 - -container_list = packing_list.contentValues(filter={'portal_type':'Container'}) -for container in container_list : - total_gross_weight += container.getGrossWeight(0) - -return total_gross_weight diff --git a/product/Coramy/skins/coramy_trade/PlanTransportExtand.py b/product/Coramy/skins/coramy_trade/PlanTransportExtand.py deleted file mode 100755 index 3ac78722cc..0000000000 --- a/product/Coramy/skins/coramy_trade/PlanTransportExtand.py +++ /dev/null @@ -1,111 +0,0 @@ -## Script (Python) "PlanTransportExtand" -##bind container=container -##bind context=context -##bind namespace= -##bind script=script -##bind subpath=traverse_subpath -##parameters=departement='' -##title= -## -plan_transport = { -'01':('901','01'), -'02':('951','51'), -'03':('963','63'), -'04':('984','84'), -'05':('938','38'), -'06':('906','06'), -'07':('926','26'), -'08':('951','51'), -'09':('932','32'), -'10':('910','10'), -'11':('932','32'), -'12':('982','82'), -'13':('913','13'), -'14':('914','14'), -'15':('963','63'), -'16':('916','16'), -'17':('979','79'), -'18':('945','45'), -'19':('987','87'), -'20':('920','20'), -'21':('921','21'), -'22':('935','35'), -'23':('987','87'), -'24':('987','87'), -'25':('925','25'), -'26':('926','26'), -'27':('976','76'), -'28':('978','78'), -'29':('929','29'), -'30':('984','84'), -'31':('931','31'), -'32':('932','32'), -'55':('954','54'), -'56':('956','56'), -'57':('957','57'), -'58':('921','21'), -'59':('959','59'), -'60':('960','60'), -'61':('972','72'), -'62':('962','62'), -'63':('963','63'), -'64':('964','64'), -'65':('964','64'), -'66':('966','66'), -'67':('967','67'), -'68':('968','68'), -'69':('969','69'), -'70':('925','25'), -'71':('921','21'), -'72':('972','72'), -'73':('974','74'), -'74':('974','74'), -'75':('975','75'), -'76':('976','76'), -'77':('977','77'), -'78':('978','78'), -'79':('979','79'), -'80':('960','60'), -'81':('982','82'), -'82':('982','82'), -'83':('983','83'), -'84':('984','84'), -'85':('944','44'), -'86':('937','37'), -'33':('933','33'), -'34':('934','34'), -'35':('935','35'), -'36':('937','37'), -'37':('937','37'), -'38':('938','38'), -'39':('921','21'), -'40':('964','64'), -'41':('945','45'), -'42':('942','42'), -'43':('942','42'), -'44':('944','44'), -'45':('945','45'), -'46':('982','82'), -'47':('933','33'), -'48':('966','66'), -'49':('949','49'), -'50':('914','14'), -'51':('951','51'), -'52':('910','10'), -'53':('972','72'), -'54':('954','54'), -'87':('987','87'), -'88':('954','54'), -'89':('910','10'), -'90':('925','25'), -'91':('994','94'), -'92':('995','95'), -'93':('992','92'), -'94':('994','94'), -'95':('995','95'), -'98':('906','06'), -} -if departement == '' : - return None -else : - return plan_transport[departement] diff --git a/product/Coramy/skins/coramy_trade/PurchaseOrder_reportList.form b/product/Coramy/skins/coramy_trade/PurchaseOrder_reportList.form deleted file mode 100755 index 178f27de2c..0000000000 --- a/product/Coramy/skins/coramy_trade/PurchaseOrder_reportList.form +++ /dev/null @@ -1,58 +0,0 @@ -<?xml version="1.0" encoding="iso-8859-1"?> - -<form> - <title>Liste de commandes</title> - <name>sales_order_list</name> - <action></action> - <enctype></enctype> - <method>POST</method> - <pt>form_list</pt> - - <groups> - <group> - <title>Default</title> - <fields> - - <field><id>listbox</id> <type>ListBox</type> - <values> - <all_columns type="list">[('id', 'Commande'), ('default_destination_section_title', 'Soci\xe9t\xe9'), ('default_source_title', 'Exp\xe9di\xe9 par'), ('default_destination_title', 'Livrer \xe0'), ('default_destination_administration_person_title', 'Gestionaire'), ('target_stop_date', 'Livraison demand\xe9e'), ('stop_date', 'Livraison confirm\xe9e'), ('simulation_state', 'Etat')]</all_columns> - <all_editable_columns type="list">[]</all_editable_columns> - <alternate_name></alternate_name> - <columns type="list">[('target_stop_date', 'Date Livraison'), ('node_title', 'Fournisseur'), ('resource_title', 'Composant'), ('variation_text', 'Variante'), ('target_quantity', 'Quantit\xe9 command\xe9e'), ('getCurrentInventory', 'Stock'), ('getAvailableInventory', 'Dispo'), ('getFutureInventory', 'Futur')]</columns> - <css_class></css_class> - <default></default> - <default_params type="list">[]</default_params> - <description></description> - <domain_root_list type="list">[('portal_categories/type_composant', 'Type Composant'), ('portal_categories/quantity_unit', 'Unit\xe9 Composant'), ('portal_categories/site', 'Site')]</domain_root_list> - <domain_tree type="int">0</domain_tree> - <editable_columns type="list">[]</editable_columns> - <external_validator></external_validator> - <global_attributes type="list">[]</global_attributes> - <hidden type="int">0</hidden> - <lines type="int">30</lines> - <list_action>list</list_action> - <list_method type="method">portal_catalog</list_method> - <meta_types type="list">[]</meta_types> - <portal_types type="list">[('Purchase Order', 'Purchase Order')]</portal_types> - <report_root_list type="list">[]</report_root_list> - <report_tree type="int">0</report_tree> - <search type="int">1</search> - <search_columns type="list">[('node_title', 'node_title'), ('resource_title', 'resource_title'), ('target_stop_date', 'target_stop_date'), ('variation_text', 'variation_text')]</search_columns> - <select type="int">1</select> - <selection_name>purchase_report_selection</selection_name> - <sort type="list">[]</sort> - <sort_columns type="list">[]</sort_columns> - <stat_method></stat_method> - <title>Commandes achat</title> - </values> - <tales> - <list_method>python:here.getPortalObject().portal_skins.local_list_method[here.REQUEST.list_method_id]</list_method> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - </messages> - </field> - </fields> - </group> - </groups> -</form> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_trade/SaleInvoice_dateSearch.form b/product/Coramy/skins/coramy_trade/SaleInvoice_dateSearch.form deleted file mode 100755 index a5aa25844c..0000000000 --- a/product/Coramy/skins/coramy_trade/SaleInvoice_dateSearch.form +++ /dev/null @@ -1,51 +0,0 @@ -<?xml version="1.0" encoding="iso-8859-1"?> - -<form> - <title>Ne pas utiliser, ca ne marche pas encore ...</title> - <name>SaleInvoice_dateSearch</name> - <action>sales_invoice_list</action> - <enctype></enctype> - <method>POST</method> - <pt>form_view_dialog</pt> - - <groups> - <group> - <title>left</title> - <fields> - - <field><id>my_start_date</id> <type>DateTimeField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <date_only type="int">1</date_only> - <date_separator>/</date_separator> - <default>2004/02/27 16:46:00 GMT+1</default> - <default_now type="int">0</default_now> - <description></description> - <external_validator></external_validator> - <hidden type="int">0</hidden> - <input_order>dmy</input_order> - <input_style>list</input_style> - <required type="int">1</required> - <time_separator>:</time_separator> - <title>Date de facture</title> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="not_datetime">You did not enter a valid date and time.</message> - <message name="datetime_out_of_range">The date and time you entered were out of range.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>right</title> - <fields> - - </fields> - </group> - </groups> -</form> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_trade/SaleInvoice_exportSage.py b/product/Coramy/skins/coramy_trade/SaleInvoice_exportSage.py deleted file mode 100755 index 347231ae44..0000000000 --- a/product/Coramy/skins/coramy_trade/SaleInvoice_exportSage.py +++ /dev/null @@ -1,248 +0,0 @@ -## Script (Python) "SaleInvoice_exportSage" -##bind container=container -##bind context=context -##bind namespace= -##bind script=script -##bind subpath=traverse_subpath -##parameters=batch_mode=0,cr='\r',**kw -##title= -## -# generate a export file from a Sale Invoice for the Sage software - -def priceWrite(price): - from string import zfill - s = '%.2f' % price - width = 13 - if len(s) > width: - result = s[-width:] - else: - result = zfill(s,width) - return result - -def mecg_text(invoice_date, datetime, invoice_number, compta_number, code_comptable, corporate_name, due_date): - - - content = '#MECG'+cr - content += 'VE'+cr - content += invoice_date+cr - - content += datetime+cr - content += invoice_number+(cr*3) - content += compta_number+(cr*2) - content += code_comptable+(cr*2) - content += corporate_name+cr - content += '0'+cr - - content += due_date+cr - content += (('0'+cr)*3) - - return content - -def mecg_text_part2(is_invoice, amount): - - content = '' - content += is_invoice+cr - content += priceWrite(amount)+cr - content += (cr*3)+(('0'+cr)*5) - - return content - -def meca_text(amount): - - content = '#MECA'+cr - content += '1'+cr - content += 'VENTES'+cr - content += priceWrite(amount)+cr - content += '0'+cr - - return content - - - -request = context.REQUEST - - -file_content = '' - -# globals variables -invoice_date = context.getStartDate().strftime('%d%m%y') -from DateTime import DateTime -datetime = DateTime().strftime('%d%m%y') -invoice_number = context.getReference() - -code_comptable = context.getDestinationAdministrationValue().getCodeComptable() -corporate_name = context.getDestinationAdministrationValue().getCorporateName() -due_date = context.Invoice_zGetDueDate().strftime('%d%m%y') - -if context.getValueAddedTaxRecoverable(): - vat = context.Invoice_zGetTotalVat() -else: - vat = 0.0 - -incomeHT = context.getTotalPrice() -income = context.Invoice_zGetTotalNetPrice() -# the decimals must be corrects -payable = float('%.2f' % income) + float('%.2f' % vat); - - -# parameters of SaleInvoice_exportSageCodeComptableList -analytique='VENTES' -source_section_title=context.getSourceSectionTitle() -#amount_type= -region=context.getDestinationAdministrationValue().getDefaultAddressRegion() -if region == None: - region = 'France' -else: - region = region.split('/')[-1] - - -compte_client=context.getDestinationAdministrationValue().getCodeComptable() - -if compte_client in (None, ''): - if not batch_mode: - message="Erreur+sur+la+facture:+il+n\'y+a+pas+de+compte+comptable+sur+l\'organisation+à+facturer" - redirect_url = '%s?%s%s' % ( context.absolute_url()+'/view', 'portal_status_message=',message) - request[ 'RESPONSE' ].redirect( redirect_url ) - return None - else: - return None - -# only the lasts 5 letters are usable -compte_client = compte_client[-5:] - -cee_region_list = [ -'Belgique', -'Danemark', -'Allemagne', -'Grece', -'Espagne', -'France', -'Irlande', -'Italie', -'Luxembourg', -'Pays-Bas', -'Autriche', -'Portugal', -'Finlande', -'Suede', -'Grande-Bretagne', -'Tchequie', -'Estonie', -'Chypre', -'Letonie', -'Lituanie', -'Hongrie', -'Malte', -'Pologne', -'Slovenie', -'Slovaquie' -] - -if region in cee_region_list: - if region == 'France': - location = region - else: - location = 'CEE' -else: - location = 'HCEE' - - -# TTC -amount_type='TTC' -compta_number = '4110000' -code_comptable = context.SaleInvoice_exportSageCodeComptableList(analytique, source_section_title, amount_type, location, compte_client) -is_invoice = '0' -#amount = '%s' % payable -amount = payable -file_content += mecg_text(invoice_date=invoice_date, datetime=datetime, invoice_number=invoice_number, compta_number=compta_number, code_comptable=code_comptable, corporate_name=corporate_name, due_date=due_date) -file_content += mecg_text_part2(is_invoice=is_invoice, amount=amount) - -# HT -amount_type='HT' -compta_number = context.SaleInvoice_exportSageCodeComptableList(analytique, source_section_title, amount_type, location, compte_client) -code_comptable = '' -is_invoice = '1' -#amount = '%s' % incomeHT -amount = incomeHT -file_content += mecg_text(invoice_date=invoice_date, datetime=datetime, invoice_number=invoice_number, compta_number=compta_number, code_comptable=code_comptable, corporate_name=corporate_name, due_date=due_date) -file_content += mecg_text_part2(is_invoice=is_invoice, amount=amount) -file_content += meca_text(amount=amount) - - - -# discount -discount_list_tmp = context.contentValues(filter={'portal_type':'Remise'}) -discount_list_tmp2 = filter(lambda x: x not in [None,0] ,discount_list_tmp) - -discount_list = filter(lambda x: x.getImmediateDiscount(), discount_list_tmp2 ) - -if len(discount_list) > 1: - discount_list.sort(lambda x,y: cmp(y.getIntIndex(),x.getIntIndex())) - -income_old = income -income_new = 0 -discount_total = 0 -did_we_have_another_discount = 0 - -for discount_line in discount_list: - if discount_line.getDiscountTypeTitle() == 'Escompte': - # escompte - amount_type='escompte' - compta_number = context.SaleInvoice_exportSageCodeComptableList(analytique, source_section_title, amount_type, location, compte_client) - code_comptable = '' - - income_new = income_old / (1 - discount_line.getDiscountRatio()) - discount_total += income_new - income_old - remise_price = income_new - income_old - - income_old = income_new - - - amount = remise_price - is_invoice = '0' - file_content += mecg_text(invoice_date=invoice_date, datetime=datetime, invoice_number=invoice_number, compta_number=compta_number, code_comptable=code_comptable, corporate_name=corporate_name, due_date=due_date) - file_content += mecg_text_part2(is_invoice=is_invoice, amount=amount) - file_content += meca_text(amount=amount) - else: - # all others discounts - did_we_have_another_discount = 1 - - income_new = income_old / (1 - discount_line.getDiscountRatio()) - discount_total += income_new - income_old - income_old = income_new - - -if did_we_have_another_discount: - amount_type='discount' - compta_number = context.SaleInvoice_exportSageCodeComptableList(analytique, source_section_title, amount_type, location, compte_client) - code_comptable = '' - - amount = discount_total - is_invoice = '0' - - file_content += mecg_text(invoice_date=invoice_date, datetime=datetime, invoice_number=invoice_number, compta_number=compta_number, code_comptable=code_comptable, corporate_name=corporate_name, due_date=due_date) - file_content += mecg_text_part2(is_invoice=is_invoice, amount=amount) - file_content += meca_text(amount=amount) - -# VAT -amount_type='tva' -compta_number = context.SaleInvoice_exportSageCodeComptableList(analytique, source_section_title, amount_type, location, compte_client) -code_comptable = '' -is_invoice = '1' -amount = vat -file_content += mecg_text(invoice_date=invoice_date, datetime=datetime, invoice_number=invoice_number, compta_number=compta_number, code_comptable=code_comptable, corporate_name=corporate_name, due_date=due_date) -file_content += mecg_text_part2(is_invoice=is_invoice, amount=amount) - - -# and this is the end .... -if batch_mode: - return file_content -else: - # add the header and the end of the file - file = '#FLG 000'+cr - file += '#VER 5'+cr - file += file_content - file += '#FIN' - - request.RESPONSE.setHeader('Content-Type','text/plain') - return file diff --git a/product/Coramy/skins/coramy_trade/SaleInvoice_exportSageCodeComptableList.py b/product/Coramy/skins/coramy_trade/SaleInvoice_exportSageCodeComptableList.py deleted file mode 100755 index d78d95f13f..0000000000 --- a/product/Coramy/skins/coramy_trade/SaleInvoice_exportSageCodeComptableList.py +++ /dev/null @@ -1,98 +0,0 @@ -## Script (Python) "SaleInvoice_exportSageCodeComptableList" -##bind container=container -##bind context=context -##bind namespace= -##bind script=script -##bind subpath=traverse_subpath -##parameters=analytique=None, source_section_title=None, amount_type=None, location=None, compte_client=None -##title= -## -# { analytique: { source_section_title:{ amount_type: { location: } } } } - -code_comptable_dict = { - -'VENTES': { - 'Coramy': { - 'TTC': { - 'CEE': compte_client, - 'HCEE': compte_client, - 'France': compte_client - }, - 'HT': { - 'France': '7011100', - 'CEE': '7011200', - 'HCEE': '7011300' - }, - 'discount': { - 'France': '7091100', - 'CEE': '7091200', - 'HCEE': '7091300' - }, - 'escompte': { - 'France': '6651000', - 'HCEE': '6652000', - 'CEE': '6653000' - }, - 'tva': { - 'CEE': '4457102', - 'HCEE': '4457102', - 'France': '4457102' - }, - }, - 'BLS': { - 'TTC': { - 'CEE':compte_client, - 'HCEE':compte_client, - 'France':compte_client - }, - 'HT': { - 'France': '7071000', - 'CEE': '7071200', - 'HCEE': '7071300' - }, - 'discount': { - 'France': '7097000', - 'CEE': '7097200', - 'HCEE': '7097300' - }, - 'escompte': { - 'France': '6651000', - 'HCEE': '6652000', - 'CEE': '6653000' - }, - 'tva': { - 'CEE': '4457102', - 'HCEE': '4457102', - 'France': '4457102' - }, - }, - 'Houvenaegel': { - 'TTC': { - 'CEE': compte_client, - 'HCEE': compte_client, - 'France': compte_client - }, - 'HT': { - 'France': '7071000', - 'CEE': '7071200', - 'HCEE': '7071300' - }, - 'discount': { - 'France': '7097000', - 'CEE': '7097200', - 'HCEE': '7097300' - }, - 'escompte': { - 'France': '6651000', - 'HCEE': '6652000', - 'CEE': '6653000' - }, - 'tva': { - 'CEE': '4457102', - 'HCEE': '4457102', - 'France': '4457102' - }, - }, -}} - -return code_comptable_dict[analytique][source_section_title][amount_type][location] diff --git a/product/Coramy/skins/coramy_trade/SaleInvoice_exportSageList.py b/product/Coramy/skins/coramy_trade/SaleInvoice_exportSageList.py deleted file mode 100755 index 5ef1827868..0000000000 --- a/product/Coramy/skins/coramy_trade/SaleInvoice_exportSageList.py +++ /dev/null @@ -1,32 +0,0 @@ -## Script (Python) "SaleInvoice_exportSageList" -##bind container=container -##bind context=context -##bind namespace= -##bind script=script -##bind subpath=traverse_subpath -##parameters=**kw -##title= -## -# generate a export file from a Sale Invoice list for the Sage software - -request = context.REQUEST -cr='\r' -# add the header of the file -file = '#FLG 000'+cr -file += '#VER 5'+cr - -object_list = context.object_action_list(selection_name='order_selection') - -for invoice in object_list: - try: - file += invoice.SaleInvoice_exportSage(batch_mode=1,cr=cr) - except: - message='Erreur+sur+la+facture:+identifiant+%s+numero+%s.' % (invoice.getId(),invoice.getReference()) - redirect_url = '%s?%s%s' % ( context.absolute_url()+'/view', 'portal_status_message=',message) - request[ 'RESPONSE' ].redirect( redirect_url ) - -# add the end of the file -file += '#FIN' - -request.RESPONSE.setHeader('Content-Type','text/plain') -return file diff --git a/product/Coramy/skins/coramy_trade/SaleInvoice_printPdf.py b/product/Coramy/skins/coramy_trade/SaleInvoice_printPdf.py deleted file mode 100755 index db5056b8d6..0000000000 --- a/product/Coramy/skins/coramy_trade/SaleInvoice_printPdf.py +++ /dev/null @@ -1,25 +0,0 @@ -## Script (Python) "SaleInvoice_printPdf" -##bind container=container -##bind context=context -##bind namespace= -##bind script=script -##bind subpath=traverse_subpath -##parameters=user_name='rc',printer='Xerox_DC_440',selection_name=None,render_id=None,template_id=None,number_copies=1,**kw -##title= -## -# generate a pdf file from the sale invoice - -invoice = context -invoice_description = "Identifiant facture "+invoice.getId() - -try: - # generate the pdf - pdf = invoice.Invoice_print_romain(batch_mode=1) -except: - context.Coramy_sendMailToUser(user_name=user_name,mSubj="Génération d un pdf échouée",mMsg=invoice_description) -else: - try: - # Send it to a printer. - invoice.sendRawToCups(printer, pdf, number_copies=number_copies) - except: - context.Coramy_sendMailToUser(user_name=user_name,mSubj="Impression d une facture vente échouée",mMsg=invoice_description) diff --git a/product/Coramy/skins/coramy_trade/SaleInvoice_printPdfList.py b/product/Coramy/skins/coramy_trade/SaleInvoice_printPdfList.py deleted file mode 100755 index 429266bcf1..0000000000 --- a/product/Coramy/skins/coramy_trade/SaleInvoice_printPdfList.py +++ /dev/null @@ -1,24 +0,0 @@ -## Script (Python) "SaleInvoice_printPdfList" -##bind container=container -##bind context=context -##bind namespace= -##bind script=script -##bind subpath=traverse_subpath -##parameters=printer='Xerox_DC_440',selection_name=None,render_id=None,template_id=None,number_copies=1,**kw -##title= -## -# generate a pdf file from the sale invoice list - -request = context.REQUEST - -object_list = context.object_action_list(selection_name=selection_name) -# sort invoice's references -object_list.sort(lambda x,y: cmp(int(x.getReference('0')),int(y.getReference('0')))); - -user_name = context.portal_membership.getAuthenticatedMember().getUserName() - -for invoice in object_list: - invoice.activate(activity="SQLQueue").SaleInvoice_printPdf(user_name=user_name,printer=printer,selection_name=selection_name,render_id=render_id,template_id=template_id, number_copies=number_copies) - -redirect_url = '%s?%s' % ( context.absolute_url(), 'portal_status_message=Impression+lancée.') -request[ 'RESPONSE' ].redirect( redirect_url ) diff --git a/product/Coramy/skins/coramy_trade/SaleInvoice_printPdfListForm.form b/product/Coramy/skins/coramy_trade/SaleInvoice_printPdfListForm.form deleted file mode 100755 index ca6ca560e5..0000000000 --- a/product/Coramy/skins/coramy_trade/SaleInvoice_printPdfListForm.form +++ /dev/null @@ -1,146 +0,0 @@ -<?xml version="1.0" encoding="iso-8859-1"?> - -<form> - <title>Confirmer l'impression</title> - <name>SaleInvoice_printPdfListForm</name> - <action>SaleInvoice_printPdfList</action> - <enctype></enctype> - <method>POST</method> - <pt>form_dialog</pt> - - <groups> - <group> - <title>Default</title> - <fields> - - <field><id>my_number_copies</id> <type>IntegerField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default>1</default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <end type="int">5</end> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <required type="int">1</required> - <start type="int">0</start> - <title>Nombre d'exemplaires</title> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="not_integer">You did not enter an integer.</message> - <message name="integer_out_of_range">The integer you entered was out of range.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>hidden</title> - <fields> - - <field><id>my_selection_name</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default>order_selection</default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">1</hidden> - <max_length></max_length> - <required type="int">1</required> - <title>x</title> - <truncate type="int">0</truncate> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - <field><id>my_printer</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default>Xerox_DC_440</default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">1</hidden> - <max_length></max_length> - <required type="int">1</required> - <title>x</title> - <truncate type="int">0</truncate> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - <field><id>my_render_id</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">1</hidden> - <max_length></max_length> - <required type="int">0</required> - <title>x</title> - <truncate type="int">0</truncate> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - <field><id>my_template_id</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">1</hidden> - <max_length></max_length> - <required type="int">0</required> - <title>x</title> - <truncate type="int">0</truncate> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - </fields> - </group> - </groups> -</form> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_trade/SaleInvoice_updateTransaction.py b/product/Coramy/skins/coramy_trade/SaleInvoice_updateTransaction.py deleted file mode 100755 index 802f02ce88..0000000000 --- a/product/Coramy/skins/coramy_trade/SaleInvoice_updateTransaction.py +++ /dev/null @@ -1,65 +0,0 @@ -## Script (Python) "SaleInvoice_updateTransaction" -##bind container=container -##bind context=context -##bind namespace= -##bind script=script -##bind subpath=traverse_subpath -##parameters= -##title= -## -# Create invoice lines -global total_price -global total_vat -global total_discount -total_price = 0.0 -total_vat = 0.0 -total_discount = 0.0 -invoice = context - -def updateTotal(l): - global total_price - global total_vat - global total_discount - if l.getPrice() in ('', None): - return 'Price is not defined for %s %s' % (l.getResource(), l.getVariationText()) - elif l.getQuantity(): - price = l.getPrice() * l.getQuantity() - total_price += price - if l.getValueAddedTaxRatio() and l.getValueAddedTaxRecoverable(): - total_vat += price * l.getValueAddedTaxRatio() - return None - -for l in context.contentValues(filter={'portal_type':"Invoice Line"}): - if l.hasCellContent(): - for c in l.contentValues(filter={'portal_type':"Invoice Cell"}): - error_message = updateTotal(c) - if error_message is not None: - return error_message - else: - error_message = updateTotal(l) - if error_message is not None: - return error_message - -# Generate accounting lines -# Income Line -if not invoice.hasObject('income'): - income = invoice.newContent(portal_type="Sale Invoice Transaction Line", id='income') -else: - income = context.income -income.edit(source='account/vente', destination='account/achat', - source_credit=total_price) -# Payable Line -if not invoice.hasObject('payable'): - payable = invoice.newContent(portal_type="Sale Invoice Transaction Line", id='payable') -else: - payable = context.payable -payable.edit(source='account/creance_client', destination='dette_fournisseur', - source_debit=total_price + total_vat) - -# VAT Line -if not invoice.hasObject('vat'): - vat = invoice.newContent(portal_type="Sale Invoice Transaction Line", id='vat') -else: - vat = context.vat -vat.edit(source='account/tva_collectee_196', destination='account/tva_recuperable_196', - source_credit=total_vat) diff --git a/product/Coramy/skins/coramy_trade/SalesOrder_confirmList.py b/product/Coramy/skins/coramy_trade/SalesOrder_confirmList.py deleted file mode 100755 index 0804d84d2e..0000000000 --- a/product/Coramy/skins/coramy_trade/SalesOrder_confirmList.py +++ /dev/null @@ -1,77 +0,0 @@ -## Script (Python) "SalesOrder_confirmList" -##bind container=container -##bind context=context -##bind namespace= -##bind script=script -##bind subpath=traverse_subpath -##parameters=start_date=None, stop_date=None,batch_mode=0,**kw -##title= -## -# confirm the selection of Sales Order -request = context.REQUEST - -object_list = context.object_action_list(selection_name='sales_order_selection') - -confirmed_order_number = 0 -confirmed_order_list = ' ' - -not_confirmed_order_number = 0 -not_confirmed_order_list = ' ' - -uid_list = [] - -for order in object_list: - - simulation_state = order.getSimulationState() - if (simulation_state == 'planned' or simulation_state == 'ordered'): - - error_message = order.Order_heavyControl() - if error_message == '': - - # we give local_roles to the users - user_name = '' - user_name = order.getSourceAdministrationTitle().replace(' ','_') - order.assign_gestionaire_designe_roles(user_name = user_name) - - if start_date != None: - order.setStartDate(start_date) - if stop_date != None: - order.setStopDate(stop_date) - - - - # set the transition_state to 'confirmed' - order.confirm() - - #order.flushActivity(invoke=1) - - confirmed_order_number += 1 - confirmed_order_list += order.getId()+' ' - else: - not_confirmed_order_number += 1 - not_confirmed_order_list += order.getId()+' ' - - uid_list.append(order.getUid()) - - elif (simulation_state == 'draft'): - not_confirmed_order_number += 1 - not_confirmed_order_list += order.getId()+' ' - - uid_list.append(order.getUid()) - - -# and this is the end .... -if batch_mode: - return None -else: - """ - redirect_url = '%s?%s%i%s' % ( context.absolute_url()+'/'+'view', 'portal_status_message=',not_confirmed_order_number,'+Commandes+ventes+non+confirmées:'+not_confirmed_order_list+'\n') - request[ 'RESPONSE' ].redirect( redirect_url ) - """ - if not_confirmed_order_number == 0: - redirect_url = '%s?%s%i%s' % ( context.absolute_url()+'/'+'view', 'portal_status_message=',confirmed_order_number,'+Commandes+ventes+confirmées.') - else: - context.portal_selections.setSelectionToIds('sales_order_selection', uid_list, REQUEST=request) - redirect_url = '%s?%s%i%s' % ( context.absolute_url()+'/'+'view', 'portal_status_message=',not_confirmed_order_number,'+Commandes+ventes+non+confirmées.') - - request[ 'RESPONSE' ].redirect( redirect_url ) diff --git a/product/Coramy/skins/coramy_trade/SalesOrder_confirmListForm.form b/product/Coramy/skins/coramy_trade/SalesOrder_confirmListForm.form deleted file mode 100755 index 9fc5687d49..0000000000 --- a/product/Coramy/skins/coramy_trade/SalesOrder_confirmListForm.form +++ /dev/null @@ -1,80 +0,0 @@ -<?xml version="1.0"?> - -<form> - <title>Confirmer les commandes</title> - <row_length>4</row_length> - <name>SalesOrder_confirmListForm</name> - <pt>form_view_dialog</pt> - <action>SalesOrder_confirmList</action> - <method>POST</method> - <enctype></enctype> - <encoding>UTF-8</encoding> - <stored_encoding>ISO-8859-1</stored_encoding> - <unicode_mode>false</unicode_mode> - <groups> - <group> - <title>Default</title> - <fields> - - <field><id>my_start_date</id> <type>DateTimeField</type> - <values> - <allow_empty_time type="int">0</allow_empty_time> - <alternate_name></alternate_name> - <ampm_time_style type="int">0</ampm_time_style> - <css_class></css_class> - <date_only type="int">1</date_only> - <date_separator>/</date_separator> - <default_now type="int">0</default_now> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <hidden type="int">0</hidden> - <input_order>dmy</input_order> - <input_style>text</input_style> - <required type="int">0</required> - <time_separator>:</time_separator> - <title>Date d'expédition confirmée</title> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="not_datetime">You did not enter a valid date and time.</message> - <message name="datetime_out_of_range">The date and time you entered were out of range.</message> - </messages> - </field> - <field><id>my_stop_date</id> <type>DateTimeField</type> - <values> - <allow_empty_time type="int">0</allow_empty_time> - <alternate_name></alternate_name> - <ampm_time_style type="int">0</ampm_time_style> - <css_class></css_class> - <date_only type="int">1</date_only> - <date_separator>/</date_separator> - <default_now type="int">0</default_now> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <hidden type="int">0</hidden> - <input_order>dmy</input_order> - <input_style>text</input_style> - <required type="int">0</required> - <time_separator>:</time_separator> - <title>Date de livraison confirmée</title> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="not_datetime">You did not enter a valid date and time.</message> - <message name="datetime_out_of_range">The date and time you entered were out of range.</message> - </messages> - </field> - </fields> - </group> - </groups> -</form> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_trade/SalesOrder_countEdiSales.py b/product/Coramy/skins/coramy_trade/SalesOrder_countEdiSales.py deleted file mode 100755 index 5bc5206ea0..0000000000 --- a/product/Coramy/skins/coramy_trade/SalesOrder_countEdiSales.py +++ /dev/null @@ -1,31 +0,0 @@ -## Script (Python) "SalesOrder_countEdiSales" -##bind container=container -##bind context=context -##bind namespace= -##bind script=script -##bind subpath=traverse_subpath -##parameters=**kw -##title= -## -# Count the number of EDI sales order - -number = 0 -number_object = 0 -number_sales_order = 0 - -object_list = context.object_action_list(selection_name='sales_order_selection') -for object in object_list: - number_object += 1 - if object.getPortalType() == 'Sales Order': - number_sales_order += 1 - print ':', - print object.getCommandeOrigine(), - if (object.getCommandeOrigine() == 'EDI'): - number += 1 - print object.getId() - -print '\n Total Commandes EDI: %i \n' % number -print '\n Total Commandes : %i \n' % number_object -print '\n Total Commandes Sales: %i \n' % number_sales_order - -return printed diff --git a/product/Coramy/skins/coramy_trade/SalesOrder_importEdi.py b/product/Coramy/skins/coramy_trade/SalesOrder_importEdi.py deleted file mode 100755 index 784d2eac3d..0000000000 --- a/product/Coramy/skins/coramy_trade/SalesOrder_importEdi.py +++ /dev/null @@ -1,289 +0,0 @@ -## Script (Python) "SalesOrder_importEdi" -##bind container=container -##bind context=context -##bind namespace= -##bind script=script -##bind subpath=traverse_subpath -##parameters=import_file, segmentation_strategique='2003-2004', incoterm='DAF',delivery_mode='Transporteur', order_type='Approvisionnement', travel_duration=0, batch_mode=0,user_name='',**kw -##title= -## -# import d'un fichier EDI -# format de fichier attendu -# Traduction .rec du fichier Edifact par NY Net - - - -from DateTime import DateTime - - -# link between NYNet alias table and python import script -edi_import_script_dict = { - # 'NYNet alias table name' : import script - 'CAR-ORD':context.SalesOrder_importEdiCarrefour, - 'ORDAUCHAAUCHAN':context.SalesOrder_importEdiAuchan, - 'ORDAUCHA':context.SalesOrder_importEdiAuchan -} - - -try: - # read the NY Net file - file_line_list = import_file.readlines() - - alias_table_name = string.split(file_line_list[0].split(':',1)[1])[0] - import_script = edi_import_script_dict[alias_table_name] -except: - #return None - return (None,None) - - - -def setLog(item, comment): - item_comment = item.getComment() - if item.comment != None: - item.setComment(item_comment + comment) - else: - item.setComment(comment) - -# create a new sales order -item_module = context.getPortalObject().commande_vente -my_id = str(context.getObject().generateNewId()) - -context.portal_types.constructContent( - type_name = 'Sales Order', - container = item_module, - id = my_id, - date_reception = DateTime() -) - -sales_order = item_module[my_id] - - - -# set some fields -sales_order.setCommandeOrigine('EDI') -#sales_order.setComment('Commentaires générés par l import EDI du fichier: \n') -setLog(sales_order ,'Commentaires générés par l import EDI du fichier ' + import_file.filename + ' :\n') -setLog(sales_order ,'Sales Order ID: ' + my_id + '\n') - -sales_order.setSegmentationStrategique(segmentation_strategique) -sales_order.setDeliveryMode(delivery_mode) -sales_order.setIncoterm(incoterm) -sales_order.setOrderType(order_type) - - -# set the source administration -#local_user = container.portal_membership.getAuthenticatedMember() -#local_user_name = string.replace(local_user.getUserName(), '_', ' ') -local_user_name = string.replace(user_name, '_', ' ') -local_persons = sales_order.item_by_title_sql_search(title = local_user_name, portal_type = 'Person') -if len(local_persons) > 0: - sales_order.setSourceAdministration(local_persons[0].relative_url) - - -# some useful functions ... -def link_with_organisation(code_ean13, link_function, portal_type_name): - result = context.item_by_ean13_code_sql_search(organisation_ean = code_ean13, portal_type = portal_type_name) - try: - if len(result) == 1: - link_function( result[0].relative_url ) - - else: - raise IndexError - except IndexError: - setLog(sales_order, 'Erreur sur le code EAN d une societe:\n\tCode EAN: ' + code_ean13 + '\n') - -def link_with_organisation_group(code_ean13, link_function, portal_type_name): - result = context.item_by_ean13_code_sql_search(organisation_ean = code_ean13, portal_type = portal_type_name) - try: - if len(result) == 1: - link_function( 'group/'+result[0].getObject().getGroup() ) - - else: - raise IndexError - except IndexError: - setLog(sales_order, 'Erreur sur le code EAN d un groupe:\n\tCode EAN: ' + code_ean13 + '\n') - - -def modele_search(code_ean13): - result = context.item_by_ean13_code_sql_search(organisation_ean = code_ean13, portal_type = 'Set Mapped Value') - try: - if len(result) == 1: - result_object = result[0].getObject() - else: - raise IndexError - except IndexError: - result_object = None - else: - return result_object - -# dictionnary of those functions, in order to give them to the import script -useful_functions = { - 'modele_search':modele_search, - 'link_with_organisation':link_with_organisation, - 'link_with_organisation_group':link_with_organisation_group -} - - - -request = context.REQUEST - -# item of products_list: tuple (product_ean13_code, [[quantity, price], ...]) -products_list = [] - -# read each line of the file -for file_line in file_line_list : - # save the line in the comment - #item_module[my_id].setComment(sales_order.getComment()+file_line) - # get the line header - sub_line_list = file_line.split(':',1) - line_header = sub_line_list[0] - # separate the arguments - line_item_list = string.split(sub_line_list[1]) - # call the adequat function - try: - import_script(line_header, line_item_list, sales_order, products_list , useful_functions) - except KeyError: - #sales_order.setComment(sales_order.getComment() + 'Erreur sur la lecture d une ligne:\n\t' + file_line ) - setLog(sales_order, 'Erreur sur la lecture d une ligne:\n\t' + file_line ) - - -# create a dictionary of the desired resource -# { modele_relative_url : [ ( [ predicate_value_list ] , quantity , price ), (...), ...] , ...} -desired_lines = {} -for product in products_list: - try: - # must be a 'Set Mapped Value' - product_item = modele_search(product[0]).getObject() - except: - setLog(sales_order, 'Erreur sur un modèle ! \n\tCode EAN: ' + product[0] + '\n') - else: - # parent: must be a 'Variated Reference' - father_uid = product_item.getParentUid() - father_obj = context.portal_catalog.getObject(father_uid) - - # grand parent: must be a 'Modele' - grand_father_uid = father_obj.getParentUid() - grand_father_obj = context.portal_catalog.getObject(grand_father_uid) - - grand_father_url = grand_father_obj.getRelativeUrl() - - # calculate the number of piece - total_quantity = 0 - price = '0' - for qty in product[1]: - price = qty[1] - total_quantity += string.atoi( qty[0] ) - - total_quantity = "%i" % total_quantity - - - if grand_father_url in desired_lines.keys(): - - # test if the predicateValueList exists - predicate_value_list = product_item.getPredicateValueList() - trouve = 0 - for tuple in desired_lines[ grand_father_url ]: - if predicate_value_list == tuple[0]: - setLog(sales_order, 'Erreur sur un modèle: 2 codes EAN represente le meme modele: \n\t ' + grand_father_url + ' ' ) - - for predicate_value in predicate_value_list: - setLog(sales_order, predicate_value + ' ' ) - - setLog(sales_order, '\n' ) - trouve = 1 - - if trouve == 0: - # predicate_value_list : variante de la SetMappedValue - desired_lines[ grand_father_url ].append((product_item.getPredicateValueList(), total_quantity , price)) - - else: - desired_lines[ grand_father_url ] = [ ((product_item.getPredicateValueList(), total_quantity , price )) ] - - -for modele_relative_url in desired_lines.keys(): - - - # compute variation_base_category_list and variation_category_list for this line - line_variation_base_category_dict = {} - line_variation_category_list = [] - - for my_tuple in desired_lines[ modele_relative_url ] : - - for variation_item in my_tuple[0] : - - if not variation_item in line_variation_category_list : - line_variation_category_list.append(variation_item) - variation_base_category_items = variation_item.split('/') - if len(variation_base_category_items) > 0 : - line_variation_base_category_dict[variation_base_category_items[0]] = 1 - - line_variation_base_category_list = line_variation_base_category_dict.keys() - - - - # construct new sales order lines - sales_order_line_id = str(sales_order.generateNewId()) - - # sur le folder, newContent - sales_order_line = sales_order.newContent( - portal_type = "Sales Order Line", - resource = modele_relative_url, - id = sales_order_line_id, - comment = '' - ) - - sales_order_line.setResource(modele_relative_url) - sales_order_line.setVariationBaseCategoryList(line_variation_base_category_list) - sales_order_line.setVariationCategoryList(line_variation_category_list) - - #sales_order_line_cell_list = sales_order_line.contentValues() - sales_order_line_cell_list = sales_order_line.objectValues() - - for my_tuple in desired_lines[ modele_relative_url ] : - quantity_updated = 0 - - for sales_order_line_cell in sales_order_line_cell_list : - if sales_order_line_cell.test(context.asContext(categories=my_tuple[0])): - sales_order_line_cell.setTargetQuantity(my_tuple[1]) - sales_order_line_cell.setPrice(my_tuple[2]) - sales_order_line_cell.flushActivity(invoke=1) - quantity_updated = 1 - break - # if no cell according to variation_category_list was found - # or no variation at all, we update the container_line - if not quantity_updated : - sales_order_line.setTargetQuantity(my_tuple[1]) - sales_order_line.flushActivity(invoke=1) - - - - -# set the target start date -if sales_order.getTargetStartDate() == None: - try: - sales_order.setTargetStartDate( sales_order.getTargetStopDate() - travel_duration ) - except TypeError: - None - -setLog(sales_order, 'Fin des commentaires générés par l import EDI.\n') - -sales_order.flushActivity(invoke=1) - - - -# try to apply a sale condition -sales_order.sales_order_apply_condition(my_id, 1) - -# change the workflow to create the sales packing list -# give the role to user -sales_order.Item_doWorkflowTransition(workflow_action='user_order', workflow_id='order_workflow') -#sales_order.flushActivity(invoke=1) -sales_order.Item_doWorkflowTransition(workflow_action='user_confirm', workflow_id='order_workflow') - -# and this is the end .... -if batch_mode: - #return sales_order.getComment() - return (sales_order.getId(),sales_order.getComment()) -else: - redirect_url = '%s?%s' % ( item_module.absolute_url()+'/'+my_id+'/'+'view', 'portal_status_message=Commande+Vente+créée.') - request[ 'RESPONSE' ].redirect( redirect_url ) diff --git a/product/Coramy/skins/coramy_trade/SalesOrder_importEdiAuchan.py b/product/Coramy/skins/coramy_trade/SalesOrder_importEdiAuchan.py deleted file mode 100755 index 5c9d230921..0000000000 --- a/product/Coramy/skins/coramy_trade/SalesOrder_importEdiAuchan.py +++ /dev/null @@ -1,145 +0,0 @@ -## Script (Python) "SalesOrder_importEdiAuchan" -##bind container=container -##bind context=context -##bind namespace= -##bind script=script -##bind subpath=traverse_subpath -##parameters=line_header, argument, item_sales_order, products_list, useful_functions, **kw -##title= -## -# import d'un fichier EDI Auchan -# format de fichier attendu -# Traduction .rec du fichier Edifact par NY Net - -def read_START(argument, item_sales_order, products_list ): - item_sales_order.setGroup('Auchan International/Auchan France') - """ - # recuperation du client et du destinataire - functions = ( - (argument[2], item_sales_order.setSourceSection), - (argument[3], item_sales_order.setDestinationDecision) - ) - for tuple in functions: - useful_functions['link_with_organisation'](tuple[0], tuple[1], 'Organisation') - """ - -def read_ALC_DEDUCTION_FRAIS(argument, item_sales_order, products_list ): - None - -def read_BGM_TYPE_DOCUMENT(argument, item_sales_order, products_list ): - # nothing interesting to get - None - -def read_BGM_NUMERO_DOCUMENT(argument, item_sales_order, products_list ): - item_sales_order.setDestinationReference(argument[0]) - -def read_CNT_TOTAL_CONTROLE(argument, item_sales_order, products_list ): - None -def read_CUX_MONNAIE(argument, item_sales_order, products_list ): - # nothing interesting to get - item_sales_order.setPriceCurrency('devise/'+'EUR') - None - -def read_DTM_DATE_COMMANDE(argument, item_sales_order, products_list ): - # nothing interesting to get - None -def read_DTM_DATE_DEPART(argument, item_sales_order, products_list ): - date = argument[1][:4] + '/' + argument[1][4:6] + '/' + argument[1][6:8] - item_sales_order.setTargetStopDate(date) - -def read_DTM_DATE_LIVRAISON(argument, item_sales_order, products_list ): - date = argument[1][:4] + '/' + argument[1][4:6] + '/' + argument[1][6:8] - item_sales_order.setTargetStopDate(date) - -def read_DTM_DATE_REFERENCE(argument, item_sales_order, products_list ): - None - -def read_LIN_ARTICLE(argument, item_sales_order, products_list ): - # get ean13 code - products_list.append( (argument[0], []) ) - - -def read_LOC_EMPLACEMENT(argument, item_sales_order, products_list ): - None -def read_MEA_MESURES(argument, item_sales_order, products_list ): - None -def read_MOA_MONTANT_REMISE(argument, item_sales_order, products_list ): - None -def read_NAD_ACHETEUR(argument, item_sales_order, products_list ): - #useful_functions['link_with_organisation'](argument[0], item_sales_order.setDestinationPayment , 'Organisation') - useful_functions['link_with_organisation'](argument[0], item_sales_order.setDestinationDecision, 'Organisation') - -def read_NAD_FOURNISSEUR(argument, item_sales_order, products_list ): - #useful_functions['link_with_organisationGroup'](argument[0], item_sales_order.setSourceSection, 'Organisation') - useful_functions['link_with_organisation_group'](argument[0], item_sales_order.setSourceSection, 'Organisation') - -def read_NAD_LIEU_LIVRAISON(argument, item_sales_order, products_list ): - # code EAN inconnu de Coramy, solution temporaire ... - item_sales_order.setDestination(item_sales_order.getDestinationDecision()) - - #useful_functions['link_with_organisation'](argument[0], item_sales_order.setDestination, 'Organisation') - -def read_PAC_EMBALLAGE(argument, item_sales_order, products_list ): - None -def read_PCD_POURCENTAGE(argument, item_sales_order, products_list ): - None -def read_PIA_COMPLEMENT_PRODUI(argument, item_sales_order, products_list ): - None -def read_PRI_PRIX_UNIT_NET(argument, item_sales_order, products_list ): - list_tuple = products_list[ len(products_list) - 1 ][1] - list_tuple[ len(list_tuple) - 1 ][1] = argument[0] - -def read_QTY_PAR_COMBIEN(argument, item_sales_order, products_list ): - None -def read_QTY_QUANTITE_CDE(argument, item_sales_order, products_list ): - #products_list[ len(products_list) - 1 ][1].append( (argument[0],) ) - products_list[ len(products_list) - 1 ][1].append( [argument[0],None] ) - -def read_QTY_QUANTITE_GRATUITE(argument, item_sales_order, products_list ): - None -def read_RFF_REFERENCE_OPERATI(argument, item_sales_order, products_list ): - None -def read_TDT_TRANSPORT(argument, item_sales_order, products_list ): - None -def read_TOD_CONDITION_LIVRAIS(argument, item_sales_order, products_list ): - None -def read_UNH_ENTETE_COMMANDE(argument, item_sales_order, products_list ): - # nothing interesting to get - None -def read_UNS_SECTION_MESSAGE(argument, item_sales_order, products_list ): - None - -# dictionary of the functions -functions_list = { - 'START':read_START, - 'ALC_DEDUCTION_FRAIS__':read_ALC_DEDUCTION_FRAIS, - 'BGM_TYPE_DOCUMENT____':read_BGM_TYPE_DOCUMENT, - 'BGM_NUMERO_DOCUMENT__':read_BGM_NUMERO_DOCUMENT, - 'CNT_TOTAL_CONTROLE___':read_CNT_TOTAL_CONTROLE, - 'CUX_MONNAIE__________':read_CUX_MONNAIE, - 'DTM_DATE_COMMANDE____':read_DTM_DATE_COMMANDE, - 'DTM_DATE_DEPART______':read_DTM_DATE_DEPART, - 'DTM_DATE_LIVRAISON___':read_DTM_DATE_LIVRAISON, - 'DTM_DATE_REFERENCE___':read_DTM_DATE_REFERENCE, - 'LIN_ARTICLE__________':read_LIN_ARTICLE, - 'LOC_EMPLACEMENT______':read_LOC_EMPLACEMENT, - 'MEA_MESURES__________':read_MEA_MESURES, - 'MOA_MONTANT_REMISE___':read_MOA_MONTANT_REMISE, - 'NAD_ACHETEUR_________':read_NAD_ACHETEUR, - 'NAD_FOURNISSEUR______':read_NAD_FOURNISSEUR, - 'NAD_LIEU_LIVRAISON___':read_NAD_LIEU_LIVRAISON, - 'PAC_EMBALLAGE________':read_PAC_EMBALLAGE, - 'PCD_POURCENTAGE______':read_PCD_POURCENTAGE, - 'PIA_COMPLEMENT_PRODUI':read_PIA_COMPLEMENT_PRODUI, - 'PRI_PRIX_UNIT_NET____':read_PRI_PRIX_UNIT_NET, - 'QTY_PAR_COMBIEN______':read_QTY_PAR_COMBIEN, - 'QTY_QUANTITE_CDE_____':read_QTY_QUANTITE_CDE, - 'QTY_QUANTITE_GRATUITE':read_QTY_QUANTITE_GRATUITE, - 'RFF_REFERENCE_OPERATI':read_RFF_REFERENCE_OPERATI, - 'TDT_TRANSPORT________':read_TDT_TRANSPORT, - 'TOD_CONDITION_LIVRAIS':read_TOD_CONDITION_LIVRAIS, - 'UNH_ENTETE_COMMANDE__':read_UNH_ENTETE_COMMANDE, - 'UNS_SECTION_MESSAGE__':read_UNS_SECTION_MESSAGE -} -# execute a function -functions_list[line_header](argument, item_sales_order, products_list ) diff --git a/product/Coramy/skins/coramy_trade/SalesOrder_importEdiCarrefour.py b/product/Coramy/skins/coramy_trade/SalesOrder_importEdiCarrefour.py deleted file mode 100755 index b4462556ce..0000000000 --- a/product/Coramy/skins/coramy_trade/SalesOrder_importEdiCarrefour.py +++ /dev/null @@ -1,112 +0,0 @@ -## Script (Python) "SalesOrder_importEdiCarrefour" -##bind container=container -##bind context=context -##bind namespace= -##bind script=script -##bind subpath=traverse_subpath -##parameters=line_header, argument, item_sales_order, products_list, useful_functions, **kw -##title= -## -# import d'un fichier EDI Carrefour -# format de fichier attendu -# Traduction .rec du fichier Edifact par NY Net - - -def read_START(argument, item_sales_order, products_list ): - item_sales_order.setGroup('Carrefour International/Carrefour France') - # recuperation du client et du destinataire - functions = ( - (argument[2], item_sales_order.setSourceSection), - (argument[3], item_sales_order.setDestinationDecision) - ) - - for tuple in functions: - useful_functions['link_with_organisation'](tuple[0], tuple[1], 'Organisation') - - - -def read_UNH(argument, item_sales_order, products_list ): - None - -def read_BGM(argument, item_sales_order, products_list ): - item_sales_order.setDestinationReference(argument[1]) - - - - -def read_DTM(argument, item_sales_order, products_list ): - date = argument[1][:4] + '/' + argument[1][4:6] + '/' + argument[1][6:8] - - case = { - '2':item_sales_order.setTargetStopDate, - # date livraison demandee - '137':None, - # date du document - '200':None - # date enlevement cargaison - } - if case[argument[0]] != None: - case[argument[0]](date) - -def read_NAD(argument, item_sales_order, products_list ): - case = { - #'BY':item_sales_order.setDestinationPayment , - 'BY':item_sales_order.setDestinationDecision, - # acheteur - 'SU':item_sales_order.setSourceSection , - # fournisseur - # source_section - 'DP':item_sales_order.setDestination - # intervenant a livrer - # destination - } - - useful_functions['link_with_organisation'](argument[1], case[argument[0]], 'Organisation') - - -def read_CUX(argument, item_sales_order, products_list ): - if argument[2] == '9': - item_sales_order.setPriceCurrency('devise/'+argument[1]) - -def read_TDT(argument, item_sales_order, products_list ): - #item_sales_order.setDeliveryMode(.....) - # nothing interesting to get - None - -def read_LIN(argument, item_sales_order, products_list ): - # get ean13 code - products_list.append( (argument[0], []) ) - None - -def read_IMD(argument, item_sales_order, products_list ): - # nothing interesting to get - None - -def read_QTY(argument, item_sales_order, products_list ): - products_list[ len(products_list) - 1 ][1].append( [argument[1], None] ) - -def read_PRI(argument, item_sales_order, products_list ): - list_tuple = products_list[ len(products_list) - 1 ][1] - list_tuple[ len(list_tuple) - 1 ][1] = argument[0] - -def read_UNS(argument, item_sales_order, products_list ): - None - -# dictionary of the functions -functions_list = { - 'START':read_START, - 'UNH':read_UNH, - 'BGM':read_BGM, - 'DTM':read_DTM, - 'NAD':read_NAD, - 'CUX':read_CUX, - 'TDT':read_TDT, - 'LIN':read_LIN, - 'IMD':read_IMD, - 'QTY':read_QTY, - 'PRI':read_PRI, - 'UNS':read_UNS -} - -# execute a function -functions_list[line_header](argument, item_sales_order, products_list ) diff --git a/product/Coramy/skins/coramy_trade/SalesOrder_importEdiFileList.py b/product/Coramy/skins/coramy_trade/SalesOrder_importEdiFileList.py deleted file mode 100755 index d13ced5680..0000000000 --- a/product/Coramy/skins/coramy_trade/SalesOrder_importEdiFileList.py +++ /dev/null @@ -1,22 +0,0 @@ -## Script (Python) "SalesOrder_importEdiFileList" -##bind container=container -##bind context=context -##bind namespace= -##bind script=script -##bind subpath=traverse_subpath -##parameters=file_path=None, delivery_mode=None, incoterm=None, order_type=None, segmentation_strategique=None, travel_duration=None, batch_mode=0 -##title= -## -user_name = context.portal_membership.getAuthenticatedMember().getUserName() - -request = context.REQUEST - - -context.activate(activity="SQLQueue").SalesOrder_importEdiFileListTestAndStart(delivery_mode=delivery_mode, incoterm=incoterm, order_type=order_type, segmentation_strategique=segmentation_strategique, travel_duration=travel_duration, user_name=user_name ) - -redirect_url = '%s?%s' % ( context.absolute_url()+'/'+'view', 'portal_status_message=Import+des+fichiers+EDI+lancé.') - -if batch_mode: - return None -else: - request[ 'RESPONSE' ].redirect( redirect_url ) diff --git a/product/Coramy/skins/coramy_trade/SalesOrder_importEdiForm.form b/product/Coramy/skins/coramy_trade/SalesOrder_importEdiForm.form deleted file mode 100755 index 6cf26b0f90..0000000000 --- a/product/Coramy/skins/coramy_trade/SalesOrder_importEdiForm.form +++ /dev/null @@ -1,209 +0,0 @@ -<?xml version="1.0"?> - -<form> - <title>Importer</title> - <row_length>4</row_length> - <name>SalesOrder_importEdiForm</name> - <pt>form_dialog</pt> - <action>SalesOrder_importEdiFileList</action> - <method>POST</method> - <enctype>multipart/form-data</enctype> - <encoding>UTF-8</encoding> - <stored_encoding>ISO-8859-1</stored_encoding> - <unicode_mode>false</unicode_mode> - <groups> - <group> - <title>Default</title> - <fields> - - <field><id>my_delivery_mode</id> <type>ListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <editable_expression></editable_expression> - <editable_permission></editable_permission> - <editable_role></editable_role> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <extra_item></extra_item> - <first_item type="int">0</first_item> - <hidden type="int">0</hidden> - <items type="list">[]</items> - <not_viewable type="int">0</not_viewable> - <read_only type="int">0</read_only> - <required type="int">0</required> - <size type="int">1</size> - <title>Mode de livraison</title> - <unicode type="int">0</unicode> - <viewable_expression></viewable_expression> - <viewable_permission></viewable_permission> - <viewable_role></viewable_role> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <default>python:here.portal_categories.delivery_mode.getFormItemList()[1][1]</default> - <items>here/portal_categories/delivery_mode/getFormItemList</items> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - <field><id>my_incoterm</id> <type>ListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <editable_expression></editable_expression> - <editable_permission></editable_permission> - <editable_role></editable_role> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <extra_item></extra_item> - <first_item type="int">0</first_item> - <hidden type="int">0</hidden> - <items type="list">[]</items> - <not_viewable type="int">0</not_viewable> - <read_only type="int">0</read_only> - <required type="int">0</required> - <size type="int">1</size> - <title>Incoterm</title> - <unicode type="int">0</unicode> - <viewable_expression></viewable_expression> - <viewable_permission></viewable_permission> - <viewable_role></viewable_role> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <default>python:here.portal_categories.incoterm.getCategoryChildItemList(display_id = 'getTitle', display_none_category=1)[1][1]</default> - <items>python:here.portal_categories.incoterm.getCategoryChildItemList(display_id = 'getTitle', display_none_category=1)</items> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - <field><id>my_order_type</id> <type>ListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <editable_expression></editable_expression> - <editable_permission></editable_permission> - <editable_role></editable_role> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <extra_item></extra_item> - <first_item type="int">0</first_item> - <hidden type="int">0</hidden> - <items type="list">[]</items> - <not_viewable type="int">0</not_viewable> - <read_only type="int">0</read_only> - <required type="int">0</required> - <size type="int">1</size> - <title>Type de commande</title> - <unicode type="int">0</unicode> - <viewable_expression></viewable_expression> - <viewable_permission></viewable_permission> - <viewable_role></viewable_role> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <default>python:here.portal_categories.order_type.getFormItemList()[1][1]</default> - <items>here/portal_categories/order_type/getFormItemList</items> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - <field><id>my_segmentation_strategique</id> <type>ListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <editable_expression></editable_expression> - <editable_permission></editable_permission> - <editable_role></editable_role> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <extra_item></extra_item> - <first_item type="int">0</first_item> - <hidden type="int">0</hidden> - <items type="list">[]</items> - <not_viewable type="int">0</not_viewable> - <read_only type="int">0</read_only> - <required type="int">0</required> - <size type="int">1</size> - <title>Segmentation</title> - <unicode type="int">0</unicode> - <viewable_expression></viewable_expression> - <viewable_permission></viewable_permission> - <viewable_role></viewable_role> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <default>python:here.portal_categories.segmentation_strategique.getFormItemList()[1][1]</default> - <items>here/portal_categories/segmentation_strategique/getFormItemList</items> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - <field><id>my_travel_duration</id> <type>IntegerField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <end></end> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <required type="int">0</required> - <start></start> - <title>Durée de l'expédition (jours)</title> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <default>python: 0</default> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="not_integer">You did not enter an integer.</message> - <message name="integer_out_of_range">The integer you entered was out of range.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>hidden</title> - <fields> - - </fields> - </group> - </groups> -</form> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_trade/SalesOrder_orderList.py b/product/Coramy/skins/coramy_trade/SalesOrder_orderList.py deleted file mode 100755 index ea998f0b74..0000000000 --- a/product/Coramy/skins/coramy_trade/SalesOrder_orderList.py +++ /dev/null @@ -1,70 +0,0 @@ -## Script (Python) "SalesOrder_orderList" -##bind container=container -##bind context=context -##bind namespace= -##bind script=script -##bind subpath=traverse_subpath -##parameters=batch_mode=0,**kw -##title= -## -# order the selection of Sales Order -request = context.REQUEST - -object_list = context.object_action_list(selection_name='sales_order_selection') - -ordered_order_number = 0 -ordered_order_list = ' ' - -not_ordered_order_number = 0 -not_ordered_order_list = ' ' - -uid_list = [] - -for order in object_list: - - simulation_state = order.getSimulationState() - if (simulation_state == 'planned' or simulation_state == 'draft'): - - error_message = order.Order_lightControl() - if error_message == '': - - # we give local_roles to the users - user_name = '' - user_name = order.getSourceAdministrationTitle().replace(' ','_') - order.assign_gestionaire_designe_roles(user_name = user_name) - - - # set the transition_state to 'ordered' - order.order() - - #order.flushActivity(invoke=1) - - ordered_order_number += 1 - ordered_order_list += order.getId()+' ' - - else: - not_ordered_order_number += 1 - not_ordered_order_list += order.getId()+' ' - - uid_list.append(order.getUid()) - - else: - """ - not_ordered_order_number += 1 - not_ordered_order_list += order.getId()+' ' - - uid_list.append(order.getUid()) - """ - None - -# and this is the end .... -if batch_mode: - return None -else: - if not_ordered_order_number == 0: - redirect_url = '%s?%s%i%s' % ( context.absolute_url()+'/'+'view', 'portal_status_message=',ordered_order_number,'+Commandes+ventes+validées.') - else: - context.portal_selections.setSelectionToIds('sales_order_selection', uid_list, REQUEST=request) - redirect_url = '%s?%s%i%s' % ( context.absolute_url()+'/'+'view', 'portal_status_message=',not_ordered_order_number,'+Commandes+ventes+non+validées.') - - request[ 'RESPONSE' ].redirect( redirect_url ) diff --git a/product/Coramy/skins/coramy_trade/SalesOrder_reportByClient.py b/product/Coramy/skins/coramy_trade/SalesOrder_reportByClient.py deleted file mode 100755 index 0ab70e0c23..0000000000 --- a/product/Coramy/skins/coramy_trade/SalesOrder_reportByClient.py +++ /dev/null @@ -1,38 +0,0 @@ -## Script (Python) "SalesOrder_reportByClient" -##bind container=container -##bind context=context -##bind namespace= -##bind script=script -##bind subpath=traverse_subpath -##parameters=source_section -##title= -## -request = context.REQUEST -cr = '\r' -tab = '\t' -report = 'Client' + 5*tab + 'Quantite' + tab + 'Prix total' + cr - -source_section_item_list = source_section.split('.') -source_section_object = context.portal_categories.group -for source_item in source_section_item_list : - source_section_object = source_section_object[source_item] - -report_list = context.SalesOrder_zReportByClient(source_section_uid=source_section_object.getUid()) - -for report_item in report_list : - if report_item.client is None : - report += '' + 5*tab - else : - client_item_list = report_item.client.split('/') - compteur = 0 - for client_item in client_item_list : - report += client_item + tab - compteur +=1 - for i in range(5-compteur) : - report += tab - report += str(report_item.quantity).replace('.',',') + tab - report += str(report_item.total_price).replace('.',',') + cr - -request.RESPONSE.setHeader('Content-Type','application/text') - -return report diff --git a/product/Coramy/skins/coramy_trade/SalesOrder_reportByClientForm.form b/product/Coramy/skins/coramy_trade/SalesOrder_reportByClientForm.form deleted file mode 100755 index 9e5b59fb70..0000000000 --- a/product/Coramy/skins/coramy_trade/SalesOrder_reportByClientForm.form +++ /dev/null @@ -1,47 +0,0 @@ -<?xml version="1.0" encoding="iso-8859-1"?> - -<form> - <title>Exporter</title> - <name>SalesOrder_reportByResourceForm</name> - <action>SalesOrder_reportByClient</action> - <enctype></enctype> - <method>POST</method> - <pt>form_view_dialog</pt> - - <groups> - <group> - <title>Default</title> - <fields> - - <field><id>my_source_section</id> <type>RadioField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <external_validator></external_validator> - <first_item type="int">1</first_item> - <hidden type="int">0</hidden> - <items type="list">[('Coramy', 'Coramy'), ('BLS', 'Coramy.BLS'), ('Houvenaegel', 'Coramy.Houvenaegel')]</items> - <orientation>vertical</orientation> - <required type="int">1</required> - <title>Société</title> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>hidden</title> - <fields> - - </fields> - </group> - </groups> -</form> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_trade/SalesOrder_reportByResource.py b/product/Coramy/skins/coramy_trade/SalesOrder_reportByResource.py deleted file mode 100755 index a3f5a3081c..0000000000 --- a/product/Coramy/skins/coramy_trade/SalesOrder_reportByResource.py +++ /dev/null @@ -1,29 +0,0 @@ -## Script (Python) "SalesOrder_reportByResource" -##bind container=container -##bind context=context -##bind namespace= -##bind script=script -##bind subpath=traverse_subpath -##parameters=source_section -##title= -## -request = context.REQUEST -cr = '\r' -tab = '\t' -report = 'Produit' + tab + 'Quantite' + tab + 'Prix total' + cr - -source_section_item_list = source_section.split('.') -source_section_object = context.portal_categories.group -for source_item in source_section_item_list : - source_section_object = source_section_object[source_item] - -report_list = context.SalesOrder_zReportByResource(source_section_uid=source_section_object.getUid()) - -for report_item in report_list : - report += report_item.resource_id + tab - report += str(report_item.quantity).replace('.',',') + tab - report += str(report_item.total_price).replace('.',',') + cr - -request.RESPONSE.setHeader('Content-Type','application/text') - -return report diff --git a/product/Coramy/skins/coramy_trade/SalesOrder_reportByResourceForm.form b/product/Coramy/skins/coramy_trade/SalesOrder_reportByResourceForm.form deleted file mode 100755 index 9329ab9c3e..0000000000 --- a/product/Coramy/skins/coramy_trade/SalesOrder_reportByResourceForm.form +++ /dev/null @@ -1,47 +0,0 @@ -<?xml version="1.0" encoding="iso-8859-1"?> - -<form> - <title>Exporter</title> - <name>SalesOrder_reportByResourceForm</name> - <action>SalesOrder_reportByResource</action> - <enctype></enctype> - <method>POST</method> - <pt>form_view_dialog</pt> - - <groups> - <group> - <title>Default</title> - <fields> - - <field><id>my_source_section</id> <type>RadioField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <external_validator></external_validator> - <first_item type="int">1</first_item> - <hidden type="int">0</hidden> - <items type="list">[('Coramy', 'Coramy'), ('BLS', 'Coramy.BLS'), ('Houvenaegel', 'Coramy.Houvenaegel')]</items> - <orientation>vertical</orientation> - <required type="int">1</required> - <title>Société</title> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>hidden</title> - <fields> - - </fields> - </group> - </groups> -</form> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_trade/SalesOrder_searchByClientGroup.form b/product/Coramy/skins/coramy_trade/SalesOrder_searchByClientGroup.form deleted file mode 100755 index 761c977990..0000000000 --- a/product/Coramy/skins/coramy_trade/SalesOrder_searchByClientGroup.form +++ /dev/null @@ -1,136 +0,0 @@ -<?xml version="1.0" encoding="iso-8859-1"?> - -<form> - <title>Rechercher</title> - <name>SalesOrder_searchByClientGroup</name> - <action>Base_searchHandler</action> - <enctype></enctype> - <method>POST</method> - <pt>form_view_dialog</pt> - - <groups> - <group> - <title>left</title> - <fields> - - <field><id>my_group_list</id> <type>MultiListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default type="list">[]</default> - <description></description> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <items type="list">[]</items> - <required type="int">0</required> - <size type="int">15</size> - <title>Organigramme</title> - </values> - <tales> - <items>here/portal_categories/group/getFormItemList</items> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - <field><id>my_reset</id> <type>CheckBoxField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default type="int">1</default> - <description></description> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <title>Recherche globale</title> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>right</title> - <fields> - - <field><id>my_state_list</id> <type>MultiListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default type="list">[]</default> - <description></description> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <items type="list">[('draft', 'draft'), ('planned', 'planned'), ('ordered', 'ordered'), ('confirmed', 'confirmed'), ('delivered', 'delivered')]</items> - <required type="int">0</required> - <size type="int">5</size> - <title>Etats</title> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - <field><id>my_list_method_id</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default>SalesOrder_zSearchByClientGroup</default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">1</hidden> - <max_length></max_length> - <required type="int">0</required> - <title>x</title> - <truncate type="int">0</truncate> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - <field><id>my_list_form_id</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">1</hidden> - <max_length></max_length> - <required type="int">0</required> - <title></title> - <truncate type="int">0</truncate> - </values> - <tales> - <default>python:here.REQUEST.form_id</default> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - </fields> - </group> - </groups> -</form> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_trade/SalesOrder_zReportByClient.zsql b/product/Coramy/skins/coramy_trade/SalesOrder_zReportByClient.zsql deleted file mode 100755 index 9d488d0db2..0000000000 --- a/product/Coramy/skins/coramy_trade/SalesOrder_zReportByClient.zsql +++ /dev/null @@ -1,36 +0,0 @@ -<dtml-comment> -title: -connection_id:MySQL -max_rows:100000 -max_cache:100 -cache_time:0 -class_name:ZSQLBrain -class_file:zsqlbrain.py -</dtml-comment> -<params>source_section_uid</params> -SELECT group_client.title AS client, sum(movement.quantity) AS quantity, sum(movement.total_price) AS total_price -FROM catalog AS sale_order, catalog AS order_line, category AS category_sc, movement -LEFT JOIN category AS category_group ON ( category_group.uid=sale_order.uid -AND category_group.base_category_uid = <dtml-var "portal_categories.group.uid"> -AND category_group.category_strict_membership = 1 ) -LEFT JOIN catalog AS group_client ON ( group_client.uid = category_group.category_uid ) - -WHERE sale_order.portal_type = "Sales Order" -AND ( order_line.portal_type = "Sales Order Line" -OR order_line.portal_type = "Delivery Cell" ) - -AND order_line.uid = movement.uid -AND movement.delivery_uid = sale_order.uid -AND movement.has_cell_content = 0 - -AND (sale_order.simulation_state = "planned" -OR sale_order.simulation_state = "ordered" -OR sale_order.simulation_state = "draft" -OR sale_order.simulation_state = "confirmed") - -AND category_sc.uid=sale_order.uid -AND category_sc.base_category_uid = <dtml-var "portal_categories.source_section.uid"> -AND category_sc.category_uid = <dtml-var source_section_uid> -AND category_sc.category_strict_membership = 1 - -GROUP BY group_client.title \ No newline at end of file diff --git a/product/Coramy/skins/coramy_trade/SalesOrder_zReportByResource.zsql b/product/Coramy/skins/coramy_trade/SalesOrder_zReportByResource.zsql deleted file mode 100755 index f50ba76391..0000000000 --- a/product/Coramy/skins/coramy_trade/SalesOrder_zReportByResource.zsql +++ /dev/null @@ -1,34 +0,0 @@ -<dtml-comment> -title: -connection_id:MySQL -max_rows:100000 -max_cache:100 -cache_time:0 -class_name:ZSQLBrain -class_file:zsqlbrain.py -</dtml-comment> -<params>source_section_uid</params> -SELECT resource.id AS resource_id, sum(movement.target_quantity) AS quantity, sum(movement.total_price) AS total_price -FROM catalog AS sale_order, catalog AS order_line, category AS category_sc, movement, catalog AS resource - -WHERE sale_order.portal_type = "Sales Order" -AND ( order_line.portal_type = "Sales Order Line" -OR order_line.portal_type = "Delivery Cell" ) - -AND order_line.uid = movement.uid -AND movement.delivery_uid = sale_order.uid -AND movement.has_cell_content = 0 - -AND resource.uid = movement.resource_uid - -AND (sale_order.simulation_state = "planned" -OR sale_order.simulation_state = "ordered" -OR sale_order.simulation_state = "draft" -OR sale_order.simulation_state = "confirmed") - -AND category_sc.uid=sale_order.uid -AND category_sc.base_category_uid = <dtml-var "portal_categories.source_section.uid"> -AND category_sc.category_uid = <dtml-var source_section_uid> -AND category_sc.category_strict_membership = 1 - -GROUP BY resource.id \ No newline at end of file diff --git a/product/Coramy/skins/coramy_trade/SalesPackingList_buildRemiseTransporteurDict.py b/product/Coramy/skins/coramy_trade/SalesPackingList_buildRemiseTransporteurDict.py deleted file mode 100755 index ad3ceab764..0000000000 --- a/product/Coramy/skins/coramy_trade/SalesPackingList_buildRemiseTransporteurDict.py +++ /dev/null @@ -1,27 +0,0 @@ -## Script (Python) "SalesPackingList_buildRemiseTransporteurDict" -##bind container=container -##bind context=context -##bind namespace= -##bind script=script -##bind subpath=traverse_subpath -##parameters= -##title= -## -delivery_list = context.object_action_list(selection_name='sales_packing_list_selection') - -# we sort the deliveries by source_section, transporteur, destination -RTDict = {} -for delivery in delivery_list : - source_section = delivery.getSourceSectionTitle() - if not source_section in RTDict.keys() : - RTDict[source_section] = {} - transporteur = delivery.getDeliveryMode() - if not transporteur in RTDict[source_section].keys() : - RTDict[source_section][transporteur] = {} - destination = delivery.getDestination() - if not destination in RTDict[source_section][transporteur].keys() : - RTDict[source_section][transporteur][destination] = [] - - RTDict[source_section][transporteur][destination].append(delivery) - -return RTDict diff --git a/product/Coramy/skins/coramy_trade/SalesPackingList_exportEdi.py b/product/Coramy/skins/coramy_trade/SalesPackingList_exportEdi.py deleted file mode 100755 index d3616310eb..0000000000 --- a/product/Coramy/skins/coramy_trade/SalesPackingList_exportEdi.py +++ /dev/null @@ -1,176 +0,0 @@ -## Script (Python) "SalesPackingList_exportEdi" -##bind container=container -##bind context=context -##bind namespace= -##bind script=script -##bind subpath=traverse_subpath -##parameters=batch_mode=0,**kw -##title= -## -# export d un fichier Edi -# format de fichier attendu -# Traduction .rec du fichier Edifact par NY Net - -from string import rjust, zfill -import string -from DateTime import DateTime - -def chaine(num, width): - s = str(int(num)) - if len(s) > width: - result = s[-width:] - else: - result = zfill(s,width) - return result - -def decoupe(s,width): - if len(s) > width: - result_tmp = s[-width:] - else: - result_tmp = rjust(s,width) - return result_tmp - -request=context.REQUEST - -retour_chariot = "\r\n" - -result = "" -num_article = 0 -total_qty = 0 -csp_sequence_expe = 1 - - - -result += "START:AVISAUCHAVISAUCH"+retour_chariot -result += "UNH_DEBUT_MESSAGE____:DESADVEAN005"+retour_chariot - -code_fonction = '9' -result += "BGM_AVIS_EXPEDITION__:"+decoupe(context.getId() , 8)+code_fonction+retour_chariot -result += "DTM_DATE_DOCUMENT____:"+DateTime().strftime("%Y%m%d%H%M")+retour_chariot - -sales_order = context.getCausalityValue(portal_type=['Sales Order']) - -result += "DTM_DATE_LIVR_DEMANDE:"+sales_order.getTargetStopDate().strftime("%Y%m%d%H%M")+retour_chariot - -result += "DTM_DATE_HEURE_EXPE__:"+context.getTargetStartDate().strftime("%Y%m%d%H%M")+retour_chariot - -try: - result += "RFF_NUMERO_COMMANDE__:"+ sales_order.getDestinationReference() +retour_chariot -except: - if not batch_mode: - message="Erreur+sur+la+facture:+il+n\'y+a+pas+de+numéro+de+commande+sur+la+commande" - redirect_url = '%s?%s%s' % ( context.absolute_url()+'/view', 'portal_status_message=',message) - request[ 'RESPONSE' ].redirect( redirect_url ) - return None - else: - return None - -try: - result += "RFF_DATE_COMMANDE____:"+ sales_order.getDateReception().strftime("%Y%m%d") +retour_chariot -except: - if not batch_mode: - message="Erreur+sur+la+facture:+il+n\'y+a+pas+de+date+de+réception+sur+la+commande" - redirect_url = '%s?%s%s' % ( context.absolute_url()+'/view', 'portal_status_message=',message) - request[ 'RESPONSE' ].redirect( redirect_url ) - return None - else: - return None - - -# XXX -result += "RFF_BON_LIVRAISON____:"+ context.getId() +retour_chariot -result += "RFF_DATE_____________:"+ context.getTargetStopDate().strftime("%Y%m%d%H%M") +retour_chariot - - -source_section = sales_order.getSourceSectionTitle() -list = sales_order.portal_catalog(Title=source_section, portal_type = 'Organisation') - - -if len(list) > 0: - source = list[0].getObject() - ean_source = source.getEan13Code() - result += "NAD_EXPEDITEUR_______:"+ ean_source + retour_chariot - - -ean_destination = sales_order.getDestinationDecisionValue(portal_type=['Organisation']).getEan13Code() - -if ean_destination in (None,''): - if not batch_mode: - message="Erreur+sur+la+facture:+il+n\'y+a+pas+de+code+ean+sur+l\'organisation:+commandé+par." - redirect_url = '%s?%s%s' % ( context.absolute_url()+'/view', 'portal_status_message=',message) - request[ 'RESPONSE' ].redirect( redirect_url ) - return None - else: - return None - -result += "NAD_EMETTEUR_CDE_____:"+ ean_destination + retour_chariot -result += "NAD_INTER_A_LIVRER___:"+ ean_destination + retour_chariot -result += "NAD_DEST_MESSAGE_____:"+ ean_destination + retour_chariot - - -result += "TOD_CONDITION_LIVR___:"+"SD"+retour_chariot -result += "TDT_DETAIL_TRANSPORT_:"+"3031"+retour_chariot - - -# { ean13code: send_quantity , ...} -send_quantity_dict = {} -packing_list_movement_list = context.getMovementList() -for movement in packing_list_movement_list: - send_quantity_dict[ movement.Amount_getCodeEan13Client() ] = int(movement.getTargetQuantity()) - -# [ (ean13code, difference) ] -difference_quantity_list = [] -sales_order_movement_list = sales_order.getMovementList() - - -for movement in sales_order_movement_list: - desired_quantity = int(movement.getTargetQuantity() ) - eanCode = movement.Amount_getCodeEan13Client() - try: - send_quantity = send_quantity_dict[ eanCode ] - difference_quantity = (desired_quantity - send_quantity) - - if difference_quantity <> 0: - difference_quantity_list.append( ( eanCode , difference_quantity ) ) - if send_quantity == 0: - del send_quantity_dict[ eanCode ] - except KeyError: - None - -if send_quantity_dict <> {}: - num_ct = 1 -else: - num_ct = 0 -pac_emballage = chaine( num_ct , 8 ) + "CT" - -weight = context.PackingList_getTotalGrossWeight() - -result += "CSP_SEQUENCE_EXPE____:"+ decoupe( "%i"%csp_sequence_expe,12) +retour_chariot -result += "PAC_EMBALLAGE________:"+ pac_emballage + retour_chariot -result += "MEA_MESURES_POIDS_TOT:"+ str(weight) +retour_chariot - -if difference_quantity_list <> []: - for difference_quantity in difference_quantity_list: - result += "LIN_ARTICLE__________:"+difference_quantity[0]+retour_chariot - result += "QVR_EXPED_PARTIELLE__:"+"%i"%(difference_quantity[1])+retour_chariot - - -if send_quantity_dict <> {}: - - result += "CSP_SEQUENCE_EXPE____:"+decoupe( "%i"% (csp_sequence_expe+1),12) + "%i"%csp_sequence_expe +retour_chariot - csp_sequence_expe += 1 - result += "PAC_EMBALLAGE________:"+pac_emballage +retour_chariot - result += "QTY_QUANTITE_KGM_____:"+ str(weight) + retour_chariot - - for ean_key in send_quantity_dict.keys(): - num_article += 1 - result += "LIN_ARTICLE__________:" + decoupe( "%i" % num_article , 5 ) + ean_key + retour_chariot - result += "QTY_QTE_EXPEDIEE_UC__:" + "%i"%(send_quantity_dict[ ean_key ]) + retour_chariot - - result += "CNT_CONTROLE_TOTAL___:%i"% num_article+retour_chariot - -if batch_mode: - return result -else: - request.RESPONSE.setHeader('Content-Type','application/text') - return result diff --git a/product/Coramy/skins/coramy_trade/SalesPackingList_exportEdiList.py b/product/Coramy/skins/coramy_trade/SalesPackingList_exportEdiList.py deleted file mode 100755 index 20691b7e91..0000000000 --- a/product/Coramy/skins/coramy_trade/SalesPackingList_exportEdiList.py +++ /dev/null @@ -1,32 +0,0 @@ -## Script (Python) "SalesPackingList_exportEdiList" -##bind container=container -##bind context=context -##bind namespace= -##bind script=script -##bind subpath=traverse_subpath -##parameters=batch_mode=0,**kw -##title= -## -# generate the Edi file of the selection of sales packing list -request = context.REQUEST - -object_list = context.object_action_list(selection_name='sales_packing_list_selection') -result = "" - -for order in object_list: - - try: - # export the container - result += order.SalesPackingList_exportEdi( batch_mode = 1) - except: - message='Erreur+sur+la+livraison:+identifiant+%s.' % (order.getId()) - redirect_url = '%s?%s%s' % ( context.absolute_url()+'/view', 'portal_status_message=',message) - request[ 'RESPONSE' ].redirect( redirect_url ) - -# and this is the end .... -if batch_mode: - return result - -else: - request.RESPONSE.setHeader('Content-Type','application/text') - return result diff --git a/product/Coramy/skins/coramy_trade/SalesPackingList_oneContainerAutoPacking.py b/product/Coramy/skins/coramy_trade/SalesPackingList_oneContainerAutoPacking.py deleted file mode 100755 index 6c55d18e71..0000000000 --- a/product/Coramy/skins/coramy_trade/SalesPackingList_oneContainerAutoPacking.py +++ /dev/null @@ -1,128 +0,0 @@ -## Script (Python) "SalesPackingList_oneContainerAutoPacking" -##bind container=container -##bind context=context -##bind namespace= -##bind script=script -##bind subpath=traverse_subpath -##parameters=container_type='', delivery_mode='', gross_weight='', user_name='',batch_mode=0 -##title= -## -try: - request = context.REQUEST - - # verify the delivery_mode in the Sales Packing List - if context.getDeliveryMode() != delivery_mode: - raise None - # verify the packing doesn't content any container - container_list = context.contentValues(filter={'portal_type':'Container'}) - if len(container_list)>0: - raise None - - - - delivery_line_list = context.contentValues(filter={'portal_type':'Sales Packing List Line'}) - - - # creation of the container - # inspired from Container_fastInput - - - #Container_zGetCellList - container_number = 1 - - - - - new_container_id = 'c'+str(container_number) - - # we use container_type to know which are the resource (and variation) of the container - container_type_item_list = container_type.split('/') - container_resource_url = '/'.join(container_type_item_list[0:2]) - container_resource_variation = 'variante/'+container_type - - """ - context.portal_types.constructContent(type_name = 'Container', - container = delivery, - int_index = container_number, - serial_number = "%06d%04d" % (int(delivery.getId()),container_number), - resource = container_resource_url, - variation_base_category_list = ['variante'], - variation_category_list = [container_resource_variation], - gross_weight = gross_weight, - id = new_container_id, - ) - - container = delivery[new_container_id] - """ - - - - - # construct the container lines - """ - for delivery_line in delivery_line_list: - - new_container_line_id = str(container.generateNewId()) - - # construct new content (container_line) - context.portal_types.constructContent(type_name = 'Container Line', - container = container, - id = new_container_line_id, - resource = delivery_line.getRelativeUrl(), - variation_base_category_list = delivery_line.getVariationBaseCategoryList(), - variation_category_list = delivery_line.getVariationCategoryList - ) - container_line = container[new_container_line_id] - - # set target_quantities in container_lines - container_cell_list = container_line.contentValues() - delivery_cell_list = delivery_line.contentValues() - - for container_cell in container_cell_list: - quantity_updated = 0 - for delivery_cell in delivery_cell_list: - if container_cell.test(context.asContext(categories=deliveryCell.getVariationCategoryList()) : - container_cell.setTargetQuantity(deliveryCell.getQuantity()) - container_cell.flushActivity(invoke=1) - quantity_updated = 1 - break - - - # update target_quantities on delivery_lines or cells - container.edit() - - """ - - # change the workflow - #context.Item_doWorkflowTransition(workflow_action='user_set_ready', workflow_id='delivery_workflow') - - - """ - - # print container label - container.Container_printLabel(user_name=user_name) - - """ - - - # print - # XXX this does not print anything, it's just a page template - #context.sales_packing_list_print() - -except: - message = 'Livraison vente identifiant %s' % context.getId() - # and this is the end .... - if batch_mode: - context.Coramy_sendMailToUser(user_name=user_name,mSubj="Autocolisage échoué",mMsg=message) - else: - redirect_url = '%s?%s' % ( context.absolute_url(), 'portal_status_message=Autocolisage+échoué.') - return request[ 'RESPONSE' ].redirect( redirect_url ) - -else: - message = 'Livraison vente identifiant %s' % context.getId() - # and this is the end .... - if batch_mode: - context.Coramy_sendMailToUser(user_name=user_name,mSubj="Autocolisage réussi",mMsg=message) - else: - redirect_url = '%s?%s' % ( context.absolute_url(), 'portal_status_message=Autocolisage+réussi.') - return request[ 'RESPONSE' ].redirect( redirect_url ) diff --git a/product/Coramy/skins/coramy_trade/SalesPackingList_oneContainerAutoPackingForm.form b/product/Coramy/skins/coramy_trade/SalesPackingList_oneContainerAutoPackingForm.form deleted file mode 100755 index 2a7703e834..0000000000 --- a/product/Coramy/skins/coramy_trade/SalesPackingList_oneContainerAutoPackingForm.form +++ /dev/null @@ -1,130 +0,0 @@ -<?xml version="1.0" encoding="iso-8859-1"?> - -<form> - <title>Auto-coliser</title> - <name>SalesPackingList_oneContainerAutoPackingForm</name> - <action>SalesPackingList_oneContainerAutoPackingSelectScript</action> - <enctype></enctype> - <method>POST</method> - <pt>form_view_dialog</pt> - - <groups> - <group> - <title>Default</title> - <fields> - - <field><id>my_delivery_mode</id> <type>ListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable_expression></editable_expression> - <editable_permission></editable_permission> - <editable_role></editable_role> - <external_validator></external_validator> - <extra></extra> - <first_item type="int">0</first_item> - <hidden type="int">0</hidden> - <items type="list">[]</items> - <not_viewable type="int">0</not_viewable> - <read_only type="int">0</read_only> - <required type="int">0</required> - <size type="int">1</size> - <title>Mode de livraison</title> - <unicode type="int">0</unicode> - <viewable_expression></viewable_expression> - <viewable_permission></viewable_permission> - <viewable_role></viewable_role> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <default>python:here.portal_categories.delivery_mode.getFormItemList()[1][1]</default> - <items>here/portal_categories/delivery_mode/getFormItemList</items> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - <field><id>my_container_type</id> <type>ListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <external_validator></external_validator> - <extra></extra> - <first_item type="int">0</first_item> - <hidden type="int">0</hidden> - <items type="list">[('carton A', 'composant/CAame/A'), ('carton B', 'composant/CAame/B'), ('carton C', 'composant/CAame/C'), ('carton D1', 'composant/CAame/D1'), ('carton D2', 'composant/CAame/D2'), ('carton D3', 'composant/CAame/D3')]</items> - <required type="int">0</required> - <size type="int">1</size> - <title>Type de colis</title> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - <field><id>my_gross_weight</id> <type>FloatField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">10</display_width> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <required type="int">1</required> - <title>Poids brut (kg)</title> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="not_float">You did not enter a floating point number.</message> - </messages> - </field> - <field><id>my_method_action</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">1</hidden> - <max_length></max_length> - <required type="int">0</required> - <title>x</title> - <truncate type="int">0</truncate> - </values> - <tales> - <default>python:here.REQUEST.method_action</default> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>hidden</title> - <fields> - - </fields> - </group> - </groups> -</form> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_trade/SalesPackingList_oneContainerAutoPackingList.py b/product/Coramy/skins/coramy_trade/SalesPackingList_oneContainerAutoPackingList.py deleted file mode 100755 index 93dfd5daf3..0000000000 --- a/product/Coramy/skins/coramy_trade/SalesPackingList_oneContainerAutoPackingList.py +++ /dev/null @@ -1,20 +0,0 @@ -## Script (Python) "SalesPackingList_oneContainerAutoPackingList" -##bind container=container -##bind context=context -##bind namespace= -##bind script=script -##bind subpath=traverse_subpath -##parameters=container_type='', delivery_mode='', gross_weight='' -##title= -## -# auto packing a list of container -request = context.REQUEST - -object_list = context.object_action_list(selection_name='sales_packing_list_selection') -user_name = context.portal_membership.getAuthenticatedMember().getUserName() - -for invoice in object_list: - invoice.activate(activity="SQLQueue").SalesPackingList_oneContainerAutoPacking(container_type=container_type, delivery_mode=delivery_mode, gross_weight=gross_weight, user_name=user_name,batch_mode=1) - -redirect_url = '%s?%s' % ( context.absolute_url(), 'portal_status_message=Autocolisage+démarré.') -return request[ 'RESPONSE' ].redirect( redirect_url ) diff --git a/product/Coramy/skins/coramy_trade/SalesPackingList_oneContainerAutoPackingSelectScript.py b/product/Coramy/skins/coramy_trade/SalesPackingList_oneContainerAutoPackingSelectScript.py deleted file mode 100755 index 4b48186a1d..0000000000 --- a/product/Coramy/skins/coramy_trade/SalesPackingList_oneContainerAutoPackingSelectScript.py +++ /dev/null @@ -1,22 +0,0 @@ -## Script (Python) "SalesPackingList_oneContainerAutoPackingSelectScript" -##bind container=container -##bind context=context -##bind namespace= -##bind script=script -##bind subpath=traverse_subpath -##parameters=method_action='', container_type='', delivery_mode='', gross_weight='' -##title= -## -# get the script -request = context.REQUEST - -if method_action == 'SalesPackingList_oneContainerAutoPackingList': - return context.SalesPackingList_oneContainerAutoPackingList(container_type=container_type, delivery_mode=delivery_mode, gross_weight=gross_weight) -elif method_action == 'SalesPackingList_oneContainerAutoPacking': - return context.SalesPackingList_oneContainerAutoPacking(container_type=container_type, delivery_mode=delivery_mode, gross_weight=gross_weight) -else: - redirect_url = '%s?%s' % ( context.absolute_url() - , 'portal_status_message=Erreur:+script+à+lancer+inconnu.' - ) - - return request.RESPONSE.redirect( redirect_url ) diff --git a/product/Coramy/skins/coramy_trade/SalesPackingList_printForm.form b/product/Coramy/skins/coramy_trade/SalesPackingList_printForm.form deleted file mode 100755 index bfaf5dad2a..0000000000 --- a/product/Coramy/skins/coramy_trade/SalesPackingList_printForm.form +++ /dev/null @@ -1,49 +0,0 @@ -<?xml version="1.0"?> - -<form> - <title>Imprimer</title> - <row_length>4</row_length> - <name>SalesPackingList_printForm</name> - <pt>form_dialog</pt> - <action>sales_packing_list_secure_print</action> - <method>POST</method> - <enctype>multipart/form-data</enctype> - <encoding>UTF-8</encoding> - <stored_encoding>ISO-8859-1</stored_encoding> - <unicode_mode>false</unicode_mode> - <groups> - <group> - <title>left</title> - <fields> - - <field><id>my_packing_list_page_template</id> <type>RadioField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra_item></extra_item> - <first_item type="int">1</first_item> - <hidden type="int">0</hidden> - <items type="list">[('Bordereau de livraison', 'sales_packing_list_print'), ('Liste de colisage', 'sales_packing_list_container_list_print')]</items> - <orientation>vertical</orientation> - <required type="int">1</required> - <title>Impression demandée</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - </fields> - </group> - </groups> -</form> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_trade/SalesPackingList_searchByClientGroup.form b/product/Coramy/skins/coramy_trade/SalesPackingList_searchByClientGroup.form deleted file mode 100755 index e50b76af3e..0000000000 --- a/product/Coramy/skins/coramy_trade/SalesPackingList_searchByClientGroup.form +++ /dev/null @@ -1,136 +0,0 @@ -<?xml version="1.0" encoding="iso-8859-1"?> - -<form> - <title>Rechercher</title> - <name>SalesOrder_searchByClientGroup</name> - <action>Base_searchHandler</action> - <enctype></enctype> - <method>POST</method> - <pt>form_view_dialog</pt> - - <groups> - <group> - <title>left</title> - <fields> - - <field><id>my_group_list</id> <type>MultiListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default type="list">[]</default> - <description></description> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <items type="list">[]</items> - <required type="int">0</required> - <size type="int">15</size> - <title>Organigramme</title> - </values> - <tales> - <items>here/portal_categories/group/getFormItemList</items> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - <field><id>my_reset</id> <type>CheckBoxField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default type="int">1</default> - <description></description> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <title>Recherche globale</title> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>right</title> - <fields> - - <field><id>my_state_list</id> <type>MultiListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default type="list">[]</default> - <description></description> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <items type="list">[('draft', 'draft'), ('planned', 'planned'), ('ordered', 'ordered'), ('confirmed', 'confirmed'), ('getting_ready', 'getting_ready'), ('ready', 'ready'), ('started', 'started'), ('delivered', 'delivered')]</items> - <required type="int">0</required> - <size type="int">10</size> - <title>Etats</title> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - <field><id>my_list_method_id</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default>SalesPackingList_zSearchByClientGroup</default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">1</hidden> - <max_length></max_length> - <required type="int">0</required> - <title>x</title> - <truncate type="int">0</truncate> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - <field><id>my_list_form_id</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">1</hidden> - <max_length></max_length> - <required type="int">0</required> - <title></title> - <truncate type="int">0</truncate> - </values> - <tales> - <default>python:here.REQUEST.form_id</default> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - </fields> - </group> - </groups> -</form> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_trade/bls_echantillon_print.pt b/product/Coramy/skins/coramy_trade/bls_echantillon_print.pt deleted file mode 100755 index 83dc493223..0000000000 --- a/product/Coramy/skins/coramy_trade/bls_echantillon_print.pt +++ /dev/null @@ -1,205 +0,0 @@ -<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> - -<html> - - <head> - <meta http-equiv="content-type" content="text/html;charset=ISO-8859-1"> - <title tal:content="here/getTitle">Coramy</title> -<link rel=stylesheet type="text/css" href="echantillon.css"> - - - </head> - - <body - tal:define="client python:here.getDefaultValue('destination',portal_type=['Organisation']); - acheteur python:here.getDefaultValue('contact',portal_type=['Person']); - lignes_cde python:here.contentValues(filter={'portal_type':'Sample Order Line'}); - lignes_index python:here.ordered_lines(lignes_cde=lignes_cde); - nb_echantillons python:len(lignes_cde); - col_nb python:2; - lin_nb python:2; - nb_pages python:here.echantillon_page_count(total_nb=nb_echantillons,on_page=col_nb*lin_nb) - "> - - <table tal:repeat="page_no python:range(nb_pages)" class="PageA4" width="660" height="955" border="0" cellpadding="0" cellspacing="0"> - <tr> - <td colspan="3"><p align="center"> - <img src="BLS.png" width="15%" valign="bottom"><span class="Entete">5 bis, rue Denis Cordonnier - 59820 GRAVELINES - Tel : 03 28 51 86 26 - - Fax : 03 28 23 34 96</span><br>Échantillonnage N° <span tal:content="here/getId"/> - <span tal:define="url_items python:modules['string'].split(acheteur.getGender(),'/')" - tal:content="python:(len(url_items)-1)*url_items[len(url_items)-1]"> - </span> <span tal:content="python:modules['string'].capwords(modules['string'].lower(acheteur.getTitle()))"/> - <span tal:content="python:modules['string'].capwords(modules['string'].lower(client.getTitle()))"/> - - <span tal:content="python:modules['string'].capwords(modules['string'].lower(here.getDescription()))"/><br> <br></p></td> - <td></td> - <td></td> - - </tr> - - <span tal:repeat="i python:range(lin_nb)"> - <tr valign="top" class="Border"> - - - <span tal:repeat="j python:map((lambda x:x+(page_no*col_nb*lin_nb)+(i*col_nb)),range(col_nb))"> - <span tal:condition="python:j<nb_echantillons"> - <td valign="top" align="center" width="50%" class="Border" tal:define="ligne python:lignes_cde[lignes_index[j]]"> - - <span tal:condition="python:ligne.getDefaultValue('resource',portal_type=['Modele'])<>None"> - <span tal:define="modele python:ligne.getDefaultValue('resource',portal_type=['Modele']); - coloris_list python:modele.contentValues(filter={'portal_type':'Variante Modele'}) - "> - - <span tal:define="url_items1 python:modules['string'].split(ligne.getResourceRelativeUrl(),'/')" - tal:content="structure python:'Modèle : '+'<b>'+url_items1[len(url_items1)-1]+'</b>'">modele</span> - - <span tal:condition="python:ligne.getColoris() <> None"> - <span tal:define="url_items2 python:modules['string'].split(ligne.getColoris(),'/')" - tal:content="structure python:' coloris '+url_items2[len(url_items2)-1]">modele</span> - </span> - - - <br> - <span tal:content="python:modules['string'].capwords(modules['string'].lower(modele.getComposition()))"/> - <br> - <table border="0" cellpadding="0" cellspacing="0"> - <tr> - <td width="230" height="280" align="center" valign="top"> - <img src="space.png" width="1" height="230"> - <span tal:repeat="coloris coloris_list"> - - <img tal:condition="python:coloris.getRelativeUrl()==ligne.getColoris()" - src="" tal:attributes="src python:coloris.absolute_url() + '?display=small&format=jpeg&resolution=150'" width="100%"/> - </span> - </td> - </tr> - </table> - <br> - - <span tal:define="tarif_list python:ligne.contentValues(filter={'portal_type':'Element Tarif'})"> - <table border="1" cellspacing="0" cellpadding="0" width="100%"> - <tr> - <span tal:condition="python:len(tarif_list)>0"> - <td><i>Prix €/Quantités</i></td> - <td tal:condition="python:tarif_list[0].getCell(None, '00300', base_id='destination_base_price')<>None" - tal:content="python:'300p'"> - </td> - <td tal:condition="python:tarif_list[0].getCell(None, '01000', base_id='destination_base_price')<>None" - tal:content="python:'1000p'"> - </td> - <td tal:condition="python:tarif_list[0].getCell(None, '05000', base_id='destination_base_price')<>None" - tal:content="python:'5000p'"> - </td> - <td tal:condition="python:tarif_list[0].getCell(None, '10000', base_id='destination_base_price')<>None" - tal:content="python:'10000p'"> - </td> - </span> - </tr> - <span tal:repeat="tarif_item tarif_list"> - <tr> - <td tal:content="python:modules['string'].lower(tarif_item.getDescription())"/> - <td tal:condition="python:tarif_item.getCell(None, '00300', base_id='destination_base_price')<>None" -tal:content="python:'%.2f' %tarif_item.getCell(None, '00300', base_id='destination_base_price').destination_base_price or nothing"> - </td> - <td tal:condition="python:tarif_item.getCell(None, '01000', base_id='destination_base_price')<>None" -tal:content="python:'%s' %tarif_item.getCell(None, '01000', base_id='destination_base_price').destination_base_price or nothing"> - </td> - <td tal:condition="python:tarif_item.getCell(None, '05000', base_id='destination_base_price')<>None" -tal:content="python:'%.2f' %tarif_item.getCell(None, '05000', base_id='destination_base_price').destination_base_price or nothing"> - </td> - <td tal:condition="python:tarif_item.getCell(None, '10000', base_id='destination_base_price')<>None" -tal:content="python:'%.2f' %tarif_item.getCell(None, '10000', base_id='destination_base_price').destination_base_price or nothing"> - - </td> - - </tr> - - </span> - </table> - </span> - - </span> - - </span> - </td> - </span> - </span> - </tr> - </span> - <tr> - <td colspan="2" align="center" class="Entete"><p>© Coramy - All rights reserved<br>This document is the confidential property of CORAMY<br>Anyone who divulges this plan is rendering - himself liable of legal proceedings</p></td> - <td></td> - </tr> - - - </table> -<span tal:define="client python:here.getDefaultValue('destination',portal_type=['Organisation']); - acheteur python:here.getDefaultValue('contact',portal_type=['Person']); - lignes_cde python:here.contentValues(filter={'portal_type':'Sample Order Line'}); - lignes_index python:here.ordered_lines(lignes_cde=lignes_cde); - nb_echantillons python:len(lignes_cde); - col_nb python:4; - lin_nb python:5; - nb_pages python:here.echantillon_page_count(total_nb=nb_echantillons,on_page=col_nb*lin_nb) - "> - - <table tal:repeat="page_no python:range(nb_pages)" class="PageA4" width="660" height="955" border="0" cellpadding="0" cellspacing="0"> - <tr> - <td colspan="4"><p align="center"> - <span class="Coramy">Coramy</span><span class="Entete">5 bis, rue Denis Cordonnier - 59820 GRAVELINES - Tel : 03 28 51 91 51 - - Fax : 03 28 23 34 96</span><br>Échantillonnage N° <span tal:content="here/getId"/> - <span tal:define="url_items python:modules['string'].split(acheteur.getGender(),'/')" - tal:content="python:url_items[len(url_items)-1]"> - </span> <span tal:content="python:modules['string'].capwords(modules['string'].lower(acheteur.getTitle()))"/> - <span tal:content="python:modules['string'].capwords(modules['string'].lower(client.getTitle()))"/> - - <span tal:content="python:modules['string'].capwords(modules['string'].lower(here.getDescription()))"/><br> <br></p></td> - <td></td> - <td></td> - <td></td> - - </tr> - - <span tal:repeat="i python:range(lin_nb)"> - <tr valign="top" class="Border"> - - - <span tal:repeat="j python:map((lambda x:x+(page_no*col_nb*lin_nb)+(i*col_nb)),range(col_nb))"> - <span tal:condition="python:j<nb_echantillons"> - <td valign="top" align="center" width="25%" class="Border" nowrap tal:define="ligne python:lignes_cde[lignes_index[j]]"> - - <span tal:condition="python:ligne.getDefaultValue('resource',portal_type=['Modele'])<>None"> - <span tal:define="modele python:ligne.getDefaultValue('resource',portal_type=['Modele']); - coloris_list python:modele.contentValues(filter={'portal_type':'Variante Modele'}) - "> - - <span tal:define="url_items1 python:modules['string'].split(ligne.getResourceRelativeUrl(),'/')" - tal:content="python:url_items1[len(url_items1)-1]">modele</span> - - - <br> <br> - <table border="0" cellpadding="0" cellspacing="0"> - <tr> - <td width="90" height="90" align="center" valign="center"> - <span tal:repeat="coloris coloris_list"> - <img tal:condition="python:coloris.getRelativeUrl()==ligne.getColoris()" - src="" tal:attributes="src python:coloris.absolute_url() + '?display=small&format=jpeg&resolution=100'" - width="100%" /> - </span> - </td> - </tr> - </table> - </span> - - </span> - </td> - </span> - </span> - </tr> - </span> - <tr> - <td colspan="4" align="center" class="Entete"><p>© Coramy - All rights reserved<br>This document is the confidential property of CORAMY<br>Anyone who divulges this plan is rendering - himself liable of legal proceedings</p></td> - <td></td><td></td><td></td> - </tr> - - - </table></span> - -</body> -</html> diff --git a/product/Coramy/skins/coramy_trade/condition_achat_list.form b/product/Coramy/skins/coramy_trade/condition_achat_list.form deleted file mode 100755 index 602b1579ef..0000000000 --- a/product/Coramy/skins/coramy_trade/condition_achat_list.form +++ /dev/null @@ -1,62 +0,0 @@ -<?xml version="1.0"?> - -<form> - <title>Liste de conditions d'achat</title> - <row_length>4</row_length> - <name>condition_achat_list</name> - <pt>form_list</pt> - <action></action> - <method>POST</method> - <enctype></enctype> - <encoding>UTF-8</encoding> - <stored_encoding>ISO-8859-1</stored_encoding> - <unicode_mode>false</unicode_mode> - <groups> - <group> - <title>Default</title> - <fields> - - <field><id>listbox</id> <type>ListBox</type> - <values> - <all_columns type="list">[('id', 'Condition'), ('default_destination_section_title', 'Soci\xe9t\xe9'), ('default_source_title', 'Exp\xe9di\xe9 par'), ('default_destination_title', 'Livrer \xe0'), ('default_destination_administration_person_title', 'Gestionaire')]</all_columns> - <all_editable_columns type="list">[]</all_editable_columns> - <alternate_name></alternate_name> - <columns type="list">[('id', 'Condition'), ('default_destination_section_title', 'Soci\xe9t\xe9'), ('default_source_title', 'Exp\xe9di\xe9 par'), ('default_destination_title', 'Livrer \xe0'), ('default_destination_administration_person_title', 'Gestionaire')]</columns> - <css_class></css_class> - <default></default> - <default_params type="list">[]</default_params> - <description></description> - <domain_root_list type="list">[]</domain_root_list> - <domain_tree type="int">0</domain_tree> - <editable type="int">1</editable> - <editable_columns type="list">[]</editable_columns> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <global_attributes type="list">[]</global_attributes> - <hidden type="int">0</hidden> - <lines type="int">30</lines> - <list_action>list</list_action> - <list_method type="method">portal_catalog</list_method> - <meta_types type="list">[]</meta_types> - <portal_types type="list">[('Condition Achat', 'Condition Achat')]</portal_types> - <report_root_list type="list">[]</report_root_list> - <report_tree type="int">0</report_tree> - <search type="int">1</search> - <search_columns></search_columns> - <select type="int">1</select> - <selection_name>condition_vente_selection</selection_name> - <sort type="list">[('id', 'id')]</sort> - <sort_columns></sort_columns> - <stat_method></stat_method> - <title>Conditions d'achat</title> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - </messages> - </field> - </fields> - </group> - </groups> -</form> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_trade/condition_achat_profil_view.form b/product/Coramy/skins/coramy_trade/condition_achat_profil_view.form deleted file mode 100755 index 714500aae8..0000000000 --- a/product/Coramy/skins/coramy_trade/condition_achat_profil_view.form +++ /dev/null @@ -1,409 +0,0 @@ -<?xml version="1.0"?> - -<form> - <title>Profil d'achat</title> - <row_length>4</row_length> - <name>trade_condition_profile_view</name> - <pt>form_view</pt> - <action>base_edit</action> - <method>POST</method> - <enctype></enctype> - <encoding>UTF-8</encoding> - <stored_encoding>ISO-8859-1</stored_encoding> - <unicode_mode>false</unicode_mode> - <groups> - <group> - <title>left</title> - <fields> - - <field><id>my_source_title</id> <type>RelationStringField</type> - <values> - <alternate_name></alternate_name> - <base_category>source</base_category> - <catalog_index>Title</catalog_index> - <css_class></css_class> - <default></default> - <default_module>organisation</default_module> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <jump_method>base_jump_relation</jump_method> - <max_length></max_length> - <portal_type type="list">[('Organisation', 'Organisation'), ('Category', 'Category'), ('Person', 'Person')]</portal_type> - <required type="int">0</required> - <title>Expédié par</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <update_method>base_update_relation</update_method> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - <field><id>my_source_section_title</id> <type>RelationStringField</type> - <values> - <alternate_name></alternate_name> - <base_category>source_section</base_category> - <catalog_index>Title</catalog_index> - <css_class></css_class> - <default></default> - <default_module>organisation</default_module> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <jump_method>base_jump_relation</jump_method> - <max_length></max_length> - <portal_type type="list">[('Organisation', 'Organisation'), ('Category', 'Category'), ('Person', 'Person')]</portal_type> - <required type="int">0</required> - <title>Pour le compte de</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <update_method>base_update_relation</update_method> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - <field><id>my_source_decision_title</id> <type>RelationStringField</type> - <values> - <alternate_name></alternate_name> - <base_category>source_decision</base_category> - <catalog_index>Title</catalog_index> - <css_class></css_class> - <default></default> - <default_module>organisation</default_module> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <jump_method>base_jump_relation</jump_method> - <max_length></max_length> - <portal_type type="list">[('Organisation', 'Organisation'), ('Category', 'Category'), ('Person', 'Person')]</portal_type> - <required type="int">0</required> - <title>Commandé à </title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <update_method>base_update_relation</update_method> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - <field><id>my_source_administration_title</id> <type>RelationStringField</type> - <values> - <alternate_name></alternate_name> - <base_category>source_administration</base_category> - <catalog_index>Title</catalog_index> - <css_class></css_class> - <default></default> - <default_module>person</default_module> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <jump_method>base_jump_relation</jump_method> - <max_length></max_length> - <portal_type type="list">[('Organisation', 'Organisation'), ('Category', 'Category'), ('Person', 'Person')]</portal_type> - <required type="int">0</required> - <title>Géré par</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <update_method>base_update_relation</update_method> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - <field><id>my_source_payment_title</id> <type>RelationStringField</type> - <values> - <alternate_name></alternate_name> - <base_category>source_payment</base_category> - <catalog_index>Title</catalog_index> - <css_class></css_class> - <default></default> - <default_module>organisation</default_module> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <jump_method>base_jump_relation</jump_method> - <max_length></max_length> - <portal_type type="list">[('Organisation', 'Organisation'), ('Category', 'Category'), ('Person', 'Person')]</portal_type> - <required type="int">0</required> - <title>Payer à </title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <update_method>base_update_relation</update_method> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>right</title> - <fields> - - <field><id>my_destination_title</id> <type>RelationStringField</type> - <values> - <alternate_name></alternate_name> - <base_category>destination</base_category> - <catalog_index>Title</catalog_index> - <css_class></css_class> - <default></default> - <default_module>organisation</default_module> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <jump_method>base_jump_relation</jump_method> - <max_length></max_length> - <portal_type type="list">[('Organisation', 'Organisation'), ('Category', 'Category'), ('Person', 'Person')]</portal_type> - <required type="int">0</required> - <title>Livrer à </title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <update_method>base_update_relation</update_method> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - <field><id>my_destination_section</id> <type>ListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <extra_item></extra_item> - <first_item type="int">0</first_item> - <hidden type="int">0</hidden> - <items type="list">[]</items> - <required type="int">0</required> - <size type="int">1</size> - <title>Pour le compte de</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <items>python:here.portal_categories.group.Coramy.getCategoryChildIdItemList(base=1,display_none_category=1)</items> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - <field><id>my_destination_decision_organisation_title</id> <type>RelationStringField</type> - <values> - <alternate_name></alternate_name> - <base_category>destination_decision</base_category> - <catalog_index>Title</catalog_index> - <css_class></css_class> - <default></default> - <default_module>organisation</default_module> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <jump_method>base_jump_relation</jump_method> - <max_length></max_length> - <portal_type type="list">[('Organisation', 'Organisation'), ('Category', 'Category')]</portal_type> - <required type="int">0</required> - <title>Commandé par</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <update_method>base_update_relation</update_method> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - <field><id>my_destination_administration_organisation_title</id> <type>RelationStringField</type> - <values> - <alternate_name></alternate_name> - <base_category>destination_administration</base_category> - <catalog_index>Title</catalog_index> - <css_class></css_class> - <default></default> - <default_module>organisation</default_module> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <jump_method>base_jump_relation</jump_method> - <max_length></max_length> - <portal_type type="list">[('Organisation', 'Organisation'), ('Category', 'Category')]</portal_type> - <required type="int">0</required> - <title>Facturer à </title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <update_method>base_update_relation</update_method> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - <field><id>my_destination_payment_title</id> <type>RelationStringField</type> - <values> - <alternate_name></alternate_name> - <base_category>destination_payment</base_category> - <catalog_index>Title</catalog_index> - <css_class></css_class> - <default></default> - <default_module>organisation</default_module> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <jump_method>base_jump_relation</jump_method> - <max_length></max_length> - <portal_type type="list">[('Organisation', 'Organisation'), ('Category', 'Category'), ('Person', 'Person')]</portal_type> - <required type="int">0</required> - <title>Payé par</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <update_method>base_update_relation</update_method> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>center</title> - <fields> - - <field><id>my_destination_decision_source_reference</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <max_length></max_length> - <required type="int">0</required> - <title>Code client</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>bottom</title> - <fields> - - </fields> - </group> - <group> - <title>hidden</title> - <fields> - - </fields> - </group> - </groups> -</form> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_trade/condition_achat_sql_search.zsql b/product/Coramy/skins/coramy_trade/condition_achat_sql_search.zsql deleted file mode 100755 index 178b540686..0000000000 --- a/product/Coramy/skins/coramy_trade/condition_achat_sql_search.zsql +++ /dev/null @@ -1,43 +0,0 @@ -<dtml-comment> -title: -connection_id:erp5_sql_connection -max_rows:1000 -max_cache:100 -cache_time:0 -class_name:ZSQLBrain -class_file:zsqlbrain.py -</dtml-comment> -<params>destination_section_uid="" -source_uid="" -destination_uid=""</params> -SELECT DISTINCT condition.id, condition.Description, condition.path, condition.uid, condition.portal_type -FROM catalog AS condition -<dtml-if expr="destination_section_uid<>''"> -, category as cat1 -</dtml-if> -<dtml-if expr="source_uid<>''"> -, category as cat2 -</dtml-if> -<dtml-if expr="destination_uid<>''"> -, category as cat3 -</dtml-if> -WHERE condition.portal_type="Condition Achat" - -<dtml-if expr="destination_section_uid<>''"> -AND condition.uid = cat1.uid -AND cat1.category_uid = "<dtml-var destination_section_uid>" -AND cat1.base_category_uid = <dtml-var "portal_categories.destination_section.uid"> -</dtml-if> - -<dtml-if expr="source_uid<>''"> -AND condition.uid = cat2.uid -AND cat2.category_uid = "<dtml-var source_uid>" -AND cat2.base_category_uid = <dtml-var "portal_categories.source.uid"> -AND cat2.category_strict_membership = 1 -</dtml-if> - -<dtml-if expr="destination_uid<>''"> -AND condition.uid = cat3.uid -AND cat3.category_uid = "<dtml-var destination_uid>" -AND cat3.base_category_uid = <dtml-var "portal_categories.destination.uid"> -</dtml-if> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_trade/condition_achat_view.form b/product/Coramy/skins/coramy_trade/condition_achat_view.form deleted file mode 100755 index 88f3df7d44..0000000000 --- a/product/Coramy/skins/coramy_trade/condition_achat_view.form +++ /dev/null @@ -1,493 +0,0 @@ -<?xml version="1.0"?> - -<form> - <title>Condition d'achat</title> - <row_length>4</row_length> - <name>condition_achat_view</name> - <pt>form_view</pt> - <action>base_edit</action> - <method>POST</method> - <enctype></enctype> - <encoding>UTF-8</encoding> - <stored_encoding>ISO-8859-1</stored_encoding> - <unicode_mode>false</unicode_mode> - <groups> - <group> - <title>left</title> - <fields> - - <field><id>my_id</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <max_length></max_length> - <required type="int">1</required> - <title>Condition</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - <field><id>my_destination_section</id> <type>ListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <extra_item></extra_item> - <first_item type="int">0</first_item> - <hidden type="int">0</hidden> - <items type="list">[]</items> - <required type="int">0</required> - <size type="int">1</size> - <title>Société</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <items>python:here.portal_categories.group.Coramy.getCategoryChildIdItemList(base=1,display_none_category=1)</items> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - <field><id>my_description</id> <type>TextAreaField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <height type="int">3</height> - <hidden type="int">0</hidden> - <max_length></max_length> - <max_linelength></max_linelength> - <max_lines></max_lines> - <required type="int">0</required> - <title>Description</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - <width type="int">40</width> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_many_lines">You entered too many lines.</message> - <message name="line_too_long">A line was too long.</message> - <message name="too_long">You entered too many characters.</message> - </messages> - </field> - <field><id>my_destination_administration_person_title</id> <type>RelationStringField</type> - <values> - <alternate_name></alternate_name> - <base_category>destination_administration</base_category> - <catalog_index>Title</catalog_index> - <css_class></css_class> - <default></default> - <default_module>person</default_module> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <jump_method>base_jump_relation</jump_method> - <max_length></max_length> - <portal_type type="list">[('Person', 'Person')]</portal_type> - <required type="int">0</required> - <title>Gestionaire</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <update_method>base_update_relation</update_method> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - <field><id>my_price_currency</id> <type>ListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <extra_item></extra_item> - <first_item type="int">0</first_item> - <hidden type="int">0</hidden> - <items type="list">[]</items> - <required type="int">0</required> - <size type="int">1</size> - <title>Devise</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <items>python:[('','')]+map(lambda x:(x.id,'devise/%s' %x.id),here.devise.objectValues())</items> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - <field><id>my_incoterm</id> <type>ListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <extra_item></extra_item> - <first_item type="int">0</first_item> - <hidden type="int">0</hidden> - <items type="list">[]</items> - <required type="int">0</required> - <size type="int">1</size> - <title>Incoterm</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <items>python:here.portal_categories.incoterm.getCategoryChildItemList(display_id = 'getTitle', display_none_category=1)</items> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - <field><id>my_delivery_mode</id> <type>ListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <extra_item></extra_item> - <first_item type="int">0</first_item> - <hidden type="int">0</hidden> - <items type="list">[]</items> - <required type="int">0</required> - <size type="int">1</size> - <title>Mode de livraison</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <items>here/portal_categories/delivery_mode/getFormItemList</items> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>right</title> - <fields> - - <field><id>my_source_title</id> <type>RelationStringField</type> - <values> - <alternate_name></alternate_name> - <base_category>source</base_category> - <catalog_index>Title</catalog_index> - <css_class></css_class> - <default></default> - <default_module>organisation</default_module> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <jump_method>base_jump_relation</jump_method> - <max_length></max_length> - <portal_type type="list">[('Organisation', 'Organisation'), ('Category', 'Category')]</portal_type> - <required type="int">0</required> - <title>Expédié par</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <update_method>base_update_relation</update_method> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - <field><id>my_group</id> <type>ListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <extra_item></extra_item> - <first_item type="int">0</first_item> - <hidden type="int">0</hidden> - <items type="list">[]</items> - <required type="int">0</required> - <size type="int">1</size> - <title>Groupe</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <items>here/portal_categories/group/getFormItemList</items> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - <field><id>my_activity</id> <type>ListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <extra_item></extra_item> - <first_item type="int">0</first_item> - <hidden type="int">0</hidden> - <items type="list">[]</items> - <required type="int">0</required> - <size type="int">1</size> - <title>Activité</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <items>here/portal_categories/activity/getFormItemList</items> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - <field><id>my_effective_date</id> <type>DateTimeField</type> - <values> - <allow_empty_time type="int">0</allow_empty_time> - <alternate_name></alternate_name> - <ampm_time_style type="int">0</ampm_time_style> - <css_class></css_class> - <date_only type="int">1</date_only> - <date_separator>/</date_separator> - <default_now type="int">0</default_now> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <hidden type="int">0</hidden> - <input_order>dmy</input_order> - <input_style>text</input_style> - <required type="int">0</required> - <time_separator>:</time_separator> - <title>Valide à partir du</title> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="not_datetime">You did not enter a valid date and time.</message> - <message name="datetime_out_of_range">The date and time you entered were out of range.</message> - </messages> - </field> - <field><id>my_expiration_date</id> <type>DateTimeField</type> - <values> - <allow_empty_time type="int">0</allow_empty_time> - <alternate_name></alternate_name> - <ampm_time_style type="int">0</ampm_time_style> - <css_class></css_class> - <date_only type="int">1</date_only> - <date_separator>/</date_separator> - <default_now type="int">0</default_now> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <hidden type="int">0</hidden> - <input_order>dmy</input_order> - <input_style>text</input_style> - <required type="int">0</required> - <time_separator>:</time_separator> - <title>Expire le</title> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="not_datetime">You did not enter a valid date and time.</message> - <message name="datetime_out_of_range">The date and time you entered were out of range.</message> - </messages> - </field> - <field><id>trade_condition_state</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <max_length></max_length> - <required type="int">0</required> - <title>Etat</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <default>python:here.portal_workflow.getInfoFor(here, 'trade_condition_state')</default> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - <field><id>spacer</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">1</hidden> - <max_length></max_length> - <required type="int">0</required> - <title> </title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>center</title> - <fields> - - <field><id>my_comment</id> <type>TextAreaField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <height type="int">3</height> - <hidden type="int">0</hidden> - <max_length></max_length> - <max_linelength></max_linelength> - <max_lines></max_lines> - <required type="int">0</required> - <title>Commentaires</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - <width type="int">80</width> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_many_lines">You entered too many lines.</message> - <message name="line_too_long">A line was too long.</message> - <message name="too_long">You entered too many characters.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>bottom</title> - <fields> - - </fields> - </group> - <group> - <title>hidden</title> - <fields> - - </fields> - </group> - </groups> -</form> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_trade/condition_paiement_view.form b/product/Coramy/skins/coramy_trade/condition_paiement_view.form deleted file mode 100755 index f9258b5668..0000000000 --- a/product/Coramy/skins/coramy_trade/condition_paiement_view.form +++ /dev/null @@ -1,289 +0,0 @@ -<?xml version="1.0"?> - -<form> - <title>Condition de paiement</title> - <row_length>4</row_length> - <name>condition_paiement_view</name> - <pt>form_view</pt> - <action>base_edit</action> - <method>POST</method> - <enctype></enctype> - <encoding>UTF-8</encoding> - <stored_encoding>ISO-8859-1</stored_encoding> - <unicode_mode>false</unicode_mode> - <groups> - <group> - <title>left</title> - <fields> - - <field><id>my_id</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">10</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <max_length></max_length> - <required type="int">1</required> - <title>Paiement</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - <field><id>my_description</id> <type>TextAreaField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <height type="int">3</height> - <hidden type="int">0</hidden> - <max_length></max_length> - <max_linelength></max_linelength> - <max_lines></max_lines> - <required type="int">0</required> - <title>Description</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - <width type="int">40</width> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_many_lines">You entered too many lines.</message> - <message name="line_too_long">A line was too long.</message> - <message name="too_long">You entered too many characters.</message> - </messages> - </field> - <field><id>my_payment_ratio</id> <type>FloatField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">10</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <required type="int">0</required> - <title>Pourcentage du total</title> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="not_float">You did not enter a floating point number.</message> - </messages> - </field> - <field><id>my_payment_amount</id> <type>FloatField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">10</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <required type="int">0</required> - <title>Montant</title> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="not_float">You did not enter a floating point number.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>right</title> - <fields> - - <field><id>my_payment_mode</id> <type>ListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <extra_item></extra_item> - <first_item type="int">0</first_item> - <hidden type="int">0</hidden> - <items type="list">[]</items> - <required type="int">1</required> - <size type="int">1</size> - <title>Mode de paiement</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <items>here/portal_categories/payment_mode/getFormItemList</items> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - <field><id>my_payment_term</id> <type>IntegerField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">10</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <end></end> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <required type="int">1</required> - <start></start> - <title>Délai de paiement (jours)</title> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="not_integer">You did not enter an integer.</message> - <message name="integer_out_of_range">The integer you entered was out of range.</message> - </messages> - </field> - <field><id>my_payment_end_of_month</id> <type>CheckBoxField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default type="int">0</default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <title>Paiement en fin de mois</title> - </values> - <tales> - <default>here/getPaymentEndOfMonth</default> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - </messages> - </field> - <field><id>my_payment_additional_term</id> <type>IntegerField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">10</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <end></end> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <required type="int">0</required> - <start></start> - <title>Délai supplémentaire (jours)</title> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="not_integer">You did not enter an integer.</message> - <message name="integer_out_of_range">The integer you entered was out of range.</message> - </messages> - </field> - <field><id>my_trade_date</id> <type>ListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <extra_item></extra_item> - <first_item type="int">0</first_item> - <hidden type="int">0</hidden> - <items type="list">[]</items> - <required type="int">1</required> - <size type="int">1</size> - <title>Date de référence</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <items>here/portal_categories/trade_date/getFormItemList</items> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>center</title> - <fields> - - </fields> - </group> - <group> - <title>bottom</title> - <fields> - - </fields> - </group> - <group> - <title>hidden</title> - <fields> - - </fields> - </group> - </groups> -</form> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_trade/condition_vente_list.form b/product/Coramy/skins/coramy_trade/condition_vente_list.form deleted file mode 100755 index 5691367c9e..0000000000 --- a/product/Coramy/skins/coramy_trade/condition_vente_list.form +++ /dev/null @@ -1,62 +0,0 @@ -<?xml version="1.0"?> - -<form> - <title>Liste de conditions de vente</title> - <row_length>4</row_length> - <name>condition_vente_list</name> - <pt>form_list</pt> - <action></action> - <method>POST</method> - <enctype></enctype> - <encoding>UTF-8</encoding> - <stored_encoding>ISO-8859-1</stored_encoding> - <unicode_mode>false</unicode_mode> - <groups> - <group> - <title>Default</title> - <fields> - - <field><id>listbox</id> <type>ListBox</type> - <values> - <all_columns type="list">[('id', 'Condition'), ('default_source_section_title', 'Soci\xe9t\xe9'), ('group', 'Groupe client'), ('default_destination_decision_organisation_title', 'Command\xe9 par'), ('default_destination_title', 'Livrer \xe0')]</all_columns> - <all_editable_columns type="list">[]</all_editable_columns> - <alternate_name></alternate_name> - <columns type="list">[('id', 'Condition'), ('default_source_section_title', 'Soci\xe9t\xe9'), ('group', 'Groupe client'), ('default_destination_decision_organisation_title', 'Command\xe9 par'), ('default_destination_title', 'Livrer \xe0'), ('my_source_administration_title', 'Gestionaire')]</columns> - <css_class></css_class> - <default></default> - <default_params type="list">[]</default_params> - <description></description> - <domain_root_list type="list">[]</domain_root_list> - <domain_tree type="int">0</domain_tree> - <editable type="int">1</editable> - <editable_columns type="list">[]</editable_columns> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <global_attributes type="list">[]</global_attributes> - <hidden type="int">0</hidden> - <lines type="int">30</lines> - <list_action>list</list_action> - <list_method type="method">portal_catalog</list_method> - <meta_types type="list">[]</meta_types> - <portal_types type="list">[('Condition Vente', 'Condition Vente')]</portal_types> - <report_root_list type="list">[]</report_root_list> - <report_tree type="int">0</report_tree> - <search type="int">1</search> - <search_columns></search_columns> - <select type="int">1</select> - <selection_name>condition_vente_selection</selection_name> - <sort type="list">[('id', 'id')]</sort> - <sort_columns></sort_columns> - <stat_method></stat_method> - <title>Conditions de vente</title> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - </messages> - </field> - </fields> - </group> - </groups> -</form> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_trade/condition_vente_profil_view.form b/product/Coramy/skins/coramy_trade/condition_vente_profil_view.form deleted file mode 100755 index 6413a3bded..0000000000 --- a/product/Coramy/skins/coramy_trade/condition_vente_profil_view.form +++ /dev/null @@ -1,409 +0,0 @@ -<?xml version="1.0"?> - -<form> - <title>Profil de vente</title> - <row_length>4</row_length> - <name>trade_condition_profile_view</name> - <pt>form_view</pt> - <action>base_edit</action> - <method>POST</method> - <enctype></enctype> - <encoding>UTF-8</encoding> - <stored_encoding>ISO-8859-1</stored_encoding> - <unicode_mode>false</unicode_mode> - <groups> - <group> - <title>left</title> - <fields> - - <field><id>my_source_title</id> <type>RelationStringField</type> - <values> - <alternate_name></alternate_name> - <base_category>source</base_category> - <catalog_index>Title</catalog_index> - <css_class></css_class> - <default></default> - <default_module>organisation</default_module> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <jump_method>base_jump_relation</jump_method> - <max_length></max_length> - <portal_type type="list">[('Organisation', 'Organisation'), ('Category', 'Category'), ('Person', 'Person')]</portal_type> - <required type="int">0</required> - <title>Expédié par</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <update_method>base_update_relation</update_method> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - <field><id>my_source_section</id> <type>ListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <extra_item></extra_item> - <first_item type="int">0</first_item> - <hidden type="int">0</hidden> - <items type="list">[]</items> - <required type="int">0</required> - <size type="int">1</size> - <title>Pour le compte de</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <items>python:here.portal_categories.group.Coramy.getCategoryChildIdItemList(base=1,display_none_category=1)</items> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - <field><id>my_source_decision_title</id> <type>RelationStringField</type> - <values> - <alternate_name></alternate_name> - <base_category>source_decision</base_category> - <catalog_index>Title</catalog_index> - <css_class></css_class> - <default></default> - <default_module>organisation</default_module> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <jump_method>base_jump_relation</jump_method> - <max_length></max_length> - <portal_type type="list">[('Organisation', 'Organisation'), ('Category', 'Category'), ('Person', 'Person')]</portal_type> - <required type="int">0</required> - <title>Commandé à </title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <update_method>base_update_relation</update_method> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - <field><id>my_source_administration_title</id> <type>RelationStringField</type> - <values> - <alternate_name></alternate_name> - <base_category>source_administration</base_category> - <catalog_index>Title</catalog_index> - <css_class></css_class> - <default></default> - <default_module>organisation</default_module> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <jump_method>base_jump_relation</jump_method> - <max_length></max_length> - <portal_type type="list">[('Organisation', 'Organisation'), ('Category', 'Category'), ('Person', 'Person')]</portal_type> - <required type="int">0</required> - <title>Géré par</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <update_method>base_update_relation</update_method> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - <field><id>my_source_payment_title</id> <type>RelationStringField</type> - <values> - <alternate_name></alternate_name> - <base_category>source_payment</base_category> - <catalog_index>Title</catalog_index> - <css_class></css_class> - <default></default> - <default_module>organisation</default_module> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <jump_method>base_jump_relation</jump_method> - <max_length></max_length> - <portal_type type="list">[('Organisation', 'Organisation'), ('Category', 'Category'), ('Person', 'Person')]</portal_type> - <required type="int">0</required> - <title>Payer à </title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <update_method>base_update_relation</update_method> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>right</title> - <fields> - - <field><id>my_destination_title</id> <type>RelationStringField</type> - <values> - <alternate_name></alternate_name> - <base_category>destination</base_category> - <catalog_index>Title</catalog_index> - <css_class></css_class> - <default></default> - <default_module>organisation</default_module> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <jump_method>base_jump_relation</jump_method> - <max_length></max_length> - <portal_type type="list">[('Organisation', 'Organisation'), ('Category', 'Category'), ('Person', 'Person')]</portal_type> - <required type="int">0</required> - <title>Livrer à </title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <update_method>base_update_relation</update_method> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - <field><id>my_destination_section_title</id> <type>RelationStringField</type> - <values> - <alternate_name></alternate_name> - <base_category>destination_section</base_category> - <catalog_index>Title</catalog_index> - <css_class></css_class> - <default></default> - <default_module>organisation</default_module> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <jump_method>base_jump_relation</jump_method> - <max_length></max_length> - <portal_type type="list">[('Organisation', 'Organisation'), ('Category', 'Category'), ('Person', 'Person')]</portal_type> - <required type="int">0</required> - <title>Pour le compte de</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <update_method>base_update_relation</update_method> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - <field><id>my_destination_decision_organisation_title</id> <type>RelationStringField</type> - <values> - <alternate_name></alternate_name> - <base_category>destination_decision</base_category> - <catalog_index>Title</catalog_index> - <css_class></css_class> - <default></default> - <default_module>organisation</default_module> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <jump_method>base_jump_relation</jump_method> - <max_length></max_length> - <portal_type type="list">[('Organisation', 'Organisation'), ('Category', 'Category')]</portal_type> - <required type="int">0</required> - <title>Commandé par</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <update_method>base_update_relation</update_method> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - <field><id>my_destination_administration_organisation_title</id> <type>RelationStringField</type> - <values> - <alternate_name></alternate_name> - <base_category>destination_administration</base_category> - <catalog_index>Title</catalog_index> - <css_class></css_class> - <default></default> - <default_module>organisation</default_module> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <jump_method>base_jump_relation</jump_method> - <max_length></max_length> - <portal_type type="list">[('Organisation', 'Organisation'), ('Category', 'Category')]</portal_type> - <required type="int">0</required> - <title>Facturer à </title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <update_method>base_update_relation</update_method> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - <field><id>my_destination_payment_title</id> <type>RelationStringField</type> - <values> - <alternate_name></alternate_name> - <base_category>destination_payment</base_category> - <catalog_index>Title</catalog_index> - <css_class></css_class> - <default></default> - <default_module>organisation</default_module> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <jump_method>base_jump_relation</jump_method> - <max_length></max_length> - <portal_type type="list">[('Organisation', 'Organisation'), ('Category', 'Category'), ('Person', 'Person')]</portal_type> - <required type="int">0</required> - <title>Payé par</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <update_method>base_update_relation</update_method> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>center</title> - <fields> - - <field><id>my_source_decision_destination_reference</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <max_length></max_length> - <required type="int">0</required> - <title>Code fournisseur</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>bottom</title> - <fields> - - </fields> - </group> - <group> - <title>hidden</title> - <fields> - - </fields> - </group> - </groups> -</form> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_trade/condition_vente_sql_search.zsql b/product/Coramy/skins/coramy_trade/condition_vente_sql_search.zsql deleted file mode 100755 index 1b685ed632..0000000000 --- a/product/Coramy/skins/coramy_trade/condition_vente_sql_search.zsql +++ /dev/null @@ -1,61 +0,0 @@ -<dtml-comment> -title: -connection_id:erp5_sql_connection -max_rows:1000 -max_cache:100 -cache_time:0 -class_name:ZSQLBrain -class_file:zsqlbrain.py -</dtml-comment> -<params>source_section_uid="" -destination_uid="" -group_uid="" -destination_decision_uid=""</params> -SELECT DISTINCT condition.id, condition.Description, condition.path, condition.uid, condition.portal_type -FROM catalog AS condition -<dtml-if expr="source_section_uid<>''"> -, category as cat1 -</dtml-if> -<dtml-if expr="destination_uid<>''"> -, category as cat2 -</dtml-if> -<dtml-if expr="destination_decision_uid<>''"> -, category as cat3 -</dtml-if> -<dtml-if expr="group_uid<>''"> -, category as cat4 -</dtml-if> -<dtml-if expr="destination_uid==''"> -LEFT JOIN category as cat2 -ON (cat2.uid=condition.uid -AND cat2.base_category_uid = <dtml-var "portal_categories.destination.uid">) -</dtml-if> -WHERE condition.portal_type="Condition Vente" - -<dtml-if expr="source_section_uid<>''"> -AND condition.uid = cat1.uid -AND cat1.category_uid = "<dtml-var source_section_uid>" -AND cat1.base_category_uid = <dtml-var "portal_categories.source_section.uid"> -AND cat1.category_strict_membership = 1 -</dtml-if> - -<dtml-if expr="destination_uid<>''"> -AND condition.uid = cat2.uid -AND cat2.category_uid = "<dtml-var destination_uid>" -AND cat2.base_category_uid = <dtml-var "portal_categories.destination.uid"> -</dtml-if> -<dtml-if expr="destination_uid==''"> -AND cat2.uid IS NULL -</dtml-if> - -<dtml-if expr="group_uid<>''"> -AND condition.uid = cat4.uid -AND cat4.category_uid = "<dtml-var group_uid>" -AND cat4.base_category_uid = <dtml-var "portal_categories.group.uid"> -</dtml-if> - -<dtml-if expr="destination_decision_uid<>''"> -AND condition.uid = cat3.uid -AND cat3.category_uid = "<dtml-var destination_decision_uid>" -AND cat3.base_category_uid = <dtml-var "portal_categories.destination_decision.uid"> -</dtml-if> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_trade/condition_vente_view.form b/product/Coramy/skins/coramy_trade/condition_vente_view.form deleted file mode 100755 index 9169728c24..0000000000 --- a/product/Coramy/skins/coramy_trade/condition_vente_view.form +++ /dev/null @@ -1,493 +0,0 @@ -<?xml version="1.0"?> - -<form> - <title>Condition de vente</title> - <row_length>4</row_length> - <name>condition_vente_view</name> - <pt>form_view</pt> - <action>base_edit</action> - <method>POST</method> - <enctype></enctype> - <encoding>UTF-8</encoding> - <stored_encoding>ISO-8859-1</stored_encoding> - <unicode_mode>false</unicode_mode> - <groups> - <group> - <title>left</title> - <fields> - - <field><id>my_id</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <max_length></max_length> - <required type="int">1</required> - <title>Condition</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - <field><id>my_source_section</id> <type>ListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <extra_item></extra_item> - <first_item type="int">0</first_item> - <hidden type="int">0</hidden> - <items type="list">[]</items> - <required type="int">0</required> - <size type="int">1</size> - <title>Société</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <items>python:here.portal_categories.group.Coramy.getCategoryChildIdItemList(base=1,display_none_category=1)</items> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - <field><id>my_description</id> <type>TextAreaField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <height type="int">3</height> - <hidden type="int">0</hidden> - <max_length></max_length> - <max_linelength></max_linelength> - <max_lines></max_lines> - <required type="int">0</required> - <title>Description</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - <width type="int">40</width> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_many_lines">You entered too many lines.</message> - <message name="line_too_long">A line was too long.</message> - <message name="too_long">You entered too many characters.</message> - </messages> - </field> - <field><id>my_source_administration_title</id> <type>RelationStringField</type> - <values> - <alternate_name></alternate_name> - <base_category>source_administration</base_category> - <catalog_index>Title</catalog_index> - <css_class></css_class> - <default></default> - <default_module>person</default_module> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <jump_method>base_jump_relation</jump_method> - <max_length></max_length> - <portal_type type="list">[('Person', 'Person')]</portal_type> - <required type="int">0</required> - <title>Gestionaire</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <update_method>base_update_relation</update_method> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - <field><id>my_price_currency</id> <type>ListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <extra_item></extra_item> - <first_item type="int">0</first_item> - <hidden type="int">0</hidden> - <items type="list">[]</items> - <required type="int">0</required> - <size type="int">1</size> - <title>Devise</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <items>python:[('','')]+map(lambda x:(x.id,'devise/%s' %x.id),here.devise.objectValues())</items> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - <field><id>my_incoterm</id> <type>ListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <extra_item></extra_item> - <first_item type="int">0</first_item> - <hidden type="int">0</hidden> - <items type="list">[]</items> - <required type="int">0</required> - <size type="int">1</size> - <title>Incoterm</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <items>python:here.portal_categories.incoterm.getCategoryChildItemList(display_id = 'getTitle', display_none_category=1)</items> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - <field><id>my_delivery_mode</id> <type>ListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <extra_item></extra_item> - <first_item type="int">0</first_item> - <hidden type="int">0</hidden> - <items type="list">[]</items> - <required type="int">0</required> - <size type="int">1</size> - <title>Mode de livraison</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <items>here/portal_categories/delivery_mode/getFormItemList</items> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>right</title> - <fields> - - <field><id>my_destination_title</id> <type>RelationStringField</type> - <values> - <alternate_name></alternate_name> - <base_category>destination</base_category> - <catalog_index>Title</catalog_index> - <css_class></css_class> - <default></default> - <default_module>organisation</default_module> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <jump_method>base_jump_relation</jump_method> - <max_length></max_length> - <portal_type type="list">[('Organisation', 'Organisation'), ('Category', 'Category')]</portal_type> - <required type="int">0</required> - <title>Livrer à </title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <update_method>base_update_relation</update_method> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - <field><id>my_group</id> <type>ListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <extra_item></extra_item> - <first_item type="int">0</first_item> - <hidden type="int">0</hidden> - <items type="list">[]</items> - <required type="int">0</required> - <size type="int">1</size> - <title>Groupe</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <items>here/portal_categories/group/getFormItemList</items> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - <field><id>my_activity</id> <type>ListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <extra_item></extra_item> - <first_item type="int">0</first_item> - <hidden type="int">0</hidden> - <items type="list">[]</items> - <required type="int">0</required> - <size type="int">1</size> - <title>Activité</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <items>here/portal_categories/activity/getFormItemList</items> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - <field><id>my_effective_date</id> <type>DateTimeField</type> - <values> - <allow_empty_time type="int">0</allow_empty_time> - <alternate_name></alternate_name> - <ampm_time_style type="int">0</ampm_time_style> - <css_class></css_class> - <date_only type="int">1</date_only> - <date_separator>/</date_separator> - <default_now type="int">0</default_now> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <hidden type="int">0</hidden> - <input_order>dmy</input_order> - <input_style>text</input_style> - <required type="int">0</required> - <time_separator>:</time_separator> - <title>Valide à partir du</title> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="not_datetime">You did not enter a valid date and time.</message> - <message name="datetime_out_of_range">The date and time you entered were out of range.</message> - </messages> - </field> - <field><id>my_expiration_date</id> <type>DateTimeField</type> - <values> - <allow_empty_time type="int">0</allow_empty_time> - <alternate_name></alternate_name> - <ampm_time_style type="int">0</ampm_time_style> - <css_class></css_class> - <date_only type="int">1</date_only> - <date_separator>/</date_separator> - <default_now type="int">0</default_now> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <hidden type="int">0</hidden> - <input_order>dmy</input_order> - <input_style>text</input_style> - <required type="int">0</required> - <time_separator>:</time_separator> - <title>Expire le</title> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="not_datetime">You did not enter a valid date and time.</message> - <message name="datetime_out_of_range">The date and time you entered were out of range.</message> - </messages> - </field> - <field><id>trade_condition_state</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <max_length></max_length> - <required type="int">0</required> - <title>Etat</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <default>python:here.portal_workflow.getInfoFor(here, 'trade_condition_state')</default> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - <field><id>spacer</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">1</hidden> - <max_length></max_length> - <required type="int">0</required> - <title> </title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>center</title> - <fields> - - <field><id>my_comment</id> <type>TextAreaField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <height type="int">3</height> - <hidden type="int">0</hidden> - <max_length></max_length> - <max_linelength></max_linelength> - <max_lines></max_lines> - <required type="int">0</required> - <title>Commentaires</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - <width type="int">80</width> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_many_lines">You entered too many lines.</message> - <message name="line_too_long">A line was too long.</message> - <message name="too_long">You entered too many characters.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>bottom</title> - <fields> - - </fields> - </group> - <group> - <title>hidden</title> - <fields> - - </fields> - </group> - </groups> -</form> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_trade/container_aggregated_view.form b/product/Coramy/skins/coramy_trade/container_aggregated_view.form deleted file mode 100755 index 39615d7eb6..0000000000 --- a/product/Coramy/skins/coramy_trade/container_aggregated_view.form +++ /dev/null @@ -1,317 +0,0 @@ -<?xml version="1.0"?> - -<form> - <title>Colis</title> - <row_length>4</row_length> - <name>container_view</name> - <pt>form_view</pt> - <action>base_edit</action> - <method>POST</method> - <enctype>multipart/form-data</enctype> - <encoding>UTF-8</encoding> - <stored_encoding>ISO-8859-1</stored_encoding> - <unicode_mode>false</unicode_mode> - <groups> - <group> - <title>left</title> - <fields> - - <field><id>my_id</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">5</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <max_length></max_length> - <required type="int">1</required> - <title>Colis n°</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - <field><id>my_description</id> <type>TextAreaField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <height type="int">2</height> - <hidden type="int">0</hidden> - <max_length></max_length> - <max_linelength></max_linelength> - <max_lines></max_lines> - <required type="int">0</required> - <title>Description</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - <width type="int">40</width> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_many_lines">You entered too many lines.</message> - <message name="line_too_long">A line was too long.</message> - <message name="too_long">You entered too many characters.</message> - </messages> - </field> - <field><id>my_target_total_quantity</id> <type>FloatField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">10</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">1</hidden> - <required type="int">0</required> - <title>Quantité</title> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <title>python:'Quantité : %.2f' % here.getTargetTotalQuantity()</title> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="not_float">You did not enter a floating point number.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>right</title> - <fields> - - <field><id>my_resource_relative_url</id> <type>RelationStringField</type> - <values> - <alternate_name></alternate_name> - <base_category>resource</base_category> - <catalog_index>relative_url</catalog_index> - <css_class></css_class> - <default></default> - <default_module>composant</default_module> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">40</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <jump_method>base_jump_relation</jump_method> - <max_length></max_length> - <portal_type type="list">[('Composant', 'Composant'), ('Category', 'Category')]</portal_type> - <required type="int">0</required> - <title>Conteneur</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <update_method>base_update_relation</update_method> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - <field><id>my_variation_base_category_list</id> <type>MultiListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default type="list">[]</default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <extra_item></extra_item> - <hidden type="int">0</hidden> - <items type="list">[]</items> - <required type="int">0</required> - <size type="int">2</size> - <title>Axes variation</title> - <unicode type="int">0</unicode> - <view_separator><br /> -</view_separator> - </values> - <tales> - <items>here/getVariationRangeBaseCategoryList</items> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - <field><id>my_variation_category_list</id> <type>MultiListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default type="list">[]</default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <extra_item></extra_item> - <hidden type="int">0</hidden> - <items type="list">[]</items> - <required type="int">0</required> - <size type="int">4</size> - <title>Variantes</title> - <unicode type="int">0</unicode> - <view_separator><br /> -</view_separator> - </values> - <tales> - <items>here/getVariationRangeCategoryItemList</items> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>center</title> - <fields> - - </fields> - </group> - <group> - <title>bottom</title> - <fields> - - <field><id>listbox</id> <type>ListBox</type> - <values> - <all_columns type="list">[]</all_columns> - <all_editable_columns type="list">[]</all_editable_columns> - <alternate_name></alternate_name> - <columns type="list">[('Id', 'Ligne n\xb0'), ('resource_title', 'Produit'), ('variation_text', 'Variantes'), ('target_quantity', 'Quantit\xe9'), ('quantity_unit', 'Unit\xe9')]</columns> - <css_class></css_class> - <default></default> - <default_params type="list">[]</default_params> - <description></description> - <domain_root_list type="list">[]</domain_root_list> - <domain_tree type="int">0</domain_tree> - <editable type="int">1</editable> - <editable_columns type="list">[('target_quantity', 'target_quantity')]</editable_columns> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <global_attributes type="list">[]</global_attributes> - <hidden type="int">0</hidden> - <lines type="int">100</lines> - <list_action>folder_contents</list_action> - <list_method type="method">searchFolder</list_method> - <meta_types type="list">[]</meta_types> - <portal_types type="list">[]</portal_types> - <report_root_list type="list">[]</report_root_list> - <report_tree type="int">0</report_tree> - <search type="int">0</search> - <search_columns type="list">[]</search_columns> - <select type="int">0</select> - <selection_name>container_line_selection</selection_name> - <sort type="list">[('variation_text', 'variation_text')]</sort> - <sort_columns></sort_columns> - <stat_method></stat_method> - <title>Lignes de colis</title> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>hidden</title> - <fields> - - <field><id>listbox_quantity_unit</id> <type>ListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <extra_item></extra_item> - <first_item type="int">0</first_item> - <hidden type="int">0</hidden> - <items type="list">[]</items> - <required type="int">0</required> - <size type="int">1</size> - <title>Unité</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <items>here/portal_categories/quantity_unit/getFormItemList</items> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - <field><id>listbox_target_quantity</id> <type>FloatField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">10</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <required type="int">0</required> - <title>Inventory</title> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="not_float">You did not enter a floating point number.</message> - </messages> - </field> - </fields> - </group> - </groups> -</form> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_trade/container_line_target_quantity_view.form b/product/Coramy/skins/coramy_trade/container_line_target_quantity_view.form deleted file mode 100755 index aeebf346c7..0000000000 --- a/product/Coramy/skins/coramy_trade/container_line_target_quantity_view.form +++ /dev/null @@ -1,347 +0,0 @@ -<?xml version="1.0"?> - -<form> - <title>Ligne de colis</title> - <row_length>4</row_length> - <name>container_line_quantity_view</name> - <pt>form_view</pt> - <action>base_edit</action> - <method>POST</method> - <enctype>multipart/form-data</enctype> - <encoding>UTF-8</encoding> - <stored_encoding>ISO-8859-1</stored_encoding> - <unicode_mode>false</unicode_mode> - <groups> - <group> - <title>Default</title> - <fields> - - <field><id>my_id</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">10</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <max_length></max_length> - <required type="int">1</required> - <title>Ligne n°</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>right</title> - <fields> - - </fields> - </group> - <group> - <title>center</title> - <fields> - - </fields> - </group> - <group> - <title>bottom</title> - <fields> - - <field><id>matrixbox</id> <type>MatrixBox</type> - <values> - <all_editable_attributes type="list">[('ttarget_quantity', 'target_quantity'), ('quantity', 'quantity'), ('price', 'price'), ('predicate_value', 'predicate_value'), ('variation_category_list', 'variation_category_list')]</all_editable_attributes> - <alternate_name></alternate_name> - <cell_base_id>movement</cell_base_id> - <cell_range type="list">[]</cell_range> - <columns type="list">[('None', 'None')]</columns> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <editable_attributes type="list">[('target_quantity', 'target_quantity'), ('quantity', 'quantity'), ('price', 'price'), ('predicate_value', 'predicate_value'), ('variation_category_list', 'variation_category_list')]</editable_attributes> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <getter_method></getter_method> - <global_attributes type="list">[('domain_base_category_list', 'domain_base_category_list'), ('mapped_value_property_list', 'mapped_value_property_list'), ('predicate_operator', 'predicate_operator')]</global_attributes> - <hidden type="int">0</hidden> - <lines type="list">[('None', 'None')]</lines> - <setter_method></setter_method> - <tabs type="list">[('None', 'None')]</tabs> - <title>matrixbox</title> - <update_cell_range type="int">1</update_cell_range> - </values> - <tales> - <columns>python:here.order_line_matrix_item_list(base_category_list = ('taille',), base=1)</columns> - <lines>python:here.order_line_matrix_item_list(base_category_list = ('coloris','variante'), base=1)</lines> - <tabs>python:here.order_line_matrix_item_list(base_category_list = ('taille','coloris','variante'), base=1, include=0)</tabs> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - </messages> - </field> - <field><id>domain_base_category_list</id> <type>LinesField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default type="list">[]</default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <height type="int">5</height> - <hidden type="int">1</hidden> - <max_length></max_length> - <max_linelength></max_linelength> - <max_lines></max_lines> - <required type="int">0</required> - <title>Valid Domain</title> - <unicode type="int">0</unicode> - <view_separator><br /> -</view_separator> - <whitespace_preserve type="int">0</whitespace_preserve> - <width type="int">40</width> - </values> - <tales> - <default>here/getVariationBaseCategoryList</default> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_many_lines">You entered too many lines.</message> - <message name="line_too_long">A line was too long.</message> - <message name="too_long">You entered too many characters.</message> - </messages> - </field> - <field><id>predicate_operator</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default>SUPERSET_OF</default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">1</hidden> - <max_length></max_length> - <required type="int">0</required> - <title>Operator</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - <field><id>mapped_value_property_list</id> <type>LinesField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default type="list">['target_quantity', 'quantity', 'price']</default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <height type="int">5</height> - <hidden type="int">1</hidden> - <max_length></max_length> - <max_linelength></max_linelength> - <max_lines></max_lines> - <required type="int">0</required> - <title>Modified categories</title> - <unicode type="int">0</unicode> - <view_separator><br /> -</view_separator> - <whitespace_preserve type="int">0</whitespace_preserve> - <width type="int">40</width> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_many_lines">You entered too many lines.</message> - <message name="line_too_long">A line was too long.</message> - <message name="too_long">You entered too many characters.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>hidden</title> - <fields> - - <field><id>matrixbox_predicate_value</id> <type>LinesField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default type="list">[]</default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <height type="int">5</height> - <hidden type="int">1</hidden> - <max_length></max_length> - <max_linelength></max_linelength> - <max_lines></max_lines> - <required type="int">0</required> - <title>matrixbox_predicate_value</title> - <unicode type="int">0</unicode> - <view_separator><br /> -</view_separator> - <whitespace_preserve type="int">0</whitespace_preserve> - <width type="int">40</width> - </values> - <tales> - <default>python:cell_index</default> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_many_lines">You entered too many lines.</message> - <message name="line_too_long">A line was too long.</message> - <message name="too_long">You entered too many characters.</message> - </messages> - </field> - <field><id>matrixbox_variation_category_list</id> <type>LinesField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default type="list">[]</default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <height type="int">5</height> - <hidden type="int">1</hidden> - <max_length></max_length> - <max_linelength></max_linelength> - <max_lines></max_lines> - <required type="int">0</required> - <title>matrixbox_predicate_value</title> - <unicode type="int">0</unicode> - <view_separator><br /> -</view_separator> - <whitespace_preserve type="int">0</whitespace_preserve> - <width type="int">40</width> - </values> - <tales> - <default>python:cell_index</default> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_many_lines">You entered too many lines.</message> - <message name="line_too_long">A line was too long.</message> - <message name="too_long">You entered too many characters.</message> - </messages> - </field> - <field><id>matrixbox_price</id> <type>FloatField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">10</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">1</hidden> - <required type="int">0</required> - <title>matrixbox_price</title> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <default>python:cell.getProperty('price')</default> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="not_float">You did not enter a floating point number.</message> - </messages> - </field> - <field><id>matrixbox_quantity</id> <type>FloatField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">10</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">1</hidden> - <required type="int">0</required> - <title>matrixbox_quantity</title> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <default>python:cell.getProperty('quantity')</default> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="not_float">You did not enter a floating point number.</message> - </messages> - </field> - <field><id>matrixbox_target_quantity</id> <type>FloatField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">10</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <required type="int">0</required> - <title>matrixbox_target_quantity</title> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <default>python:cell.getProperty('target_quantity')</default> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="not_float">You did not enter a floating point number.</message> - </messages> - </field> - </fields> - </group> - </groups> -</form> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_trade/container_line_view.form b/product/Coramy/skins/coramy_trade/container_line_view.form deleted file mode 100755 index 0b596d13eb..0000000000 --- a/product/Coramy/skins/coramy_trade/container_line_view.form +++ /dev/null @@ -1,305 +0,0 @@ -<?xml version="1.0"?> - -<form> - <title>Ligne de colis</title> - <row_length>4</row_length> - <name>container_line_view</name> - <pt>form_view</pt> - <action>base_edit</action> - <method>POST</method> - <enctype>multipart/form-data</enctype> - <encoding>UTF-8</encoding> - <stored_encoding>ISO-8859-1</stored_encoding> - <unicode_mode>false</unicode_mode> - <groups> - <group> - <title>left</title> - <fields> - - <field><id>my_id</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">5</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <max_length></max_length> - <required type="int">1</required> - <title>Ligne n°</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - <field><id>my_description</id> <type>TextAreaField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <height type="int">2</height> - <hidden type="int">0</hidden> - <max_length></max_length> - <max_linelength></max_linelength> - <max_lines></max_lines> - <required type="int">0</required> - <title>Description</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - <width type="int">40</width> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_many_lines">You entered too many lines.</message> - <message name="line_too_long">A line was too long.</message> - <message name="too_long">You entered too many characters.</message> - </messages> - </field> - <field><id>my_resource_relative_url</id> <type>RelationStringField</type> - <values> - <alternate_name></alternate_name> - <base_category>resource</base_category> - <catalog_index>relative_url</catalog_index> - <css_class></css_class> - <default></default> - <default_module>modele</default_module> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">40</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <jump_method>base_jump_relation</jump_method> - <max_length></max_length> - <portal_type type="list">[('Composant', 'Composant'), ('Tissu', 'Tissu'), ('Modele', 'Modele'), ('Forme', 'Forme'), ('Vetement', 'Vetement'), ('Category', 'Category'), ('Gamme', 'Gamme')]</portal_type> - <required type="int">0</required> - <title>Produit</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <update_method>base_update_relation</update_method> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - <field><id>my_variation_base_category_list</id> <type>MultiListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default type="list">[]</default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <extra_item></extra_item> - <hidden type="int">0</hidden> - <items type="list">[]</items> - <required type="int">0</required> - <size type="int">3</size> - <title>Axes variation</title> - <unicode type="int">0</unicode> - <view_separator><br /> -</view_separator> - </values> - <tales> - <items>here/getVariationRangeBaseCategoryList</items> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - <field><id>my_variation_category_list</id> <type>MultiListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default type="list">[]</default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <extra_item></extra_item> - <hidden type="int">0</hidden> - <items type="list">[]</items> - <required type="int">0</required> - <size type="int">8</size> - <title>Variantes</title> - <unicode type="int">0</unicode> - <view_separator><br /> -</view_separator> - </values> - <tales> - <items>here/getVariationRangeCategoryItemList</items> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>right</title> - <fields> - - <field><id>my_target_quantity</id> <type>FloatField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">10</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <required type="int">0</required> - <title>Quantité par défaut</title> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="not_float">You did not enter a floating point number.</message> - </messages> - </field> - <field><id>my_quantity_unit</id> <type>ListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <extra_item></extra_item> - <first_item type="int">0</first_item> - <hidden type="int">0</hidden> - <items type="list">[]</items> - <required type="int">0</required> - <size type="int">1</size> - <title>Unité</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <items>here/getQuantityUnitRangeItemList</items> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - <field><id>spacer</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">1</hidden> - <max_length></max_length> - <required type="int">0</required> - <title> </title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - <field><id>my_target_total_quantity</id> <type>FloatField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">10</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">1</hidden> - <required type="int">0</required> - <title>Quantité</title> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <title>python:'Quantité : %.2f' % here.getTargetTotalQuantity()</title> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="not_float">You did not enter a floating point number.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>center</title> - <fields> - - </fields> - </group> - <group> - <title>bottom</title> - <fields> - - </fields> - </group> - <group> - <title>hidden</title> - <fields> - - </fields> - </group> - </groups> -</form> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_trade/container_list.form b/product/Coramy/skins/coramy_trade/container_list.form deleted file mode 100755 index 34f1748790..0000000000 --- a/product/Coramy/skins/coramy_trade/container_list.form +++ /dev/null @@ -1,62 +0,0 @@ -<?xml version="1.0"?> - -<form> - <title>Liste de colis</title> - <row_length>4</row_length> - <name>container_list</name> - <pt>form_list</pt> - <action></action> - <method>POST</method> - <enctype></enctype> - <encoding>UTF-8</encoding> - <stored_encoding>ISO-8859-1</stored_encoding> - <unicode_mode>false</unicode_mode> - <groups> - <group> - <title>Default</title> - <fields> - - <field><id>listbox</id> <type>ListBox</type> - <values> - <all_columns type="list">[]</all_columns> - <all_editable_columns type="list">[]</all_editable_columns> - <alternate_name></alternate_name> - <columns type="list">[('Id', 'Colis'), ('int_index', 'Num\xe9ro'), ('resource_title', 'Conteneur'), ('variation_text', 'Variantes'), ('gross_weight', 'Poids brut'), ('target_total_quantity', 'Quantit\xe9 colis\xe9e'), ('Description', 'Description')]</columns> - <css_class></css_class> - <default></default> - <default_params type="list">[]</default_params> - <description></description> - <domain_root_list type="list">[]</domain_root_list> - <domain_tree type="int">0</domain_tree> - <editable type="int">1</editable> - <editable_columns type="list">[]</editable_columns> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <global_attributes type="list">[]</global_attributes> - <hidden type="int">0</hidden> - <lines type="int">100</lines> - <list_action>folder_contents</list_action> - <list_method type="method">searchFolder</list_method> - <meta_types type="list">[]</meta_types> - <portal_types type="list">[('Container', 'Container')]</portal_types> - <report_root_list type="list">[]</report_root_list> - <report_tree type="int">0</report_tree> - <search type="int">1</search> - <search_columns type="list">[]</search_columns> - <select type="int">1</select> - <selection_name>container_selection</selection_name> - <sort type="list">[('id', 'id')]</sort> - <sort_columns></sort_columns> - <stat_method></stat_method> - <title>Colis</title> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - </messages> - </field> - </fields> - </group> - </groups> -</form> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_trade/container_view.form b/product/Coramy/skins/coramy_trade/container_view.form deleted file mode 100755 index 58008181c1..0000000000 --- a/product/Coramy/skins/coramy_trade/container_view.form +++ /dev/null @@ -1,398 +0,0 @@ -<?xml version="1.0"?> - -<form> - <title>Colis</title> - <row_length>4</row_length> - <name>container_view</name> - <pt>form_view</pt> - <action>base_edit</action> - <method>POST</method> - <enctype>multipart/form-data</enctype> - <encoding>UTF-8</encoding> - <stored_encoding>ISO-8859-1</stored_encoding> - <unicode_mode>false</unicode_mode> - <groups> - <group> - <title>left</title> - <fields> - - <field><id>my_id</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">10</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <max_length></max_length> - <required type="int">1</required> - <title>Colis</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - <field><id>my_int_index</id> <type>IntegerField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">5</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <end></end> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <required type="int">1</required> - <start></start> - <title>Colis n°</title> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="not_integer">You did not enter an integer.</message> - <message name="integer_out_of_range">The integer you entered was out of range.</message> - </messages> - </field> - <field><id>my_description</id> <type>TextAreaField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <height type="int">2</height> - <hidden type="int">0</hidden> - <max_length></max_length> - <max_linelength></max_linelength> - <max_lines></max_lines> - <required type="int">0</required> - <title>Description</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - <width type="int">40</width> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_many_lines">You entered too many lines.</message> - <message name="line_too_long">A line was too long.</message> - <message name="too_long">You entered too many characters.</message> - </messages> - </field> - <field><id>my_gross_weight</id> <type>FloatField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">10</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <required type="int">0</required> - <title>Poids brut (kg)</title> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="not_float">You did not enter a floating point number.</message> - </messages> - </field> - <field><id>my_serial_number</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <max_length></max_length> - <required type="int">0</required> - <title>N° de série</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - <field><id>my_target_total_quantity</id> <type>FloatField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">10</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">1</hidden> - <required type="int">0</required> - <title>Quantité colisée</title> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <title>python:'Quantité colisée: %.2f' % here.getTargetTotalQuantity()</title> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="not_float">You did not enter a floating point number.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>right</title> - <fields> - - <field><id>my_resource_relative_url</id> <type>RelationStringField</type> - <values> - <alternate_name></alternate_name> - <base_category>resource</base_category> - <catalog_index>relative_url</catalog_index> - <css_class></css_class> - <default></default> - <default_module>composant</default_module> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">40</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <jump_method>base_jump_relation</jump_method> - <max_length></max_length> - <portal_type type="list">[('Composant', 'Composant'), ('Category', 'Category')]</portal_type> - <required type="int">0</required> - <title>Conteneur</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <update_method>base_update_relation</update_method> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - <field><id>my_variation_base_category_list</id> <type>MultiListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default type="list">[]</default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <extra_item></extra_item> - <hidden type="int">0</hidden> - <items type="list">[]</items> - <required type="int">0</required> - <size type="int">2</size> - <title>Axes variation</title> - <unicode type="int">0</unicode> - <view_separator><br /> -</view_separator> - </values> - <tales> - <items>here/getVariationRangeBaseCategoryList</items> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - <field><id>my_variation_category_list</id> <type>MultiListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default type="list">[]</default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <extra_item></extra_item> - <hidden type="int">0</hidden> - <items type="list">[]</items> - <required type="int">0</required> - <size type="int">4</size> - <title>Variantes</title> - <unicode type="int">0</unicode> - <view_separator><br /> -</view_separator> - </values> - <tales> - <items>here/getVariationRangeCategoryItemList</items> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>center</title> - <fields> - - </fields> - </group> - <group> - <title>bottom</title> - <fields> - - <field><id>listbox</id> <type>ListBox</type> - <values> - <all_columns type="list">[]</all_columns> - <all_editable_columns type="list">[]</all_editable_columns> - <alternate_name></alternate_name> - <columns type="list">[('resource_title', 'Produit'), ('variation_text', 'Variantes'), ('Variated_getTailleClient', 'Taille client'), ('target_quantity', 'Quantit\xe9'), ('quantity_unit', 'Unit\xe9')]</columns> - <css_class></css_class> - <default></default> - <default_params type="list">[]</default_params> - <description></description> - <domain_root_list type="list">[]</domain_root_list> - <domain_tree type="int">0</domain_tree> - <editable type="int">1</editable> - <editable_columns type="list">[('target_quantity', 'target_quantity')]</editable_columns> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <global_attributes type="list">[]</global_attributes> - <hidden type="int">0</hidden> - <lines type="int">100</lines> - <list_action>folder_contents</list_action> - <list_method type="method">Container_zGetCellList</list_method> - <meta_types type="list">[]</meta_types> - <portal_types type="list">[]</portal_types> - <report_root_list type="list">[]</report_root_list> - <report_tree type="int">0</report_tree> - <search type="int">0</search> - <search_columns type="list">[]</search_columns> - <select type="int">0</select> - <selection_name>container_line_selection</selection_name> - <sort type="list">[('variation_text', 'variation_text')]</sort> - <sort_columns></sort_columns> - <stat_method></stat_method> - <title>Contenu du colis</title> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>hidden</title> - <fields> - - <field><id>listbox_quantity_unit</id> <type>ListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <extra_item></extra_item> - <first_item type="int">0</first_item> - <hidden type="int">0</hidden> - <items type="list">[]</items> - <required type="int">0</required> - <size type="int">1</size> - <title>Unité</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <items>here/portal_categories/quantity_unit/getFormItemList</items> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - <field><id>listbox_target_quantity</id> <type>FloatField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">10</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <required type="int">0</required> - <title>Inventory</title> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="not_float">You did not enter a floating point number.</message> - </messages> - </field> - </fields> - </group> - </groups> -</form> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_trade/copy_of_echantillon_print.pt b/product/Coramy/skins/coramy_trade/copy_of_echantillon_print.pt deleted file mode 100755 index e6c773af9d..0000000000 --- a/product/Coramy/skins/coramy_trade/copy_of_echantillon_print.pt +++ /dev/null @@ -1,210 +0,0 @@ -<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> - -<html> - - <head> - <meta http-equiv="content-type" content="text/html;charset=ISO-8859-1"> - <title tal:content="here/getTitle">Coramy</title> -<link rel=stylesheet type="text/css" href="echantillon"> - - - </head> - - <body - tal:define="client python:here.getDefaultValue('destination',portal_type=['Organisation']); - acheteur python:here.getDefaultValue('contact',portal_type=['Person']); - lignes_cde python:here.contentValues(filter={'portal_type':'Sample Order Line'}); - lignes_index python:here.ordered_lines(lignes_cde=lignes_cde); - nb_echantillons python:len(lignes_cde); - col_nb python:2; - lin_nb python:2; - nb_pages python:here.echantillon_page_count(total_nb=nb_echantillons,on_page=col_nb*lin_nb) - "> - - <table tal:repeat="page_no python:range(nb_pages)" class="PageA4" width="660" height="955" border="0" cellpadding="0" cellspacing="0"> - <tr> - <td colspan="3"><p align="center"> - <span class="Coramy">Coramy</span><span class="Entete">5 bis, rue Denis Cordonnier - 59820 GRAVELINES - Tel : 03 28 51 91 51 - - Fax : 03 28 23 34 96</span><br>Échantillonnage N° <span tal:content="here/getId"/> - <span tal:define="url_items python:modules['string'].split(acheteur.getGender(),'/')" - tal:content="python:(len(url_items)-1)*url_items[len(url_items)-1]"> - </span> <span tal:content="python:modules['string'].capwords(modules['string'].lower(acheteur.getTitle()))"/> - <span tal:content="python:modules['string'].capwords(modules['string'].lower(client.getTitle()))"/> - - <span tal:content="python:modules['string'].capwords(modules['string'].lower(here.getDescription()))"/><br> <br></p></td> - <td></td> - <td></td> - - </tr> - - <span tal:repeat="i python:range(lin_nb)"> - <tr valign="top" class="Border"> - - - <span tal:repeat="j python:map((lambda x:x+(page_no*col_nb*lin_nb)+(i*col_nb)),range(col_nb))"> - <span tal:condition="python:j<nb_echantillons"> - <td valign="top" align="center" width="50%" class="Border" tal:define="ligne python:lignes_cde[lignes_index[j]]"> - - <span tal:condition="python:ligne.getDefaultValue('resource',portal_type=['Modele'])<>None"> - <span tal:define="modele python:ligne.getDefaultValue('resource',portal_type=['Modele']); - coloris_list python:modele.contentValues(filter={'portal_type':'Variante Modele'}) - "> - - <span tal:define="url_items1 python:modules['string'].split(ligne.getResourceRelativeUrl(),'/')" - tal:content="structure python:'Modèle : '+'<b>'+url_items1[len(url_items1)-1]+'</b>'">modele</span> - - <span tal:condition="python:ligne.getColoris() <> None"> - <span tal:define="url_items2 python:modules['string'].split(ligne.getColoris(),'/')" - tal:content="structure python:' coloris '+url_items2[len(url_items2)-1]">modele</span> - </span> - - - <br> - <span tal:content="python:modules['string'].capwords(modules['string'].lower(modele.getComposition()))"/> - <br> - <table border="0" cellpadding="0" cellspacing="0"> - <tr> - <td width="280" height="280" align="center" valign="top"> - <span tal:repeat="coloris coloris_list"> - <span tal:condition="python:coloris.getRelativeUrl()==ligne.getColoris()"> - <img tal:condition="python:coloris.width()>=coloris.height()" - src="" tal:attributes="src python:coloris.absolute_url() + '?display=small&format=jpeg&resolution=150'" width="100%"/> - <img tal:condition="python:coloris.width()<coloris.height()" - src="" tal:attributes="src python:coloris.absolute_url() + '?display=small&format=jpeg&resolution=150'" height="100%"/> - </span> - </span> - </td> - </tr> - </table> - <br> - - <span tal:define="tarif_list python:ligne.contentValues(filter={'portal_type':'Element Tarif'})"> - <table border="1" cellspacing="0" cellpadding="0" width="100%"> - <tr> - <span tal:condition="python:len(tarif_list)>0"> - <td><i>Prix €/Quantités</i></td> - <td tal:condition="python:tarif_list[0].getCell(None, '00300', base_id='destination_base_price')<>None" - tal:content="python:'300p'"> - </td> - <td tal:condition="python:tarif_list[0].getCell(None, '01000', base_id='destination_base_price')<>None" - tal:content="python:'1000p'"> - </td> - <td tal:condition="python:tarif_list[0].getCell(None, '05000', base_id='destination_base_price')<>None" - tal:content="python:'5000p'"> - </td> - <td tal:condition="python:tarif_list[0].getCell(None, '10000', base_id='destination_base_price')<>None" - tal:content="python:'10000p'"> - </td> - </span> - </tr> - <span tal:repeat="tarif_item tarif_list"> - <tr> - <td tal:content="python:modules['string'].lower(tarif_item.getDescription())"/> - <td tal:condition="python:tarif_item.getCell(None, '00300', base_id='destination_base_price')<>None" -tal:content="python:'%.2f' %tarif_item.getCell(None, '00300', base_id='destination_base_price').destination_base_price or nothing"> - </td> - <td tal:condition="python:tarif_item.getCell(None, '01000', base_id='destination_base_price')<>None" -tal:content="python:'%s' %tarif_item.getCell(None, '01000', base_id='destination_base_price').destination_base_price or nothing"> - </td> - <td tal:condition="python:tarif_item.getCell(None, '05000', base_id='destination_base_price')<>None" -tal:content="python:'%.2f' %tarif_item.getCell(None, '05000', base_id='destination_base_price').destination_base_price or nothing"> - </td> - <td tal:condition="python:tarif_item.getCell(None, '10000', base_id='destination_base_price')<>None" -tal:content="python:'%.2f' %tarif_item.getCell(None, '10000', base_id='destination_base_price').destination_base_price or nothing"> - - </td> - - </tr> - - </span> - </table> - </span> - - </span> - - </span> - </td> - </span> - </span> - </tr> - </span> - <tr> - <td colspan="2" align="center" class="Entete"><p>© Coramy - All rights reserved<br>This document is the confidential property of CORAMY<br>Anyone who divulges this plan is rendering - himself liable of legal proceedings</p></td> - <td></td> - </tr> - - - </table> -<span tal:define="client python:here.getDefaultValue('destination',portal_type=['Organisation']); - acheteur python:here.getDefaultValue('contact',portal_type=['Person']); - lignes_cde python:here.contentValues(filter={'portal_type':'Sample Order Line'}); - lignes_index python:here.ordered_lines(lignes_cde=lignes_cde); - nb_echantillons python:len(lignes_cde); - col_nb python:4; - lin_nb python:5; - nb_pages python:here.echantillon_page_count(total_nb=nb_echantillons,on_page=col_nb*lin_nb) - "> - - <table tal:repeat="page_no python:range(nb_pages)" class="PageA4" width="660" height="955" border="0" cellpadding="0" cellspacing="0"> - <tr> - <td colspan="4"><p align="center"> - <span class="Coramy">Coramy</span><span class="Entete">5 bis, rue Denis Cordonnier - 59820 GRAVELINES - Tel : 03 28 51 91 51 - - Fax : 03 28 23 34 96</span><br>Échantillonnage N° <span tal:content="here/getId"/> - <span tal:define="url_items python:modules['string'].split(acheteur.getGender(),'/')" - tal:content="python:url_items[len(url_items)-1]"> - </span> <span tal:content="python:modules['string'].capwords(modules['string'].lower(acheteur.getTitle()))"/> - <span tal:content="python:modules['string'].capwords(modules['string'].lower(client.getTitle()))"/> - - <span tal:content="python:modules['string'].capwords(modules['string'].lower(here.getDescription()))"/><br> <br></p></td> - <td></td> - <td></td> - <td></td> - - </tr> - - <span tal:repeat="i python:range(lin_nb)"> - <tr valign="top" class="Border"> - - - <span tal:repeat="j python:map((lambda x:x+(page_no*col_nb*lin_nb)+(i*col_nb)),range(col_nb))"> - <span tal:condition="python:j<nb_echantillons"> - <td valign="top" align="center" width="25%" class="Border" nowrap tal:define="ligne python:lignes_cde[lignes_index[j]]"> - - <span tal:condition="python:ligne.getDefaultValue('resource',portal_type=['Modele'])<>None"> - <span tal:define="modele python:ligne.getDefaultValue('resource',portal_type=['Modele']); - coloris_list python:modele.contentValues(filter={'portal_type':'Variante Modele'}) - "> - - <span tal:define="url_items1 python:modules['string'].split(ligne.getResourceRelativeUrl(),'/')" - tal:content="python:url_items1[len(url_items1)-1]">modele</span> - - - <br> <br> - <table border="0" cellpadding="0" cellspacing="0"> - <tr> - <td width="90" height="90" align="center" valign="center"> - <span tal:repeat="coloris coloris_list"> - <span tal:condition="python:coloris.getRelativeUrl()==ligne.getColoris()"> - <img tal:condition="python:coloris.width()>=coloris.height()" - src="" tal:attributes="src python:coloris.absolute_url() + '?display=small&format=jpeg&resolution=100'" width="100%"/> - <img tal:condition="python:coloris.width()<coloris.height()" - src="" tal:attributes="src python:coloris.absolute_url() + '?display=small&format=jpeg&resolution=100'" height="100%"/> - </span> - </span> - </td> - </tr> - </table> - </span> - - </span> - </td> - </span> - </span> - </tr> - </span> - <tr> - <td colspan="4" align="center" class="Entete"><p>© Coramy - All rights reserved<br>This document is the confidential property of CORAMY<br>Anyone who divulges this plan is rendering - himself liable of legal proceedings</p></td> - <td></td><td></td><td></td> - </tr> - - - </table></span> - -</body> -</html> diff --git a/product/Coramy/skins/coramy_trade/copy_of_sales_invoice_list_view.form b/product/Coramy/skins/coramy_trade/copy_of_sales_invoice_list_view.form deleted file mode 100755 index 4e9408ec7f..0000000000 --- a/product/Coramy/skins/coramy_trade/copy_of_sales_invoice_list_view.form +++ /dev/null @@ -1,457 +0,0 @@ -<?xml version="1.0" encoding="iso-8859-1"?> - -<form> - <title>Commande échantillons</title> - <name>order_view</name> - <action>base_edit</action> - <enctype>multipart/form-data</enctype> - <method>POST</method> - <pt>form_view</pt> - - <groups> - <group> - <title>left</title> - <fields> - - <field><id>my_id</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">10</display_width> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <max_length></max_length> - <required type="int">1</required> - <title>Id</title> - <truncate type="int">0</truncate> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - <field><id>my_reference</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <max_length></max_length> - <required type="int">0</required> - <title>Numéro de facture</title> - <truncate type="int">0</truncate> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - <field><id>my_destination_title</id> <type>RelationStringField</type> - <values> - <alternate_name></alternate_name> - <base_category>destination</base_category> - <catalog_index>Title</catalog_index> - <css_class></css_class> - <default></default> - <default_module>organisation</default_module> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <jump_method>base_jump_relation</jump_method> - <max_length></max_length> - <portal_type type="list">[('Organisation', 'Organisation')]</portal_type> - <required type="int">0</required> - <title>Client</title> - <truncate type="int">0</truncate> - <update_method>base_update_relation</update_method> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - <field><id>my_buyer_title</id> <type>RelationStringField</type> - <values> - <alternate_name></alternate_name> - <base_category>contact</base_category> - <catalog_index>Title</catalog_index> - <css_class></css_class> - <default></default> - <default_module>person</default_module> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <jump_method>base_jump_relation</jump_method> - <max_length></max_length> - <portal_type type="list">[('Person', 'Person')]</portal_type> - <required type="int">0</required> - <title>Acheteur</title> - <truncate type="int">0</truncate> - <update_method>base_update_relation</update_method> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - <field><id>my_description</id> <type>TextAreaField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <external_validator></external_validator> - <extra></extra> - <height type="int">1</height> - <hidden type="int">0</hidden> - <max_length></max_length> - <max_linelength></max_linelength> - <max_lines></max_lines> - <required type="int">0</required> - <title>Rayon</title> - <width type="int">30</width> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_many_lines">You entered too many lines.</message> - <message name="line_too_long">A line was too long.</message> - <message name="too_long">You entered too many characters.</message> - </messages> - </field> - <field><id>my_value_added_tax_ratio</id> <type>FloatField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <required type="int">1</required> - <title>Taux de TVA</title> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="not_float">You did not enter a floating point number.</message> - </messages> - </field> - <field><id>my_value_added_tax_recoverable</id> <type>ListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <external_validator></external_validator> - <extra></extra> - <first_item type="int">0</first_item> - <hidden type="int">0</hidden> - <items type="list">[('Non', '0'), ('Oui', '1')]</items> - <required type="int">0</required> - <size type="int">1</size> - <title>Soumis à la TVA</title> - </values> - <tales> - <default>python:str(here.getValueAddedTaxRecoverable())</default> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>right</title> - <fields> - - <field><id>my_date_rdv</id> <type>DateTimeField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <date_only type="int">1</date_only> - <date_separator>/</date_separator> - <default_now type="int">0</default_now> - <description></description> - <external_validator></external_validator> - <hidden type="int">0</hidden> - <input_order>dmy</input_order> - <input_style>text</input_style> - <required type="int">0</required> - <time_separator>:</time_separator> - <title>Date rendez-vous</title> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="not_datetime">You did not enter a valid date and time.</message> - <message name="datetime_out_of_range">The date and time you entered were out of range.</message> - </messages> - </field> - <field><id>my_collection</id> <type>ListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <external_validator></external_validator> - <extra></extra> - <first_item type="int">0</first_item> - <hidden type="int">0</hidden> - <items type="list">[]</items> - <required type="int">0</required> - <size type="int">1</size> - <title>Collection</title> - </values> - <tales> - <items>here/portal_categories/collection/getFormItemList</items> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - <field><id>my_start_date</id> <type>DateTimeField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <date_only type="int">1</date_only> - <date_separator>/</date_separator> - <default_now type="int">0</default_now> - <description></description> - <external_validator></external_validator> - <hidden type="int">0</hidden> - <input_order>dmy</input_order> - <input_style>text</input_style> - <required type="int">0</required> - <time_separator>:</time_separator> - <title>Livrer à partir du</title> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="not_datetime">You did not enter a valid date and time.</message> - <message name="datetime_out_of_range">The date and time you entered were out of range.</message> - </messages> - </field> - <field><id>my_stop_date</id> <type>DateTimeField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <date_only type="int">1</date_only> - <date_separator>/</date_separator> - <default_now type="int">0</default_now> - <description></description> - <external_validator></external_validator> - <hidden type="int">0</hidden> - <input_order>dmy</input_order> - <input_style>text</input_style> - <required type="int">0</required> - <time_separator>:</time_separator> - <title>Livrer avant le</title> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="not_datetime">You did not enter a valid date and time.</message> - <message name="datetime_out_of_range">The date and time you entered were out of range.</message> - </messages> - </field> - <field><id>order_state</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <max_length></max_length> - <required type="int">0</required> - <title>Etat</title> - <truncate type="int">0</truncate> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>center</title> - <fields> - - <field><id>my_commentaires</id> <type>TextAreaField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <external_validator></external_validator> - <extra></extra> - <height type="int">3</height> - <hidden type="int">0</hidden> - <max_length></max_length> - <max_linelength></max_linelength> - <max_lines></max_lines> - <required type="int">0</required> - <title>Commentaires</title> - <width type="int">80</width> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_many_lines">You entered too many lines.</message> - <message name="line_too_long">A line was too long.</message> - <message name="too_long">You entered too many characters.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>bottom</title> - <fields> - - <field><id>listbox</id> <type>ListBox</type> - <values> - <all_columns type="list">[('id', 'Ligne'), ('Description', 'Description'), ('getResourceRelativeUrl', 'Composant'), ('quantity', 'Quantit\xe9'), ('quantity_unit', 'Unit\xe9')]</all_columns> - <all_editable_columns type="list">[('quantity', 'Quantit\xe9'), ('quantity_unit', 'Unit\xe9')]</all_editable_columns> - <alternate_name></alternate_name> - <columns type="list">[('id', 'Ligne'), ('Description', 'Description'), ('getResourceRelativeUrl', 'Composant'), ('quantity', 'Quantit\xe9'), ('quantity_unit', 'Unit\xe9')]</columns> - <css_class></css_class> - <default></default> - <default_params type="list">[]</default_params> - <description></description> - <domain_root_list type="list">[]</domain_root_list> - <domain_tree type="int">0</domain_tree> - <editable_columns type="list">[('quantity', 'Quantit\xe9'), ('quantity_unit', 'Unit\xe9')]</editable_columns> - <external_validator></external_validator> - <global_attributes type="list">[]</global_attributes> - <hidden type="int">0</hidden> - <lines type="int">10</lines> - <list_action>folder_contents</list_action> - <list_method type="method">searchFolder</list_method> - <meta_types type="list">[]</meta_types> - <portal_types type="list">[('Invoice Line', 'Invoice Line')]</portal_types> - <report_root_list type="list">[]</report_root_list> - <report_tree type="int">0</report_tree> - <search type="int">0</search> - <search_columns type="list">[]</search_columns> - <select type="int">0</select> - <selection_name>order_line_selection</selection_name> - <sort type="list">[('id', 'id')]</sort> - <stat_method></stat_method> - <title>Lignes de commande</title> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>hidden</title> - <fields> - - <field><id>listbox_quantity</id> <type>FloatField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <required type="int">0</required> - <title>listbox_quantity</title> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="not_float">You did not enter a floating point number.</message> - </messages> - </field> - <field><id>listbox_quantity_unit</id> <type>ListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <external_validator></external_validator> - <extra></extra> - <first_item type="int">0</first_item> - <hidden type="int">0</hidden> - <items type="list">[]</items> - <required type="int">0</required> - <size type="int">1</size> - <title>Unité</title> - </values> - <tales> - <items>here/portal_categories/quantity_unit/getFormItemList</items> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - </fields> - </group> - </groups> -</form> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_trade/currency_list.form b/product/Coramy/skins/coramy_trade/currency_list.form deleted file mode 100755 index 15f8df480c..0000000000 --- a/product/Coramy/skins/coramy_trade/currency_list.form +++ /dev/null @@ -1,80 +0,0 @@ -<?xml version="1.0"?> - -<form> - <title>Currency List</title> - <row_length>4</row_length> - <name>currency_list</name> - <pt>form_list</pt> - <action>base_edit</action> - <method>POST</method> - <enctype></enctype> - <encoding>UTF-8</encoding> - <stored_encoding>ISO-8859-1</stored_encoding> - <unicode_mode>false</unicode_mode> - <groups> - <group> - <title>left</title> - <fields> - - <field><id>listbox</id> <type>ListBox</type> - <values> - <all_columns type="list">[]</all_columns> - <all_editable_columns type="list">[]</all_editable_columns> - <alternate_name></alternate_name> - <columns type="list">[('id', 'id'), ('title', 'Title')]</columns> - <css_class></css_class> - <default></default> - <default_params type="list">[]</default_params> - <description></description> - <domain_root_list type="list">[]</domain_root_list> - <domain_tree type="int">0</domain_tree> - <editable type="int">1</editable> - <editable_columns type="list">[]</editable_columns> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <global_attributes type="list">[]</global_attributes> - <hidden type="int">0</hidden> - <lines type="int">10</lines> - <list_action>list</list_action> - <list_method type="method">portal_catalog</list_method> - <meta_types type="list">[]</meta_types> - <portal_types type="list">[('Currency', 'Currency')]</portal_types> - <report_root_list type="list">[]</report_root_list> - <report_tree type="int">0</report_tree> - <search type="int">1</search> - <search_columns></search_columns> - <select type="int">1</select> - <selection_name>currency_selection</selection_name> - <sort type="list">[('id', 'id')]</sort> - <sort_columns></sort_columns> - <stat_method></stat_method> - <title>Currency Listbox</title> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>right</title> - <fields> - - </fields> - </group> - <group> - <title>center</title> - <fields> - - </fields> - </group> - <group> - <title>bottom</title> - <fields> - - </fields> - </group> - </groups> -</form> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_trade/currency_view.form b/product/Coramy/skins/coramy_trade/currency_view.form deleted file mode 100755 index e13f16e4fd..0000000000 --- a/product/Coramy/skins/coramy_trade/currency_view.form +++ /dev/null @@ -1,96 +0,0 @@ -<?xml version="1.0"?> - -<form> - <title>Currency</title> - <row_length>4</row_length> - <name>currency_view</name> - <pt>form_view</pt> - <action>base_edit</action> - <method>POST</method> - <enctype></enctype> - <encoding>UTF-8</encoding> - <stored_encoding>ISO-8859-1</stored_encoding> - <unicode_mode>false</unicode_mode> - <groups> - <group> - <title>left</title> - <fields> - - <field><id>my_id</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <max_length></max_length> - <required type="int">1</required> - <title>Id</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - <field><id>my_title</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <max_length></max_length> - <required type="int">1</required> - <title>Title</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>right</title> - <fields> - - </fields> - </group> - <group> - <title>center</title> - <fields> - - </fields> - </group> - <group> - <title>bottom</title> - <fields> - - </fields> - </group> - </groups> -</form> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_trade/default_pdf_template.pt b/product/Coramy/skins/coramy_trade/default_pdf_template.pt deleted file mode 100755 index 7d7b8f1c93..0000000000 --- a/product/Coramy/skins/coramy_trade/default_pdf_template.pt +++ /dev/null @@ -1,815 +0,0 @@ -<?xml version="1.0" encoding="iso-8859-1" ?> -<template filename="default.pdf" - pagesize="A4" - landscape="0" - showboundary="0" - leftmargin="1cm" - rightmargin="1cm" - topmargin="1cm" - bottommargin="1cm" - allowsplitting="1" - tal:define="packing_list python:here.getCausalityValueList(portal_type=['Sale Packing List','Sales Packing List'])[0]; - invoice_id python:here.getId(); - invoice_reference python: here.getReference(0); - resource_title python:here.getResourceTitle() or 'Euros'; - resource_id python:here.getResourceId() or 'EUR'; - incomeHT python: here.getTotalPrice() or 0; - income python: here.Invoice_zGetTotalNetPrice() or 0; - vat python: here.Invoice_zGetTotalVat(); - payable python: here.getDefaultTotalPrice(); - payable python: income + vat; - vad_recoverable python: here.getValueAddedTaxRecoverable(); - vad_ratio python: here.getValueAddedTaxRatio(); - source_decision_title python: here.getSourceDecisionTitle(); - payment_mode python: here.getPaymentMode(); - payment_term python: here.getPaymentTerm(30); - incoterm python: packing_list.getIncotermId(); - delivery_mode python: packing_list.getDeliveryModeTitle().split('/')[-1]; - escompte_value python: here.Invoice_zGetEscompteDescription(); - container_number python: len(packing_list.contentValues(filter={'portal_type':'Container'})); - total_price python:here.getDefaultTotalPrice();"> - - <!-- due_date python: DateTime.getNextMonth(start_date.month(), start_date.year()) ; --> - <tal:block - tal:define="destination python: here.getDestinationValue(); - destination_administration python: here.getDestinationAdministrationValue() or here.getDestinationSectionValue(); - DateTime python: modules['DateTime'].DateTime; - start_date python:here.getStartDate( packing_list.getTargetStopDate() ) ; - due_date python: here.Invoice_zGetDueDate(); - packing_list_id python:packing_list.getId(); - code_comptable python: destination_administration.getCodeComptable(); - eu_vat_code python: destination_administration.getEuVatCode(); - source_section_item python: here.Invoice_zGetSourceSectionDescription(); - gross_weight python: str(packing_list.PackingList_getTotalGrossWeight()); - order python:packing_list.getCausalityValueList(portal_type=['Sale Order','Sales Order'])[0];"> - - <stylesheet> - - <paragraphstyle name="Normal" fontname="Helvetica" fontsize="12" - align="LEFT" firstLineIndent="0"/> - <paragraphstyle name="Bullet" fontname="Helvetica" fontsize="12" - bulletFontName="Symbol" bulletFontSize="14" - leftIndent="20" firstLineIndent="0" - parent="Normal"/> - - <paragraphstyle name="Heading1" parent="Normal" - fontname="Helvetica-Bold" fontsize="16"/> - <paragraphstyle name="Heading2" parent="Normal" - fontname="Helvetica-Bold" fontsize="15"/> - <paragraphstyle name="Heading3" parent="Normal" - fontname="Helvetica-Bold" fontsize="14"/> - <paragraphstyle name="Heading4" parent="Normal" - fontname="Helvetica-Bold" fontsize="13"/> - <paragraphstyle name="Heading5" parent="Normal" - fontname="Helvetica-Bold" fontsize="12"/> - <paragraphstyle name="Heading6" parent="Normal" - fontname="Helvetica-Bold" fontsize="11"/> - <paragraphstyle name="Heading7" parent="Normal" - fontname="Helvetica-Bold" fontsize="10"/> - - <paragraphstyle name="Small" parent="Normal" fontname="Helvetica-Bold" - fontsize="7"/> - <paragraphstyle name="Cell" parent="Normal" fontname="Helvetica-Bold" - fontsize="12" - alignment="center" /> - <paragraphstyle name="CellHeading" parent="Normal" - fontname="Helvetica-Bold" fontsize="13" - alignment="center"/> - - <paragraphstyle name="Example" fontname="Courier-Oblique" fontsize="10" - parent="Normal"/> - - <paragraphstyle name="InvoiceItem" fontname="Courier-Oblique" - fontsize="10" - parent="Normal"/> - - <tablestyle name="StandardTable"> - <stylecmd expr="('LEFTPADDING', (0,0), (-1,-1), 5)"/> - <stylecmd expr="('RIGHTPADDING', (0,0), (-1,-1), 5)"/> - <stylecmd expr="('TOPPADDING', (0,0), (-1,-1), 3)"/> - <stylecmd expr="('BOTTOMPADDING', (0,0), (-1,-1), 7)"/> - <stylecmd expr="('ALIGN', (0,0), (-1,-1), 'RIGHT')"/> - <stylecmd expr="('GRID', (0,0), (-1,-1), 0.5, colors.black)"/> - <stylecmd expr="('BOX', (0,0), (-1,-1), 1, colors.black)"/> - <stylecmd expr="('FONT', (0,0), (-1,-1), 'Helvetica', 10)"/> - </tablestyle> - - <tablestyle name="HeadLine"> - <stylecmd expr="('LEFTPADDING', (0,0), (-1,-1), 5)"/> - <stylecmd expr="('RIGHTPADDING', (0,0), (-1,-1), 5)"/> - <stylecmd expr="('TOPPADDING', (0,0), (-1,-1), 1)"/> - <stylecmd expr="('BOTTOMPADDING', (0,0), (-1,-1), 1)"/> - <stylecmd expr="('ALIGN', (0,0), (1,0), 'LEFT')"/> - <stylecmd expr="('ALIGN', (2,0), (-1,-1), 'RIGHT')"/> - <stylecmd expr="('GRID', (0,0), (-1,-1), 0, colors.white)"/> - <stylecmd expr="('BOX', (0,0), (-1,-1), 0, colors.white)"/> - <stylecmd expr="('FONT', (0,0), (-1,-1), 'Helvetica', 8)"/> - <stylecmd expr="('BACKGROUND', (0,0), (-1,-1), colors.white)"/> - <stylecmd expr="('TEXTCOLOR', (0,0), (-1,-1), colors.black)"/> - <stylecmd expr="('HALIGN', 'LEFT')"/> - </tablestyle> - - <tablestyle name="HeadLine2"> - <stylecmd expr="('LEFTPADDING', (0,0), (-1,-1), 5)"/> - <stylecmd expr="('RIGHTPADDING', (0,0), (-1,-1), 5)"/> - <stylecmd expr="('TOPPADDING', (0,0), (-1,-1), 1)"/> - <stylecmd expr="('BOTTOMPADDING', (0,0), (-1,-1), 1)"/> - <stylecmd expr="('ALIGN', (0,0), (-1,-1), 'LEFT')"/> - <stylecmd expr="('GRID', (0,0), (-1,-1), 0, colors.white)"/> - <stylecmd expr="('BOX', (0,0), (-1,-1), 0, colors.white)"/> - <stylecmd expr="('FONT', (0,0), (-1,-1), 'Helvetica', 6)"/> - <stylecmd expr="('BACKGROUND', (0,0), (-1,-1), colors.white)"/> - <stylecmd expr="('TEXTCOLOR', (0,0), (-1,-1), colors.black)"/> - <stylecmd expr="('HALIGN', 'LEFT')"/> - </tablestyle> - - <tablestyle name="TotalLine"> - <stylecmd expr="('LEFTPADDING', (0,0), (-1,-1), 5)"/> - <stylecmd expr="('RIGHTPADDING', (0,0), (-1,-1), 5)"/> - <stylecmd expr="('TOPPADDING', (0,0), (-1,-1), 1)"/> - <stylecmd expr="('BOTTOMPADDING', (0,0), (-1,-1), 1)"/> - <stylecmd expr="('ALIGN', (0,0), (-1,-1), 'RIGHT')"/> - <stylecmd expr="('GRID', (0,0), (-1,-1), 0, colors.white)"/> - <stylecmd expr="('BOX', (0,0), (-1,-1), 0, colors.white)"/> - <stylecmd expr="('FONT', (0,0), (-1,-1), 'Helvetica-Oblique', 8)"/> - <stylecmd expr="('FONT', (-2,0), (-2,-1), 'Helvetica', 8)"/> - <stylecmd expr="('TEXTCOLOR', (0,0), (-1,-1), colors.black)"/> - <stylecmd expr="('HALIGN', 'LEFT')"/> - </tablestyle> - - <tablestyle name="CellTable"> - <stylecmd expr="('LEFTPADDING', (0,0), (-1,-1), 5)"/> - <stylecmd expr="('RIGHTPADDING', (0,0), (-1,-1), 5)"/> - <stylecmd expr="('TOPPADDING', (0,0), (-1,-1), 1)"/> - <stylecmd expr="('BOTTOMPADDING', (0,0), (-1,-1), 1)"/> - <stylecmd expr="('ALIGN', (0,0), (1,-1), 'LEFT')"/> - <stylecmd expr="('ALIGN', (2,0), (-4,-1), 'CENTER')"/> - <stylecmd expr="('ALIGN', (-3,0), (-1,-1), 'RIGHT')"/> - <stylecmd expr="('GRID', (2,1), (-5,-1), 0.2, colors.black)"/> - <stylecmd expr="('BOX', (2,1), (-5,-1), 0.2, colors.black)"/> - <stylecmd expr="('FONT', (0,0), (-1,0), 'Helvetica', 6)"/> - <stylecmd expr="('FONT', (0,1), (-1,-1), 'Helvetica', 8)"/> - <stylecmd expr="('HALIGN', 'LEFT')"/> - </tablestyle> - - </stylesheet> - - <pagetemplate id="FirstPage" nextid="SecondPage" startframe="content"> - <static> - - <!-- Entete CORAMY --> - <tal:block tal:condition="python: source_section_item[0] == 'Houvenaegel'" > - <infostring align="left" x="1.4cm" y="28.3cm" size="26" - font="Times-Bold" color="(0,0,0)">Houvenaegel</infostring> - <infostring align="left" x="2cm" y="27.4cm" size="26" - font="Times-Bold" color="(0,0,0)">Création</infostring> - </tal:block> - <tal:block tal:condition="python: source_section_item[0] == 'BLS'" > - <infostring align="left" x="2cm" y="27.7cm" size="60" - font="Times-Bold" color="(0,0,0)">BLS</infostring> - <infostring align="left" x="1.8cm" y="27.3cm" size="10" - font="Times-Bold" color="(0,0,0)">Beachwear License Services</infostring> - </tal:block> - <tal:block tal:condition="python: source_section_item[0] == 'Coramy'" > - <infostring align="left" x="1.4cm" y="28cm" size="40" - font="Times-Bold" color="(0,0,0)">Coramy</infostring> - </tal:block> - - - <rectangle x="1cm" y="28cm" width="0.3cm" height="0.4cm" - linewidth="0.0" stroke="(1,1,1)" fill="(0.5,0.5,0.5)"/> - <rectangle x="6.5cm" y="28cm" width="13.5cm" height="0.4cm" - linewidth="0.0" stroke="(1,1,1)" fill="(0.5,0.5,0.5)"/> - - <infostring align="left" x="7cm" y="28.5cm" size="8" - font="Helvetica" color="(0,0,0)" tal:content="python: '%s' % source_section_item[1]"> - 5 bis, rue Denis Cordonnier - F.59820 GRAVELINES - Tel. 33(0)3 28 51 91 51 - Fax 33(0)3 28 23 34 96 - </infostring> - <infostring align="left" x="10cm" y="28.1cm" size="8" - font="Helvetica" color="(1,1,1)" tal:content="python: '%s' % source_section_item[2]"> - MAILLOTS DE BAIN - GYM - SWIMSUITS - FITNESS - </infostring> - <infostring align="left" x="6.8cm" y="27.7cm" size="6" - font="Helvetica" color="(0,0,0)" tal:content="python: '%s' % source_section_item[3]"> - SAS capital de 435.200 EUR - T.V.A. FR 67 611 750 274 - R.C. Dunkerque 611 750 274 - SIRET 611 750 274 00023 - CNUF 15971 - </infostring> - - <!-- Titre du document (Facture n°) --> - <infostring align="left" x="6.8cm" y="26cm" size="16" - font="Helvetica-Bold" color="(0,0,0)" tal:content="python: 'Facture n° %s' % invoice_reference"> - Facture n° XXX - </infostring> - - <infostring align="left" x="14cm" y="26cm" size="8" - font="Helvetica" color="(0,0,0)" tal:content="python: start_date.strftime('Gravelines, le %e/%m/%y')"> - Gravelines, le XXX - </infostring> - - <infostring align="left" x="18.5cm" y="26cm" size="8" - font="Helvetica-Bold" color="(0,0,0)"> - Folio %(page)s - </infostring> - - <!-- Grand cadre de la facture --> - <line x1="1cm" x2="20.5cm" y1="25cm" y2="25cm" width="1"/> - <line x1="1cm" x2="1cm" y1="25cm" y2="4cm" width="1"/> - <line x1="20.5cm" x2="20.5cm" y1="25cm" y2="4cm" width="1"/> - <line x1="1cm" x2="20.5cm" y1="4cm" y2="4cm" width="1"/> - - <!-- Entete de facture --> - <!-- Quadrillage de l'entete de facture --> - <line x1="4.2cm" x2="4.2cm" y1="25cm" y2="20.3cm" width="1"/> - <line x1="11.4cm" x2="11.4cm" y1="25cm" y2="20.3cm" width="1"/> - <line x1="18.5cm" x2="18.5cm" y1="25cm" y2="20.3cm" width="1"/> - <line x1="4.2cm" x2="18.5cm" y1="22.3cm" y2="22.3cm" width="1"/> - <line x1="1cm" x2="20.5cm" y1="20.3cm" y2="20.3cm" width="1"/> - - <infostring align="left" x="1.8cm" y="24.7cm" size="6" font="Helvetica-Oblique" color="(0,0,0)"> - Commande No - </infostring> - <infostring align="left" x="1.5cm" y="24.5cm" size="6" font="Helvetica-Oblique" color="(0,0,0)"> - Auftrag Nr / Order No - </infostring> - <infostring align="center" x="2.5cm" y="24.2cm" size="8" font="Helvetica-Bold" color="(0,0,0)" - tal:content="python: order.getDestinationReference()"> - DestinationReference XXX - </infostring> - - <infostring align="left" x="1.7cm" y="23.8cm" size="6" font="Helvetica-Oblique" color="(0,0,0)"> - Confirmation No - </infostring> - <infostring align="left" x="1.8cm" y="23.6cm" size="6" font="Helvetica-Oblique" color="(0,0,0)"> - Bestätigung Nr - </infostring> - <infostring align="center" x="2.5cm" y="23.3cm" size="8" font="Helvetica-Bold" color="(0,0,0)" - tal:content="python: order.getId()"> - Order.id XXX - </infostring> - - <infostring align="left" x="1.1cm" y="22.9cm" size="6" font="Helvetica-Oblique" color="(0,0,0)"> - Livraison No / Lieferschein Nr - </infostring> - <infostring align="left" x="1.8cm" y="22.7cm" size="6" font="Helvetica-Oblique" color="(0,0,0)"> - Delifery note No - </infostring> - <infostring align="center" x="2.5cm" y="22.4cm" size="8" font="Helvetica-Bold" color="(0,0,0)" - tal:content="python: packing_list_id"> - PackingListId XXX - </infostring> - - <infostring align="left" x="1.7cm" y="21.9cm" size="6" font="Helvetica-Oblique" color="(0,0,0)"> - Nombre de colis - </infostring> - <infostring align="left" x="1.9cm" y="21.7cm" size="6" font="Helvetica-Oblique" color="(0,0,0)"> - Kolli anzahl - </infostring> - <infostring align="left" x="1.8cm" y="21.5cm" size="6" font="Helvetica-Oblique" color="(0,0,0)"> - Nb of parcels - </infostring> - <infostring align="center" x="3.5cm" y="21.7cm" size="8" font="Helvetica-Bold" color="(0,0,0)" - tal:content="python: container_number"> - NbrColis XXX - </infostring> - - <infostring align="left" x="1.3cm" y="21cm" size="6" font="Helvetica-Oblique" color="(0,0,0)"> - Poids brut (kg) - </infostring> - <infostring align="left" x="1.3cm" y="20.8cm" size="6" font="Helvetica-Oblique" color="(0,0,0)"> - Brutto-gewicht - </infostring> - <infostring align="left" x="1.3cm" y="20.6cm" size="6" font="Helvetica-Oblique" color="(0,0,0)"> - Gross weight - </infostring> - <infostring align="center" x="3.5cm" y="20.8cm" size="8" font="Helvetica-Bold" color="(0,0,0)" - tal:content="python: gross_weight"> - TotalGrossWeightXXX - </infostring> - - <infostring align="left" x="6cm" y="24.7cm" size="6" font="Helvetica-Oblique" color="(0,0,0)"> - Livraison / Versand / Delivery - </infostring> - <infostring align="left" x="4.4cm" y="24.4cm" size="8" font="Helvetica-Bold" color="(0,0,0)" - tal:content="python: destination.getTitle()"> - LA REDOUTE BERTHELOT - </infostring> - <tal:block tal:define="addr_list python: destination.getDefaultAddress().asText(country='France').split('\n') + [(destination.getDefaultAddressRegion() or '').split('/')[-1]]"> - <tal:block tal:repeat="addr_item addr_list"> - <tal:block tal:define="index repeat/addr_item/index"> - <infostring align="left" x="4.4cm" size="8" font="Helvetica-Bold" color="(0,0,0)" - tal:attributes="y python: '%fcm' % (24 - index * 0.4)" tal:content="addr_item"> - 119 CHAUSSEE BERTHELOT - </infostring> - </tal:block> - </tal:block> - </tal:block> - - <infostring align="left" x="11.6cm" y="24.4cm" size="8" font="Helvetica-Bold" color="(0,0,0)" - tal:content="python: destination_administration.getTitle()"> - REDOUTE - </infostring> - <tal:block tal:define="addr_list python: destination_administration.getDefaultAddress().asText(country='France').split('\n') + [(destination_administration.getDefaultAddressRegion() or '').split('/')[-1]]"> - <tal:block tal:repeat="addr_item addr_list"> - <tal:block tal:define="index repeat/addr_item/index"> - <infostring align="left" x="11.6cm" size="8" font="Helvetica-Bold" color="(0,0,0)" - tal:attributes="y python: '%fcm' % (24 - index * 0.4)" tal:content="addr_item"> - 119 CHAUSSEE BERTHELOT - </infostring> - </tal:block> - </tal:block> - </tal:block> - - <infostring align="left" x="4.5cm" y="21.7cm" size="6" font="Helvetica-Oblique" color="(0,0,0)"> - Commercial - </infostring> - <infostring align="left" x="6cm" y="21.7cm" size="8" font="Helvetica-Bold" color="(0,0,0)" - tal:content="python: source_decision_title "> - Commercial XXX - </infostring> - <infostring align="left" x="4.4cm" y="21.1cm" size="6" font="Helvetica-Oblique" color="(0,0,0)"> - Paiement - </infostring> - <infostring align="left" x="4.6cm" y="20.9cm" size="6" font="Helvetica-Oblique" color="(0,0,0)"> - Zahlung - </infostring> - <infostring align="left" x="4.5cm" y="20.7cm" size="6" font="Helvetica-Oblique" color="(0,0,0)"> - Payment - </infostring> - <infostring align="left" x="5.8cm" y="21cm" size="8" font="Helvetica-Bold" color="(0,0,0)" - tal:content="python: payment_mode "> - payment_modeXXX - </infostring> - <infostring align="left" x="5.8cm" y="20.7cm" size="8" font="Helvetica-Bold" color="(0,0,0)" - tal:content="python: here.Invoice_zGetPaymentTime()"> - payment_termXXX - </infostring> - - <infostring align="left" x="11.6cm" y="22cm" size="6" font="Helvetica-Oblique" color="(0,0,0)"> - Code comptable - </infostring> - <infostring align="left" x="11.6cm" y="21.4cm" size="6" font="Helvetica-Oblique" color="(0,0,0)"> - No TVA intracom. - </infostring> - <infostring align="left" x="11.6cm" y="20.9cm" size="6" font="Helvetica-Oblique" color="(0,0,0)"> - Conditions d'escompte / Diskont / Discount. - </infostring> - <infostring align="left" x="14cm" y="22cm" size="8" font="Helvetica-Bold" color="(0,0,0)" - tal:content="python: code_comptable"> - CodeComptable XXX - </infostring> - <infostring align="left" x="14cm" y="21.4cm" size="8" font="Helvetica-Bold" color="(0,0,0)" - tal:content="python: eu_vat_code"> - NoTVAXXX - </infostring> - <infostring align="left" x="11.6cm" y="20.6cm" size="8" font="Helvetica-Bold" color="(0,0,0)" - tal:content="python: escompte_value"> - Escompte XXX - </infostring> - - - - <infostring align="left" x="18.9cm" y="24.2cm" size="6" font="Helvetica-Oblique" color="(0,0,0)"> - Transporteur - </infostring> - <infostring align="left" x="18.6cm" y="24cm" size="6" font="Helvetica-Oblique" color="(0,0,0)"> - Carrier / Spediteur - </infostring> - <infostring align="center" x="19.5cm" y="23.6cm" size="8" font="Helvetica-Bold" color="(0,0,0)" - tal:content="python: delivery_mode"> - delivery_modeXXX - </infostring> - <infostring align="left" x="18.6cm" y="23cm" size="6" font="Helvetica-Oblique" color="(0,0,0)"> - Transport - </infostring> - <infostring align="left" x="20cm" y="23cm" size="8" font="Helvetica-Bold" color="(0,0,0)"> - 3 - </infostring> - <infostring align="left" x="18.6cm" y="22.1cm" size="6" font="Helvetica-Oblique" color="(0,0,0)"> - Transaction - </infostring> - <infostring align="left" x="19.9cm" y="22.1cm" size="8" font="Helvetica-Bold" color="(0,0,0)"> - 11 - </infostring> - <infostring align="left" x="18.6cm" y="21.2cm" size="6" font="Helvetica-Oblique" color="(0,0,0)"> - Livraison - </infostring> - <infostring align="left" x="19.9cm" y="21.2cm" size="8" font="Helvetica-Bold" color="(0,0,0)" - tal:content="python: incoterm"> - incotermXXX - </infostring> - - <!-- Détail de la facture --> - <rectangle x="1cm" y="19.9cm" width="19.5cm" height="0.4cm" - linewidth="0" fill="(0.75,0.75,0.75)"/> - <line x1="1cm" x2="20.5cm" y1="19.9cm" y2="19.9cm" width="1"/> - - <infostring align="left" x="2.8cm" y="20cm" size="9" - font="Helvetica-Oblique" color="(0,0,0)"> - Dénomination des produits - </infostring> - <infostring align="left" x="10cm" y="20cm" size="9" - font="Helvetica-Oblique" color="(0,0,0)"> - Répartition par tailles - </infostring> - <infostring align="left" x="15.4cm" y="20cm" size="9" - font="Helvetica-Oblique" color="(0,0,0)"> - Quantité - </infostring> - <infostring align="left" x="17.1cm" y="20cm" size="9" - font="Helvetica-Oblique" color="(0,0,0)"> - P.U.H.T. - </infostring> - <infostring align="left" x="18.8cm" y="20cm" size="9" - font="Helvetica-Oblique" color="(0,0,0)"> - Total H.T. - </infostring> - - <!-- Pied de facture --> - <rectangle x="1cm" y="5.0cm" width="19.5cm" height="0.8cm" - linewidth="0" fill="(0.75,0.75,0.75)"/> - <line x1="1cm" x2="20.5cm" y1="5.8cm" y2="5.8cm" width="1"/> - <line x1="1cm" x2="20.5cm" y1="5.0cm" y2="5.0cm" width="1"/> - - <infostring align="left" x="1.5cm" y="5.5cm" size="9" - font="Helvetica-Oblique" color="(0,0,0)"> - Total H.T. - </infostring> - <infostring align="left" x="3.8cm" y="5.5cm" size="9" - font="Helvetica-Oblique" color="(0,0,0)"> - Port taxable - </infostring> - <infostring align="left" x="6.2cm" y="5.5cm" size="9" - font="Helvetica-Oblique" color="(0,0,0)"> - Montant taxable - </infostring> - <infostring align="left" x="9.2cm" y="5.5cm" size="9" - font="Helvetica-Oblique" color="(0,0,0)"> - T.V.A. - </infostring> - <tal:block tal:condition="python: vad_recoverable"> - <infostring align="left" x="9.3cm" y="5.1cm" size="9" - font="Helvetica" color="(0,0,0)" tal:content="python: '%.1f' % (vad_ratio * 100) + '%%'"> - 19,6%% - </infostring> - </tal:block> - <infostring align="left" x="11.2cm" y="5.5cm" size="9" - font="Helvetica-Oblique" color="(0,0,0)"> - Port - </infostring> - <infostring align="left" x="10.7cm" y="5.1cm" size="9" - font="Helvetica-Oblique" color="(0,0,0)"> - non taxable - </infostring> - <infostring align="left" x="13.8cm" y="5.5cm" size="9" - font="Helvetica-Oblique" color="(0,0,0)"> - Net a payer - </infostring> - <infostring align="left" x="12.6cm" y="5.1cm" size="9" - font="Helvetica-Oblique" color="(0,0,0)"> - Gesamtbetrag / Total amount - </infostring> - <infostring align="left" x="17.5cm" y="5.5cm" size="9" - font="Helvetica-Oblique" color="(0,0,0)"> - Date d'echeance - </infostring> - <infostring align="left" x="17cm" y="5.1cm" size="9" - font="Helvetica-Oblique" color="(0,0,0)"> - Falligkeitstag / Due date - </infostring> - - <infostring align="center" x="2.2cm" y="4.5cm" size="9" - font="Helvetica" color="(0,0,0)" - tal:content="python: '%.2f' % incomeHT"> - income XXX - </infostring> - <infostring align="center" x="3.8cm" y="4.5cm" size="9" - font="Helvetica" color="(0,0,0)"> - - </infostring> - <infostring align="left" x="6.5cm" y="4.5cm" size="9" - font="Helvetica" color="(0,0,0)" - tal:content="python: '%.2f' % income"> - - </infostring> - <tal:block tal:condition="python: vad_recoverable"> - <infostring align="center" x="9.7cm" y="4.5cm" size="9" - font="Helvetica" color="(0,0,0)" - tal:content="python: '%.2f' % vat"> - vat XXX - </infostring> - </tal:block> - <infostring align="left" x="10.7cm" y="4.5cm" size="9" - font="Helvetica" color="(0,0,0)"> - - </infostring> - <infostring align="center" x="13.8cm" y="4.5cm" size="10" - font="Helvetica-Bold" color="(0,0,0)" - tal:content="python: '%.2f' % payable"> - payable XXX - </infostring> - <infostring align="center" x="16cm" y="4.5cm" size="10" - font="Helvetica-Bold" color="(0,0,0)" - tal:content="python: resource_id"> - resource_id XXX - </infostring> - <infostring align="left" x="18cm" y="4.5cm" size="10" - font="Helvetica-Bold" color="(0,0,0)" - tal:content="python: due_date.strftime('%e/%m/%y')"> - due_date XXX - </infostring> - - <infostring align="left" x="1.1cm" y="3.8cm" size="5" font="Helvetica" color="(0,0,0)"> - En application de la loi du 31/12/1992, nous vous précisons que la presente facture devra être réglée à la date indiquée ci-dessus. En cas de règlement comptant sous 10 jours, date de facture, l'escompte ci-dessus mentionné pourra être déduit du - </infostring> - <infostring align="left" x="1.1cm" y="3.5cm" size="5" font="Helvetica" color="(0,0,0)"> - montant H.T. de la facture, auquel cas le montant de TVA déductible par vous devra être diminué du montant de celle afférente à l'escompte. Son règlement donnera lieu au versement d'un intérêt moratoire, calculé sur les sommes restant - </infostring> - <infostring align="left" x="1.1cm" y="3.2cm" size="5" font="Helvetica" color="(0,0,0)"> - dues à cette date de règlement en principal, frais et taxes inclus, et au taux de l'intérêt légal majoré de 5 points, sans que cette pénalité puisse être en toute hypothèse inférieure à 1,5 fois le taux de l'intérêt légal. - </infostring> - <infostring align="left" x="10cm" y="24.7cm" size="9" - font="Helvetica-Oblique" color="(0,0,0)"> - Répartition par tailles - </infostring> - <infostring align="left" x="15.4cm" y="24.7cm" size="9" - font="Helvetica-Oblique" color="(0,0,0)"> - Quantité - </infostring> - <infostring align="left" x="17.1cm" y="24.7cm" size="9" - font="Helvetica-Oblique" color="(0,0,0)"> - P.U.H.T. - </infostring> - <infostring align="left" x="18.8cm" y="24.7cm" size="9" - font="Helvetica-Oblique" color="(0,0,0)"> - Total H.T. - </infostring> - - <!-- Pied de facture --> - <rectangle x="1cm" y="5.0cm" width="19.5cm" height="0.8cm" - linewidth="0" fill="(0.75,0.75,0.75)"/> - <line x1="1cm" x2="20.5cm" y1="5.8cm" y2="5.8cm" width="1"/> - <line x1="1cm" x2="20.5cm" y1="5.0cm" y2="5.0cm" width="1"/> - - </static> - - <frame id="content" - nextid="content" - x="1cm" - y="5.8cm" - width="19.5cm" - height="14.1cm" - leftpadding="0.1cm" - rightpadding="0.1cm" - toppadding="0.2cm" - bottompadding="0.5cm" - showBoundary="1"/> - </pagetemplate> - - - - - <pagetemplate id="SecondPage" nextid="SecondPage" startframe="content"> - <static> - - <!-- Entete CORAMY --> - <tal:block tal:condition="python: source_section_item[0] == 'Houvenaegel'" > - <infostring align="left" x="1.4cm" y="28.3cm" size="26" - font="Times-Bold" color="(0,0,0)">Houvenaegel</infostring> - <infostring align="left" x="2cm" y="27.4cm" size="26" - font="Times-Bold" color="(0,0,0)">Création</infostring> - </tal:block> - <tal:block tal:condition="python: source_section_item[0] == 'BLS'" > - <infostring align="left" x="2cm" y="27.7cm" size="60" - font="Times-Bold" color="(0,0,0)">BLS</infostring> - <infostring align="left" x="1.8cm" y="27.3cm" size="10" - font="Times-Bold" color="(0,0,0)">Beachwear License Services</infostring> - </tal:block> - <tal:block tal:condition="python: source_section_item[0] == 'Coramy'" > - <infostring align="left" x="1.4cm" y="28cm" size="40" - font="Times-Bold" color="(0,0,0)">Coramy</infostring> - </tal:block> - - - <rectangle x="1cm" y="28cm" width="0.3cm" height="0.4cm" - linewidth="0.0" stroke="(1,1,1)" fill="(0.5,0.5,0.5)"/> - <rectangle x="6.5cm" y="28cm" width="13.5cm" height="0.4cm" - linewidth="0.0" stroke="(1,1,1)" fill="(0.5,0.5,0.5)"/> - - <infostring align="left" x="7cm" y="28.5cm" size="8" - font="Helvetica" color="(0,0,0)" tal:content="python: '%s' % source_section_item[1]"> - 5 bis, rue Denis Cordonnier - F.59820 GRAVELINES - Tel. 33(0)3 28 51 91 51 - Fax 33(0)3 28 23 34 96 - </infostring> - <infostring align="left" x="10cm" y="28.1cm" size="8" - font="Helvetica" color="(1,1,1)" tal:content="python: '%s' % source_section_item[2]"> - MAILLOTS DE BAIN - GYM - SWIMSUITS - FITNESS - </infostring> - <infostring align="left" x="6.8cm" y="27.7cm" size="6" - font="Helvetica" color="(0,0,0)" tal:content="python: '%s' % source_section_item[3]"> - SAS capital de 435.200 EUR - T.V.A. FR 67 611 750 274 - R.C. Dunkerque 611 750 274 - SIRET 611 750 274 00023 - CNUF 15971 - </infostring> - - <!-- Titre du document (Facture n°) --> - <infostring align="left" x="6.8cm" y="26cm" size="16" - font="Helvetica-Bold" color="(0,0,0)" tal:content="python: 'Facture n° %s' % invoice_reference"> - Facture n° XXX - </infostring> - - <infostring align="left" x="14cm" y="26cm" size="8" - font="Helvetica" color="(0,0,0)" tal:content="python: start_date.strftime('Gravelines, le %e/%m/%y')"> - Gravelines, le XXX - </infostring> - - <infostring align="left" x="18.5cm" y="26cm" size="8" - font="Helvetica-Bold" color="(0,0,0)"> - Folio %(page)s - </infostring> - - - <!-- Grand cadre de la facture --> - <line x1="1cm" x2="20.5cm" y1="25cm" y2="25cm" width="1"/> - <line x1="1cm" x2="1cm" y1="25cm" y2="4cm" width="1"/> - <line x1="20.5cm" x2="20.5cm" y1="25cm" y2="4cm" width="1"/> - <line x1="1cm" x2="20.5cm" y1="4cm" y2="4cm" width="1"/> - - - <!-- Détail de la facture --> - <rectangle x="1cm" y="24.6cm" width="19.5cm" height="0.4cm" - linewidth="0" fill="(0.75,0.75,0.75)"/> - <line x1="1cm" x2="20.5cm" y1="24.6cm" y2="24.6cm" width="1"/> - - <infostring align="left" x="2.8cm" y="24.7cm" size="9" - font="Helvetica-Oblique" color="(0,0,0)"> - Dénomination des produits - </infostring> - <infostring align="left" x="10cm" y="24.7cm" size="9" - font="Helvetica-Oblique" color="(0,0,0)"> - Répartition par tailles - </infostring> - <infostring align="left" x="15.4cm" y="24.7cm" size="9" - font="Helvetica-Oblique" color="(0,0,0)"> - Quantité - </infostring> - <infostring align="left" x="17.1cm" y="24.7cm" size="9" - font="Helvetica-Oblique" color="(0,0,0)"> - P.U.H.T. - </infostring> - <infostring align="left" x="18.8cm" y="24.7cm" size="9" - font="Helvetica-Oblique" color="(0,0,0)"> - Total H.T. - </infostring> - - <!-- Pied de facture --> - <rectangle x="1cm" y="5.0cm" width="19.5cm" height="0.8cm" - linewidth="0" fill="(0.75,0.75,0.75)"/> - <line x1="1cm" x2="20.5cm" y1="5.8cm" y2="5.8cm" width="1"/> - <line x1="1cm" x2="20.5cm" y1="5.0cm" y2="5.0cm" width="1"/> - - <infostring align="left" x="1.5cm" y="5.5cm" size="9" - font="Helvetica-Oblique" color="(0,0,0)"> - Total H.T. - </infostring> - <infostring align="left" x="3.8cm" y="5.5cm" size="9" - font="Helvetica-Oblique" color="(0,0,0)"> - Port taxable - </infostring> - <infostring align="left" x="6.2cm" y="5.5cm" size="9" - font="Helvetica-Oblique" color="(0,0,0)"> - Montant taxable - </infostring> - <infostring align="left" x="9.2cm" y="5.5cm" size="9" - font="Helvetica-Oblique" color="(0,0,0)"> - T.V.A. - </infostring> - <tal:block tal:condition="python: vad_recoverable"> - <infostring align="left" x="9.3cm" y="5.1cm" size="9" - font="Helvetica" color="(0,0,0)" tal:content="python: '%.1f' % (vad_ratio * 100) + '%%'"> - 19,6%% - </infostring> - </tal:block> - <infostring align="left" x="11.2cm" y="5.5cm" size="9" - font="Helvetica-Oblique" color="(0,0,0)"> - Port - </infostring> - <infostring align="left" x="10.7cm" y="5.1cm" size="9" - font="Helvetica-Oblique" color="(0,0,0)"> - non taxable - </infostring> - <infostring align="left" x="13.8cm" y="5.5cm" size="9" - font="Helvetica-Oblique" color="(0,0,0)"> - Net a payer - </infostring> - <infostring align="left" x="12.6cm" y="5.1cm" size="9" - font="Helvetica-Oblique" color="(0,0,0)"> - Gesamtbetrag / Total amount - </infostring> - <infostring align="left" x="17.5cm" y="5.5cm" size="9" - font="Helvetica-Oblique" color="(0,0,0)"> - Date d'echeance - </infostring> - <infostring align="left" x="17cm" y="5.1cm" size="9" - font="Helvetica-Oblique" color="(0,0,0)"> - Falligkeitstag / Due date - </infostring> - - <infostring align="center" x="2.2cm" y="4.5cm" size="9" - font="Helvetica" color="(0,0,0)" - tal:content="python: '%.2f' % incomeHT"> - income XXX - </infostring> - - <infostring align="center" x="3.8cm" y="4.5cm" size="9" - font="Helvetica" color="(0,0,0)"> - - </infostring> - <infostring align="left" x="6.5cm" y="4.5cm" size="9" - font="Helvetica" color="(0,0,0)" - tal:content="python: '%.2f' % income"> - - </infostring> - <tal:block tal:condition="python: vad_recoverable"> - <infostring align="center" x="9.7cm" y="4.5cm" size="9" - font="Helvetica" color="(0,0,0)" - tal:content="python: '%.2f' % vat"> - vat XXX - </infostring> - </tal:block> - <infostring align="left" x="10.7cm" y="4.5cm" size="9" - font="Helvetica" color="(0,0,0)"> - - </infostring> - <infostring align="center" x="13.8cm" y="4.5cm" size="10" - font="Helvetica-Bold" color="(0,0,0)" - tal:content="python: '%.2f' % payable"> - payable XXX - </infostring> - <infostring align="center" x="16cm" y="4.5cm" size="10" - font="Helvetica-Bold" color="(0,0,0)" - tal:content="python: resource_id"> - resource_id XXX - </infostring> - <infostring align="left" x="18cm" y="4.5cm" size="10" - font="Helvetica-Bold" color="(0,0,0)" - tal:content="python: due_date.strftime('%e/%m/%y')"> - due_date XXX - </infostring> - - <infostring align="left" x="1.1cm" y="3.8cm" size="5" font="Helvetica" color="(0,0,0)"> - En application de la loi du 31/12/1992, nous vous précisons que la présente facture devra être réglée à la date indiquée ci-dessus. En cas de règlement comptant sous 10 jours, date de facture, l'escompte ci-dessus mentionné pourra être déduit du - </infostring> - <infostring align="left" x="1.1cm" y="3.5cm" size="5" font="Helvetica" color="(0,0,0)"> - montant H.T. de la facture, auquel cas le montant de TVA déductible par vous devra être diminué du montant de celle afférente à l'escompte. Son règlement donnera lieu au versement d'un intérêt moratoire, calculé sur les sommes restant - </infostring> - <infostring align="left" x="1.1cm" y="3.2cm" size="5" font="Helvetica" color="(0,0,0)"> - dues à cette date de règlement en principal, frais et taxes inclus, et au taux de l'intérêt légal majoré de 5 points, sans que cette pénalité puisse être en toute hypothèse inférieure à 1,5 fois le taux de l'intérêt légal. - </infostring> - - </static> - - <frame id="content" - nextid="content" - x="1cm" - y="5.8cm" - width="19.5cm" - height="18.8cm" - leftpadding="0.1cm" - rightpadding="0.1cm" - toppadding="0.2cm" - bottompadding="0.5cm" - showBoundary="1"/> - </pagetemplate> - - - <pagetemplate id="TotalPage" > - <static> - - <infostring align="left" x="19cm" y="26cm" size="8" - font="Helvetica-Bold" color="(0,0,0)"> - %(page)s - </infostring> - </static> - </pagetemplate> - - - <pagetemplate id="Page" > - - <static> - - <infostring align="left" x="10cm" y= "28cm" size="10" - font="Helvetica" color="(0,0,0)">Page %(page)s</infostring> - - </static> - - <frame id="content" - nextid="content" - x="2cm" - y="1.5cm" - width="17cm" - height="25.5cm" - leftpadding="0.1cm" - rightpadding="0.1cm" - toppadding="0.5cm" - bottompadding="0.5cm" - showBoundary="1"/> - </pagetemplate> - - </tal:block> -</template> diff --git a/product/Coramy/skins/coramy_trade/default_pdf_template_save.pt b/product/Coramy/skins/coramy_trade/default_pdf_template_save.pt deleted file mode 100755 index 9a173a0156..0000000000 --- a/product/Coramy/skins/coramy_trade/default_pdf_template_save.pt +++ /dev/null @@ -1,525 +0,0 @@ -<?xml version="1.0" encoding="iso-8859-1" ?> -<template filename="default.pdf" - pagesize="A4" - landscape="0" - showboundary="0" - leftmargin="1cm" - rightmargin="1cm" - topmargin="1cm" - bottommargin="1cm" - allowsplitting="1" - tal:define="packing_list python:here.getCausalityValueList(portal_type=['Sale Packing List','Sales Packing List'])[0]; - invoice_id python:here.getId(); - resource_title python:here.getResourceTitle() or 'Euros'; - resource_id python:here.getResourceId() or 'EUR'; - income python: here.income; - vat python: here.vat; - payable python: here.payable;"> - <tal:block - tal:define="destination python: packing_list.getDestinationValue(); - destination_administration python: packing_list.getDestinationAdministrationValue() or packing_list.getDestinationSectionValue(); - start_date python:packing_list.getStartDate(); - packing_list_id python:packing_list.getId(); - order python:packing_list.getCausalityValueList(portal_type=['Sale Order','Sales Order'])[0];"> - - <stylesheet> - - <paragraphstyle name="Normal" fontname="Helvetica" fontsize="12" - align="LEFT" firstLineIndent="0"/> - <paragraphstyle name="Bullet" fontname="Helvetica" fontsize="12" - bulletFontName="Symbol" bulletFontSize="14" - leftIndent="20" firstLineIndent="0" - parent="Normal"/> - - <paragraphstyle name="Heading1" parent="Normal" - fontname="Helvetica-Bold" fontsize="16"/> - <paragraphstyle name="Heading2" parent="Normal" - fontname="Helvetica-Bold" fontsize="15"/> - <paragraphstyle name="Heading3" parent="Normal" - fontname="Helvetica-Bold" fontsize="14"/> - <paragraphstyle name="Heading4" parent="Normal" - fontname="Helvetica-Bold" fontsize="13"/> - <paragraphstyle name="Heading5" parent="Normal" - fontname="Helvetica-Bold" fontsize="12"/> - <paragraphstyle name="Heading6" parent="Normal" - fontname="Helvetica-Bold" fontsize="11"/> - <paragraphstyle name="Heading7" parent="Normal" - fontname="Helvetica-Bold" fontsize="10"/> - - <paragraphstyle name="Small" parent="Normal" fontname="Helvetica-Bold" - fontsize="7"/> - <paragraphstyle name="Cell" parent="Normal" fontname="Helvetica-Bold" - fontsize="12" - alignment="center" /> - <paragraphstyle name="CellHeading" parent="Normal" - fontname="Helvetica-Bold" fontsize="13" - alignment="center"/> - - <paragraphstyle name="Example" fontname="Courier-Oblique" fontsize="10" - parent="Normal"/> - - <paragraphstyle name="InvoiceItem" fontname="Courier-Oblique" - fontsize="10" - parent="Normal"/> - - <tablestyle name="StandardTable"> - <stylecmd expr="('LEFTPADDING', (0,0), (-1,-1), 5)"/> - <stylecmd expr="('RIGHTPADDING', (0,0), (-1,-1), 5)"/> - <stylecmd expr="('TOPPADDING', (0,0), (-1,-1), 3)"/> - <stylecmd expr="('BOTTOMPADDING', (0,0), (-1,-1), 7)"/> - <stylecmd expr="('ALIGN', (0,0), (-1,-1), 'RIGHT')"/> - <stylecmd expr="('GRID', (0,0), (-1,-1), 0.5, colors.black)"/> - <stylecmd expr="('BOX', (0,0), (-1,-1), 1, colors.black)"/> - <stylecmd expr="('FONT', (0,0), (-1,-1), 'Helvetica', 10)"/> - </tablestyle> - - <tablestyle name="HeadLine"> - <stylecmd expr="('LEFTPADDING', (0,0), (-1,-1), 5)"/> - <stylecmd expr="('RIGHTPADDING', (0,0), (-1,-1), 5)"/> - <stylecmd expr="('TOPPADDING', (0,0), (-1,-1), 1)"/> - <stylecmd expr="('BOTTOMPADDING', (0,0), (-1,-1), 1)"/> - <stylecmd expr="('ALIGN', (0,0), (-1,-1), 'LEFT')"/> - <stylecmd expr="('GRID', (0,0), (-1,-1), 0, colors.white)"/> - <stylecmd expr="('BOX', (0,0), (-1,-1), 0, colors.white)"/> - <stylecmd expr="('FONT', (0,0), (-1,-1), 'Helvetica', 8)"/> - <stylecmd expr="('BACKGROUND', (0,0), (-1,-1), colors.white)"/> - <stylecmd expr="('TEXTCOLOR', (0,0), (-1,-1), colors.black)"/> - <stylecmd expr="('HALIGN', 'LEFT')"/> - </tablestyle> - - <tablestyle name="HeadLine2"> - <stylecmd expr="('LEFTPADDING', (0,0), (-1,-1), 5)"/> - <stylecmd expr="('RIGHTPADDING', (0,0), (-1,-1), 5)"/> - <stylecmd expr="('TOPPADDING', (0,0), (-1,-1), 1)"/> - <stylecmd expr="('BOTTOMPADDING', (0,0), (-1,-1), 1)"/> - <stylecmd expr="('ALIGN', (0,0), (-1,-1), 'LEFT')"/> - <stylecmd expr="('GRID', (0,0), (-1,-1), 0, colors.white)"/> - <stylecmd expr="('BOX', (0,0), (-1,-1), 0, colors.white)"/> - <stylecmd expr="('FONT', (0,0), (-1,-1), 'Helvetica', 6)"/> - <stylecmd expr="('BACKGROUND', (0,0), (-1,-1), colors.white)"/> - <stylecmd expr="('TEXTCOLOR', (0,0), (-1,-1), colors.black)"/> - <stylecmd expr="('HALIGN', 'LEFT')"/> - </tablestyle> - - <tablestyle name="TotalLine"> - <stylecmd expr="('LEFTPADDING', (0,0), (-1,-1), 5)"/> - <stylecmd expr="('RIGHTPADDING', (0,0), (-1,-1), 5)"/> - <stylecmd expr="('TOPPADDING', (0,0), (-1,-1), 1)"/> - <stylecmd expr="('BOTTOMPADDING', (0,0), (-1,-1), 1)"/> - <stylecmd expr="('ALIGN', (0,0), (-1,-1), 'RIGHT')"/> - <stylecmd expr="('GRID', (0,0), (-1,-1), 0, colors.white)"/> - <stylecmd expr="('BOX', (0,0), (-1,-1), 0, colors.white)"/> - <stylecmd expr="('FONT', (0,0), (-1,-1), 'Helvetica-Oblique', 8)"/> - <stylecmd expr="('FONT', (-2,0), (-2,-1), 'Helvetica', 8)"/> - <stylecmd expr="('TEXTCOLOR', (0,0), (-1,-1), colors.black)"/> - <stylecmd expr="('HALIGN', 'LEFT')"/> - </tablestyle> - - <tablestyle name="CellTable"> - <stylecmd expr="('LEFTPADDING', (0,0), (-1,-1), 5)"/> - <stylecmd expr="('RIGHTPADDING', (0,0), (-1,-1), 5)"/> - <stylecmd expr="('TOPPADDING', (0,0), (-1,-1), 1)"/> - <stylecmd expr="('BOTTOMPADDING', (0,0), (-1,-1), 1)"/> - <stylecmd expr="('ALIGN', (0,0), (1,-1), 'LEFT')"/> - <stylecmd expr="('ALIGN', (2,0), (-4,-1), 'CENTER')"/> - <stylecmd expr="('ALIGN', (-3,0), (-1,-1), 'RIGHT')"/> - <stylecmd expr="('GRID', (2,1), (-5,-1), 0.2, colors.black)"/> - <stylecmd expr="('BOX', (2,1), (-5,-1), 0.2, colors.black)"/> - <stylecmd expr="('FONT', (0,0), (-1,0), 'Helvetica', 6)"/> - <stylecmd expr="('FONT', (0,1), (-1,-1), 'Helvetica', 8)"/> - <stylecmd expr="('HALIGN', 'LEFT')"/> - </tablestyle> - - </stylesheet> - - <pagetemplate id="FirstPage" nextid="Page" startframe="content"> - <static> - - <!-- Entete CORAMY --> - <infostring align="left" x="1.4cm" y="28cm" size="40" - font="Times-Bold" color="(0,0,0)">Coramy</infostring> - - <rectangle x="1cm" y="28cm" width="0.3cm" height="0.4cm" - linewidth="0.0" stroke="(1,1,1)" fill="(0.5,0.5,0.5)"/> - <rectangle x="6.5cm" y="28cm" width="13.5cm" height="0.4cm" - linewidth="0.0" stroke="(1,1,1)" fill="(0.5,0.5,0.5)"/> - - <infostring align="left" x="7cm" y="28.5cm" size="8" - font="Helvetica" color="(0,0,0)"> - 5 bis, rue Denis Cordonnier - F.59820 GRAVELINES - Tel. 33(0)3 28 51 91 51 - Fax 33(0)3 28 23 34 96 - </infostring> - <infostring align="left" x="10cm" y="28.1cm" size="8" - font="Helvetica" color="(1,1,1)"> - MAILLOTS DE BAIN - GYM - SWIMSUITS - FITNESS - </infostring> - <infostring align="left" x="6.8cm" y="27.7cm" size="6" - font="Helvetica" color="(0,0,0)"> - SAS capital de 435.200 EUR - T.V.A. FR 67 611 750 274 - R.C. Dunkerque 611 750 274 - SIRET 611 750 274 00023 - CNUF 15971 - </infostring> - - <!-- Titre du document (Facture n°) --> - <infostring align="left" x="6.8cm" y="26cm" size="16" - font="Helvetica-Bold" color="(0,0,0)" tal:content="python: 'Facture n° %s' % invoice_id"> - Facture n° 105 915 - </infostring> - - <infostring align="left" x="14cm" y="26cm" size="8" - font="Helvetica" color="(0,0,0)" tal:content="python: start_date.strftime('Gravelines, le %e/%m/%y')"> - Gravelines, le 9/07/03 - </infostring> - - <infostring align="left" x="18.5cm" y="26cm" size="8" - font="Helvetica-Bold" color="(0,0,0)"> - Folio 1 - </infostring> - - <!-- Grand cadre de la fature --> - <line x1="1cm" x2="20.5cm" y1="25cm" y2="25cm" width="1"/> - <line x1="1cm" x2="1cm" y1="25cm" y2="4cm" width="1"/> - <line x1="20.5cm" x2="20.5cm" y1="25cm" y2="4cm" width="1"/> - <line x1="1cm" x2="20.5cm" y1="4cm" y2="4cm" width="1"/> - - <!-- Entete de facture --> - <!-- Quadrillage de l'entete de facture --> - <line x1="4.2cm" x2="4.2cm" y1="25cm" y2="20.3cm" width="1"/> - <line x1="11.4cm" x2="11.4cm" y1="25cm" y2="20.3cm" width="1"/> - <line x1="18.5cm" x2="18.5cm" y1="25cm" y2="20.3cm" width="1"/> - <line x1="4.2cm" x2="18.5cm" y1="22.3cm" y2="22.3cm" width="1"/> - <line x1="1cm" x2="20.5cm" y1="20.3cm" y2="20.3cm" width="1"/> - - <infostring align="left" x="1.8cm" y="24.7cm" size="6" font="Helvetica-Oblique" color="(0,0,0)"> - Commande No - </infostring> - <infostring align="left" x="1.5cm" y="24.5cm" size="6" font="Helvetica-Oblique" color="(0,0,0)"> - Auftrag Nr / Order No - </infostring> - <infostring align="center" x="2.5cm" y="24.2cm" size="8" font="Helvetica-Bold" color="(0,0,0)" - tal:content="python: order.getDestinationReference()"> - 7286007 - </infostring> - - <infostring align="left" x="1.7cm" y="23.8cm" size="6" font="Helvetica-Oblique" color="(0,0,0)"> - Confirmation No - </infostring> - <infostring align="left" x="1.8cm" y="23.6cm" size="6" font="Helvetica-Oblique" color="(0,0,0)"> - Bestätigung Nr - </infostring> - <infostring align="center" x="2.5cm" y="23.3cm" size="8" font="Helvetica-Bold" color="(0,0,0)" - tal:content="python: order.getId()"> - 119 022 - </infostring> - - <infostring align="left" x="1.1cm" y="22.9cm" size="6" font="Helvetica-Oblique" color="(0,0,0)"> - Livraison No / Lieferschein Nr - </infostring> - <infostring align="left" x="1.8cm" y="22.7cm" size="6" font="Helvetica-Oblique" color="(0,0,0)"> - Delifery note No - </infostring> - <infostring align="center" x="2.5cm" y="22.4cm" size="8" font="Helvetica-Bold" color="(0,0,0)" - tal:content="python: packing_list_id"> - 108 301 - </infostring> - - <infostring align="left" x="1.1cm" y="21.9cm" size="6" font="Helvetica-Oblique" color="(0,0,0)"> - Nombre de colis - </infostring> - <infostring align="left" x="1.3cm" y="21.7cm" size="6" font="Helvetica-Oblique" color="(0,0,0)"> - Kolli anzahl - </infostring> - <infostring align="left" x="1.2cm" y="21.5cm" size="6" font="Helvetica-Oblique" color="(0,0,0)"> - Nb of parcels - </infostring> - <infostring align="left" x="3.5cm" y="21.7cm" size="8" font="Helvetica-Bold" color="(0,0,0)"> - 32 - </infostring> - - <infostring align="left" x="1.1cm" y="21cm" size="6" font="Helvetica" color="(0,0,0)"> - Poids brut (kg) - </infostring> - <infostring align="left" x="1.2cm" y="20.8cm" size="6" font="Helvetica" color="(0,0,0)"> - Brutto-gewicht - </infostring> - <infostring align="left" x="1.3cm" y="20.6cm" size="6" font="Helvetica" color="(0,0,0)"> - Gross weight - </infostring> - - - <infostring align="left" x="6cm" y="24.7cm" size="6" font="Helvetica-Oblique" color="(0,0,0)"> - Livraison / Versand / Delivery - </infostring> - <infostring align="left" x="4.4cm" y="24.3cm" size="8" font="Helvetica-Bold" color="(0,0,0)" - tal:content="python: destination.getTitle()"> - LA REDOUTE BERTHELOT - </infostring> - <tal:block tal:define="addr_list python: destination.getDefaultAddressText().split('\n')"> - <tal:block tal:repeat="addr_item addr_list"> - <tal:block tal:define="index repeat/addr_item/index"> - <infostring align="left" x="4.4cm" size="8" font="Helvetica-Bold" color="(0,0,0)" - tal:attributes="y python: '%fcm' % (23.9 - index * 0.4)" tal:content="addr_item"> - 119 CHAUSSEE BERTHELOT - </infostring> - </tal:block> - </tal:block> - </tal:block> - - - <infostring align="left" x="11.6cm" y="24.3cm" size="8" font="Helvetica-Bold" color="(0,0,0)" - tal:content="python: destination_administration.getTitle()"> - REDOUTE - </infostring> - <tal:block tal:define="addr_list python: destination_administration.getDefaultAddressText().split('\n')"> - <tal:block tal:repeat="addr_item addr_list"> - <tal:block tal:define="index repeat/addr_item/index"> - <infostring align="left" x="11.6cm" size="8" font="Helvetica-Bold" color="(0,0,0)" - tal:attributes="y python: '%fcm' % (23.9 - index * 0.4)" tal:content="addr_item"> - 119 CHAUSSEE BERTHELOT - </infostring> - </tal:block> - </tal:block> - </tal:block> - - - <infostring align="left" x="4.5cm" y="22cm" size="6" font="Helvetica-Oblique" color="(0,0,0)"> - Commercial - </infostring> - <infostring align="left" x="4.4cm" y="21.5cm" size="6" font="Helvetica-Oblique" color="(0,0,0)"> - Paiement - </infostring> - <infostring align="left" x="4.6cm" y="21.3cm" size="6" font="Helvetica-Oblique" color="(0,0,0)"> - Zahlung - </infostring> - <infostring align="left" x="4.5cm" y="21.1cm" size="6" font="Helvetica-Oblique" color="(0,0,0)"> - Payment - </infostring> - <infostring align="left" x="4.3cm" y="20.7cm" size="6" font="Helvetica-Oblique" color="(0,0,0)"> - Device / Currency / Wahrung - </infostring> - <infostring align="left" x="5.8cm" y="21.4cm" size="8" font="Helvetica-Bold" color="(0,0,0)"> - Cheque - </infostring> - <infostring align="left" x="5.8cm" y="21.1cm" size="8" font="Helvetica-Bold" color="(0,0,0)"> - 20 jours Net - </infostring> - <infostring align="left" x="8.5cm" y="20.6cm" size="8" font="Helvetica-Bold" color="(0,0,0)" - tal:content="python: resource_title"> - Euros - </infostring> - <infostring align="left" x="10.2cm" y="20.6cm" size="8" font="Helvetica-Bold" color="(0,0,0)" - tal:content="python: resource_id"> - EUR - </infostring> - - - <infostring align="left" x="11.6cm" y="22cm" size="6" font="Helvetica-Oblique" color="(0,0,0)"> - Code comptable - </infostring> - <infostring align="left" x="11.6cm" y="21.4cm" size="6" font="Helvetica-Oblique" color="(0,0,0)"> - No TVA intracom. - </infostring> - <infostring align="left" x="11.6cm" y="20.9cm" size="6" font="Helvetica-Oblique" color="(0,0,0)"> - Conditions d'escompte / Diskont / Discount. - </infostring> - <infostring align="left" x="14cm" y="22cm" size="8" font="Helvetica-Bold" color="(0,0,0)"> - 41REDOU - </infostring> - <infostring align="left" x="11.6cm" y="20.6cm" size="8" font="Helvetica-Bold" color="(0,0,0)"> - 2,75 sous 20 jours - </infostring> - - - <infostring align="left" x="18.9cm" y="24.6cm" size="6" font="Helvetica-Oblique" color="(0,0,0)"> - Port / Porto - </infostring> - <infostring align="left" x="19.1cm" y="24.4cm" size="6" font="Helvetica-Oblique" color="(0,0,0)"> - Freight - </infostring> - <infostring align="left" x="19cm" y="24cm" size="8" font="Helvetica-Bold" color="(0,0,0)"> - Franco - </infostring> - <infostring align="left" x="18.9cm" y="23.4cm" size="6" font="Helvetica-Oblique" color="(0,0,0)"> - Transporteur - </infostring> - <infostring align="left" x="18.6cm" y="23.2cm" size="6" font="Helvetica-Oblique" color="(0,0,0)"> - Carrier / Spediteur - </infostring> - <infostring align="left" x="18.8cm" y="22.8cm" size="8" font="Helvetica-Bold" color="(0,0,0)"> - CORAMY - </infostring> - <infostring align="left" x="18.6cm" y="22cm" size="6" font="Helvetica-Oblique" color="(0,0,0)"> - Transport - </infostring> - <infostring align="left" x="20cm" y="22cm" size="8" font="Helvetica-Bold" color="(0,0,0)"> - 3 - </infostring> - <infostring align="left" x="18.6cm" y="21.4cm" size="6" font="Helvetica-Oblique" color="(0,0,0)"> - Transaction - </infostring> - <infostring align="left" x="19.9cm" y="21.4cm" size="8" font="Helvetica-Bold" color="(0,0,0)"> - 11 - </infostring> - <infostring align="left" x="18.6cm" y="20.8cm" size="6" font="Helvetica-Oblique" color="(0,0,0)"> - Livraison - </infostring> - - <!-- Détail de la facture --> - <rectangle x="1cm" y="19.9cm" width="19.5cm" height="0.4cm" - linewidth="0" fill="(0.75,0.75,0.75)"/> - <line x1="1cm" x2="20.5cm" y1="19.9cm" y2="19.9cm" width="1"/> - - <infostring align="left" x="2.8cm" y="20cm" size="9" - font="Helvetica-Oblique" color="(0,0,0)"> - Denomination des produits - </infostring> - <infostring align="left" x="10cm" y="20cm" size="9" - font="Helvetica-Oblique" color="(0,0,0)"> - Repartition par tailles - </infostring> - <infostring align="left" x="15.4cm" y="20cm" size="9" - font="Helvetica-Oblique" color="(0,0,0)"> - Quantite - </infostring> - <infostring align="left" x="17.1cm" y="20cm" size="9" - font="Helvetica-Oblique" color="(0,0,0)"> - P.U.H.T. - </infostring> - <infostring align="left" x="18.8cm" y="20cm" size="9" - font="Helvetica-Oblique" color="(0,0,0)"> - Total H.T. - </infostring> - - <!-- Pied de facture --> - <rectangle x="1cm" y="5.0cm" width="19.5cm" height="0.8cm" - linewidth="0" fill="(0.75,0.75,0.75)"/> - <line x1="1cm" x2="20.5cm" y1="5.8cm" y2="5.8cm" width="1"/> - <line x1="1cm" x2="20.5cm" y1="5.0cm" y2="5.0cm" width="1"/> - - <infostring align="left" x="1.5cm" y="5.5cm" size="9" - font="Helvetica-Oblique" color="(0,0,0)"> - Total H.T. - </infostring> - <infostring align="left" x="3.8cm" y="5.5cm" size="9" - font="Helvetica-Oblique" color="(0,0,0)"> - Port taxable - </infostring> - <infostring align="left" x="6.2cm" y="5.5cm" size="9" - font="Helvetica-Oblique" color="(0,0,0)"> - Montant taxable - </infostring> - <infostring align="left" x="9.2cm" y="5.5cm" size="9" - font="Helvetica-Oblique" color="(0,0,0)"> - T.V.A. - </infostring> - <infostring align="left" x="9.3cm" y="5.1cm" size="9" - font="Helvetica" color="(0,0,0)"> - 19,6%% - </infostring> - <infostring align="left" x="11.2cm" y="5.5cm" size="9" - font="Helvetica-Oblique" color="(0,0,0)"> - Port - </infostring> - <infostring align="left" x="10.7cm" y="5.1cm" size="9" - font="Helvetica-Oblique" color="(0,0,0)"> - non taxable - </infostring> - <infostring align="left" x="13.8cm" y="5.5cm" size="9" - font="Helvetica-Oblique" color="(0,0,0)"> - Net a payer - </infostring> - <infostring align="left" x="12.6cm" y="5.1cm" size="9" - font="Helvetica-Oblique" color="(0,0,0)"> - Gesamtbetrag / Total amount - </infostring> - <infostring align="left" x="17.5cm" y="5.5cm" size="9" - font="Helvetica-Oblique" color="(0,0,0)"> - Date d'echeance - </infostring> - <infostring align="left" x="17cm" y="5.1cm" size="9" - font="Helvetica-Oblique" color="(0,0,0)"> - Falligkeitstag / Due date - </infostring> - - <infostring align="center" x="2.2cm" y="4.5cm" size="9" - font="Helvetica" color="(0,0,0)" - tal:content="python: '%.2f' % income.getSourceCredit()"> - 14 408,46 - </infostring> - <infostring align="left" x="6.5cm" y="4.5cm" size="9" - font="Helvetica" color="(0,0,0)"> - 14 408,46 - </infostring> - <infostring align="center" x="9.7cm" y="4.5cm" size="9" - font="Helvetica" color="(0,0,0)" - tal:content="python: '%.2f' % vat.getSourceCredit()"> - 2 824,06 - </infostring> - <infostring align="center" x="13.8cm" y="4.5cm" size="10" - font="Helvetica-Bold" color="(0,0,0)" - tal:content="python: '%.2f' % payable.getSourceDebit()"> - 17 232,52 - </infostring> - <infostring align="center" x="16cm" y="4.5cm" size="10" - font="Helvetica-Bold" color="(0,0,0)" - tal:content="python: resource_id"> - EUR - </infostring> - <infostring align="left" x="18cm" y="4.5cm" size="10" - font="Helvetica-Bold" color="(0,0,0)"> - 31/07/03 - </infostring> - - <infostring align="left" x="1.1cm" y="3.8cm" size="5" font="Helvetica" color="(0,0,0)"> - En application de la loi du 31/12/1992, nous vous precisons que la presente facture devra etre reglee a la date indiquee ci-dessous. En cas de reglement comptant sous 10 jours, date de facture, l'escompte ci-dessus mentionne purra etre deduit du - </infostring> - <infostring align="left" x="1.1cm" y="3.5cm" size="5" font="Helvetica" color="(0,0,0)"> - montant H.T. de la facture, auquel cas le montant de TVA deductible par vous devra etre diminue du montant de celle afférente a l'escompte. Son règlement donnera lieu au versement d'un intérêt moratoire, calcule sur les sommes restant - </infostring> - <infostring align="left" x="1.1cm" y="3.2cm" size="5" font="Helvetica" color="(0,0,0)"> - dues a cette date de reglement en principal, frais et taxes inclus, et au taux de l'interet legal majore de 5 points, sans que cette penalite puisse etre en toute hypothese inferieure a 1,5 fois le taux de l'interet legal. - </infostring> - - <infostring align="left" x="1.6cm" y="2.7cm" size="8" font="Helvetica-Bold" color="(0,0,0)"> - Nos marchandises sont grevees d'une clause de reserve de propriete, reprise dans nos conditions generales de venteindiquees au verso - </infostring> - <infostring align="left" x="4.5cm" y="2.4cm" size="8" font="Helvetica-Bold" color="(0,0,0)"> - Allegemeine Verkaufsbedingungen auf ruckseite - General sales conditions overleaf - </infostring> - - </static> - - <frame id="content" - nextid="content" - x="1cm" - y="5.8cm" - width="19.5cm" - height="14.1cm" - leftpadding="0.1cm" - rightpadding="0.1cm" - toppadding="0.2cm" - bottompadding="0.5cm" - showBoundary="1"/> - </pagetemplate> - - <pagetemplate id="Page" > - - <static> - - <infostring align="left" x="10cm" y= "28cm" size="10" - font="Helvetica" color="(0,0,0)">Page %(page)s</infostring> - - </static> - - <frame id="content" - nextid="content" - x="2cm" - y="1.5cm" - width="17cm" - height="25.5cm" - leftpadding="0.1cm" - rightpadding="0.1cm" - toppadding="0.5cm" - bottompadding="0.5cm" - showBoundary="1"/> - </pagetemplate> - - </tal:block> -</template> diff --git a/product/Coramy/skins/coramy_trade/delivery_cell_view.form b/product/Coramy/skins/coramy_trade/delivery_cell_view.form deleted file mode 100755 index 34cc50f5c9..0000000000 --- a/product/Coramy/skins/coramy_trade/delivery_cell_view.form +++ /dev/null @@ -1,221 +0,0 @@ -<?xml version="1.0"?> - -<form> - <title>Cellule de livraison</title> - <row_length>4</row_length> - <name>delivery_cell_view</name> - <pt>form_view</pt> - <action>base_edit</action> - <method>POST</method> - <enctype>multipart/form-data</enctype> - <encoding>UTF-8</encoding> - <stored_encoding>ISO-8859-1</stored_encoding> - <unicode_mode>false</unicode_mode> - <groups> - <group> - <title>left</title> - <fields> - - <field><id>my_id</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <max_length></max_length> - <required type="int">1</required> - <title>Cellule</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - <field><id>spacer</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">1</hidden> - <max_length></max_length> - <required type="int">0</required> - <title> </title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>right</title> - <fields> - - <field><id>my_target_quantity</id> <type>FloatField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">10</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <required type="int">0</required> - <title>Quantité</title> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="not_float">You did not enter a floating point number.</message> - </messages> - </field> - <field><id>my_quantity_unit</id> <type>ListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <extra_item></extra_item> - <first_item type="int">0</first_item> - <hidden type="int">0</hidden> - <items type="list">[]</items> - <required type="int">0</required> - <size type="int">1</size> - <title>Unité</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <items>here/getQuantityUnitRangeItemList</items> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - <field><id>my_price</id> <type>FloatField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">10</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <required type="int">0</required> - <title>Prix</title> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="not_float">You did not enter a floating point number.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>center</title> - <fields> - - </fields> - </group> - <group> - <title>bottom</title> - <fields> - - <field><id>listbox</id> <type>ListBox</type> - <values> - <all_columns type="list">[]</all_columns> - <all_editable_columns type="list">[]</all_editable_columns> - <alternate_name></alternate_name> - <columns type="list">[('id', 'N\xb0 Lot'), ('resource_title', 'Produit'), ('getColoris', 'Coloris'), ('getRemainingQuantity', 'Quantit\xe9'), ('source_reference', 'R\xe9f\xe9rence Fournisseur'), ('bain_teinture', 'Bain de teinture'), ('getLaizeUtile', 'Laize utile'), ('getLocation', 'Emplacement')]</columns> - <css_class></css_class> - <default></default> - <default_params type="list">[]</default_params> - <description></description> - <domain_root_list type="list">[]</domain_root_list> - <domain_tree type="int">0</domain_tree> - <editable type="int">1</editable> - <editable_columns type="list">[]</editable_columns> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <global_attributes type="list">[]</global_attributes> - <hidden type="int">0</hidden> - <lines type="int">10</lines> - <list_action>folder_contents</list_action> - <list_method type="method">DeliveryCell_zGetItemList</list_method> - <meta_types type="list">[]</meta_types> - <portal_types type="list">[('Piece Tissu', 'Piece Tissu')]</portal_types> - <report_root_list type="list">[]</report_root_list> - <report_tree type="int">0</report_tree> - <search type="int">0</search> - <search_columns></search_columns> - <select type="int">0</select> - <selection_name>piece_tissu_selection</selection_name> - <sort type="list">[('Id', 'Id')]</sort> - <sort_columns></sort_columns> - <stat_method></stat_method> - <title>Lots associées</title> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>hidden</title> - <fields> - - </fields> - </group> - </groups> -</form> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_trade/delivery_line_quantity_view.form b/product/Coramy/skins/coramy_trade/delivery_line_quantity_view.form deleted file mode 100755 index c834c5a258..0000000000 --- a/product/Coramy/skins/coramy_trade/delivery_line_quantity_view.form +++ /dev/null @@ -1,386 +0,0 @@ -<?xml version="1.0"?> - -<form> - <title></title> - <row_length>4</row_length> - <name>transformed_resource_variation_view</name> - <pt>form_view</pt> - <action>base_edit</action> - <method>POST</method> - <enctype>multipart/form-data</enctype> - <encoding>UTF-8</encoding> - <stored_encoding>ISO-8859-1</stored_encoding> - <unicode_mode>false</unicode_mode> - <groups> - <group> - <title>left</title> - <fields> - - <field><id>my_variation_base_category_column</id> <type>ListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <extra_item></extra_item> - <first_item type="int">0</first_item> - <hidden type="int">0</hidden> - <items type="list">[]</items> - <required type="int">0</required> - <size type="int">1</size> - <title>Affichage en colonnes</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <items>here/getVariationRangeBaseCategoryItemList</items> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - <field><id>my_variation_base_category_line</id> <type>ListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <extra_item></extra_item> - <first_item type="int">0</first_item> - <hidden type="int">0</hidden> - <items type="list">[]</items> - <required type="int">0</required> - <size type="int">1</size> - <title>Affichage en lignes</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <items>here/getVariationRangeBaseCategoryItemList</items> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>right</title> - <fields> - - <field><id>my_variation_base_category_tab</id> <type>MultiListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default type="list">[]</default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <extra_item></extra_item> - <hidden type="int">0</hidden> - <items type="list">[]</items> - <required type="int">0</required> - <size type="int">3</size> - <title>Affichage en tableaux</title> - <unicode type="int">0</unicode> - <view_separator><br /> -</view_separator> - </values> - <tales> - <items>here/getVariationRangeBaseCategoryItemList</items> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>center</title> - <fields> - - </fields> - </group> - <group> - <title>bottom</title> - <fields> - - <field><id>matrixbox</id> <type>MatrixBox</type> - <values> - <all_editable_attributes type="list">[('quantity', 'quantity'), ('destination_price', 'destination_price'), ('predicate_value', 'predicate_value')]</all_editable_attributes> - <alternate_name></alternate_name> - <cell_base_id>movement</cell_base_id> - <cell_range type="list">[]</cell_range> - <columns type="list">[('32', '32'), ('34', '34'), ('36', '36'), ('38', '38')]</columns> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <editable_attributes type="list">[('quantity', 'quantity'), ('predicate_value', 'predicate_value'), ('variation_category_list', 'variation_category_list'), ('destination_price', 'destination_price')]</editable_attributes> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <getter_method></getter_method> - <global_attributes type="list">[('domain_base_category_list', 'domain_base_category_list'), ('mapped_value_property_list', 'mapped_value_property_list'), ('predicate_operator', 'predicate_operator')]</global_attributes> - <hidden type="int">0</hidden> - <lines type="list">[('Bleu', 'Bleu'), ('Rouge', 'Rouge'), ('Verts', 'Verts')]</lines> - <setter_method></setter_method> - <tabs type="list">[('32', '32'), ('34', '34'), ('36', '36'), ('38', '38')]</tabs> - <title>matrixbox</title> - <update_cell_range type="int">1</update_cell_range> - </values> - <tales> - <columns>here/getColumnVariationRangeCategoryItemList</columns> - <lines>here/getLineVariationRangeCategoryItemList</lines> - <tabs>here/getTabVariationRangeCategoryItemList</tabs> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - </messages> - </field> - <field><id>domain_base_category_list</id> <type>LinesField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default type="list">[]</default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <height type="int">5</height> - <hidden type="int">1</hidden> - <max_length></max_length> - <max_linelength></max_linelength> - <max_lines></max_lines> - <required type="int">0</required> - <title>Valid Domain</title> - <unicode type="int">0</unicode> - <view_separator><br /> -</view_separator> - <whitespace_preserve type="int">0</whitespace_preserve> - <width type="int">40</width> - </values> - <tales> - <default>here/getMatrixVariationRangeBaseCategoryList</default> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_many_lines">You entered too many lines.</message> - <message name="line_too_long">A line was too long.</message> - <message name="too_long">You entered too many characters.</message> - </messages> - </field> - <field><id>predicate_operator</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default>SUPERSET_OF</default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">1</hidden> - <max_length></max_length> - <required type="int">0</required> - <title>Operator</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - <field><id>mapped_value_property_list</id> <type>LinesField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default type="list">['quantity', 'destination_price']</default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <height type="int">5</height> - <hidden type="int">1</hidden> - <max_length></max_length> - <max_linelength></max_linelength> - <max_lines></max_lines> - <required type="int">0</required> - <title>Modified categories</title> - <unicode type="int">0</unicode> - <view_separator><br /> -</view_separator> - <whitespace_preserve type="int">0</whitespace_preserve> - <width type="int">40</width> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_many_lines">You entered too many lines.</message> - <message name="line_too_long">A line was too long.</message> - <message name="too_long">You entered too many characters.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>hidden</title> - <fields> - - <field><id>matrixbox_quantity</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">5</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <max_length></max_length> - <required type="int">0</required> - <title>matrixbox_value</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <default>python:cell.getProperty('quantity')</default> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - <field><id>matrixbox_predicate_value</id> <type>LinesField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default type="list">[]</default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <height type="int">5</height> - <hidden type="int">1</hidden> - <max_length></max_length> - <max_linelength></max_linelength> - <max_lines></max_lines> - <required type="int">0</required> - <title>matrixbox_predicate_value</title> - <unicode type="int">0</unicode> - <view_separator><br /> -</view_separator> - <whitespace_preserve type="int">0</whitespace_preserve> - <width type="int">40</width> - </values> - <tales> - <default>python:cell_index</default> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_many_lines">You entered too many lines.</message> - <message name="line_too_long">A line was too long.</message> - <message name="too_long">You entered too many characters.</message> - </messages> - </field> - <field><id>matrixbox_variation_category_list</id> <type>LinesField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default type="list">[]</default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <height type="int">5</height> - <hidden type="int">1</hidden> - <max_length></max_length> - <max_linelength></max_linelength> - <max_lines></max_lines> - <required type="int">0</required> - <title>matrixbox_predicate_value</title> - <unicode type="int">0</unicode> - <view_separator><br /> -</view_separator> - <whitespace_preserve type="int">0</whitespace_preserve> - <width type="int">40</width> - </values> - <tales> - <default>python:cell_index</default> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_many_lines">You entered too many lines.</message> - <message name="line_too_long">A line was too long.</message> - <message name="too_long">You entered too many characters.</message> - </messages> - </field> - <field><id>matrixbox_destination_price</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">6</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <max_length></max_length> - <required type="int">0</required> - <title>matrixbox_value</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <default>python:cell.getProperty('destination_price')</default> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - </fields> - </group> - </groups> -</form> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_trade/delivery_line_view.form b/product/Coramy/skins/coramy_trade/delivery_line_view.form deleted file mode 100755 index 5f0f4bd404..0000000000 --- a/product/Coramy/skins/coramy_trade/delivery_line_view.form +++ /dev/null @@ -1,247 +0,0 @@ -<?xml version="1.0"?> - -<form> - <title>Ligne de livraison</title> - <row_length>4</row_length> - <name>delivery_line_view</name> - <pt>form_view</pt> - <action>base_edit</action> - <method>POST</method> - <enctype>multipart/form-data</enctype> - <encoding>UTF-8</encoding> - <stored_encoding>ISO-8859-1</stored_encoding> - <unicode_mode>false</unicode_mode> - <groups> - <group> - <title>left</title> - <fields> - - <field><id>my_id</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">5</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <max_length></max_length> - <required type="int">1</required> - <title>Ligne n°</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - <field><id>my_description</id> <type>TextAreaField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <height type="int">3</height> - <hidden type="int">0</hidden> - <max_length></max_length> - <max_linelength></max_linelength> - <max_lines></max_lines> - <required type="int">0</required> - <title>Description</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - <width type="int">40</width> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_many_lines">You entered too many lines.</message> - <message name="line_too_long">A line was too long.</message> - <message name="too_long">You entered too many characters.</message> - </messages> - </field> - <field><id>my_resource_relative_url</id> <type>RelationStringField</type> - <values> - <alternate_name></alternate_name> - <base_category>resource</base_category> - <catalog_index>relative_url</catalog_index> - <css_class></css_class> - <default></default> - <default_module>modele</default_module> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">40</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <jump_method>base_jump_relation</jump_method> - <max_length></max_length> - <portal_type type="list">[('Composant', 'Composant'), ('Tissu', 'Tissu'), ('Modele', 'Modele'), ('Assortiment', 'Assortiment'), ('Category', 'Category')]</portal_type> - <required type="int">0</required> - <title>Produit</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <update_method>base_update_relation</update_method> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - <field><id>my_coloris</id> <type>ListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <extra_item></extra_item> - <first_item type="int">0</first_item> - <hidden type="int">0</hidden> - <items type="list">[]</items> - <required type="int">0</required> - <size type="int">1</size> - <title>Coloris</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <items>python:[('','')] + here.getVariationRangeCategoryItemList(base_category_list=['coloris'], base=0)</items> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - <field><id>my_taille</id> <type>ListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <extra_item></extra_item> - <first_item type="int">0</first_item> - <hidden type="int">0</hidden> - <items type="list">[]</items> - <required type="int">0</required> - <size type="int">1</size> - <title>Taille</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <items>python:[('','')] + here.getVariationRangeCategoryItemList(base_category_list=['taille'], base=0)</items> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - <field><id>my_target_quantity</id> <type>FloatField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">10</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <required type="int">0</required> - <title>Quantité demandée</title> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="not_float">You did not enter a floating point number.</message> - </messages> - </field> - <field><id>my_quantity</id> <type>FloatField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">10</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <required type="int">0</required> - <title>Quantité livrée</title> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="not_float">You did not enter a floating point number.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>right</title> - <fields> - - </fields> - </group> - <group> - <title>center</title> - <fields> - - </fields> - </group> - <group> - <title>bottom</title> - <fields> - - </fields> - </group> - <group> - <title>hidden</title> - <fields> - - </fields> - </group> - </groups> -</form> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_trade/echantillon_modeliste_sql_worklist.zsql b/product/Coramy/skins/coramy_trade/echantillon_modeliste_sql_worklist.zsql deleted file mode 100755 index 040959658a..0000000000 --- a/product/Coramy/skins/coramy_trade/echantillon_modeliste_sql_worklist.zsql +++ /dev/null @@ -1,30 +0,0 @@ -<dtml-comment> -title: -connection_id:erp5_sql_connection -max_rows:2000 -max_cache:100 -cache_time:0 -class_name:ZSQLBrain -class_file:zsqlbrain.py -</dtml-comment> -<params></params> -SELECT DISTINCT modele.id, ligne_cde.uid, ligne_cde.path, ligne_cde.relative_url, ligne_cde.parent_uid, ligne_cde.Description -FROM catalog AS ligne_cde, catalog AS modele, catalog AS commande, category AS cat1 -LEFT JOIN category AS cat2 -ON (cat2.uid=modele.uid -AND cat2.category_uid = <dtml-var "portal_categories.modele_origine.Reconduction.Cognis.uid">) -LEFT JOIN category AS cat3 -ON (cat3.uid=modele.uid -AND cat3.category_uid = <dtml-var "portal_categories.collection['2004'].Coramy.Planches.uid">) -WHERE ligne_cde.portal_type="Sample Order Line" -AND cat2.uid IS NULL -AND cat3.uid IS NULL -AND ligne_cde.uid=cat1.uid -AND commande.portal_type="Samples Order" -AND ligne_cde.parent_uid=commande.uid -AND commande.order_state='active' -AND modele.uid=cat1.category_uid -AND ( modele.modele_state="demande_etude" -OR modele.modele_state="prototypage" -OR modele.modele_state="brouillon" -OR modele.modele_state="etude_modelisme" ) \ No newline at end of file diff --git a/product/Coramy/skins/coramy_trade/echantillon_modeliste_worklist.pt b/product/Coramy/skins/coramy_trade/echantillon_modeliste_worklist.pt deleted file mode 100755 index 54ba721442..0000000000 --- a/product/Coramy/skins/coramy_trade/echantillon_modeliste_worklist.pt +++ /dev/null @@ -1,97 +0,0 @@ -<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> - -<html> - - <head> - <meta http-equiv="content-type" content="text/html;charset=ISO-8859-1"> - <title tal:content="here/getTitle">Coramy</title> - - </head> - - <body bgcolor="#ffffff" - tal:define="filtered_lines python:map((lambda x:x.getObject()),here.echantillon_modeliste_sql_worklist()); - ordered_lines python:here.sort_object_list(unordered_list=filtered_lines, - sort_order = (('resource', 'ASC'),('order_line_stop_date', 'ASC'),) ) - "> - -<table width="675" border="0" cellpadding="0" cellspacing="0"> - <tr> <!-- Ligne Titre --> - <td><img src="spacer1.png" width="1" height="1"></td> - <td> <div align="center"> - <p><font size="+3" color="red">Modèles échantillonnés</font></p> - </div></td> - <td><img src="spacer1.png" width="1" height="1"></td> - </tr> - <tr> <!-- Border-top info --> - <td class="line"><img src="spacer.png" width="1" height="1"></td> - <td class="line"><img src="spacer.png" width="673" height="1"></td> - <td class="line"><img src="spacer.png" width="1" height="1"></td> - </tr> - - <tr> <!-- Border Top Ligne commande --> - <td><img src="spacer.png" width="1" height="1"></td> - <td><img src="spacer.png" width="673" height="1"></td> - <td><img src="spacer.png" width="1" height="1"></td> - </tr> - <tr> <!-- Ligne commande --> - <td><img src="spacer.png" width="1" height="100%"></td> - <td><table class="border" align="center" width="100%"> - <tr> - <td align=center><i><b>Modèle</b></i></td> - <td align=center><i><b>Etat</b></i></td> - <td align=center><i><b>Origine</b></i></td> - <td align=center><i><b>Collection</b></i></td> - <td align=center><i><b>Rôles</b></i></td> - <td align=center><i><b>Date</b></i></td> - <td align=center><i><b>Clients</b></i></td> - </tr> - - <span tal:repeat="index python:range(len(ordered_lines))"> - <span tal:define="modele python:ordered_lines[index].getDefaultValue('destination',portal_type=['Organisation'])"> - - <tr> - <span tal:define="ref_modele python:ordered_lines[index-1].getResource()"> - <td> - <span tal:condition="python:ordered_lines[index].getResource()<>ref_modele" - tal:define="url_items python:modules['string'].split(ordered_lines[index].getResource(),'/')" - tal:content="python:url_items[len(url_items)-1]"/> - </td> - <td> - <span tal:condition="python:ordered_lines[index].getResource()<>ref_modele" - tal:content="python:ordered_lines[index].getOrderLineModeleState()"/> - </td> - <td> - <span tal:condition="python:ordered_lines[index].getResource()<>ref_modele" - tal:content="python:ordered_lines[index].getOrderLineModeleOrigine()"/> - </td> - <td> - <span tal:condition="python:ordered_lines[index].getResource()<>ref_modele" - tal:content="python:ordered_lines[index].getOrderLineModeleCollection()"/> - </td> - <td> - <span tal:condition="python:ordered_lines[index].getResource()<>ref_modele" - tal:content="python:ordered_lines[index].getOrderLineModeleLocalRoles()"/> - </td> - <td tal:content="python:ordered_lines[index].getOrderLineStopDate()"/> - <td tal:content="python:ordered_lines[index].getOrderLineClient()"/> - - </span> - </tr> - - </span> - </span> - - </table> - <td><img src="spacer.png" width="1" height="100%"></td> - </tr> - <tr> <!-- Border Bottom Ligne commande --> - <td><img src="spacer.png" width="1" height="1"></td> - <td><img src="spacer.png" width="673" height="1"></td> - <td><img src="spacer.png" width="1" height="1"></td> - </tr> - -</table> - -</body> - -</html> diff --git a/product/Coramy/skins/coramy_trade/echantillon_page_count.py b/product/Coramy/skins/coramy_trade/echantillon_page_count.py deleted file mode 100755 index b06aed724f..0000000000 --- a/product/Coramy/skins/coramy_trade/echantillon_page_count.py +++ /dev/null @@ -1,17 +0,0 @@ -## Script (Python) "echantillon_page_count" -##bind container=container -##bind context=context -##bind namespace= -##bind script=script -##bind subpath=traverse_subpath -##parameters=total_nb, on_page -##title= -## -items_nb = float(total_nb) -items_in_page = float(on_page) -if items_nb/items_in_page==int(items_nb/items_in_page): - page_nb = items_nb/items_in_page -else : - page_nb = int(items_nb/items_in_page)+1 - -return page_nb diff --git a/product/Coramy/skins/coramy_trade/echantillon_page_list.py b/product/Coramy/skins/coramy_trade/echantillon_page_list.py deleted file mode 100755 index b387e893ec..0000000000 --- a/product/Coramy/skins/coramy_trade/echantillon_page_list.py +++ /dev/null @@ -1,50 +0,0 @@ -## Script (Python) "echantillon_page_list" -##bind container=container -##bind context=context -##bind namespace= -##bind script=script -##bind subpath=traverse_subpath -##parameters=ordered_lines_list, on_page -##title= -## -result = [] -compteur = 0 -nb_trous = 0 -if len(ordered_lines_list) == 0: - ref_theme="" -else : - ref_theme=ordered_lines_list[0].getTheme() -page_infos = [] - -for index in range(len(ordered_lines_list)) : - if ordered_lines_list[index].getTheme()<>ref_theme : - # enregistrement de la dernière page - result.append(page_infos) - # gestion de la nouvelle page - nb_trous += on_page-compteur - compteur = 0 - ref_theme = ordered_lines_list[index].getTheme() - # gestion de la ligne - page_infos = [ordered_lines_list[index].getTheme(), nb_trous, index] - compteur += 1 - - else : - if compteur == on_page : - # enregistrement de la dernière page - result.append(page_infos) - # gestion de la nouvelle page - nb_trous += on_page-compteur - compteur = 0 - ref_theme = ordered_lines_list[index].getTheme() - # gestion de la ligne - page_infos = [ordered_lines_list[index].getTheme(), nb_trous, index] - compteur += 1 - else : - # gestion de la ligne - page_infos = [ordered_lines_list[index].getTheme(), nb_trous, index] - compteur += 1 - -# ajout de la dernière page -result.append(page_infos) - -return result diff --git a/product/Coramy/skins/coramy_trade/echantillon_print.pt b/product/Coramy/skins/coramy_trade/echantillon_print.pt deleted file mode 100755 index fcc45ad081..0000000000 --- a/product/Coramy/skins/coramy_trade/echantillon_print.pt +++ /dev/null @@ -1,191 +0,0 @@ -<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> - -<html> - <head> - <meta http-equiv="content-type" content="text/html;charset=ISO-8859-1"> - <title tal:content="here/getTitle">Coramy</title> - <link rel=stylesheet type="text/css" href="echantillon"> - </head> - - <body tal:define="client python:here.getDefaultValue('destination',portal_type=['Organisation']); - acheteur python:here.getDefaultValue('contact',portal_type=['Person']); - lignes_cde python:here.contentValues(filter={'portal_type':'Sample Order Line'}); - ordered_lines python:here.sort_object_list(unordered_list=lignes_cde, - sort_order = (('theme_index', 'ASC'),('sort_index', 'ASC'), ('resource', 'ASC'),) ); - nb_echantillons python:len(lignes_cde); - col_nb python:2; - lin_nb python:2; - pages_list python:here.echantillon_page_list(ordered_lines,col_nb*lin_nb) - "> - - <table tal:repeat="page_no python:range(len(pages_list))" class="PageA4" width="660" height="955" border="0" cellpadding="0" cellspacing="0"> - <tr> - <td colspan="3" ><p align="center"> - Échantillonnage N° <span tal:content="here/getId"/> - - <span tal:define="url_items python:modules['string'].split(acheteur.getGender(''),'/')" - tal:content="python:(len(url_items)-1)*url_items[len(url_items)-1]"></span> - <span tal:content="python:modules['string'].capwords(modules['string'].lower(acheteur.getTitle()))"/> - - <span tal:content="python:modules['string'].capwords(modules['string'].lower(client.getTitle()))"/>- - <span tal:content="python:modules['string'].capwords(modules['string'].lower(here.getDescription('')))"/> - </p> - </td> - </tr> - <tr> - <td colspan="3" class="Coramy" align="center"><span tal:content="python:pages_list[page_no][0]"/> - </td> - </tr> - <span tal:repeat="i python:range(lin_nb)"> - <tr valign="top" class="Border"> - <span tal:repeat="j python:map((lambda x:x+(page_no*col_nb*lin_nb)+(i*col_nb)-pages_list[page_no][1]),range(col_nb))"> - <td valign="top" align="center" width="50%" class="Border"> - <span tal:condition="python:j<=pages_list[page_no][2]"> - <span tal:define="ligne python:ordered_lines[j]"> - <span tal:condition="python:ligne.getDefaultValue('resource',portal_type=['Modele'])<>None"> - <span tal:define="modele python:ligne.getDefaultValue('resource',portal_type=['Modele']); - coloris_list python:modele.contentValues(filter={'portal_type':'Variante Modele'})"> - <span tal:define="url_items1 python:modules['string'].split(ligne.getResourceRelativeUrl(),'/')" - tal:content="structure python:'Modèle : '+'<b>'+url_items1[len(url_items1)-1]+'</b>'">modele - </span> - <span tal:condition="python:ligne.getColoris() <> None"> - <span tal:define="url_items2 python:modules['string'].split(ligne.getColoris(),'/')" - tal:content="structure python:' coloris '+url_items2[len(url_items2)-1]">modele - </span> - </span> - <br> - <span tal:content="python:modules['string'].capwords(modules['string'].lower(modele.getComposition('')))"/> - <br> - - <table border="0" cellpadding="0" cellspacing="0"> - <tr> - <td width="230" height="280" align="center" class="image" > - <span tal:repeat="coloris coloris_list" > - <img tal:condition="python:coloris.getRelativeUrl()==ligne.getColoris()" - src="" tal:attributes="src python:coloris.absolute_url() + '?display=small&format=jpeg&resolution=150'" - height="280"/> - </span> - </td> - </tr> - </table> - <br> - <span tal:define="tarif_list python:ligne.contentValues(filter={'portal_type':'Element Tarif'})" > - <table border="1" cellspacing="0" cellpadding="0" width="100%" > - <tr> - <span tal:condition="python:len(tarif_list)>0"> - <td><i>Prix €/Quantités</i></td> - <td tal:condition="python:tarif_list[0].getCell(None, '00300', base_id='destination_base_price')<>None" - tal:content="python:'300p'"></td> - <td tal:condition="python:tarif_list[0].getCell(None, '01000', base_id='destination_base_price')<>None" - tal:content="python:'1000p'"></td> - <td tal:condition="python:tarif_list[0].getCell(None, '05000', base_id='destination_base_price')<>None" - tal:content="python:'5000p'"></td> - <td tal:condition="python:tarif_list[0].getCell(None, '10000', base_id='destination_base_price')<>None" - tal:content="python:'10000p'"></td> - </span> - </tr> - <span tal:repeat="tarif_item tarif_list"> - <tr> - <td tal:content="python:modules['string'].lower(tarif_item.getDescription())"/> - <td tal:condition="python:tarif_item.getCell(None, '00300', base_id='destination_base_price')<>None" - tal:content="python:'%.2f' %tarif_item.getCell(None, '00300', base_id='destination_base_price').destination_base_price or nothing"> - </td> - <td tal:condition="python:tarif_item.getCell(None, '01000', base_id='destination_base_price')<>None" - tal:content="python:'%s' %tarif_item.getCell(None, '01000', base_id='destination_base_price').destination_base_price or nothing"> - </td> - <td tal:condition="python:tarif_item.getCell(None, '05000', base_id='destination_base_price')<>None" - tal:content="python:'%.2f' %tarif_item.getCell(None, '05000', base_id='destination_base_price').destination_base_price or nothing"> - </td> - <td tal:condition="python:tarif_item.getCell(None, '10000', base_id='destination_base_price')<>None" - tal:content="python:'%.2f' %tarif_item.getCell(None, '10000', base_id='destination_base_price').destination_base_price or nothing"> - </td> - </tr> - </span> - </table> - </span> - - - </span> - </span> - </span> - </span> - </td> - </span> - </tr> - </span> - <tr> - <td colspan="2" align="center" class="Entete"><p>CORAMY 5 bis, rue Denis Cordonnier - 59820 GRAVELINES - Tel : 03 28 51 91 51 - Fax : 03 28 23 34 96<br>© Coramy - All rights reserved<br>This document is the confidential property of CORAMY - <br>Anyone who divulges this plan is rendering himself liable of legal proceedings</p> - </td> - <td></td> - </tr> - </table> - <span tal:define="client python:here.getDefaultValue('destination',portal_type=['Organisation']); - acheteur python:here.getDefaultValue('contact',portal_type=['Person']); - lignes_cde python:here.contentValues(filter={'portal_type':'Sample Order Line'}); - lignes_index python:here.ordered_lines(lignes_cde=lignes_cde); - nb_echantillons python:len(lignes_cde); - col_nb python:4; - lin_nb python:5; - nb_pages python:here.echantillon_page_count(total_nb=nb_echantillons,on_page=col_nb*lin_nb) - "> - <table tal:repeat="page_no python:range(nb_pages)" class="PageA4" width="660" height="955" border="0" cellpadding="0" cellspacing="0"> - <tr> - <td colspan="4"><p align="center"> - <span class="Coramy">Coramy</span> - <span class="Entete">5 bis, rue Denis Cordonnier - 59820 GRAVELINES - Tel : 03 28 51 91 51 - - Fax : 03 28 23 34 96</span><br>Échantillonnage N° <span tal:content="here/getId"/> - - <span tal:define="url_items python:modules['string'].split(acheteur.getGender(),'/')" - tal:content="python:url_items[len(url_items)-1]"> - </span> - <span tal:content="python:modules['string'].capwords(modules['string'].lower(acheteur.getTitle()))"/> - - <span tal:content="python:modules['string'].capwords(modules['string'].lower(client.getTitle()))"/>- - <span tal:content="python:modules['string'].capwords(modules['string'].lower(here.getDescription()))"/><br> <br></p> - </td> - <td></td> - <td></td> - <td></td> - </tr> - <span tal:repeat="i python:range(lin_nb)"> - <tr valign="top" class="Border"> - <span tal:repeat="j python:map((lambda x:x+(page_no*col_nb*lin_nb)+(i*col_nb)),range(col_nb))"> - <span tal:condition="python:j<nb_echantillons"> - <td valign="top" align="center" width="25%" class="Border" nowrap tal:define="ligne python:lignes_cde[lignes_index[j]]"> - <span tal:condition="python:ligne.getDefaultValue('resource',portal_type=['Modele'])<>None"> - <span tal:define="modele python:ligne.getDefaultValue('resource',portal_type=['Modele']); - coloris_list python:modele.contentValues(filter={'portal_type':'Variante Modele'}) - "> - <span tal:define="url_items1 python:modules['string'].split(ligne.getResourceRelativeUrl(),'/')" - tal:content="python:url_items1[len(url_items1)-1]">modele - </span> - <br> <br> - <table border="0" cellpadding="0" cellspacing="0"> - <tr> - <td width="90" height="90" align="center" valign="center"> - <span tal:repeat="coloris coloris_list"> - <img tal:condition="python:coloris.getRelativeUrl()==ligne.getColoris()" - src="" tal:attributes="src python:coloris.absolute_url() + '?display=small&format=jpeg&resolution=100'" - width="100%" /> - </span> - </td> - </tr> - </table> - </span> - </span> - - </td> - </span> - </span> - </tr> - </span> - <tr> - <td colspan="4" align="center" class="Entete"><p>© Coramy - All rights reserved<br>This document is the confidential property of CORAMY<br>Anyone who divulges this plan is rendering - himself liable of legal proceedings</p> - </td> - <td></td> - <td></td> - <td></td> - </tr> -</table> -</span> - -</body> -</html> diff --git a/product/Coramy/skins/coramy_trade/echantillon_print2.pt b/product/Coramy/skins/coramy_trade/echantillon_print2.pt deleted file mode 100755 index 0d3996247b..0000000000 --- a/product/Coramy/skins/coramy_trade/echantillon_print2.pt +++ /dev/null @@ -1,188 +0,0 @@ -<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> - -<html> - <head> - <meta http-equiv="content-type" content="text/html;charset=ISO-8859-1"> - <title tal:content="here/getTitle">Coramy</title> - <link rel=stylesheet type="text/css" href="echantillon"> - </head> - - <body tal:define="client python:here.getDefaultValue('destination',portal_type=['Organisation']); - acheteur python:here.getDefaultValue('contact',portal_type=['Person']); - lignes_cde python:here.contentValues(filter={'portal_type':'Sample Order Line'}); - ordered_lines python:here.sort_object_list(unordered_list=lignes_cde, - sort_order = (('theme_index', 'ASC'),('sort_index', 'ASC'), ('resource', 'ASC'),) ); - nb_echantillons python:len(lignes_cde); - col_nb python:2; - lin_nb python:2; - pages_list python:here.echantillon_page_list(ordered_lines,col_nb*lin_nb) - "> - - <table tal:repeat="page_no python:range(len(pages_list))" class="PageA4" width="660" height="955" border="0" cellpadding="0" cellspacing="0"> - <tr> - <td colspan="3"><p align="center"> - <span class="Coramy"><span tal:content="python:pages_list[page_no][0]"/></span> - <span class="Entete">5 bis, rue Denis Cordonnier - 59820 GRAVELINES - Tel : 03 28 51 91 51 - Fax : 03 28 23 34 96</span> - <br>Échantillonnage N° <span tal:content="here/getId"/> - - <span tal:define="url_items python:modules['string'].split(acheteur.getGender(),'/')" - tal:content="python:(len(url_items)-1)*url_items[len(url_items)-1]"></span> - <span tal:content="python:modules['string'].capwords(modules['string'].lower(acheteur.getTitle()))"/> - - <span tal:content="python:modules['string'].capwords(modules['string'].lower(client.getTitle()))"/>- - <span tal:content="python:modules['string'].capwords(modules['string'].lower(here.getDescription()))"/> - <br> <br></p> - </td> - <td></td> - <td></td> - </tr> - <span tal:repeat="i python:range(lin_nb)"> - <tr valign="top" class="Border"> - <span tal:repeat="j python:map((lambda x:x+(page_no*col_nb*lin_nb)+(i*col_nb)-pages_list[page_no][1]),range(col_nb))"> - <td valign="top" align="center" width="50%" class="Border"> - <span tal:condition="python:j<=pages_list[page_no][2]"> - <span tal:define="ligne python:ordered_lines[j]"> - <span tal:condition="python:ligne.getDefaultValue('resource',portal_type=['Modele'])<>None"> - <span tal:define="modele python:ligne.getDefaultValue('resource',portal_type=['Modele']); - coloris_list python:modele.contentValues(filter={'portal_type':'Variante Modele'})"> - <span tal:define="url_items1 python:modules['string'].split(ligne.getResourceRelativeUrl(),'/')" - tal:content="structure python:'Modèle : '+'<b>'+url_items1[len(url_items1)-1]+'</b>'">modele - </span> - <span tal:condition="python:ligne.getColoris() <> None"> - <span tal:define="url_items2 python:modules['string'].split(ligne.getColoris(),'/')" - tal:content="structure python:' coloris '+url_items2[len(url_items2)-1]">modele - </span> - </span> - <br> - <span tal:content="python:modules['string'].capwords(modules['string'].lower(modele.getComposition()))"/> - <br> - <table border="0" cellpadding="0" cellspacing="0"> - <tr> - <td width="230" height="280" align="center" valign="top"> - <img src="space.png" width="1" height="230"> - <span tal:repeat="coloris coloris_list"> - <img tal:condition="python:coloris.getRelativeUrl()==ligne.getColoris()" - src="" tal:attributes="src python:coloris.absolute_url() + '?display=small&format=jpeg&resolution=150'" width="100%"/> - </span> - </td> - </tr> - </table> - <br> - <span tal:define="tarif_list python:ligne.contentValues(filter={'portal_type':'Element Tarif'})"> - <table border="1" cellspacing="0" cellpadding="0" width="100%"> - <tr> - <span tal:condition="python:len(tarif_list)>0"> - <td><i>Prix €/Quantités</i></td> - <td tal:condition="python:tarif_list[0].getCell(None, '00300', base_id='destination_base_price')<>None" - tal:content="python:'300p'"></td> - <td tal:condition="python:tarif_list[0].getCell(None, '01000', base_id='destination_base_price')<>None" - tal:content="python:'1000p'"></td> - <td tal:condition="python:tarif_list[0].getCell(None, '05000', base_id='destination_base_price')<>None" - tal:content="python:'5000p'"></td> - <td tal:condition="python:tarif_list[0].getCell(None, '10000', base_id='destination_base_price')<>None" - tal:content="python:'10000p'"></td> - </span> - </tr> - <span tal:repeat="tarif_item tarif_list"> - <tr> - <td tal:content="python:modules['string'].lower(tarif_item.getDescription())"/> - <td tal:condition="python:tarif_item.getCell(None, '00300', base_id='destination_base_price')<>None" - tal:content="python:'%.2f' %tarif_item.getCell(None, '00300', base_id='destination_base_price').destination_base_price or nothing"> - </td> - <td tal:condition="python:tarif_item.getCell(None, '01000', base_id='destination_base_price')<>None" - tal:content="python:'%s' %tarif_item.getCell(None, '01000', base_id='destination_base_price').destination_base_price or nothing"> - </td> - <td tal:condition="python:tarif_item.getCell(None, '05000', base_id='destination_base_price')<>None" - tal:content="python:'%.2f' %tarif_item.getCell(None, '05000', base_id='destination_base_price').destination_base_price or nothing"> - </td> - <td tal:condition="python:tarif_item.getCell(None, '10000', base_id='destination_base_price')<>None" - tal:content="python:'%.2f' %tarif_item.getCell(None, '10000', base_id='destination_base_price').destination_base_price or nothing"> - </td> - </tr> - </span> - </table> - </span> - </span> - </span> - </span> - </span> - </td> - </span> - </tr> - </span> - <tr> - <td colspan="2" align="center" class="Entete"><p>© Coramy - All rights reserved<br>This document is the confidential property of CORAMY - <br>Anyone who divulges this plan is rendering himself liable of legal proceedings</p> - </td> - <td></td> - </tr> - </table> - <span tal:define="client python:here.getDefaultValue('destination',portal_type=['Organisation']); - acheteur python:here.getDefaultValue('contact',portal_type=['Person']); - lignes_cde python:here.contentValues(filter={'portal_type':'Sample Order Line'}); - lignes_index python:here.ordered_lines(lignes_cde=lignes_cde); - nb_echantillons python:len(lignes_cde); - col_nb python:4; - lin_nb python:5; - nb_pages python:here.echantillon_page_count(total_nb=nb_echantillons,on_page=col_nb*lin_nb) - "> - <table tal:repeat="page_no python:range(nb_pages)" class="PageA4" width="660" height="955" border="0" cellpadding="0" cellspacing="0"> - <tr> - <td colspan="4"><p align="center"> - <span class="Coramy">Coramy</span> - <span class="Entete">5 bis, rue Denis Cordonnier - 59820 GRAVELINES - Tel : 03 28 51 91 51 - - Fax : 03 28 23 34 96</span><br>Échantillonnage N° <span tal:content="here/getId"/> - - <span tal:define="url_items python:modules['string'].split(acheteur.getGender(),'/')" - tal:content="python:url_items[len(url_items)-1]"> - </span> - <span tal:content="python:modules['string'].capwords(modules['string'].lower(acheteur.getTitle()))"/> - - <span tal:content="python:modules['string'].capwords(modules['string'].lower(client.getTitle()))"/>- - <span tal:content="python:modules['string'].capwords(modules['string'].lower(here.getDescription()))"/><br> <br></p> - </td> - <td></td> - <td></td> - <td></td> - </tr> - <span tal:repeat="i python:range(lin_nb)"> - <tr valign="top" class="Border"> - <span tal:repeat="j python:map((lambda x:x+(page_no*col_nb*lin_nb)+(i*col_nb)),range(col_nb))"> - <span tal:condition="python:j<nb_echantillons"> - <td valign="top" align="center" width="25%" class="Border" nowrap tal:define="ligne python:lignes_cde[lignes_index[j]]"> - <span tal:condition="python:ligne.getDefaultValue('resource',portal_type=['Modele'])<>None"> - <span tal:define="modele python:ligne.getDefaultValue('resource',portal_type=['Modele']); - coloris_list python:modele.contentValues(filter={'portal_type':'Variante Modele'}) - "> - <span tal:define="url_items1 python:modules['string'].split(ligne.getResourceRelativeUrl(),'/')" - tal:content="python:url_items1[len(url_items1)-1]">modele - </span> - <br> <br> - <table border="0" cellpadding="0" cellspacing="0"> - <tr> - <td width="90" height="90" align="center" valign="center"> - <span tal:repeat="coloris coloris_list"> - <img tal:condition="python:coloris.getRelativeUrl()==ligne.getColoris()" - src="" tal:attributes="src python:coloris.absolute_url() + '?display=small&format=jpeg&resolution=100'" - width="100%" /> - </span> - </td> - </tr> - </table> - </span> - </span> - - </td> - </span> - </span> - </tr> - </span> - <tr> - <td colspan="4" align="center" class="Entete"><p>© Coramy - All rights reserved<br>This document is the confidential property of CORAMY<br>Anyone who divulges this plan is rendering - himself liable of legal proceedings</p> - </td> - <td></td> - <td></td> - <td></td> - </tr> -</table> -</span> - -</body> -</html> diff --git a/product/Coramy/skins/coramy_trade/echantillon_print3.pt b/product/Coramy/skins/coramy_trade/echantillon_print3.pt deleted file mode 100755 index e6c773af9d..0000000000 --- a/product/Coramy/skins/coramy_trade/echantillon_print3.pt +++ /dev/null @@ -1,210 +0,0 @@ -<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> - -<html> - - <head> - <meta http-equiv="content-type" content="text/html;charset=ISO-8859-1"> - <title tal:content="here/getTitle">Coramy</title> -<link rel=stylesheet type="text/css" href="echantillon"> - - - </head> - - <body - tal:define="client python:here.getDefaultValue('destination',portal_type=['Organisation']); - acheteur python:here.getDefaultValue('contact',portal_type=['Person']); - lignes_cde python:here.contentValues(filter={'portal_type':'Sample Order Line'}); - lignes_index python:here.ordered_lines(lignes_cde=lignes_cde); - nb_echantillons python:len(lignes_cde); - col_nb python:2; - lin_nb python:2; - nb_pages python:here.echantillon_page_count(total_nb=nb_echantillons,on_page=col_nb*lin_nb) - "> - - <table tal:repeat="page_no python:range(nb_pages)" class="PageA4" width="660" height="955" border="0" cellpadding="0" cellspacing="0"> - <tr> - <td colspan="3"><p align="center"> - <span class="Coramy">Coramy</span><span class="Entete">5 bis, rue Denis Cordonnier - 59820 GRAVELINES - Tel : 03 28 51 91 51 - - Fax : 03 28 23 34 96</span><br>Échantillonnage N° <span tal:content="here/getId"/> - <span tal:define="url_items python:modules['string'].split(acheteur.getGender(),'/')" - tal:content="python:(len(url_items)-1)*url_items[len(url_items)-1]"> - </span> <span tal:content="python:modules['string'].capwords(modules['string'].lower(acheteur.getTitle()))"/> - <span tal:content="python:modules['string'].capwords(modules['string'].lower(client.getTitle()))"/> - - <span tal:content="python:modules['string'].capwords(modules['string'].lower(here.getDescription()))"/><br> <br></p></td> - <td></td> - <td></td> - - </tr> - - <span tal:repeat="i python:range(lin_nb)"> - <tr valign="top" class="Border"> - - - <span tal:repeat="j python:map((lambda x:x+(page_no*col_nb*lin_nb)+(i*col_nb)),range(col_nb))"> - <span tal:condition="python:j<nb_echantillons"> - <td valign="top" align="center" width="50%" class="Border" tal:define="ligne python:lignes_cde[lignes_index[j]]"> - - <span tal:condition="python:ligne.getDefaultValue('resource',portal_type=['Modele'])<>None"> - <span tal:define="modele python:ligne.getDefaultValue('resource',portal_type=['Modele']); - coloris_list python:modele.contentValues(filter={'portal_type':'Variante Modele'}) - "> - - <span tal:define="url_items1 python:modules['string'].split(ligne.getResourceRelativeUrl(),'/')" - tal:content="structure python:'Modèle : '+'<b>'+url_items1[len(url_items1)-1]+'</b>'">modele</span> - - <span tal:condition="python:ligne.getColoris() <> None"> - <span tal:define="url_items2 python:modules['string'].split(ligne.getColoris(),'/')" - tal:content="structure python:' coloris '+url_items2[len(url_items2)-1]">modele</span> - </span> - - - <br> - <span tal:content="python:modules['string'].capwords(modules['string'].lower(modele.getComposition()))"/> - <br> - <table border="0" cellpadding="0" cellspacing="0"> - <tr> - <td width="280" height="280" align="center" valign="top"> - <span tal:repeat="coloris coloris_list"> - <span tal:condition="python:coloris.getRelativeUrl()==ligne.getColoris()"> - <img tal:condition="python:coloris.width()>=coloris.height()" - src="" tal:attributes="src python:coloris.absolute_url() + '?display=small&format=jpeg&resolution=150'" width="100%"/> - <img tal:condition="python:coloris.width()<coloris.height()" - src="" tal:attributes="src python:coloris.absolute_url() + '?display=small&format=jpeg&resolution=150'" height="100%"/> - </span> - </span> - </td> - </tr> - </table> - <br> - - <span tal:define="tarif_list python:ligne.contentValues(filter={'portal_type':'Element Tarif'})"> - <table border="1" cellspacing="0" cellpadding="0" width="100%"> - <tr> - <span tal:condition="python:len(tarif_list)>0"> - <td><i>Prix €/Quantités</i></td> - <td tal:condition="python:tarif_list[0].getCell(None, '00300', base_id='destination_base_price')<>None" - tal:content="python:'300p'"> - </td> - <td tal:condition="python:tarif_list[0].getCell(None, '01000', base_id='destination_base_price')<>None" - tal:content="python:'1000p'"> - </td> - <td tal:condition="python:tarif_list[0].getCell(None, '05000', base_id='destination_base_price')<>None" - tal:content="python:'5000p'"> - </td> - <td tal:condition="python:tarif_list[0].getCell(None, '10000', base_id='destination_base_price')<>None" - tal:content="python:'10000p'"> - </td> - </span> - </tr> - <span tal:repeat="tarif_item tarif_list"> - <tr> - <td tal:content="python:modules['string'].lower(tarif_item.getDescription())"/> - <td tal:condition="python:tarif_item.getCell(None, '00300', base_id='destination_base_price')<>None" -tal:content="python:'%.2f' %tarif_item.getCell(None, '00300', base_id='destination_base_price').destination_base_price or nothing"> - </td> - <td tal:condition="python:tarif_item.getCell(None, '01000', base_id='destination_base_price')<>None" -tal:content="python:'%s' %tarif_item.getCell(None, '01000', base_id='destination_base_price').destination_base_price or nothing"> - </td> - <td tal:condition="python:tarif_item.getCell(None, '05000', base_id='destination_base_price')<>None" -tal:content="python:'%.2f' %tarif_item.getCell(None, '05000', base_id='destination_base_price').destination_base_price or nothing"> - </td> - <td tal:condition="python:tarif_item.getCell(None, '10000', base_id='destination_base_price')<>None" -tal:content="python:'%.2f' %tarif_item.getCell(None, '10000', base_id='destination_base_price').destination_base_price or nothing"> - - </td> - - </tr> - - </span> - </table> - </span> - - </span> - - </span> - </td> - </span> - </span> - </tr> - </span> - <tr> - <td colspan="2" align="center" class="Entete"><p>© Coramy - All rights reserved<br>This document is the confidential property of CORAMY<br>Anyone who divulges this plan is rendering - himself liable of legal proceedings</p></td> - <td></td> - </tr> - - - </table> -<span tal:define="client python:here.getDefaultValue('destination',portal_type=['Organisation']); - acheteur python:here.getDefaultValue('contact',portal_type=['Person']); - lignes_cde python:here.contentValues(filter={'portal_type':'Sample Order Line'}); - lignes_index python:here.ordered_lines(lignes_cde=lignes_cde); - nb_echantillons python:len(lignes_cde); - col_nb python:4; - lin_nb python:5; - nb_pages python:here.echantillon_page_count(total_nb=nb_echantillons,on_page=col_nb*lin_nb) - "> - - <table tal:repeat="page_no python:range(nb_pages)" class="PageA4" width="660" height="955" border="0" cellpadding="0" cellspacing="0"> - <tr> - <td colspan="4"><p align="center"> - <span class="Coramy">Coramy</span><span class="Entete">5 bis, rue Denis Cordonnier - 59820 GRAVELINES - Tel : 03 28 51 91 51 - - Fax : 03 28 23 34 96</span><br>Échantillonnage N° <span tal:content="here/getId"/> - <span tal:define="url_items python:modules['string'].split(acheteur.getGender(),'/')" - tal:content="python:url_items[len(url_items)-1]"> - </span> <span tal:content="python:modules['string'].capwords(modules['string'].lower(acheteur.getTitle()))"/> - <span tal:content="python:modules['string'].capwords(modules['string'].lower(client.getTitle()))"/> - - <span tal:content="python:modules['string'].capwords(modules['string'].lower(here.getDescription()))"/><br> <br></p></td> - <td></td> - <td></td> - <td></td> - - </tr> - - <span tal:repeat="i python:range(lin_nb)"> - <tr valign="top" class="Border"> - - - <span tal:repeat="j python:map((lambda x:x+(page_no*col_nb*lin_nb)+(i*col_nb)),range(col_nb))"> - <span tal:condition="python:j<nb_echantillons"> - <td valign="top" align="center" width="25%" class="Border" nowrap tal:define="ligne python:lignes_cde[lignes_index[j]]"> - - <span tal:condition="python:ligne.getDefaultValue('resource',portal_type=['Modele'])<>None"> - <span tal:define="modele python:ligne.getDefaultValue('resource',portal_type=['Modele']); - coloris_list python:modele.contentValues(filter={'portal_type':'Variante Modele'}) - "> - - <span tal:define="url_items1 python:modules['string'].split(ligne.getResourceRelativeUrl(),'/')" - tal:content="python:url_items1[len(url_items1)-1]">modele</span> - - - <br> <br> - <table border="0" cellpadding="0" cellspacing="0"> - <tr> - <td width="90" height="90" align="center" valign="center"> - <span tal:repeat="coloris coloris_list"> - <span tal:condition="python:coloris.getRelativeUrl()==ligne.getColoris()"> - <img tal:condition="python:coloris.width()>=coloris.height()" - src="" tal:attributes="src python:coloris.absolute_url() + '?display=small&format=jpeg&resolution=100'" width="100%"/> - <img tal:condition="python:coloris.width()<coloris.height()" - src="" tal:attributes="src python:coloris.absolute_url() + '?display=small&format=jpeg&resolution=100'" height="100%"/> - </span> - </span> - </td> - </tr> - </table> - </span> - - </span> - </td> - </span> - </span> - </tr> - </span> - <tr> - <td colspan="4" align="center" class="Entete"><p>© Coramy - All rights reserved<br>This document is the confidential property of CORAMY<br>Anyone who divulges this plan is rendering - himself liable of legal proceedings</p></td> - <td></td><td></td><td></td> - </tr> - - - </table></span> - -</body> -</html> diff --git a/product/Coramy/skins/coramy_trade/echantillon_test.py b/product/Coramy/skins/coramy_trade/echantillon_test.py deleted file mode 100755 index 013ab8d1be..0000000000 --- a/product/Coramy/skins/coramy_trade/echantillon_test.py +++ /dev/null @@ -1,16 +0,0 @@ -## Script (Python) "echantillon_test" -##bind container=container -##bind context=context -##bind namespace= -##bind script=script -##bind subpath=traverse_subpath -##parameters= -##title= -## -#lines_list = context.echantillon_modeliste_sql_worklist() -new_list = map((lambda x:x.getObject()),context.echantillon_modeliste_sql_worklist()) -for item in new_list: - if item == None: - print 'erreur' - -return printed diff --git a/product/Coramy/skins/coramy_trade/filtered_sample_order_lines.py b/product/Coramy/skins/coramy_trade/filtered_sample_order_lines.py deleted file mode 100755 index fb0fa4913e..0000000000 --- a/product/Coramy/skins/coramy_trade/filtered_sample_order_lines.py +++ /dev/null @@ -1,33 +0,0 @@ -## Script (Python) "filtered_sample_order_lines" -##bind container=container -##bind context=context -##bind namespace= -##bind script=script -##bind subpath=traverse_subpath -##parameters= -##title= -## -filtered_models = {} -filtered_dates = {} -lines_list = context.sample_order_line_search() - -for line in lines_list : - line_object = line.getObject() - if line_object <> None : - order = line_object.aq_parent - client = order.getDefaultValue('destination',portal_type=['Organisation']) - modele = line_object.getDefaultValue('resource',portal_type=['Modele']) - if modele <>None : - etat_modele = modele.portal_workflow.getInfoFor(modele, 'modele_state') - if etat_modele=='demande_etude' or etat_modele=='etude_modelisme' or etat_modele=='prototypage' or etat_modele=='brouillon': - if not filtered_models.has_key(modele.getId()) : - filtered_models[modele.getId()] = {} - filtered_models[modele.getId()]['date'] = order.getStopDate() - filtered_models[modele.getId()]['client'] = str(client.getTitle()) - filtered_models[modele.getId()]['etat'] = modele.portal_workflow.getInfoFor(modele, 'modele_state') - else : - filtered_models[modele.getId()]['client'] = filtered_models[modele.getId()]['client']+', '+str(client.getTitle()) - if filtered_models[modele.getId()]['date'] > order.getStopDate() : - filtered_models[modele.getId()]['date'] = order.getStopDate() - -return filtered_models diff --git a/product/Coramy/skins/coramy_trade/find_delivery_lines_sql_order_list.zsql b/product/Coramy/skins/coramy_trade/find_delivery_lines_sql_order_list.zsql deleted file mode 100755 index a9ccd98fb3..0000000000 --- a/product/Coramy/skins/coramy_trade/find_delivery_lines_sql_order_list.zsql +++ /dev/null @@ -1,28 +0,0 @@ -<dtml-comment> -title: -connection_id:erp5_sql_connection -max_rows:0 -max_cache:0 -cache_time:0 -class_name:ZSQLBrain -class_file:zsqlbrain.py -</dtml-comment> -<params>order_list</params> -SELECT livraison.id, livraison.path, SUM(movement.quantity) AS quantity -FROM catalog AS ligne_livr, catalog AS commande, catalog AS livraison, movement, category -WHERE commande.portal_type="Samples Order" -AND ligne_livr.parent_uid=livraison.uid -AND ligne_livr.portal_type="Delivery Line" -AND movement.uid=ligne_livr.uid -AND livraison.uid=category.uid -AND commande.uid=category.category_uid -AND category.base_category_uid=<dtml-var "portal_categories.causality.uid"> -AND livraison.portal_type="Samples Packing List" -AND livraison.delivery_state="expediee" -AND (commande.id = "<dtml-var expr="order_list[0]">" -<dtml-in prefix="loop" expr="_.range(_.len(order_list)-1)"> -OR commande.id = "<dtml-var expr="order_list[loop_item+1]">" -</dtml-in> -) -GROUP BY livraison.id -ORDER BY livraison.id diff --git a/product/Coramy/skins/coramy_trade/find_order_lines_sql_order_list.zsql b/product/Coramy/skins/coramy_trade/find_order_lines_sql_order_list.zsql deleted file mode 100755 index ef5401e3e4..0000000000 --- a/product/Coramy/skins/coramy_trade/find_order_lines_sql_order_list.zsql +++ /dev/null @@ -1,23 +0,0 @@ -<dtml-comment> -title: -connection_id:erp5_sql_connection -max_rows:0 -max_cache:0 -cache_time:0 -class_name:ZSQLBrain -class_file:zsqlbrain.py -</dtml-comment> -<params>order_list</params> -SELECT commande.id, commande.default_destination_title, commande.path, SUM(movement.quantity) AS quantity -FROM catalog AS ligne_cde, catalog AS commande, movement -WHERE commande.portal_type="Samples Order" -AND ligne_cde.parent_uid=commande.uid -AND ligne_cde.portal_type="Sample Order Line" -AND movement.uid=ligne_cde.uid -AND (commande.id = "<dtml-var expr="order_list[0]">" -<dtml-in prefix="loop" expr="_.range(_.len(order_list)-1)"> -OR commande.id = "<dtml-var expr="order_list[loop_item+1]">" -</dtml-in> -) -GROUP BY commande.id -ORDER BY commande.id diff --git a/product/Coramy/skins/coramy_trade/first_list_item_add.py b/product/Coramy/skins/coramy_trade/first_list_item_add.py deleted file mode 100755 index c814e08982..0000000000 --- a/product/Coramy/skins/coramy_trade/first_list_item_add.py +++ /dev/null @@ -1,10 +0,0 @@ -## Script (Python) "first_list_item_add" -##bind container=container -##bind context=context -##bind namespace= -##bind script=script -##bind subpath=traverse_subpath -##parameters=grand_total,to_add=0 -##title= -## -grand_total[0] = grand_total[0]+to_add diff --git a/product/Coramy/skins/coramy_trade/gallop_print.pt b/product/Coramy/skins/coramy_trade/gallop_print.pt deleted file mode 100755 index d812d0a203..0000000000 --- a/product/Coramy/skins/coramy_trade/gallop_print.pt +++ /dev/null @@ -1,97 +0,0 @@ -<HTML> - <HEAD> - <meta http-equiv="content-type" content="text/html;charset=ISO-8859-1"> - <title tal:content="here/getTitle">Coramy</title> - <link rel=stylesheet type="text/css" href="gallop"> - </HEAD> - <BODY - tal:define="vetement_list python:here.getValueList('specialise',portal_type=['Vetement']); - forme python:here.getDefaultValue('specialise',portal_type=['Forme']); - variantes_coloris_list python:here.sort_object_list(unordered_list=here.contentValues(filter={'portal_type':'Variante Modele'}), - sort_order = (('prototype', 'DESC'),('id', 'ASC'),) ); - dessins_list python:here.bareme_mesures_dessins_list(); - correspondance_tailles python:here.getDefaultValue('specialise',portal_type=['Correspondance Tailles']); - correspondance_mesures python:here.getDefaultValue('specialise',portal_type=['Correspondance Mesures']); - col_nb python:3; - lin_nb python:3; - nb_coloris python:len(variantes_coloris_list); - "> - <TABLE width="660" height="955" cellpadding="0" cellspacing="0"> - <TR> - <TD colspan="2"><!-- Entete --> - <TABLE width="100%"> - <TR> - <TD class="Titre" width="30%"><p tal:repeat="eip here/getEipList"><span tal:replace="eip"></span></p></TD> - <TD width="30%"> </TD> - <TD width="40%" class="Client" tal:content="here/getDefaultDestinationTitle">Client</TD> - </TR> - <TR> - <TD></TD> - <TD class="Titre" tal:content="here/getDestinationReference">ref client</TD> - <TD></TD> - </TR> - </TABLE><br> - </TD> - </TR> - <TR> - <TD width="50%" valign="top"><!-- Tailles & composition --> - <br><br><br> - <SPAN tal:repeat="vetement vetement_list"> - <TABLE border="1" width="100%" tal:define="tailles python:vetement.bareme_mesures_tailles_list(correspondance_tailles)"> - <TR class="Titre2"> - <TD tal:attributes="colspan python:len(tailles[1])"><b>SIZES</b></TD> - </TR> - <TR> - <TD tal:repeat="index python:range(len(tailles[1]))" - tal:content="python:tailles[1][index]">36</TD><!-- BOUCLE SUR LE NB DE TAILLES --> - </TR> - </TABLE><br><br> - <TABLE border="1" width="100%" tal:define="tailles python:vetement.bareme_mesures_tailles_list(correspondance_tailles)"> - <TR class="Titre2"> - <TD><b>COMPOSITION</b></TD> - </TR> - <TR> - <TD tal:content="here/getComposition"></TD> - </TR> - </TABLE><br><br> - <TABLE border="1" width="100%"> - <TR class="Titre2"> - <TD><b>DESCRIPTION</b></TD> - </TR> - <TR> - <TD tal:content="here/getDescription"></TD> - </TR> - </TABLE> - </SPAN> - </TD> - <TD align="center"><!-- Col. principal, prototype --> - <img src="" - tal:attributes="src python:'%s?display=small&format=jpeg&resolution=300' % variantes_coloris_list[0].getPath()" /><br> - <span class="Compo" tal:content="python:variantes_coloris_list[0].getDestinationReference()" /> - </TD> - </TR> - <TR> - <TD colspan="2"><!-- Autres coloris --> - <TABLE width="100%"> - <SPAN tal:repeat="i python:range(lin_nb)"> - <TR > - <SPAN tal:repeat="j python:range(col_nb)"> - <SPAN tal:condition="python:(i*col_nb)+j+1<nb_coloris"> - <TD align="center" tal:define="variante_coloris python:variantes_coloris_list[(i*col_nb)+j+1]"> - <img src="" - tal:attributes="src python:'%s?display=small&format=jpeg&resolution=150' % variante_coloris.getPath()" width="35%"/><br> - <span class="Compo" tal:content="python:variante_coloris.getDestinationReference()" /> - </TD> - </SPAN> - </SPAN> - </TR> - </SPAN> - </TABLE> - </TD> - </TR> - <TR height="100%"> - <TD/> - </TR> - </TABLE> - </BODY> -</HTML> diff --git a/product/Coramy/skins/coramy_trade/getDeliveryCellPrintList.py b/product/Coramy/skins/coramy_trade/getDeliveryCellPrintList.py deleted file mode 100755 index 5bf91dd751..0000000000 --- a/product/Coramy/skins/coramy_trade/getDeliveryCellPrintList.py +++ /dev/null @@ -1,89 +0,0 @@ -## Script (Python) "getDeliveryCellPrintList" -##bind container=container -##bind context=context -##bind namespace= -##bind script=script -##bind subpath=traverse_subpath -##parameters= -##title= -## -order_line = context -resource = order_line.getResourceValue() -movement_list = [] -pretty_list = [] - -if resource <> None : - - if order_line.hasCellContent() : - movement_list = order_line.contentValues(filter={'portal_type':'Delivery Cell'}) - else : - movement_list.append(order_line) - - for movement in movement_list : - - my_variation_base_category_list = movement.getVariationBaseCategoryList() - if 'coloris' in my_variation_base_category_list : - if len(movement.getColorisValueList()) > 0 : - variante_object = movement.getColorisValueList()[0] - else : - variante_object = None - elif 'variante' in my_variation_base_category_list : - if len(movement.getVarianteValue()) > 0 : - variante_object = movement.getVarianteValueList()[0] - else : - variante_object = None - else : - variante_object = None - - if variante_object <> None: - if variante_object.getSourceReference() in (None, '', 'None'): - line_source_reference = resource.getSourceReference() - else : - if resource.getSourceReference() in (None, '', 'None'): - line_source_reference = variante_object.getSourceReference() - else: - line_source_reference = "%s %s" % (resource.getSourceReference(), variante_object.getSourceReference()) - else : - line_source_reference = resource.getSourceReference() - - line_resource = resource.getId() - line_designation = resource.getDescription() - line_variantes = movement.getVariationCategoryList() - try : - if order_line.getPortalType() == 'Production Packing List Line' : - line_quantity = float(movement.getProperty(key='target_quantity')) - else : - line_quantity = float(movement.getProperty(key='quantity')) - except : - line_quantity = 0 - try : - line_price = float(movement.getProperty(key='price')) - except : - line_price = 0 - - if order_line.getQuantityUnit() <> None : - unit_items = order_line.getQuantityUnit().split('/') - line_unit = unit_items[len(unit_items)-1] - else : - line_unit = '' - - line_date = order_line.aq_parent.getTargetStartDate() - - line_total = line_quantity*line_price - - if resource.getPortalType() == 'Composant' : - line_type = resource.getTypeComposant() - elif resource.getPortalType() == 'Tissu' : - line_type = resource.getMotif() - else : - line_type = ' ' - - try : - line_source = resource.getSourceTitle() - except : - line_source = ' ' - - line_items = [line_source_reference,line_resource,line_designation,line_variantes,line_quantity,line_unit,line_price,line_total,line_date,line_type,line_source] - pretty_list.append(line_items) - -return pretty_list diff --git a/product/Coramy/skins/coramy_trade/getDeliveryCellResourceSourceTitle.py b/product/Coramy/skins/coramy_trade/getDeliveryCellResourceSourceTitle.py deleted file mode 100755 index 1ceedd53d6..0000000000 --- a/product/Coramy/skins/coramy_trade/getDeliveryCellResourceSourceTitle.py +++ /dev/null @@ -1,25 +0,0 @@ -## Script (Python) "getDeliveryCellResourceSourceTitle" -##bind container=container -##bind context=context -##bind namespace= -##bind script=script -##bind subpath=traverse_subpath -##parameters= -##title= -## -cell = context - -try : - resource = cell.getResourceValue() -except : - resource = None - -if resource is not None : - try : - source_title = resource.getDefaultSourceTitle() - except : - source_title = '' -else : - source_title = '' - -return source_title diff --git a/product/Coramy/skins/coramy_trade/getOrderLineClient.py b/product/Coramy/skins/coramy_trade/getOrderLineClient.py deleted file mode 100755 index b3034e0076..0000000000 --- a/product/Coramy/skins/coramy_trade/getOrderLineClient.py +++ /dev/null @@ -1,16 +0,0 @@ -## Script (Python) "getOrderLineClient" -##bind container=container -##bind context=context -##bind namespace= -##bind script=script -##bind subpath=traverse_subpath -##parameters= -##title= -## -try: - order = context.aq_parent - result = order.getDefaultValue('destination',portal_type=['Organisation']).getTitle() -except: - result = '' - -return result diff --git a/product/Coramy/skins/coramy_trade/getOrderLineModeleCollection.py b/product/Coramy/skins/coramy_trade/getOrderLineModeleCollection.py deleted file mode 100755 index bbd9a3e16c..0000000000 --- a/product/Coramy/skins/coramy_trade/getOrderLineModeleCollection.py +++ /dev/null @@ -1,16 +0,0 @@ -## Script (Python) "getOrderLineModeleCollection" -##bind container=container -##bind context=context -##bind namespace= -##bind script=script -##bind subpath=traverse_subpath -##parameters= -##title= -## -try: - modele = context.getDefaultValue('resource',portal_type=['Modele']) - result = modele.getCollection() -except: - result = '' - -return result diff --git a/product/Coramy/skins/coramy_trade/getOrderLineModeleLocalRoles.py b/product/Coramy/skins/coramy_trade/getOrderLineModeleLocalRoles.py deleted file mode 100755 index 38f71a4cef..0000000000 --- a/product/Coramy/skins/coramy_trade/getOrderLineModeleLocalRoles.py +++ /dev/null @@ -1,16 +0,0 @@ -## Script (Python) "getOrderLineModeleLocalRoles" -##bind container=container -##bind context=context -##bind namespace= -##bind script=script -##bind subpath=traverse_subpath -##parameters= -##title= -## -try: - modele = context.getDefaultValue('resource',portal_type=['Modele']) - result = modele.modele_show_local_roles() -except: - result = '' - -return result diff --git a/product/Coramy/skins/coramy_trade/getOrderLineModeleOrigine.py b/product/Coramy/skins/coramy_trade/getOrderLineModeleOrigine.py deleted file mode 100755 index 01ced9841a..0000000000 --- a/product/Coramy/skins/coramy_trade/getOrderLineModeleOrigine.py +++ /dev/null @@ -1,16 +0,0 @@ -## Script (Python) "getOrderLineModeleOrigine" -##bind container=container -##bind context=context -##bind namespace= -##bind script=script -##bind subpath=traverse_subpath -##parameters= -##title= -## -try: - modele = context.getDefaultValue('resource',portal_type=['Modele']) - result = modele.getModeleOrigine() -except: - result = '' - -return result diff --git a/product/Coramy/skins/coramy_trade/getOrderLineModeleState.py b/product/Coramy/skins/coramy_trade/getOrderLineModeleState.py deleted file mode 100755 index 40a978a37d..0000000000 --- a/product/Coramy/skins/coramy_trade/getOrderLineModeleState.py +++ /dev/null @@ -1,16 +0,0 @@ -## Script (Python) "getOrderLineModeleState" -##bind container=container -##bind context=context -##bind namespace= -##bind script=script -##bind subpath=traverse_subpath -##parameters= -##title= -## -try: - modele = context.getDefaultValue('resource',portal_type=['Modele']) - result = modele.portal_workflow.getInfoFor(modele, 'modele_state') -except: - result = '' - -return result diff --git a/product/Coramy/skins/coramy_trade/getOrderLineStopDate.py b/product/Coramy/skins/coramy_trade/getOrderLineStopDate.py deleted file mode 100755 index 1f1b84c110..0000000000 --- a/product/Coramy/skins/coramy_trade/getOrderLineStopDate.py +++ /dev/null @@ -1,16 +0,0 @@ -## Script (Python) "getOrderLineStopDate" -##bind container=container -##bind context=context -##bind namespace= -##bind script=script -##bind subpath=traverse_subpath -##parameters= -##title= -## -try: - order = context.aq_parent - result = order.getStopDate() -except: - result = '' - -return result diff --git a/product/Coramy/skins/coramy_trade/getOrderLineTransformationState.py b/product/Coramy/skins/coramy_trade/getOrderLineTransformationState.py deleted file mode 100755 index 37a41c4427..0000000000 --- a/product/Coramy/skins/coramy_trade/getOrderLineTransformationState.py +++ /dev/null @@ -1,17 +0,0 @@ -## Script (Python) "getOrderLineTransformationState" -##bind container=container -##bind context=context -##bind namespace= -##bind script=script -##bind subpath=traverse_subpath -##parameters= -##title= -## -try: - modele = context.getDefaultValue('resource',portal_type=['Modele']) - transformation = modele.modele_transformation() - result = transformation.portal_workflow.getInfoFor(transformation, 'transform_state') -except: - result = '' - -return result diff --git a/product/Coramy/skins/coramy_trade/getOrderPrettyTotalQuantity.py b/product/Coramy/skins/coramy_trade/getOrderPrettyTotalQuantity.py deleted file mode 100755 index 8b87deed2e..0000000000 --- a/product/Coramy/skins/coramy_trade/getOrderPrettyTotalQuantity.py +++ /dev/null @@ -1,17 +0,0 @@ -## Script (Python) "getOrderPrettyTotalQuantity" -##bind container=container -##bind context=context -##bind namespace= -##bind script=script -##bind subpath=traverse_subpath -##parameters= -##title= -## -try : - order = context - sql_result = order.order_sql_totalizer(order_id=order.getId(),order_type=order.getPortalType()) - result = 'Quantité totale : '+str(sql_result[0].quantity) -except : - result = 'Quantité totale : ' - -return result diff --git a/product/Coramy/skins/coramy_trade/getPurchaseDeliveryCellSourceReference.py b/product/Coramy/skins/coramy_trade/getPurchaseDeliveryCellSourceReference.py deleted file mode 100755 index 8172afbed9..0000000000 --- a/product/Coramy/skins/coramy_trade/getPurchaseDeliveryCellSourceReference.py +++ /dev/null @@ -1,33 +0,0 @@ -## Script (Python) "getPurchaseDeliveryCellSourceReference" -##bind container=container -##bind context=context -##bind namespace= -##bind script=script -##bind subpath=traverse_subpath -##parameters= -##title= -## -cell = context - -try : - variante = cell.getVarianteValue() -except : - variante = None - -if variante is None : - try : - variante = cell.getColorisValue() - except : - variante = None - -if variante is not None and variante.getSourceReference() is not None and variante.getSourceReference() <> '': - return variante.getSourceReference() -else : - try : - resource = cell.getResourceValue() - except : - resource = None - if resource is not None : - return resource.getSourceReference() - else : - return '' diff --git a/product/Coramy/skins/coramy_trade/invoice_transaction_print.pt b/product/Coramy/skins/coramy_trade/invoice_transaction_print.pt deleted file mode 100755 index c1be99b88e..0000000000 --- a/product/Coramy/skins/coramy_trade/invoice_transaction_print.pt +++ /dev/null @@ -1,182 +0,0 @@ -<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> - -<html> - - <head> - <meta http-equiv="content-type" content="text/html;charset=ISO-8859-1"> - <title tal:content="here/getTitle">Nexedi</title> - - </head> - - <body bgcolor="#ffffff" - tal:define="packing_list_list python:here.getCausalityValueList(portal_type=['Sale Packing List','Sales Packing List']); - from_organisation python:here.restrictedTraverse('organisation/nexedi'); - client_invoice python:here.getDefaultValue('destination_section',spec=['Organisation', 'Person']); - client_delivery python:here.getDefaultValue('destination_section',spec=['Organisation', 'Person']); - total_price python:here.getDefaultTotalPrice()"> - - - <table width=100%> - <tr> - <td colspan=3><img src="logo.png"></td> - </tr> - <tr> - <td align=left tal:content="python: from_organisation.getCorporateName()" colspan="2" /> - <td align=right tal:content="python: 'Invoice Date: %s' % here.getStartDate()"/> - </tr> - <tr> - <td align=left tal:content="python: 'Tel : %s' % from_organisation.getDefaultTelephone().asText()" colspan="2"/> - <td align=right tal:content="python: 'Pay Before: %s' % here.getStopDate()"/> - </tr> - <tr> - <td tal:content="python: from_organisation.getDefaultAddress().getStreetAddress()" colspan="2"/> - <td align=right tal:content="python: 'Invoice N¡ë: %s' % here.getId()"/> - </tr> - <tr> - <td tal:content="python: '%s %s' % - (from_organisation.getDefaultAddress().getZipCode(), - from_organisation.getDefaultAddress().getCity())" colspan="3"/> - </tr> - - <tr> - <th colspan=3> - <h2>INVOICE</h2> - </th> - </tr> - - </table> - - <br/> - - <table width=100%> - <tr bgcolor=000000> - <th align=left><font color=ffffff>INVOICE ADDRESS</th> - <th align=left><font color=ffffff>DELIVERY ADDRESS</th> - </tr> - - <tr> - <td align=left tal:content="client_invoice/getCorporateName | client_invoice/getTitle"/> - <td align=left tal:content="client_delivery/getCorporateName | client_delivery/getTitle"/> - </tr> - <tr> - <td align=left tal:content="python: client_invoice.getDefaultAddress().getStreetAddress()"/> - <td align=left tal:content="python: client_delivery.getDefaultAddress().getStreetAddress()"/> - </tr> - <tr> - <td align=left tal:content="python: '%s %s' % - (client_invoice.getDefaultAddress().getZipCode(), - client_invoice.getDefaultAddress().getCity())"/> - <td align=left tal:content="python: '%s %s' % - (client_delivery.getDefaultAddress().getZipCode(), - client_delivery.getDefaultAddress().getCity())"/> - </tr> - </table> - - <br/> - - <span tal:define="global movement_list python:[]" /> - <span tal:repeat="packing_list python:packing_list_list[0:2]"> - <span tal:define="dummy python:movement_list.extend(packing_list.getMovementList())" /> - </span> - <span tal:define="group_list python: here.collectMovement(movement_list)" - tal:repeat="group group_list"> - <table width='100%'> - <tr bgcolor='#000000'> - <th align=left nowrap><font color='#ffffff'>Title</font></th> - <th align=left nowrap><font color='#ffffff'>Total Quantity</font></th> - <th align=left nowrap><font color='#ffffff'>Total Price</font></th> - </tr> - <tr valign=top> - <td align=left tal:content="python: group.getResourceTitle()"></td> - <td align=left tal:content="python: '%.0f' % group.getTotalQuantity()"></td> - <td align=left tal:content="python: '%.0f' % group.getTotalPrice()"></td> - </tr> - </table> - <span tal:define="cell_range_list python:group.getMatrix().getCellRange()"> - <table width='80%'> - <tr> - <td> </td> - <span tal:define="cell_x_range python:cell_range_list[0]" - tal:repeat="x cell_x_range"> - <td align=left tal:content="python:x"></td> - </span> - </tr> - <span tal:define="cell_y_range python:cell_range_list[1]" - tal:repeat="y cell_y_range"> - <tr> - <td align=left tal:content="python: y"></td> - <span tal:define="cell_x_range python:cell_range_list[0]" - tal:repeat="x cell_x_range"> - <td align=left><span tal:condition="python:group.getMatrix().getCell(x, y, base_id='cell') is not None"> - <span tal:replace="python: '%.0f' % group.getMatrix().getCell(x, y, base_id='cell').getQuantity()"/></span></td> - </span> - </tr> - </span> - </table> - </span> - </span> -<!-- - <tr bgcolor=000000> - <th align=left nowrap><font color=ffffff>N¡ë</font></th> - <th align=left nowrap><font color=ffffff>Description</font></th> - <th nowrap><font color=ffffff>Quantity</th> - <th nowrap><font color=ffffff>Unit</font></th> - <th nowrap><font color=ffffff>Unit Price</font></th> - <th nowrap><font color=ffffff>Total Price</font></th> - </tr> - <span tal:define="ordered_lines python:packing_list.contentValues(filter={'meta_type':'ERP5 Delivery Line'})" - tal:repeat="ligne ordered_lines"> - <tr valign=top tal:condition="python:ligne.getQuantity()>0"> - - <td align=left tal:content="python:ligne.getId()"></td> - - <td tal:content="python: ligne.getResourceTitle()"></td> - <td align=right tal:content="python: '%.0f' % ligne.getQuantity()"></td> - <td>n/a</td> - <td align=right tal:content="python: '%.0f' % ligne.getPrice()"></td> - <td align=right tal:content="python: '%.0f' % ligne.getTotalPrice()"></td> - </tr> - </span> - <tr> - <td colspan=6><hr noshade></td> - </tr> - <tr> - <th colspan=4 align=right>Total</th> - <td colspan=2 align=right tal:content="here/l1/getSourceCredit"></td> - </tr> - <tr> - <th colspan=4 align=right>TVA 19.6 %</th> - <td colspan=2 align=right tal:content="here/l2/getSourceCredit"></td> - </tr> - <tr> - <td colspan=3> </td> - <td colspan=3><hr noshade></td> - </tr> - <tr> - <td colspan=3>A r«±çler dans <b>0</b> jours au plus tard. - <br><font size="-3">Conditions de r«±çlement: par ch«²ñue, «¢ 0 jours date de la facture. Paiement accept«± en euros. - Tout retard de r«²çlement donnera lieu «¢ une p«±îalit«± de 1,5% du montant d«å par mois. - R«±óerve de propri«±ô«±º nous conservons la pleine propri«±ô«± des marchandises jusqu'au paiement int«±çral du prix, des taxes et accessoires.</font></td> - - <th colspan=1 align=right nowrap>Somme «¢ r«±çler</th> - <th colspan=2 align=right tal:content="here/l0/getSourceDebit"></th> - </tr> - <tr> - <td> </td> - </tr> - </table> ---> - <table width="100%"> - <tr> - <td><center><h6>RCS Roubaix Tourcoing 440 047 504<br> - Banque: 30027 Guichet: 00039 Compte: 00000013323 RIB: 36<br>IBAN: FR76 3002 7175 3900 0410 2760 135<br> - VAT FR72440047504</h6></center></td> - </tr> - </table> - - - -</body> - -</html> - diff --git a/product/Coramy/skins/coramy_trade/item_by_ean13_code_sql_search.zsql b/product/Coramy/skins/coramy_trade/item_by_ean13_code_sql_search.zsql deleted file mode 100755 index 4858967eaf..0000000000 --- a/product/Coramy/skins/coramy_trade/item_by_ean13_code_sql_search.zsql +++ /dev/null @@ -1,17 +0,0 @@ -<dtml-comment> -title: -connection_id:erp5_sql_connection -max_rows:1000 -max_cache:100 -cache_time:0 -class_name:ZSQLBrain -class_file:zsqlbrain.py -</dtml-comment> -<params>organisation_ean -portal_type</params> -SELECT DISTINCT id, relative_url, path, Description - -FROM catalog -WHERE portal_type = "<dtml-var portal_type>" -AND ean13_code = "<dtml-var organisation_ean>" - diff --git a/product/Coramy/skins/coramy_trade/item_by_title_sql_search.zsql b/product/Coramy/skins/coramy_trade/item_by_title_sql_search.zsql deleted file mode 100755 index 4a3a7a26ab..0000000000 --- a/product/Coramy/skins/coramy_trade/item_by_title_sql_search.zsql +++ /dev/null @@ -1,16 +0,0 @@ -<dtml-comment> -title: -connection_id:erp5_sql_connection -max_rows:1000 -max_cache:100 -cache_time:0 -class_name: -class_file: -</dtml-comment> -<params>title -portal_type</params> -SELECT DISTINCT id, relative_url, path, Description - -FROM catalog -WHERE portal_type = "<dtml-var portal_type>" -AND Title = "<dtml-var title>" \ No newline at end of file diff --git a/product/Coramy/skins/coramy_trade/lookup_delivery_price.py b/product/Coramy/skins/coramy_trade/lookup_delivery_price.py deleted file mode 100755 index 6726da1395..0000000000 --- a/product/Coramy/skins/coramy_trade/lookup_delivery_price.py +++ /dev/null @@ -1,10 +0,0 @@ -## Script (Python) "lookup_delivery_price" -##bind container=container -##bind context=context -##bind namespace= -##bind script=script -##bind subpath=traverse_subpath -##parameters= -##title= -## -return 2.0 diff --git a/product/Coramy/skins/coramy_trade/lookup_order_price.py b/product/Coramy/skins/coramy_trade/lookup_order_price.py deleted file mode 100755 index 2fafae1b39..0000000000 --- a/product/Coramy/skins/coramy_trade/lookup_order_price.py +++ /dev/null @@ -1,10 +0,0 @@ -## Script (Python) "lookup_order_price" -##bind container=container -##bind context=context -##bind namespace= -##bind script=script -##bind subpath=traverse_subpath -##parameters= -##title= -## -return 1.0 diff --git a/product/Coramy/skins/coramy_trade/noir_print.pt b/product/Coramy/skins/coramy_trade/noir_print.pt deleted file mode 100755 index 99838f3f00..0000000000 --- a/product/Coramy/skins/coramy_trade/noir_print.pt +++ /dev/null @@ -1,213 +0,0 @@ -<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> - -<html> - - <head> - <meta http-equiv="content-type" content="text/html;charset=ISO-8859-1"> - <title tal:content="here/getTitle">Coramy</title> -<link rel=stylesheet type="text/css" href="Echantillon2.css"> - - - </head> - - <body - tal:define="client python:here.getDefaultValue('destination',portal_type=['Organisation']); - acheteur python:here.getDefaultValue('contact',portal_type=['Person']); - lignes_cde python:here.contentValues(filter={'portal_type':'Sample Order Line'}); - lignes_index python:here.ordered_lines(lignes_cde=lignes_cde); - nb_echantillons python:len(lignes_cde); - col_nb python:2; - lin_nb python:2; - nb_pages python:here.echantillon_page_count(total_nb=nb_echantillons,on_page=col_nb*lin_nb) - "> - - <table tal:repeat="page_no python:range(nb_pages)" class="PageA4" width="660" height="955" border="0" cellpadding="0" cellspacing="0"> - <tr> - <td colspan="3" class="Theme"><p align="center"> - <span class="Theme">Coramy</span><br>Échantillonnage N° <span tal:content="here/getId"/> - <span tal:define="url_items python:modules['string'].split(acheteur.getGender(),'/')" - tal:content="python:(len(url_items)-1)*url_items[len(url_items)-1]"> - </span> <span tal:content="python:modules['string'].capwords(modules['string'].lower(acheteur.getTitle()))"/> - <span tal:content="python:modules['string'].capwords(modules['string'].lower(client.getTitle()))"/> - - <span tal:content="python:modules['string'].capwords(modules['string'].lower(here.getDescription()))"/><br> <br></p></td> - <td></td> - <td></td> - - </tr> - - <span tal:repeat="i python:range(lin_nb)"> - <tr valign="top" class="Border"> - - - <span tal:repeat="j python:map((lambda x:x+(page_no*col_nb*lin_nb)+(i*col_nb)),range(col_nb))"> - <span tal:condition="python:j<nb_echantillons"> - <td valign="top" align="center" width="50%" class="Border" tal:define="ligne python:lignes_cde[lignes_index[j]]"> - - <span tal:condition="python:ligne.getDefaultValue('resource',portal_type=['Modele'])<>None"> - <span tal:define="modele python:ligne.getDefaultValue('resource',portal_type=['Modele']); - coloris_list python:modele.contentValues(filter={'portal_type':'Variante Modele'}) - "> - - <span tal:define="url_items1 python:modules['string'].split(ligne.getResourceRelativeUrl(),'/')" - tal:content="structure python:'Modèle : '+'<b>'+url_items1[len(url_items1)-1]+'</b>'">modele</span> - - <span tal:condition="python:ligne.getColoris() <> None"> - <span tal:define="url_items2 python:modules['string'].split(ligne.getColoris(),'/')" - tal:content="structure python:' coloris '+url_items2[len(url_items2)-1]">modele</span> - </span> - - - <br> - <table border="0" cellpadding="0" cellspacing="0" width="100%"> - <tr align="left"> - <td width="1"><img src="spacer" width="1" height="38"></td> - <td align="center"><span tal:content="python:modules['string'].capwords(modules['string'].lower(modele.getComposition()))"/> - <br></td> - </tr> - <tr> - <td width="1"><img src="spacer" width="1" height="280"></td> - <td width="280" height="280" align="center" valign="top"> - <span tal:repeat="coloris coloris_list"> - <span tal:condition="python:coloris.getRelativeUrl()==ligne.getColoris()"> - <img tal:condition="python:coloris.width()>=coloris.height()" - src="" tal:attributes="src python:coloris.absolute_url() + '?display=small&format=jpeg&resolution=150'" width="100%"/> - <img tal:condition="python:coloris.width()<coloris.height()" - src="" tal:attributes="src python:coloris.absolute_url() + '?display=small&format=jpeg&resolution=150'" height="100%"/> - </span> - </span> - </td> - </tr> - </table> - <br> - - <span tal:define="tarif_list python:ligne.contentValues(filter={'portal_type':'Element Tarif'})"> - <table border="1" cellspacing="0" cellpadding="0" width="100%"> - <tr> - <span tal:condition="python:len(tarif_list)>0"> - <td><i>Prix €/Quantités</i></td> - <td tal:condition="python:tarif_list[0].getCell(None, '00300', base_id='destination_base_price')<>None" - tal:content="python:'300p'"> - </td> - <td tal:condition="python:tarif_list[0].getCell(None, '01000', base_id='destination_base_price')<>None" - tal:content="python:'1000p'"> - </td> - <td tal:condition="python:tarif_list[0].getCell(None, '05000', base_id='destination_base_price')<>None" - tal:content="python:'5000p'"> - </td> - <td tal:condition="python:tarif_list[0].getCell(None, '10000', base_id='destination_base_price')<>None" - tal:content="python:'10000p'"> - </td> - </span> - </tr> - <span tal:repeat="tarif_item tarif_list"> - <tr> - <td tal:content="python:modules['string'].lower(tarif_item.getDescription())"/> - <td tal:condition="python:tarif_item.getCell(None, '00300', base_id='destination_base_price')<>None" -tal:content="python:'%.2f' %tarif_item.getCell(None, '00300', base_id='destination_base_price').destination_base_price or nothing"> - </td> - <td tal:condition="python:tarif_item.getCell(None, '01000', base_id='destination_base_price')<>None" -tal:content="python:'%s' %tarif_item.getCell(None, '01000', base_id='destination_base_price').destination_base_price or nothing"> - </td> - <td tal:condition="python:tarif_item.getCell(None, '05000', base_id='destination_base_price')<>None" -tal:content="python:'%.2f' %tarif_item.getCell(None, '05000', base_id='destination_base_price').destination_base_price or nothing"> - </td> - <td tal:condition="python:tarif_item.getCell(None, '10000', base_id='destination_base_price')<>None" -tal:content="python:'%.2f' %tarif_item.getCell(None, '10000', base_id='destination_base_price').destination_base_price or nothing"> - - </td> - - </tr> - - </span> - </table> - </span> - - </span> - - </span> - </td> - </span> - </span> - </tr> - </span> - <tr> - <td colspan="2" align="center" class="Entete"><p>© Coramy - All rights reserved<br>This document is the confidential property of CORAMY<br>Anyone who divulges this plan is rendering - himself liable of legal proceedings</p></td> - <td></td> - </tr> - - - </table> -<span tal:define="client python:here.getDefaultValue('destination',portal_type=['Organisation']); - acheteur python:here.getDefaultValue('contact',portal_type=['Person']); - lignes_cde python:here.contentValues(filter={'portal_type':'Sample Order Line'}); - lignes_index python:here.ordered_lines(lignes_cde=lignes_cde); - nb_echantillons python:len(lignes_cde); - col_nb python:4; - lin_nb python:5; - nb_pages python:here.echantillon_page_count(total_nb=nb_echantillons,on_page=col_nb*lin_nb) - "> - - <table tal:repeat="page_no python:range(nb_pages)" class="PageA4" width="660" height="955" border="0" cellpadding="0" cellspacing="0"> - <tr> - <td colspan="4"><p align="center"> - <span class="Coramy">Coramy</span><span class="Entete">5 bis, rue Denis Cordonnier - 59820 GRAVELINES - Tel : 03 28 51 91 51 - - Fax : 03 28 23 34 96</span><br>Échantillonnage N° <span tal:content="here/getId"/> - <span tal:define="url_items python:modules['string'].split(acheteur.getGender(),'/')" - tal:content="python:url_items[len(url_items)-1]"> - </span> <span tal:content="python:modules['string'].capwords(modules['string'].lower(acheteur.getTitle()))"/> - <span tal:content="python:modules['string'].capwords(modules['string'].lower(client.getTitle()))"/> - - <span tal:content="python:modules['string'].capwords(modules['string'].lower(here.getDescription()))"/><br> <br></p></td> - <td></td> - <td></td> - <td></td> - - </tr> - - <span tal:repeat="i python:range(lin_nb)"> - <tr valign="top" class="Border"> - - - <span tal:repeat="j python:map((lambda x:x+(page_no*col_nb*lin_nb)+(i*col_nb)),range(col_nb))"> - <span tal:condition="python:j<nb_echantillons"> - <td valign="top" align="center" width="25%" class="Border" nowrap tal:define="ligne python:lignes_cde[lignes_index[j]]"> - - <span tal:condition="python:ligne.getDefaultValue('resource',portal_type=['Modele'])<>None"> - <span tal:define="modele python:ligne.getDefaultValue('resource',portal_type=['Modele']); - coloris_list python:modele.contentValues(filter={'portal_type':'Variante Modele'}) - "> - - <span tal:define="url_items1 python:modules['string'].split(ligne.getResourceRelativeUrl(),'/')" - tal:content="python:url_items1[len(url_items1)-1]">modele</span> - - - <br> <br> - <table border="0" cellpadding="0" cellspacing="0"> - <tr> - <td width="90" height="90" align="center" valign="center"> - <span tal:repeat="coloris coloris_list"> - <span tal:condition="python:coloris.getRelativeUrl()==ligne.getColoris()"> - <img tal:condition="python:coloris.width()>=coloris.height()" - src="" tal:attributes="src python:coloris.absolute_url() + '?display=small&format=jpeg&resolution=100'" width="100%"/> - <img tal:condition="python:coloris.width()<coloris.height()" - src="" tal:attributes="src python:coloris.absolute_url() + '?display=small&format=jpeg&resolution=100'" height="100%"/> - </span> - </span> - </td> - </tr> - </table> - </span> - - </span> - </td> - </span> - </span> - </tr> - </span> - <tr> - <td colspan="4" align="center" class="Entete"><p>© Coramy - All rights reserved<br>This document is the confidential property of CORAMY<br>Anyone who divulges this plan is rendering - himself liable of legal proceedings</p></td> - <td></td><td></td><td></td> - </tr> - - - </table></span> - -</body> -</html> diff --git a/product/Coramy/skins/coramy_trade/order_confirm_workflow_action.form b/product/Coramy/skins/coramy_trade/order_confirm_workflow_action.form deleted file mode 100755 index 2dd9125040..0000000000 --- a/product/Coramy/skins/coramy_trade/order_confirm_workflow_action.form +++ /dev/null @@ -1,88 +0,0 @@ -<?xml version="1.0"?> - -<form> - <title>Validate</title> - <row_length>4</row_length> - <name>base_workflow_action</name> - <pt>form_view_dialog</pt> - <action>workflow_status_modify</action> - <method>POST</method> - <enctype></enctype> - <encoding>UTF-8</encoding> - <stored_encoding>ISO-8859-1</stored_encoding> - <unicode_mode>false</unicode_mode> - <groups> - <group> - <title>Default</title> - <fields> - - <field><id>my_comment</id> <type>TextAreaField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <height type="int">5</height> - <hidden type="int">0</hidden> - <max_length></max_length> - <max_linelength></max_linelength> - <max_lines></max_lines> - <required type="int">0</required> - <title>Commentaires</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - <width type="int">40</width> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_many_lines">You entered too many lines.</message> - <message name="line_too_long">A line was too long.</message> - <message name="too_long">You entered too many characters.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>hidden</title> - <fields> - - <field><id>my_workflow_action</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">1</hidden> - <max_length></max_length> - <required type="int">1</required> - <title></title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <default>python:here.REQUEST.workflow_action</default> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - </fields> - </group> - </groups> -</form> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_trade/order_create_packing_list.py b/product/Coramy/skins/coramy_trade/order_create_packing_list.py deleted file mode 100755 index 3ae9601f89..0000000000 --- a/product/Coramy/skins/coramy_trade/order_create_packing_list.py +++ /dev/null @@ -1,41 +0,0 @@ -## Script (Python) "order_create_packing_list" -##bind container=container -##bind context=context -##bind namespace= -##bind script=script -##bind subpath=traverse_subpath -##parameters= -##title= -## -movement_list = [] -order = context - -if order.getPortalType() == 'Purchase Order' : - filter_dict = {'portal_type': 'Purchase Order Line'} -else : - filter_dict = {'portal_type': 'Sales Order Line'} - -movement_list += order.getOrderRelatedValueList(portal_type = 'Simulation Movement') -for order_line in order.contentValues(filter=filter_dict) : - movement_list += order_line.getOrderRelatedValueList(portal_type = 'Simulation Movement') - for cell in order_line.contentValues(filter={'portal_type': 'Delivery Cell'}) : - movement_list += cell.getOrderRelatedValueList(portal_type = 'Simulation Movement') - -root_group = context.portal_simulation.collectMovement(movement_list) -delivery_list = context.portal_simulation.buildDeliveryList(root_group) - -# what's the gestionaire of this order -user_name = '' -# are we on a sales order or puchase order ? -if order.getPortalType() == 'Sales Order' : - user_name = order.getSourceAdministrationTitle().replace(' ','_') -elif order.getPortalType() == 'Purchase Order' : - user_name = order.getDestinationAdministrationPersonTitle().replace(' ','_') - -for delivery in delivery_list : - # update the state of the created deliveries to 'confirmed' - delivery.confirm() - # update local_roles - delivery.assign_gestionaire_designe_roles(user_name = user_name) - -return delivery_list diff --git a/product/Coramy/skins/coramy_trade/order_history_view.pt b/product/Coramy/skins/coramy_trade/order_history_view.pt deleted file mode 100755 index c1109399fb..0000000000 --- a/product/Coramy/skins/coramy_trade/order_history_view.pt +++ /dev/null @@ -1,79 +0,0 @@ -<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" - "DTD/xhtml1-strict.dtd"> -<?xml-stylesheet href="erp5.css" rel="stylesheet" type="text/css"?> - -<span tal:replace="nothing"> -<!-- -Copyright (c) 2002 Nexedi SARL and Contributors. All Rights Reserved. - Thierry Faucher <tf@nexedi.com> - -This program is Free Software; you can redistribute it and/or -modify it under the terms of the GNU General Public License -as published by the Free Software Foundation; either version 2 -of the License, or (at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program; if not, write to the Free Software -Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. ---> -</span> - -<html xmlns="http://www.w3.org/1999/xhtml" lang="en" - xml:lang="en" - xmlns:tal="http://xml.zope.org/namespaces/tal" - xmlns:metal="http://xml.zope.org/namespaces/metal" - metal:use-macro="here/main_template/macros/master"> - - <head> - <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /> - <title tal:content="template/title_or_id">The title</title> - <link href="erp5.css" rel="stylesheet" type="text/css"/> - </head> - - <body><div metal:fill-slot="main"> - <div class="Main"> - - -<strong>Historique</strong><br><br> - -<table border=1> - <tr align=center> - <td><b>Etat</b></td><td><b>Date - Heure</b></td><td><b>Utilisateur</b></td><td><b>Action</b></td><td><b>Commentaires</b></td> - </tr> - <span tal:repeat="history_item python:here.portal_workflow.getInfoFor(here, 'composant_history')"> - - <tr> - <td> - <span tal:condition="history_item/composant_state | nothing" - tal:content="history_item/composant_state"/> - </td> - <td> - <span tal:condition="history_item/composant_time | nothing" - tal:content="history_item/composant_time"/> - </td> - <td> - <span tal:condition="history_item/composant_actor | nothing" - tal:content="history_item/composant_actor"/> - </td> - <td> - <span tal:condition="history_item/composant_action | nothing" - tal:content="history_item/composant_action"/> - </td> - <td> - <span tal:condition="history_item/composant_comment | nothing" - tal:content="history_item/composant_comment"/> - </td> - </tr> - - </span> -</table> - - </div> - </div> - </body> -</html> diff --git a/product/Coramy/skins/coramy_trade/order_line_matrix_item_list.py b/product/Coramy/skins/coramy_trade/order_line_matrix_item_list.py deleted file mode 100755 index 1e90aa56b7..0000000000 --- a/product/Coramy/skins/coramy_trade/order_line_matrix_item_list.py +++ /dev/null @@ -1,38 +0,0 @@ -## Script (Python) "order_line_matrix_item_list" -##bind container=container -##bind context=context -##bind namespace= -##bind script=script -##bind subpath=traverse_subpath -##parameters=base_category_list=[], base=1, include=1 -##title= -## -clist = [] -variation_category_list=[] - -if include == 1 : - for category in context.getVariationBaseCategoryList(): - if category in base_category_list : - variation_category_list.append(category) -else : - for category in context.getVariationBaseCategoryList(): - if not category in base_category_list : - variation_category_list.append(category) - -for base_category in variation_category_list : - if base_category in ('coloris','morphologie','variante'): - title_list = map(lambda x:('/'.join(x.getPhysicalPath()[len(x.portal_categories.getPhysicalPath()):])), - context.getValueList(base_category)) - value_list = context.getCategoryMembershipList(base_category, base=base) - for index in range(len(title_list)) : - clist += [(value_list[index],title_list[index])] - else : - title_list = context.getCategoryMembershipList(base_category, base=0) - value_list = context.getCategoryMembershipList(base_category, base=base) - for index in range(len(title_list)) : - clist += [(value_list[index],title_list[index])] - -if len(clist)==0 : - clist.append((None,None)) - -return clist diff --git a/product/Coramy/skins/coramy_trade/order_line_price_view.form b/product/Coramy/skins/coramy_trade/order_line_price_view.form deleted file mode 100755 index bc26161267..0000000000 --- a/product/Coramy/skins/coramy_trade/order_line_price_view.form +++ /dev/null @@ -1,321 +0,0 @@ -<?xml version="1.0"?> - -<form> - <title>Ligne de commande</title> - <row_length>4</row_length> - <name>sales_order_line_price_quantity_view</name> - <pt>form_view</pt> - <action>base_edit</action> - <method>POST</method> - <enctype>multipart/form-data</enctype> - <encoding>UTF-8</encoding> - <stored_encoding>ISO-8859-1</stored_encoding> - <unicode_mode>false</unicode_mode> - <groups> - <group> - <title>Default</title> - <fields> - - <field><id>my_id</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">10</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <max_length></max_length> - <required type="int">1</required> - <title>Ligne n°</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>right</title> - <fields> - - </fields> - </group> - <group> - <title>center</title> - <fields> - - </fields> - </group> - <group> - <title>bottom</title> - <fields> - - <field><id>matrixbox</id> <type>MatrixBox</type> - <values> - <all_editable_attributes type="list">[('target_quantity', 'quantity'), ('price', 'price'), ('predicate_value', 'predicate_value')]</all_editable_attributes> - <alternate_name></alternate_name> - <cell_base_id>movement</cell_base_id> - <cell_range type="list">[]</cell_range> - <columns type="list">[('32', '32'), ('34', '34'), ('36', '36'), ('38', '38')]</columns> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <editable_attributes type="list">[('target_quantity', 'quantity'), ('price', 'price'), ('predicate_value', 'predicate_value'), ('variation_category_list', 'variation_category_list')]</editable_attributes> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <getter_method></getter_method> - <global_attributes type="list">[('domain_base_category_list', 'domain_base_category_list'), ('mapped_value_property_list', 'mapped_value_property_list'), ('predicate_operator', 'predicate_operator')]</global_attributes> - <hidden type="int">0</hidden> - <lines type="list">[('Bleu', 'Bleu'), ('Rouge', 'Rouge'), ('Verts', 'Verts')]</lines> - <setter_method></setter_method> - <tabs type="list">[('32', '32'), ('34', '34'), ('36', '36'), ('38', '38')]</tabs> - <title>matrixbox</title> - <update_cell_range type="int">1</update_cell_range> - </values> - <tales> - <columns>python:here.order_line_matrix_item_list(base_category_list = ('taille',), base=1)</columns> - <lines>python:here.order_line_matrix_item_list(base_category_list = ('coloris','variante'), base=1)</lines> - <tabs>python:here.order_line_matrix_item_list(base_category_list = ('taille','coloris','variante'), base=1, include=0)</tabs> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - </messages> - </field> - <field><id>domain_base_category_list</id> <type>LinesField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default type="list">[]</default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <height type="int">5</height> - <hidden type="int">1</hidden> - <max_length></max_length> - <max_linelength></max_linelength> - <max_lines></max_lines> - <required type="int">0</required> - <title>Valid Domain</title> - <unicode type="int">0</unicode> - <view_separator><br /> -</view_separator> - <whitespace_preserve type="int">0</whitespace_preserve> - <width type="int">40</width> - </values> - <tales> - <default>here/getVariationBaseCategoryList</default> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_many_lines">You entered too many lines.</message> - <message name="line_too_long">A line was too long.</message> - <message name="too_long">You entered too many characters.</message> - </messages> - </field> - <field><id>predicate_operator</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default>SUPERSET_OF</default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">1</hidden> - <max_length></max_length> - <required type="int">0</required> - <title>Operator</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - <field><id>mapped_value_property_list</id> <type>LinesField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default type="list">['target_quantity', 'price']</default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <height type="int">5</height> - <hidden type="int">1</hidden> - <max_length></max_length> - <max_linelength></max_linelength> - <max_lines></max_lines> - <required type="int">0</required> - <title>Modified categories</title> - <unicode type="int">0</unicode> - <view_separator><br /> -</view_separator> - <whitespace_preserve type="int">0</whitespace_preserve> - <width type="int">40</width> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_many_lines">You entered too many lines.</message> - <message name="line_too_long">A line was too long.</message> - <message name="too_long">You entered too many characters.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>hidden</title> - <fields> - - <field><id>matrixbox_predicate_value</id> <type>LinesField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default type="list">[]</default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <height type="int">5</height> - <hidden type="int">1</hidden> - <max_length></max_length> - <max_linelength></max_linelength> - <max_lines></max_lines> - <required type="int">0</required> - <title>matrixbox_predicate_value</title> - <unicode type="int">0</unicode> - <view_separator><br /> -</view_separator> - <whitespace_preserve type="int">0</whitespace_preserve> - <width type="int">40</width> - </values> - <tales> - <default>python:cell_index</default> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_many_lines">You entered too many lines.</message> - <message name="line_too_long">A line was too long.</message> - <message name="too_long">You entered too many characters.</message> - </messages> - </field> - <field><id>matrixbox_variation_category_list</id> <type>LinesField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default type="list">[]</default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <height type="int">5</height> - <hidden type="int">1</hidden> - <max_length></max_length> - <max_linelength></max_linelength> - <max_lines></max_lines> - <required type="int">0</required> - <title>matrixbox_predicate_value</title> - <unicode type="int">0</unicode> - <view_separator><br /> -</view_separator> - <whitespace_preserve type="int">0</whitespace_preserve> - <width type="int">40</width> - </values> - <tales> - <default>python:cell_index</default> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_many_lines">You entered too many lines.</message> - <message name="line_too_long">A line was too long.</message> - <message name="too_long">You entered too many characters.</message> - </messages> - </field> - <field><id>matrixbox_price</id> <type>FloatField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">10</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <required type="int">0</required> - <title>matrixbox_price</title> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <default>python:cell.getProperty('price')</default> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="not_float">You did not enter a floating point number.</message> - </messages> - </field> - <field><id>matrixbox_target_quantity</id> <type>FloatField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">10</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">1</hidden> - <required type="int">0</required> - <title>matrixbox_target_quantity</title> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <default>python:cell.getProperty('target_quantity')</default> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="not_float">You did not enter a floating point number.</message> - </messages> - </field> - </fields> - </group> - </groups> -</form> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_trade/order_line_quantity_view.form b/product/Coramy/skins/coramy_trade/order_line_quantity_view.form deleted file mode 100755 index bde8bbac83..0000000000 --- a/product/Coramy/skins/coramy_trade/order_line_quantity_view.form +++ /dev/null @@ -1,321 +0,0 @@ -<?xml version="1.0"?> - -<form> - <title>Ligne de commande</title> - <row_length>4</row_length> - <name>sales_order_line_price_quantity_view</name> - <pt>form_view</pt> - <action>base_edit</action> - <method>POST</method> - <enctype>multipart/form-data</enctype> - <encoding>UTF-8</encoding> - <stored_encoding>ISO-8859-1</stored_encoding> - <unicode_mode>false</unicode_mode> - <groups> - <group> - <title>Default</title> - <fields> - - <field><id>my_id</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">10</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <max_length></max_length> - <required type="int">1</required> - <title>Ligne n°</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>right</title> - <fields> - - </fields> - </group> - <group> - <title>center</title> - <fields> - - </fields> - </group> - <group> - <title>bottom</title> - <fields> - - <field><id>matrixbox</id> <type>MatrixBox</type> - <values> - <all_editable_attributes type="list">[('target_quantity', 'target_quantity'), ('price', 'price'), ('predicate_value', 'predicate_value')]</all_editable_attributes> - <alternate_name></alternate_name> - <cell_base_id>movement</cell_base_id> - <cell_range type="list">[]</cell_range> - <columns type="list">[('32', '32'), ('34', '34'), ('36', '36'), ('38', '38')]</columns> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <editable_attributes type="list">[('target_quantity', 'target_quantity'), ('price', 'price'), ('predicate_value', 'predicate_value'), ('variation_category_list', 'variation_category_list')]</editable_attributes> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <getter_method></getter_method> - <global_attributes type="list">[('domain_base_category_list', 'domain_base_category_list'), ('mapped_value_property_list', 'mapped_value_property_list'), ('predicate_operator', 'predicate_operator')]</global_attributes> - <hidden type="int">0</hidden> - <lines type="list">[('Bleu', 'Bleu'), ('Rouge', 'Rouge'), ('Verts', 'Verts')]</lines> - <setter_method></setter_method> - <tabs type="list">[('32', '32'), ('34', '34'), ('36', '36'), ('38', '38')]</tabs> - <title>matrixbox</title> - <update_cell_range type="int">1</update_cell_range> - </values> - <tales> - <columns>python:here.order_line_matrix_item_list(base_category_list = ('taille',), base=1)</columns> - <lines>python:here.order_line_matrix_item_list(base_category_list = ('coloris','variante'), base=1)</lines> - <tabs>python:here.order_line_matrix_item_list(base_category_list = ('taille','coloris','variante'), base=1, include=0)</tabs> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - </messages> - </field> - <field><id>domain_base_category_list</id> <type>LinesField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default type="list">[]</default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <height type="int">5</height> - <hidden type="int">1</hidden> - <max_length></max_length> - <max_linelength></max_linelength> - <max_lines></max_lines> - <required type="int">0</required> - <title>Valid Domain</title> - <unicode type="int">0</unicode> - <view_separator><br /> -</view_separator> - <whitespace_preserve type="int">0</whitespace_preserve> - <width type="int">40</width> - </values> - <tales> - <default>here/getVariationBaseCategoryList</default> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_many_lines">You entered too many lines.</message> - <message name="line_too_long">A line was too long.</message> - <message name="too_long">You entered too many characters.</message> - </messages> - </field> - <field><id>predicate_operator</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default>SUPERSET_OF</default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">1</hidden> - <max_length></max_length> - <required type="int">0</required> - <title>Operator</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - <field><id>mapped_value_property_list</id> <type>LinesField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default type="list">['target_quantity', 'price']</default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <height type="int">5</height> - <hidden type="int">1</hidden> - <max_length></max_length> - <max_linelength></max_linelength> - <max_lines></max_lines> - <required type="int">0</required> - <title>Modified categories</title> - <unicode type="int">0</unicode> - <view_separator><br /> -</view_separator> - <whitespace_preserve type="int">0</whitespace_preserve> - <width type="int">40</width> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_many_lines">You entered too many lines.</message> - <message name="line_too_long">A line was too long.</message> - <message name="too_long">You entered too many characters.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>hidden</title> - <fields> - - <field><id>matrixbox_predicate_value</id> <type>LinesField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default type="list">[]</default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <height type="int">5</height> - <hidden type="int">1</hidden> - <max_length></max_length> - <max_linelength></max_linelength> - <max_lines></max_lines> - <required type="int">0</required> - <title>matrixbox_predicate_value</title> - <unicode type="int">0</unicode> - <view_separator><br /> -</view_separator> - <whitespace_preserve type="int">0</whitespace_preserve> - <width type="int">40</width> - </values> - <tales> - <default>python:cell_index</default> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_many_lines">You entered too many lines.</message> - <message name="line_too_long">A line was too long.</message> - <message name="too_long">You entered too many characters.</message> - </messages> - </field> - <field><id>matrixbox_variation_category_list</id> <type>LinesField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default type="list">[]</default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <height type="int">5</height> - <hidden type="int">1</hidden> - <max_length></max_length> - <max_linelength></max_linelength> - <max_lines></max_lines> - <required type="int">0</required> - <title>matrixbox_predicate_value</title> - <unicode type="int">0</unicode> - <view_separator><br /> -</view_separator> - <whitespace_preserve type="int">0</whitespace_preserve> - <width type="int">40</width> - </values> - <tales> - <default>python:cell_index</default> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_many_lines">You entered too many lines.</message> - <message name="line_too_long">A line was too long.</message> - <message name="too_long">You entered too many characters.</message> - </messages> - </field> - <field><id>matrixbox_target_quantity</id> <type>FloatField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">10</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <required type="int">0</required> - <title>matrixbox_target_quantity</title> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <default>python:cell.getProperty('target_quantity')</default> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="not_float">You did not enter a floating point number.</message> - </messages> - </field> - <field><id>matrixbox_price</id> <type>FloatField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">10</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">1</hidden> - <required type="int">0</required> - <title>matrixbox_price</title> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <default>python:cell.getProperty('price')</default> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="not_float">You did not enter a floating point number.</message> - </messages> - </field> - </fields> - </group> - </groups> -</form> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_trade/order_line_sort_on.form b/product/Coramy/skins/coramy_trade/order_line_sort_on.form deleted file mode 100755 index 60009bbad6..0000000000 --- a/product/Coramy/skins/coramy_trade/order_line_sort_on.form +++ /dev/null @@ -1,50 +0,0 @@ -<?xml version="1.0"?> - -<form> - <title>Trier</title> - <row_length>4</row_length> - <name>composant_list_sort_on</name> - <pt>dialog_view</pt> - <action>base_sort_on</action> - <method>POST</method> - <enctype></enctype> - <encoding>UTF-8</encoding> - <stored_encoding>ISO-8859-1</stored_encoding> - <unicode_mode>false</unicode_mode> - <groups> - <group> - <title>Default</title> - <fields> - - <field><id>sort_order</id> <type>ListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <extra_item></extra_item> - <first_item type="int">0</first_item> - <hidden type="int">0</hidden> - <items type="list">[('Ascending', 'ascending'), ('Descending', 'descending')]</items> - <required type="int">1</required> - <size type="int">1</size> - <title>sort_order</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - </fields> - </group> - </groups> -</form> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_trade/order_line_view.form b/product/Coramy/skins/coramy_trade/order_line_view.form deleted file mode 100755 index d561afaaba..0000000000 --- a/product/Coramy/skins/coramy_trade/order_line_view.form +++ /dev/null @@ -1,528 +0,0 @@ -<?xml version="1.0"?> - -<form> - <title>Ligne de commande</title> - <row_length>4</row_length> - <name>order_line_view</name> - <pt>form_view</pt> - <action>base_edit</action> - <method>POST</method> - <enctype>multipart/form-data</enctype> - <encoding>UTF-8</encoding> - <stored_encoding>ISO-8859-1</stored_encoding> - <unicode_mode>false</unicode_mode> - <groups> - <group> - <title>left</title> - <fields> - - <field><id>my_id</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">5</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <max_length></max_length> - <required type="int">1</required> - <title>Ligne n°</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - <field><id>my_description</id> <type>TextAreaField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <height type="int">2</height> - <hidden type="int">0</hidden> - <max_length></max_length> - <max_linelength></max_linelength> - <max_lines></max_lines> - <required type="int">0</required> - <title>Description</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - <width type="int">40</width> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_many_lines">You entered too many lines.</message> - <message name="line_too_long">A line was too long.</message> - <message name="too_long">You entered too many characters.</message> - </messages> - </field> - <field><id>my_resource_relative_url</id> <type>RelationStringField</type> - <values> - <alternate_name></alternate_name> - <base_category>resource</base_category> - <catalog_index>relative_url</catalog_index> - <css_class></css_class> - <default></default> - <default_module>modele</default_module> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">40</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <jump_method>base_jump_relation</jump_method> - <max_length></max_length> - <portal_type type="list">[('Composant', 'Composant'), ('Tissu', 'Tissu'), ('Modele', 'Modele'), ('Category', 'Category'), ('Assortiment', 'Assortiment')]</portal_type> - <required type="int">0</required> - <title>Produit</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <update_method>base_update_relation</update_method> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - <field><id>my_variation_base_category_list</id> <type>MultiListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default type="list">[]</default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <extra_item></extra_item> - <hidden type="int">0</hidden> - <items type="list">[]</items> - <required type="int">0</required> - <size type="int">3</size> - <title>Axes variation</title> - <unicode type="int">0</unicode> - <view_separator><br /> -</view_separator> - </values> - <tales> - <items>here/getVariationRangeBaseCategoryList</items> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - <field><id>my_variation_category_list</id> <type>MultiListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default type="list">[]</default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <extra_item></extra_item> - <hidden type="int">0</hidden> - <items type="list">[]</items> - <required type="int">0</required> - <size type="int">8</size> - <title>Variantes</title> - <unicode type="int">0</unicode> - <view_separator><br /> -</view_separator> - </values> - <tales> - <items>here/getVariationRangeCategoryItemList</items> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>right</title> - <fields> - - <field><id>my_target_quantity</id> <type>FloatField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">10</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <required type="int">0</required> - <title>Quantité par défaut</title> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="not_float">You did not enter a floating point number.</message> - </messages> - </field> - <field><id>my_quantity_unit</id> <type>ListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <extra_item></extra_item> - <first_item type="int">0</first_item> - <hidden type="int">0</hidden> - <items type="list">[]</items> - <required type="int">0</required> - <size type="int">1</size> - <title>Unité</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <items>here/getQuantityUnitRangeItemList</items> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - <field><id>my_price</id> <type>FloatField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">10</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <required type="int">0</required> - <title>Prix par défaut</title> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="not_float">You did not enter a floating point number.</message> - </messages> - </field> - <field><id>spacer</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">1</hidden> - <max_length></max_length> - <required type="int">0</required> - <title> </title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - <field><id>my_target_start_date</id> <type>DateTimeField</type> - <values> - <allow_empty_time type="int">0</allow_empty_time> - <alternate_name></alternate_name> - <ampm_time_style type="int">0</ampm_time_style> - <css_class></css_class> - <date_only type="int">1</date_only> - <date_separator>/</date_separator> - <default_now type="int">0</default_now> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <hidden type="int">0</hidden> - <input_order>dmy</input_order> - <input_style>text</input_style> - <required type="int">0</required> - <time_separator>:</time_separator> - <title>Date d'expédition demandée</title> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="not_datetime">You did not enter a valid date and time.</message> - <message name="datetime_out_of_range">The date and time you entered were out of range.</message> - </messages> - </field> - <field><id>my_target_stop_date</id> <type>DateTimeField</type> - <values> - <allow_empty_time type="int">0</allow_empty_time> - <alternate_name></alternate_name> - <ampm_time_style type="int">0</ampm_time_style> - <css_class></css_class> - <date_only type="int">1</date_only> - <date_separator>/</date_separator> - <default_now type="int">0</default_now> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <hidden type="int">0</hidden> - <input_order>dmy</input_order> - <input_style>text</input_style> - <required type="int">0</required> - <time_separator>:</time_separator> - <title>Date de livraison demandée</title> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="not_datetime">You did not enter a valid date and time.</message> - <message name="datetime_out_of_range">The date and time you entered were out of range.</message> - </messages> - </field> - <field><id>spacer2</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">1</hidden> - <max_length></max_length> - <required type="int">0</required> - <title> </title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - <field><id>my_start_date</id> <type>DateTimeField</type> - <values> - <allow_empty_time type="int">0</allow_empty_time> - <alternate_name></alternate_name> - <ampm_time_style type="int">0</ampm_time_style> - <css_class></css_class> - <date_only type="int">1</date_only> - <date_separator>/</date_separator> - <default_now type="int">0</default_now> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <hidden type="int">0</hidden> - <input_order>dmy</input_order> - <input_style>text</input_style> - <required type="int">0</required> - <time_separator>:</time_separator> - <title>Date d'expédition confirmée</title> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="not_datetime">You did not enter a valid date and time.</message> - <message name="datetime_out_of_range">The date and time you entered were out of range.</message> - </messages> - </field> - <field><id>my_stop_date</id> <type>DateTimeField</type> - <values> - <allow_empty_time type="int">0</allow_empty_time> - <alternate_name></alternate_name> - <ampm_time_style type="int">0</ampm_time_style> - <css_class></css_class> - <date_only type="int">1</date_only> - <date_separator>/</date_separator> - <default_now type="int">0</default_now> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <hidden type="int">0</hidden> - <input_order>dmy</input_order> - <input_style>text</input_style> - <required type="int">0</required> - <time_separator>:</time_separator> - <title>Date de livraison confirmée</title> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="not_datetime">You did not enter a valid date and time.</message> - <message name="datetime_out_of_range">The date and time you entered were out of range.</message> - </messages> - </field> - <field><id>spacer3</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">1</hidden> - <max_length></max_length> - <required type="int">0</required> - <title> </title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - <field><id>my_target_total_quantity</id> <type>FloatField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">10</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">1</hidden> - <required type="int">0</required> - <title>Quantité totale</title> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <title>python:'Quantité totale : %.2f' % here.getTargetTotalQuantity()</title> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="not_float">You did not enter a floating point number.</message> - </messages> - </field> - <field><id>my_total_price</id> <type>FloatField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">10</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">1</hidden> - <required type="int">0</required> - <title>Montant total</title> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <title>python:'Montant total : %.2f' % here.getTotalPrice()</title> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="not_float">You did not enter a floating point number.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>center</title> - <fields> - - </fields> - </group> - <group> - <title>bottom</title> - <fields> - - </fields> - </group> - <group> - <title>hidden</title> - <fields> - - </fields> - </group> - </groups> -</form> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_trade/order_list_sort_on.form b/product/Coramy/skins/coramy_trade/order_list_sort_on.form deleted file mode 100755 index ce549478d8..0000000000 --- a/product/Coramy/skins/coramy_trade/order_list_sort_on.form +++ /dev/null @@ -1,50 +0,0 @@ -<?xml version="1.0"?> - -<form> - <title>Trier</title> - <row_length>4</row_length> - <name>composant_list_sort_on</name> - <pt>form_sort</pt> - <action>base_sort_on</action> - <method>POST</method> - <enctype></enctype> - <encoding>UTF-8</encoding> - <stored_encoding>ISO-8859-1</stored_encoding> - <unicode_mode>false</unicode_mode> - <groups> - <group> - <title>Default</title> - <fields> - - <field><id>sort_order</id> <type>ListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <extra_item></extra_item> - <first_item type="int">0</first_item> - <hidden type="int">0</hidden> - <items type="list">[('Ascending', 'ascending'), ('Descending', 'descending')]</items> - <required type="int">1</required> - <size type="int">1</size> - <title>sort_order</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - </fields> - </group> - </groups> -</form> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_trade/order_list_ui.form b/product/Coramy/skins/coramy_trade/order_list_ui.form deleted file mode 100755 index 3e3b7fe775..0000000000 --- a/product/Coramy/skins/coramy_trade/order_list_ui.form +++ /dev/null @@ -1,28 +0,0 @@ -<?xml version="1.0"?> - -<form> - <title>Enregistrer les paramètres</title> - <row_length>4</row_length> - <name>composant_list_ui</name> - <pt>form_list_ui</pt> - <action>base_list_ui</action> - <method>POST</method> - <enctype></enctype> - <encoding>UTF-8</encoding> - <stored_encoding>ISO-8859-1</stored_encoding> - <unicode_mode>false</unicode_mode> - <groups> - <group> - <title>left</title> - <fields> - - </fields> - </group> - <group> - <title>right</title> - <fields> - - </fields> - </group> - </groups> -</form> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_trade/order_search.form b/product/Coramy/skins/coramy_trade/order_search.form deleted file mode 100755 index 5c9bae0191..0000000000 --- a/product/Coramy/skins/coramy_trade/order_search.form +++ /dev/null @@ -1,112 +0,0 @@ -<?xml version="1.0"?> - -<form> - <title>Rechercher</title> - <row_length>4</row_length> - <name>search</name> - <pt>form_dialog</pt> - <action>composant_list</action> - <method>POST</method> - <enctype></enctype> - <encoding>UTF-8</encoding> - <stored_encoding>ISO-8859-1</stored_encoding> - <unicode_mode>false</unicode_mode> - <groups> - <group> - <title>left</title> - <fields> - - <field><id>my_id</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default>%</default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">60</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <max_length></max_length> - <required type="int">1</required> - <title>Composant</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - <field><id>my_description</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default>%</default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">60</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <max_length></max_length> - <required type="int">1</required> - <title>Description</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - <field><id>my_source_reference</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default>%</default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">60</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <max_length></max_length> - <required type="int">1</required> - <title>Référence fournisseur</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>right</title> - <fields> - - </fields> - </group> - </groups> -</form> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_trade/order_sql_totalizer.zsql b/product/Coramy/skins/coramy_trade/order_sql_totalizer.zsql deleted file mode 100755 index c4c134bd58..0000000000 --- a/product/Coramy/skins/coramy_trade/order_sql_totalizer.zsql +++ /dev/null @@ -1,29 +0,0 @@ -<dtml-comment> -title: -connection_id:erp5_sql_connection -max_rows:1000 -max_cache:100 -cache_time:0 -class_name: -class_file: -</dtml-comment> -<params>order_id -order_type</params> -SELECT commande.id, SUM(movement.quantity) AS quantity -FROM catalog AS ligne_cde, catalog AS commande, catalog AS delivery_cell, movement - -WHERE commande.id=<dtml-var "order_id"> -AND commande.portal_type="<dtml-var "order_type">" - -AND ligne_cde.parent_uid=commande.uid -AND (ligne_cde.portal_type="Sales Order Line" -OR ligne_cde.portal_type="Purchase Order Line" -OR ligne_cde.portal_type="Production Order Line") - -AND delivery_cell.parent_uid=ligne_cde.uid -AND delivery_cell.portal_type="Delivery Cell" - -AND movement.uid=delivery_cell.uid - -GROUP BY commande.id -ORDER BY commande.id \ No newline at end of file diff --git a/product/Coramy/skins/coramy_trade/order_workflow_valider_composant.form b/product/Coramy/skins/coramy_trade/order_workflow_valider_composant.form deleted file mode 100755 index 52a2b4759b..0000000000 --- a/product/Coramy/skins/coramy_trade/order_workflow_valider_composant.form +++ /dev/null @@ -1,81 +0,0 @@ -<?xml version="1.0"?> - -<form> - <title>Valider le composant</title> - <row_length>4</row_length> - <name>main</name> - <pt>form_view_dialog</pt> - <action>workflow_status_modify</action> - <method>POST</method> - <enctype>multipart/form-data</enctype> - <encoding>UTF-8</encoding> - <stored_encoding>ISO-8859-1</stored_encoding> - <unicode_mode>false</unicode_mode> - <groups> - <group> - <title>Default</title> - <fields> - - <field><id>my_comment</id> <type>TextAreaField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <height type="int">5</height> - <hidden type="int">0</hidden> - <max_length></max_length> - <max_linelength></max_linelength> - <max_lines></max_lines> - <required type="int">0</required> - <title>Commentaires</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - <width type="int">80</width> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_many_lines">You entered too many lines.</message> - <message name="line_too_long">A line was too long.</message> - <message name="too_long">You entered too many characters.</message> - </messages> - </field> - <field><id>my_workflow_action</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default>valider_composant</default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">1</hidden> - <max_length></max_length> - <required type="int">1</required> - <title> </title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - </fields> - </group> - </groups> -</form> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_trade/ordered_lines.py b/product/Coramy/skins/coramy_trade/ordered_lines.py deleted file mode 100755 index e173e7bbf6..0000000000 --- a/product/Coramy/skins/coramy_trade/ordered_lines.py +++ /dev/null @@ -1,22 +0,0 @@ -## Script (Python) "ordered_lines" -##bind container=container -##bind context=context -##bind namespace= -##bind script=script -##bind subpath=traverse_subpath -##parameters=lignes_cde -##title= -## -index1 = {} -keys2 = [] -nb_lignes = len(lignes_cde) - -for i in range(nb_lignes): - index1[int(lignes_cde[i].getId())]=i - -keys1 = index1.keys() -keys1.sort() -for i in range(nb_lignes): - keys2.append(index1[keys1[i]]) - -return keys2 diff --git a/product/Coramy/skins/coramy_trade/packing_list_line_price_view.form b/product/Coramy/skins/coramy_trade/packing_list_line_price_view.form deleted file mode 100755 index 1a06172b9a..0000000000 --- a/product/Coramy/skins/coramy_trade/packing_list_line_price_view.form +++ /dev/null @@ -1,347 +0,0 @@ -<?xml version="1.0"?> - -<form> - <title>Ligne de livraison</title> - <row_length>4</row_length> - <name>packing_list_line_quantity_view</name> - <pt>form_view</pt> - <action>base_edit</action> - <method>POST</method> - <enctype>multipart/form-data</enctype> - <encoding>UTF-8</encoding> - <stored_encoding>ISO-8859-1</stored_encoding> - <unicode_mode>false</unicode_mode> - <groups> - <group> - <title>Default</title> - <fields> - - <field><id>my_id</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">10</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <max_length></max_length> - <required type="int">1</required> - <title>Ligne n°</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>right</title> - <fields> - - </fields> - </group> - <group> - <title>center</title> - <fields> - - </fields> - </group> - <group> - <title>bottom</title> - <fields> - - <field><id>matrixbox</id> <type>MatrixBox</type> - <values> - <all_editable_attributes type="list">[('ttarget_quantity', 'target_quantity'), ('quantity', 'quantity'), ('price', 'price'), ('predicate_value', 'predicate_value'), ('variation_category_list', 'variation_category_list')]</all_editable_attributes> - <alternate_name></alternate_name> - <cell_base_id>movement</cell_base_id> - <cell_range type="list">[]</cell_range> - <columns type="list">[('None', 'None')]</columns> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <editable_attributes type="list">[('target_quantity', 'target_quantity'), ('quantity', 'quantity'), ('price', 'price'), ('predicate_value', 'predicate_value'), ('variation_category_list', 'variation_category_list')]</editable_attributes> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <getter_method></getter_method> - <global_attributes type="list">[('domain_base_category_list', 'domain_base_category_list'), ('mapped_value_property_list', 'mapped_value_property_list'), ('predicate_operator', 'predicate_operator')]</global_attributes> - <hidden type="int">0</hidden> - <lines type="list">[('None', 'None')]</lines> - <setter_method></setter_method> - <tabs type="list">[('None', 'None')]</tabs> - <title>matrixbox</title> - <update_cell_range type="int">1</update_cell_range> - </values> - <tales> - <columns>python:here.order_line_matrix_item_list(base_category_list = ('taille',), base=1)</columns> - <lines>python:here.order_line_matrix_item_list(base_category_list = ('coloris','variante'), base=1)</lines> - <tabs>python:here.order_line_matrix_item_list(base_category_list = ('taille','coloris','variante'), base=1, include=0)</tabs> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - </messages> - </field> - <field><id>domain_base_category_list</id> <type>LinesField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default type="list">[]</default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <height type="int">5</height> - <hidden type="int">1</hidden> - <max_length></max_length> - <max_linelength></max_linelength> - <max_lines></max_lines> - <required type="int">0</required> - <title>Valid Domain</title> - <unicode type="int">0</unicode> - <view_separator><br /> -</view_separator> - <whitespace_preserve type="int">0</whitespace_preserve> - <width type="int">40</width> - </values> - <tales> - <default>here/getVariationBaseCategoryList</default> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_many_lines">You entered too many lines.</message> - <message name="line_too_long">A line was too long.</message> - <message name="too_long">You entered too many characters.</message> - </messages> - </field> - <field><id>predicate_operator</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default>SUPERSET_OF</default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">1</hidden> - <max_length></max_length> - <required type="int">0</required> - <title>Operator</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - <field><id>mapped_value_property_list</id> <type>LinesField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default type="list">['target_quantity', 'quantity', 'price']</default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <height type="int">5</height> - <hidden type="int">1</hidden> - <max_length></max_length> - <max_linelength></max_linelength> - <max_lines></max_lines> - <required type="int">0</required> - <title>Modified categories</title> - <unicode type="int">0</unicode> - <view_separator><br /> -</view_separator> - <whitespace_preserve type="int">0</whitespace_preserve> - <width type="int">40</width> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_many_lines">You entered too many lines.</message> - <message name="line_too_long">A line was too long.</message> - <message name="too_long">You entered too many characters.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>hidden</title> - <fields> - - <field><id>matrixbox_predicate_value</id> <type>LinesField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default type="list">[]</default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <height type="int">5</height> - <hidden type="int">1</hidden> - <max_length></max_length> - <max_linelength></max_linelength> - <max_lines></max_lines> - <required type="int">0</required> - <title>matrixbox_predicate_value</title> - <unicode type="int">0</unicode> - <view_separator><br /> -</view_separator> - <whitespace_preserve type="int">0</whitespace_preserve> - <width type="int">40</width> - </values> - <tales> - <default>python:cell_index</default> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_many_lines">You entered too many lines.</message> - <message name="line_too_long">A line was too long.</message> - <message name="too_long">You entered too many characters.</message> - </messages> - </field> - <field><id>matrixbox_variation_category_list</id> <type>LinesField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default type="list">[]</default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <height type="int">5</height> - <hidden type="int">1</hidden> - <max_length></max_length> - <max_linelength></max_linelength> - <max_lines></max_lines> - <required type="int">0</required> - <title>matrixbox_predicate_value</title> - <unicode type="int">0</unicode> - <view_separator><br /> -</view_separator> - <whitespace_preserve type="int">0</whitespace_preserve> - <width type="int">40</width> - </values> - <tales> - <default>python:cell_index</default> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_many_lines">You entered too many lines.</message> - <message name="line_too_long">A line was too long.</message> - <message name="too_long">You entered too many characters.</message> - </messages> - </field> - <field><id>matrixbox_price</id> <type>FloatField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">10</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <required type="int">0</required> - <title>matrixbox_price</title> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <default>python:cell.getProperty('price')</default> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="not_float">You did not enter a floating point number.</message> - </messages> - </field> - <field><id>matrixbox_quantity</id> <type>FloatField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">10</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">1</hidden> - <required type="int">0</required> - <title>matrixbox_quantity</title> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <default>python:cell.getProperty('quantity')</default> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="not_float">You did not enter a floating point number.</message> - </messages> - </field> - <field><id>matrixbox_target_quantity</id> <type>FloatField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">10</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">1</hidden> - <required type="int">0</required> - <title>matrixbox_target_quantity</title> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <default>python:cell.getProperty('target_quantity')</default> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="not_float">You did not enter a floating point number.</message> - </messages> - </field> - </fields> - </group> - </groups> -</form> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_trade/packing_list_line_quantity_view.form b/product/Coramy/skins/coramy_trade/packing_list_line_quantity_view.form deleted file mode 100755 index 37567ba3d2..0000000000 --- a/product/Coramy/skins/coramy_trade/packing_list_line_quantity_view.form +++ /dev/null @@ -1,347 +0,0 @@ -<?xml version="1.0"?> - -<form> - <title>Ligne de livraison</title> - <row_length>4</row_length> - <name>packing_list_line_quantity_view</name> - <pt>form_view</pt> - <action>base_edit</action> - <method>POST</method> - <enctype>multipart/form-data</enctype> - <encoding>UTF-8</encoding> - <stored_encoding>ISO-8859-1</stored_encoding> - <unicode_mode>false</unicode_mode> - <groups> - <group> - <title>Default</title> - <fields> - - <field><id>my_id</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">10</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <max_length></max_length> - <required type="int">1</required> - <title>Ligne n°</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>right</title> - <fields> - - </fields> - </group> - <group> - <title>center</title> - <fields> - - </fields> - </group> - <group> - <title>bottom</title> - <fields> - - <field><id>matrixbox</id> <type>MatrixBox</type> - <values> - <all_editable_attributes type="list">[('ttarget_quantity', 'target_quantity'), ('quantity', 'quantity'), ('price', 'price'), ('predicate_value', 'predicate_value'), ('variation_category_list', 'variation_category_list')]</all_editable_attributes> - <alternate_name></alternate_name> - <cell_base_id>movement</cell_base_id> - <cell_range type="list">[]</cell_range> - <columns type="list">[('None', 'None')]</columns> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <editable_attributes type="list">[('target_quantity', 'target_quantity'), ('quantity', 'quantity'), ('price', 'price'), ('predicate_value', 'predicate_value'), ('variation_category_list', 'variation_category_list')]</editable_attributes> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <getter_method></getter_method> - <global_attributes type="list">[('domain_base_category_list', 'domain_base_category_list'), ('mapped_value_property_list', 'mapped_value_property_list'), ('predicate_operator', 'predicate_operator')]</global_attributes> - <hidden type="int">0</hidden> - <lines type="list">[('None', 'None')]</lines> - <setter_method></setter_method> - <tabs type="list">[('None', 'None')]</tabs> - <title>matrixbox</title> - <update_cell_range type="int">1</update_cell_range> - </values> - <tales> - <columns>python:here.order_line_matrix_item_list(base_category_list = ('taille',), base=1)</columns> - <lines>python:here.order_line_matrix_item_list(base_category_list = ('coloris','variante'), base=1)</lines> - <tabs>python:here.order_line_matrix_item_list(base_category_list = ('taille','coloris','variante'), base=1, include=0)</tabs> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - </messages> - </field> - <field><id>domain_base_category_list</id> <type>LinesField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default type="list">[]</default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <height type="int">5</height> - <hidden type="int">1</hidden> - <max_length></max_length> - <max_linelength></max_linelength> - <max_lines></max_lines> - <required type="int">0</required> - <title>Valid Domain</title> - <unicode type="int">0</unicode> - <view_separator><br /> -</view_separator> - <whitespace_preserve type="int">0</whitespace_preserve> - <width type="int">40</width> - </values> - <tales> - <default>here/getVariationBaseCategoryList</default> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_many_lines">You entered too many lines.</message> - <message name="line_too_long">A line was too long.</message> - <message name="too_long">You entered too many characters.</message> - </messages> - </field> - <field><id>predicate_operator</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default>SUPERSET_OF</default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">1</hidden> - <max_length></max_length> - <required type="int">0</required> - <title>Operator</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - <field><id>mapped_value_property_list</id> <type>LinesField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default type="list">['target_quantity', 'quantity', 'price']</default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <height type="int">5</height> - <hidden type="int">1</hidden> - <max_length></max_length> - <max_linelength></max_linelength> - <max_lines></max_lines> - <required type="int">0</required> - <title>Modified categories</title> - <unicode type="int">0</unicode> - <view_separator><br /> -</view_separator> - <whitespace_preserve type="int">0</whitespace_preserve> - <width type="int">40</width> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_many_lines">You entered too many lines.</message> - <message name="line_too_long">A line was too long.</message> - <message name="too_long">You entered too many characters.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>hidden</title> - <fields> - - <field><id>matrixbox_predicate_value</id> <type>LinesField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default type="list">[]</default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <height type="int">5</height> - <hidden type="int">1</hidden> - <max_length></max_length> - <max_linelength></max_linelength> - <max_lines></max_lines> - <required type="int">0</required> - <title>matrixbox_predicate_value</title> - <unicode type="int">0</unicode> - <view_separator><br /> -</view_separator> - <whitespace_preserve type="int">0</whitespace_preserve> - <width type="int">40</width> - </values> - <tales> - <default>python:cell_index</default> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_many_lines">You entered too many lines.</message> - <message name="line_too_long">A line was too long.</message> - <message name="too_long">You entered too many characters.</message> - </messages> - </field> - <field><id>matrixbox_variation_category_list</id> <type>LinesField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default type="list">[]</default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <height type="int">5</height> - <hidden type="int">1</hidden> - <max_length></max_length> - <max_linelength></max_linelength> - <max_lines></max_lines> - <required type="int">0</required> - <title>matrixbox_predicate_value</title> - <unicode type="int">0</unicode> - <view_separator><br /> -</view_separator> - <whitespace_preserve type="int">0</whitespace_preserve> - <width type="int">40</width> - </values> - <tales> - <default>python:cell_index</default> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_many_lines">You entered too many lines.</message> - <message name="line_too_long">A line was too long.</message> - <message name="too_long">You entered too many characters.</message> - </messages> - </field> - <field><id>matrixbox_price</id> <type>FloatField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">10</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">1</hidden> - <required type="int">0</required> - <title>matrixbox_price</title> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <default>python:cell.getProperty('price')</default> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="not_float">You did not enter a floating point number.</message> - </messages> - </field> - <field><id>matrixbox_quantity</id> <type>FloatField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">10</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <required type="int">0</required> - <title>matrixbox_quantity</title> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <default>python:cell.getProperty('quantity')</default> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="not_float">You did not enter a floating point number.</message> - </messages> - </field> - <field><id>matrixbox_target_quantity</id> <type>FloatField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">10</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">1</hidden> - <required type="int">0</required> - <title>matrixbox_target_quantity</title> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <default>python:cell.getProperty('target_quantity')</default> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="not_float">You did not enter a floating point number.</message> - </messages> - </field> - </fields> - </group> - </groups> -</form> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_trade/packing_list_line_target_quantity_view.form b/product/Coramy/skins/coramy_trade/packing_list_line_target_quantity_view.form deleted file mode 100755 index 27e460c176..0000000000 --- a/product/Coramy/skins/coramy_trade/packing_list_line_target_quantity_view.form +++ /dev/null @@ -1,347 +0,0 @@ -<?xml version="1.0"?> - -<form> - <title>Ligne de livraison</title> - <row_length>4</row_length> - <name>packing_list_line_quantity_view</name> - <pt>form_view</pt> - <action>base_edit</action> - <method>POST</method> - <enctype>multipart/form-data</enctype> - <encoding>UTF-8</encoding> - <stored_encoding>ISO-8859-1</stored_encoding> - <unicode_mode>false</unicode_mode> - <groups> - <group> - <title>Default</title> - <fields> - - <field><id>my_id</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">10</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <max_length></max_length> - <required type="int">1</required> - <title>Ligne n°</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>right</title> - <fields> - - </fields> - </group> - <group> - <title>center</title> - <fields> - - </fields> - </group> - <group> - <title>bottom</title> - <fields> - - <field><id>matrixbox</id> <type>MatrixBox</type> - <values> - <all_editable_attributes type="list">[('ttarget_quantity', 'target_quantity'), ('quantity', 'quantity'), ('price', 'price'), ('predicate_value', 'predicate_value'), ('variation_category_list', 'variation_category_list')]</all_editable_attributes> - <alternate_name></alternate_name> - <cell_base_id>movement</cell_base_id> - <cell_range type="list">[]</cell_range> - <columns type="list">[('None', 'None')]</columns> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <editable_attributes type="list">[('target_quantity', 'target_quantity'), ('quantity', 'quantity'), ('price', 'price'), ('predicate_value', 'predicate_value'), ('variation_category_list', 'variation_category_list')]</editable_attributes> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <getter_method></getter_method> - <global_attributes type="list">[('domain_base_category_list', 'domain_base_category_list'), ('mapped_value_property_list', 'mapped_value_property_list'), ('predicate_operator', 'predicate_operator')]</global_attributes> - <hidden type="int">0</hidden> - <lines type="list">[('None', 'None')]</lines> - <setter_method></setter_method> - <tabs type="list">[('None', 'None')]</tabs> - <title>matrixbox</title> - <update_cell_range type="int">1</update_cell_range> - </values> - <tales> - <columns>python:here.order_line_matrix_item_list(base_category_list = ('taille',), base=1)</columns> - <lines>python:here.order_line_matrix_item_list(base_category_list = ('coloris','variante'), base=1)</lines> - <tabs>python:here.order_line_matrix_item_list(base_category_list = ('taille','coloris','variante'), base=1, include=0)</tabs> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - </messages> - </field> - <field><id>domain_base_category_list</id> <type>LinesField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default type="list">[]</default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <height type="int">5</height> - <hidden type="int">1</hidden> - <max_length></max_length> - <max_linelength></max_linelength> - <max_lines></max_lines> - <required type="int">0</required> - <title>Valid Domain</title> - <unicode type="int">0</unicode> - <view_separator><br /> -</view_separator> - <whitespace_preserve type="int">0</whitespace_preserve> - <width type="int">40</width> - </values> - <tales> - <default>here/getVariationBaseCategoryList</default> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_many_lines">You entered too many lines.</message> - <message name="line_too_long">A line was too long.</message> - <message name="too_long">You entered too many characters.</message> - </messages> - </field> - <field><id>predicate_operator</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default>SUPERSET_OF</default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">1</hidden> - <max_length></max_length> - <required type="int">0</required> - <title>Operator</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - <field><id>mapped_value_property_list</id> <type>LinesField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default type="list">['target_quantity', 'quantity', 'price']</default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <height type="int">5</height> - <hidden type="int">1</hidden> - <max_length></max_length> - <max_linelength></max_linelength> - <max_lines></max_lines> - <required type="int">0</required> - <title>Modified categories</title> - <unicode type="int">0</unicode> - <view_separator><br /> -</view_separator> - <whitespace_preserve type="int">0</whitespace_preserve> - <width type="int">40</width> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_many_lines">You entered too many lines.</message> - <message name="line_too_long">A line was too long.</message> - <message name="too_long">You entered too many characters.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>hidden</title> - <fields> - - <field><id>matrixbox_predicate_value</id> <type>LinesField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default type="list">[]</default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <height type="int">5</height> - <hidden type="int">1</hidden> - <max_length></max_length> - <max_linelength></max_linelength> - <max_lines></max_lines> - <required type="int">0</required> - <title>matrixbox_predicate_value</title> - <unicode type="int">0</unicode> - <view_separator><br /> -</view_separator> - <whitespace_preserve type="int">0</whitespace_preserve> - <width type="int">40</width> - </values> - <tales> - <default>python:cell_index</default> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_many_lines">You entered too many lines.</message> - <message name="line_too_long">A line was too long.</message> - <message name="too_long">You entered too many characters.</message> - </messages> - </field> - <field><id>matrixbox_variation_category_list</id> <type>LinesField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default type="list">[]</default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <height type="int">5</height> - <hidden type="int">1</hidden> - <max_length></max_length> - <max_linelength></max_linelength> - <max_lines></max_lines> - <required type="int">0</required> - <title>matrixbox_predicate_value</title> - <unicode type="int">0</unicode> - <view_separator><br /> -</view_separator> - <whitespace_preserve type="int">0</whitespace_preserve> - <width type="int">40</width> - </values> - <tales> - <default>python:cell_index</default> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_many_lines">You entered too many lines.</message> - <message name="line_too_long">A line was too long.</message> - <message name="too_long">You entered too many characters.</message> - </messages> - </field> - <field><id>matrixbox_price</id> <type>FloatField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">10</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">1</hidden> - <required type="int">0</required> - <title>matrixbox_price</title> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <default>python:cell.getProperty('price')</default> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="not_float">You did not enter a floating point number.</message> - </messages> - </field> - <field><id>matrixbox_quantity</id> <type>FloatField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">10</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">1</hidden> - <required type="int">0</required> - <title>matrixbox_quantity</title> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <default>python:cell.getProperty('quantity')</default> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="not_float">You did not enter a floating point number.</message> - </messages> - </field> - <field><id>matrixbox_target_quantity</id> <type>FloatField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">10</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <required type="int">0</required> - <title>matrixbox_target_quantity</title> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <default>python:cell.getProperty('target_quantity')</default> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="not_float">You did not enter a floating point number.</message> - </messages> - </field> - </fields> - </group> - </groups> -</form> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_trade/packing_list_line_view.form b/product/Coramy/skins/coramy_trade/packing_list_line_view.form deleted file mode 100755 index 7988286db1..0000000000 --- a/product/Coramy/skins/coramy_trade/packing_list_line_view.form +++ /dev/null @@ -1,356 +0,0 @@ -<?xml version="1.0"?> - -<form> - <title>Ligne de livraison</title> - <row_length>4</row_length> - <name>sales_packing_list_line_view</name> - <pt>form_view</pt> - <action>base_edit</action> - <method>POST</method> - <enctype>multipart/form-data</enctype> - <encoding>UTF-8</encoding> - <stored_encoding>ISO-8859-1</stored_encoding> - <unicode_mode>false</unicode_mode> - <groups> - <group> - <title>left</title> - <fields> - - <field><id>my_id</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">5</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <max_length></max_length> - <required type="int">1</required> - <title>Ligne n°</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - <field><id>my_description</id> <type>TextAreaField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <height type="int">2</height> - <hidden type="int">0</hidden> - <max_length></max_length> - <max_linelength></max_linelength> - <max_lines></max_lines> - <required type="int">0</required> - <title>Description</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - <width type="int">40</width> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_many_lines">You entered too many lines.</message> - <message name="line_too_long">A line was too long.</message> - <message name="too_long">You entered too many characters.</message> - </messages> - </field> - <field><id>my_resource_relative_url</id> <type>RelationStringField</type> - <values> - <alternate_name></alternate_name> - <base_category>resource</base_category> - <catalog_index>relative_url</catalog_index> - <css_class></css_class> - <default></default> - <default_module>modele</default_module> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">40</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <jump_method>base_jump_relation</jump_method> - <max_length></max_length> - <portal_type type="list">[('Composant', 'Composant'), ('Tissu', 'Tissu'), ('Modele', 'Modele'), ('Forme', 'Forme'), ('Vetement', 'Vetement'), ('Category', 'Category'), ('Gamme', 'Gamme')]</portal_type> - <required type="int">0</required> - <title>Produit</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <update_method>base_update_relation</update_method> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - <field><id>my_variation_base_category_list</id> <type>MultiListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default type="list">[]</default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <extra_item></extra_item> - <hidden type="int">0</hidden> - <items type="list">[]</items> - <required type="int">0</required> - <size type="int">3</size> - <title>Axes variation</title> - <unicode type="int">0</unicode> - <view_separator><br /> -</view_separator> - </values> - <tales> - <items>here/getVariationRangeBaseCategoryList</items> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - <field><id>my_variation_category_list</id> <type>MultiListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default type="list">[]</default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <extra_item></extra_item> - <hidden type="int">0</hidden> - <items type="list">[]</items> - <required type="int">0</required> - <size type="int">8</size> - <title>Variantes</title> - <unicode type="int">0</unicode> - <view_separator><br /> -</view_separator> - </values> - <tales> - <items>here/getVariationRangeCategoryItemList</items> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>right</title> - <fields> - - <field><id>my_target_quantity</id> <type>FloatField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">10</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <required type="int">0</required> - <title>Quantité par défaut</title> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="not_float">You did not enter a floating point number.</message> - </messages> - </field> - <field><id>my_quantity_unit</id> <type>ListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <extra_item></extra_item> - <first_item type="int">0</first_item> - <hidden type="int">0</hidden> - <items type="list">[]</items> - <required type="int">0</required> - <size type="int">1</size> - <title>Unité</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <items>here/getQuantityUnitRangeItemList</items> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - <field><id>my_price</id> <type>FloatField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">10</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <required type="int">0</required> - <title>Prix par défaut</title> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="not_float">You did not enter a floating point number.</message> - </messages> - </field> - <field><id>spacer</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">1</hidden> - <max_length></max_length> - <required type="int">0</required> - <title> </title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - <field><id>my_total_quantity</id> <type>FloatField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">10</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">1</hidden> - <required type="int">0</required> - <title>Objectif quantité</title> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <title>python:'Objectif quantité : %.2f' % here.getTotalQuantity()</title> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="not_float">You did not enter a floating point number.</message> - </messages> - </field> - <field><id>my_target_total_quantity</id> <type>FloatField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">10</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">1</hidden> - <required type="int">0</required> - <title>Quantité</title> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <title>python:'Quantité : %.2f' % here.getTargetTotalQuantity()</title> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="not_float">You did not enter a floating point number.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>center</title> - <fields> - - </fields> - </group> - <group> - <title>bottom</title> - <fields> - - </fields> - </group> - <group> - <title>hidden</title> - <fields> - - </fields> - </group> - </groups> -</form> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_trade/prix_print.pt b/product/Coramy/skins/coramy_trade/prix_print.pt deleted file mode 100755 index a5efca8908..0000000000 --- a/product/Coramy/skins/coramy_trade/prix_print.pt +++ /dev/null @@ -1,110 +0,0 @@ -<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> - -<html> - - <head> - <meta http-equiv="content-type" content="text/html;charset=ISO-8859-1"> - <title tal:content="here/getTitle">Coramy</title> -<link rel=stylesheet type="text/css" href="echantillon.css"> - - - </head> - - <body - tal:define="client python:here.getDefaultValue('destination',portal_type=['Organisation']); - acheteur python:here.getDefaultValue('contact',portal_type=['Person']); - lignes_cde python:here.contentValues(filter={'portal_type':'Sample Order Line'}); - lignes_index python:here.ordered_lines(lignes_cde=lignes_cde); - nb_echantillons python:len(lignes_cde); - col_nb python:2; - lin_nb python:8; - nb_pages python:here.echantillon_page_count(total_nb=nb_echantillons,on_page=col_nb*lin_nb) - "> -<p align="center"><span class="Coramy" >Coramy</span><span class="Entete">5 bis, rue Denis Cordonnier - 59820 GRAVELINES - Tel : 03 28 51 91 51 - - Fax : 03 28 23 34 96</span><br>Échantillonnage N° <span tal:content="here/getId"/> - <span tal:define="url_items python:modules['string'].split(acheteur.getGender(),'/')" - tal:content="python:(len(url_items)-1)*url_items[len(url_items)-1]"> - </span> <span tal:content="python:modules['string'].capwords(modules['string'].lower(acheteur.getTitle()))"/> - <span tal:content="python:modules['string'].capwords(modules['string'].lower(client.getTitle()))"/> - - <span tal:content="python:modules['string'].capwords(modules['string'].lower(here.getDescription()))"/><br></p> - <table tal:repeat="page_no python:range(nb_pages)" Class="PageA4" width="660" height="955" border="0" cellpadding="0" cellspacing="0"> - - <span tal:repeat="i python:range(lin_nb)"> - <tr valign="top" class="Border"> - - - <span tal:repeat="j python:map((lambda x:x+(page_no*col_nb*lin_nb)+(i*col_nb)),range(col_nb))"> - <span tal:condition="python:j<nb_echantillons"> - <td valign="top" align="center" width="50%" class="Border" tal:define="ligne python:lignes_cde[lignes_index[j]]"> - - <span tal:condition="python:ligne.getDefaultValue('resource',portal_type=['Modele'])<>None"> - <span tal:define="modele python:ligne.getDefaultValue('resource',portal_type=['Modele']); - coloris_list python:modele.contentValues(filter={'portal_type':'Variante Modele'}) - "> - - <span tal:define="url_items1 python:modules['string'].split(ligne.getResourceRelativeUrl(),'/')" - tal:content="structure python:'Modèle : '+'<b>'+url_items1[len(url_items1)-1]+'</b>'">modele</span> - - <span tal:condition="python:ligne.getColoris() <> None"> - <span tal:define="url_items2 python:modules['string'].split(ligne.getColoris(),'/')" - tal:content="structure python:' coloris '+url_items2[len(url_items2)-1]">modele</span> - </span> - - - <br> - <span tal:content="python:modules['string'].capwords(modules['string'].lower(modele.getComposition()))"/> - <br> - <span tal:define="tarif_list python:ligne.contentValues(filter={'portal_type':'Element Tarif'})"> - <table border="1" cellspacing="0" cellpadding="0" width="100%"> - <tr> - <span tal:condition="python:len(tarif_list)>0"> - <td><i>Prix €/Quantités</i></td> - <td tal:condition="python:tarif_list[0].getCell(None, '00300', base_id='destination_base_price')<>None" - tal:content="python:'300p'"> - </td> - <td tal:condition="python:tarif_list[0].getCell(None, '01000', base_id='destination_base_price')<>None" - tal:content="python:'1000p'"> - </td> - <td tal:condition="python:tarif_list[0].getCell(None, '05000', base_id='destination_base_price')<>None" - tal:content="python:'5000p'"> - </td> - <td tal:condition="python:tarif_list[0].getCell(None, '10000', base_id='destination_base_price')<>None" - tal:content="python:'10000p'"> - </td> - </span> - </tr> - <span tal:repeat="tarif_item tarif_list"> - <tr> - <td tal:content="python:modules['string'].lower(tarif_item.getDescription())"/> - <td tal:condition="python:tarif_item.getCell(None, '00300', base_id='destination_base_price')<>None" -tal:content="python:'%.2f' %tarif_item.getCell(None, '00300', base_id='destination_base_price').destination_base_price or nothing"> - </td> - <td tal:condition="python:tarif_item.getCell(None, '01000', base_id='destination_base_price')<>None" -tal:content="python:'%s' %tarif_item.getCell(None, '01000', base_id='destination_base_price').destination_base_price or nothing"> - </td> - <td tal:condition="python:tarif_item.getCell(None, '05000', base_id='destination_base_price')<>None" -tal:content="python:'%.2f' %tarif_item.getCell(None, '05000', base_id='destination_base_price').destination_base_price or nothing"> - </td> - <td tal:condition="python:tarif_item.getCell(None, '10000', base_id='destination_base_price')<>None" -tal:content="python:'%.2f' %tarif_item.getCell(None, '10000', base_id='destination_base_price').destination_base_price or nothing"> - - </td> - - </tr> - - </span> - </table> - </span> - - </span> - - </span> - </td> - </span> - </span> - </tr> - </span> - - - </table> - -</body> -</html> diff --git a/product/Coramy/skins/coramy_trade/purchase_order_apply_condition.py b/product/Coramy/skins/coramy_trade/purchase_order_apply_condition.py deleted file mode 100755 index f82e24c26a..0000000000 --- a/product/Coramy/skins/coramy_trade/purchase_order_apply_condition.py +++ /dev/null @@ -1,175 +0,0 @@ -## Script (Python) "purchase_order_apply_condition" -##bind container=container -##bind context=context -##bind namespace= -##bind script=script -##bind subpath=traverse_subpath -##parameters=form_id='' -##title= -## -# appelé sur une commande, ce script recherche une condition d'achat -# pouvant s'appliquer à la commande et, s'il en trouve une (et une seule) -# complète le profil de la commande, le paiement, les remises - -order = context -condition_list = [] - -# on commence par regarder si une condition d'achat est associée à la commande -condition_list = order.getSpecialiseValueList(portal_type=('Condition Achat',)) -if len(condition_list) == 0 : - - # RECHERCHE d'une condition d'achat compatible - # la recherche se fait d'abord sur le couple 'destination_section' et 'source' - - my_destination_section = order.getDestinationSectionValue() - if my_destination_section <> None : - my_destination_section_uid = my_destination_section.getUid() - else : - my_destination_section = '' - my_source = order.getSourceValue() - if my_source <> None : - my_source_uid = my_source.getUid() - else : - my_source_uid = '' - my_destination = order.getDestinationValue() - if my_destination <> None : - my_destination_uid = my_destination.getUid() - else : - my_destination_uid = '' - condition_list = order.condition_achat_sql_search(destination_section_uid=my_destination_section_uid, source_uid=my_source_uid, destination_uid="") - - # s'il y a plus d'une condition trouvee, on essaye de réduire le choix - # en intégrant un critère de recherche sur 'destination' - if len(condition_list) > 1 : - condition_list = order.condition_achat_sql_search(destination_section_uid=my_destination_section_uid, source_uid=my_source_uid, destination_uid=my_destination_uid) - -# resultat des courses sur le recherche -if len(condition_list ) == 0 : - redirect_url = '%s/%s?%s' % ( context.absolute_url(), form_id - , 'portal_status_message=Pas+de+condition+achat+applicable.') -elif len(condition_list ) > 1 : - redirect_url = '%s/%s?%s' % ( context.absolute_url(), form_id - , 'portal_status_message=Trop+de+conditions+achat+applicables.') -else : # on a une condition applicable - condition=condition_list[0].getObject() - - # MISE A JOUR DU PROFIL DE LA COMMANDE - - categories = order.getCategoryList() - # DESTINATION - if order.getDestinationValue() == None and condition.getDestinationValue() <> None : - categories += ('destination/'+condition.getDestinationValue().getRelativeUrl(),) - # destination_decision - if order.getDestinationDecisionValue() == None and condition.getDestinationDecisionValue() <> None : - categories += ('destination_decision/'+condition.getDestinationDecisionValue().getRelativeUrl(),) - # destination_administration - if order.getDestinationAdministrationValue() == None and condition.getDestinationAdministrationValue() <> None : - for destination_administration_item in condition.getDestinationAdministrationValueList() : - categories += ('destination_administration/'+destination_administration_item.getRelativeUrl(),) - # destination_payment - if order.getDestinationPaymentValue() == None and condition.getDestinationPaymentValue() <> None : - categories += ('destination_payment/'+condition.getDestinationPaymentValue().getRelativeUrl(),) - - # SOURCE_section - if order.getSourceSectionValue() == None : - if condition.getSourceSectionValue() <> None : - categories += ('source_section/'+condition.getSourceSectionValue().getRelativeUrl(),) - # si source_section pas presente dans la condition achat, on utilise source de order - else : - categories += ('source_section/'+order.getSourceValue().getRelativeUrl(),) - # source_decision - if order.getSourceDecisionValue() == None : - if condition.getSourceDecisionValue() <> None : - categories += ('source_decision/'+condition.getSourceDecisionValue().getRelativeUrl(),) - # si source_decision pas presente dans la condition achat, on utilise source de order - else : - categories += ('source_decision/'+order.getSourceValue().getRelativeUrl(),) - # source_administration - if order.getSourceAdministrationValue() == None : - if condition.getSourceAdministrationValue() <> None : - categories += ('source_administration/'+condition.getSourceAdministrationValue().getRelativeUrl(),) - # si source_administration pas presente dans la condition achat, on utilise source de order - else : - categories += ('source_administration/'+order.getSourceValue().getRelativeUrl(),) - # source_payment - if order.getSourcePaymentValue() == None : - if condition.getSourcePaymentValue() <> None : - categories += ('source_payment/'+condition.getSourcePaymentValue().getRelativeUrl(),) - # si source_payment pas presente dans la condition achat, on utilise source de order - else : - categories += ('source_payment/'+order.getSourceValue().getRelativeUrl(),) - - # MISE A JOUR DU PAIEMENT DE LA COMMANDE - my_payment_term='' - if order.hasPaymentTerm() : - my_payment_term = order.getPaymentTerm() - elif condition.hasPaymentTerm() : - my_payment_term = condition.getPaymentTerm() - - my_payment_end_of_month='' - if order.hasPaymentEndOfMonth() : - my_payment_end_of_month = order.getPaymentEndOfMonth() - elif condition.hasPaymentTerm() : - my_payment_end_of_month = condition.getPaymentEndOfMonth() - - my_payment_additional_term='' - if order.hasPaymentAdditionalTerm() : - my_payment_additional_term = order.getPaymentAdditionalTerm() - elif condition.hasPaymentAdditionalTerm() : - my_payment_additional_term = condition.getPaymentAdditionalTerm() - - if order.getPaymentModeValue() == None and condition.getPaymentModeValue() <> None : - categories += (condition.getPaymentModeValue().getRelativeUrl(),) - if order.getTradeDateValue() == None and condition.getTradeDateValue() <> None : - categories += (condition.getTradeDateValue().getRelativeUrl(),) - - # copie des conditions de paiement additionnelles si pas presentes dans commande - if len(order.contentIds(filter={'portal_type':'Condition Paiement'})) == 0 : - to_copy=[] - to_copy=condition.contentIds(filter={'portal_type':'Condition Paiement'}) - if len(to_copy)>0 : - copy_data = condition.manage_copyObjects(ids=to_copy) - new_id_list = order.manage_pasteObjects(copy_data) - - # copie des remises si pas presentes dans commande - if len(order.contentIds(filter={'portal_type':'Remise'})) == 0 : - to_copy=[] - to_copy=condition.contentIds(filter={'portal_type':'Remise'}) - if len(to_copy)>0 : - copy_data = condition.manage_copyObjects(ids=to_copy) - new_id_list = order.manage_pasteObjects(copy_data) - - # copie des conditions logistique - if order.getIncotermValue() == None and condition.getIncotermValue() <> None : - categories += (condition.getIncotermValue().getRelativeUrl(),) - if order.getDeliveryModeValue() == None and condition.getDeliveryModeValue() <> None : - categories += (condition.getDeliveryModeValue().getRelativeUrl(),) - - # copie de la devise - if order.getPriceCurrencyValue() == None and condition.getPriceCurrencyValue() <> None : - categories += ('price_currency/'+condition.getPriceCurrencyValue().getRelativeUrl(),) - - # copie du code client - my_destination_decision_source_reference = '' - if order.hasDestinationDecisionSourceReference() : - my_destination_decision_source_reference = order.getDestinationDecisionSourceReference() - elif condition.hasDestinationDecisionSourceReference() : - my_destination_decision_source_reference = condition.getDestinationDecisionSourceReference() - - # mise à jour du lien specialise entre order et condition appliquee - final_categories = () - for category_item in categories : - if category_item.find('specialise/') == (-1): - final_categories += (category_item,) - - final_categories += ('specialise/'+condition.getRelativeUrl(),) - - order.edit(categories=final_categories, payment_term=my_payment_term, - payment_end_of_month=my_payment_end_of_month, - payment_additional_term=my_payment_additional_term, - destination_decision_source_reference = my_destination_decision_source_reference) - - redirect_url = '%s/%s?%s' % ( context.absolute_url(), form_id - , 'portal_status_message=Commande+mise+a+jour.') - -return redirect_url diff --git a/product/Coramy/skins/coramy_trade/purchase_order_apply_condition_handler.py b/product/Coramy/skins/coramy_trade/purchase_order_apply_condition_handler.py deleted file mode 100755 index 2cc4b534a8..0000000000 --- a/product/Coramy/skins/coramy_trade/purchase_order_apply_condition_handler.py +++ /dev/null @@ -1,12 +0,0 @@ -## Script (Python) "purchase_order_apply_condition_handler" -##bind container=container -##bind context=context -##bind namespace= -##bind script=script -##bind subpath=traverse_subpath -##parameters=form_id='' -##title= -## -redirect_url = context.purchase_order_apply_condition(form_id=form_id) - -context.REQUEST[ 'RESPONSE' ].redirect( redirect_url ) diff --git a/product/Coramy/skins/coramy_trade/purchase_order_list.form b/product/Coramy/skins/coramy_trade/purchase_order_list.form deleted file mode 100755 index 155a3434e4..0000000000 --- a/product/Coramy/skins/coramy_trade/purchase_order_list.form +++ /dev/null @@ -1,63 +0,0 @@ -<?xml version="1.0"?> - -<form> - <title>Liste de commandes</title> - <row_length>4</row_length> - <name>sales_order_list</name> - <pt>form_list</pt> - <action></action> - <method>POST</method> - <enctype></enctype> - <encoding>UTF-8</encoding> - <stored_encoding>ISO-8859-1</stored_encoding> - <unicode_mode>false</unicode_mode> - <groups> - <group> - <title>Default</title> - <fields> - - <field><id>listbox</id> <type>ListBox</type> - <values> - <all_columns type="list">[('id', 'Commande'), ('default_destination_section_title', 'Soci\xe9t\xe9'), ('default_source_title', 'Exp\xe9di\xe9 par'), ('default_destination_title', 'Livrer \xe0'), ('default_destination_administration_person_title', 'Gestionaire'), ('target_stop_date', 'Livraison demand\xe9e'), ('stop_date', 'Livraison confirm\xe9e'), ('simulation_state', 'Etat')]</all_columns> - <all_editable_columns type="list">[]</all_editable_columns> - <alternate_name></alternate_name> - <columns type="list">[('id', 'Commande'), ('default_destination_section_title', 'Soci\xe9t\xe9'), ('default_source_title', 'Exp\xe9di\xe9 par'), ('default_destination_title', 'Livrer \xe0'), ('default_destination_administration_person_title', 'Gestionaire'), ('target_stop_date', 'Livraison demand\xe9e'), ('stop_date', 'Livraison confirm\xe9e'), ('simulation_state', 'Etat')]</columns> - <css_class></css_class> - <default></default> - <default_params type="list">[]</default_params> - <description></description> - <domain_root_list type="list">[]</domain_root_list> - <domain_tree type="int">0</domain_tree> - <editable type="int">1</editable> - <editable_columns type="list">[]</editable_columns> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <global_attributes type="list">[]</global_attributes> - <hidden type="int">0</hidden> - <lines type="int">30</lines> - <list_action>list</list_action> - <list_method type="method">portal_catalog</list_method> - <meta_types type="list">[]</meta_types> - <portal_types type="list">[('Purchase Order', 'Purchase Order')]</portal_types> - <report_root_list type="list">[]</report_root_list> - <report_tree type="int">0</report_tree> - <search type="int">1</search> - <search_columns></search_columns> - <select type="int">1</select> - <selection_name>purchase_order_selection</selection_name> - <sort type="list">[('id', 'id')]</sort> - <sort_columns></sort_columns> - <stat_method></stat_method> - <title>Commandes achat</title> - </values> - <tales> - <list_method>python:here.getPortalObject().portal_skins.local_list_method[here.REQUEST.list_method_id]</list_method> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - </messages> - </field> - </fields> - </group> - </groups> -</form> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_trade/purchase_order_print.pt b/product/Coramy/skins/coramy_trade/purchase_order_print.pt deleted file mode 100755 index edd5754768..0000000000 --- a/product/Coramy/skins/coramy_trade/purchase_order_print.pt +++ /dev/null @@ -1,205 +0,0 @@ -<HTML> - <HEAD> - <meta http-equiv="content-type" content="text/html;charset=ISO-8859-1"> - <title tal:content="here/getTitle">Coramy</title> - <link rel=stylesheet type="text/css" href="mesure"> - </HEAD> - - <BODY tal:define="commercial python:here.getSourceAdministrationValue(portal_type=['Person']); - gestionaire python:here.getDestinationAdministrationValue(portal_type=['Person']); - fournisseur python:here.getSourceValue(portal_type=['Organisation']); - livraison python:here.getDestinationValue(portal_type= - ['Organisation','Category']); - totalizer python:[0]; - order_lines_list python:here.contentValues(filter={'portal_type': - 'Purchase Order Line'})"> - - <TABLE width="660" height="900" cellpadding="0" cellspacing="0"><!-- Tableau general --> - <TR> - <TD> - <TABLE border="0" width="100%" height="100%"> - <TR> - <TD> - <h2>Coramy</h2> - </TD> - <TD align="center"> - <h2>Commande <span tal:content="python:here.getOrderType()+' n° '+here.getId()"/></h2> - </TD> - <TD align="right"> - <span tal:content="python:'Emise le : '+str(here.getDateEmission())"/> - </TD> - </TR> - </TABLE> - </TD> - </TR> - - <TR><!-- Espacement inter-tableaux --> - <TD height="15"/> - </TR> - - <TR height="10%"><!-- Infos --> - <TD> - <TABLE border="0" width="100%" height="100%"> - <TR> - <TD class="bold">Livrer à</TD> - <TD nowrap> - <SPAN tal:condition="python:livraison<>None"> - <b><SPAN tal:content="python:modules['string'].capwords(livraison.getTitle())"/></b> - <br><SPAN tal:condition="python:livraison.getPortalType()<>'Category'"> - <SPAN tal:define="address_items python:modules['string']. - split(livraison.getDefaultAddress().asText(country='France'),'\n')"> - <SPAN tal:repeat="item address_items"> - <SPAN tal:content="item"/><br> - </SPAN> - </SPAN> - </SPAN> - </SPAN> - </TD> - <TD width="100%"> </TD> - <TD class="bold">Fournisseur</TD> - <TD nowrap> - <SPAN tal:condition="python:fournisseur<>None"> - <b><SPAN tal:content="python:modules['string'].capwords(fournisseur.getTitle())"/></b> - <br><SPAN tal:define="address_items python:modules['string'].split(fournisseur.getDefaultAddress().asText(country='France'),'\n')"> - <SPAN tal:repeat="item address_items"> - <SPAN tal:content="item"/><br> - </SPAN> - </SPAN> - </SPAN> - </TD> - </TR> - <TR> - <TD class="bold">Gestionaire</TD> - <TD> - <SPAN tal:condition="python:gestionaire<>None"> - <SPAN tal:content="python: modules['string'].capwords(gestionaire.getTitle())"> - </SPAN> - </SPAN> - </TD> - <TD ></TD> - <TD nowrap class="bold">A l'attention de </TD> - <TD> - <SPAN tal:condition="python:commercial<>None"> - <SPAN tal:content="python: modules['string'].capwords(commercial.getTitle())"> - </SPAN> - </SPAN> - </TD> - </TR> - <TR> - <TD class="bold">Téléphone</TD> - <TD> - <SPAN tal:condition="python:gestionaire<>None"> - <SPAN tal:content="python:gestionaire.getDefaultTelephoneText()"> - </SPAN> - </SPAN> - </TD> - <TD ></TD> - <TD nowrap class="bold">Téléphone</TD> - <TD> - <SPAN tal:condition="python:commercial<>None"> - <SPAN tal:content="python:commercial.getDefaultTelephoneText()"> - </SPAN> - </SPAN> - </TD> - </TR> - <TR> - <TD class="bold">Fax</TD> - <TD> - <SPAN tal:condition="python:gestionaire<>None"> - <SPAN tal:content="python:gestionaire.getDefaultFaxText()"> - </SPAN> - </SPAN> - </TD> - <TD ></TD> - <TD nowrap class="bold">Fax</TD> - <TD> - <SPAN tal:condition="python:commercial<>None"> - <SPAN tal:content="python:commercial.getDefaultFaxText()"> - </SPAN> - </SPAN> - </TD> - </TR> - </TABLE> - </TD> - </TR> - - - <TR><!-- Espacement inter-tableaux --> - <TD height="15"/> - </TR> - - <TR><!-- Tableau de lignes de commande --> - <TD valign="top"> - <TABLE border="2" width="100%"> - <TR> - <TD class="bold" align="center">Référence Fournisseur</TD> - <TD class="bold" align="center">Code interne</TD> - <TD class="bold" align="center" width="100%">Désignation</TD> - <TD class="bold" align="center">Variantes</TD> - <TD class="bold" align="center">Quantité</TD> - <TD class="bold" align="center">Unité</TD> - <TD class="bold" align="center">Prix unitaire</TD> - <TD class="bold" align="center">Prix total</TD> - <TD class="bold" align="center">Date livraison</TD> - </TR> - <SPAN tal:repeat="order_line order_lines_list"> - <SPAN tal:define="delivery_cell_list python:order_line.getDeliveryCellPrintList()"> - <TR tal:repeat="delivery_cell delivery_cell_list"> - <TD nowrap tal:content="python:delivery_cell[0]" align="left"></TD> - <TD tal:content="python:delivery_cell[1]" align="left"></TD> - <TD tal:content="python:delivery_cell[2]" align="left"></TD> - <TD nowrap tal:define="variantes_list python:delivery_cell[3]" align="left"> - <SPAN tal:repeat="variante variantes_list"> - <SPAN tal:condition="python:variante<>'value' and variante<>None"> - <SPAN tal:define="variante_items python:variante.split('/')"> - <SPAN tal:content="python:variante_items[len(variante_items)-1]"/><BR> - </SPAN> - </SPAN> - </SPAN> - </TD> - <TD tal:content="python: '%.0f' % delivery_cell[4]" align="right"></TD> - <TD tal:content="python:delivery_cell[5]" align="left"></TD> - <TD tal:content="python: '%.3f' % delivery_cell[6]" align="right"></TD> - <TD tal:content="python: '%.2f' % delivery_cell[7]" align="right"></TD> - <TD tal:content="python:delivery_cell[8]" align="center"></TD> - <SPAN tal:define="toto python:order_line.PT_update_total_list(totalizer,[0],delivery_cell[7])"/> - </TR> - </SPAN> - </SPAN> - <TR> - <TD colspan="7" align="right">Total - </TD> - <TD tal:content="python: '%.2f' %totalizer[0]"/> - <TD> - <SPAN tal:define="currency_items python:here.getPriceCurrency().split('/')"> - <SPAN tal:content="python:currency_items[len(currency_items)-1]"/> - </SPAN> - </TD> - </TR> - </TABLE> - </TD> - </TR> - - <TR tal:define="commentaires_list python:modules['string'].split(here.getComment(''),'\n')"><!-- Notes --> - <TD valign="top"> - <span tal:repeat="commentaires_item commentaires_list"> - <br> - <span tal:content="python:commentaires_item"/></span> - </TD> - </TR> - - <TR><!-- Espacement inter-tableaux --> - <TD height="15"/> - </TR> - - <TR> - <TD height="90%"/> - </TR> - <TR> - <TD align="center">Coramy - 5 bis, rue Denis Cordonnier - 59820 Gravelines (FRANCE)<br>Tél. : + 33 (0) 3 28 51 91 51 - Fax : + 33 (0) 3 28 23 34 96 - <p class="Copy">S.A.S. au capital de 435.200 € - T.V.A. FR 67 611 750 274 - R.C. Dunkerque 611 750 274 - SIRET 611 750 274 00023 - CNUF 15971</p> - </TD> - </TR> - </TABLE> - </BODY> -</HTML> diff --git a/product/Coramy/skins/coramy_trade/purchase_order_view.form b/product/Coramy/skins/coramy_trade/purchase_order_view.form deleted file mode 100755 index 91d7cb89b4..0000000000 --- a/product/Coramy/skins/coramy_trade/purchase_order_view.form +++ /dev/null @@ -1,822 +0,0 @@ -<?xml version="1.0"?> - -<form> - <title>Commande achat</title> - <row_length>4</row_length> - <name>purchase_order_view</name> - <pt>form_view</pt> - <action>base_edit</action> - <method>POST</method> - <enctype></enctype> - <encoding>UTF-8</encoding> - <stored_encoding>ISO-8859-1</stored_encoding> - <unicode_mode>false</unicode_mode> - <groups> - <group> - <title>left</title> - <fields> - - <field><id>my_id</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">10</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <max_length></max_length> - <required type="int">1</required> - <title>Commande</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - <field><id>my_destination_section</id> <type>ListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <extra_item></extra_item> - <first_item type="int">0</first_item> - <hidden type="int">0</hidden> - <items type="list">[]</items> - <required type="int">0</required> - <size type="int">1</size> - <title>Société</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <items>python:here.portal_categories.group.Coramy.getCategoryChildIdItemList(base=1,display_none_category=1)</items> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - <field><id>my_order_type</id> <type>ListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <extra_item></extra_item> - <first_item type="int">0</first_item> - <hidden type="int">0</hidden> - <items type="list">[]</items> - <required type="int">0</required> - <size type="int">1</size> - <title>Type de commande</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <items>here/portal_categories/order_type/getFormItemList</items> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - <field><id>my_date_emission</id> <type>DateTimeField</type> - <values> - <allow_empty_time type="int">0</allow_empty_time> - <alternate_name></alternate_name> - <ampm_time_style type="int">0</ampm_time_style> - <css_class></css_class> - <date_only type="int">1</date_only> - <date_separator>/</date_separator> - <default_now type="int">0</default_now> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <hidden type="int">0</hidden> - <input_order>dmy</input_order> - <input_style>text</input_style> - <required type="int">0</required> - <time_separator>:</time_separator> - <title>Commande émise le</title> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="not_datetime">You did not enter a valid date and time.</message> - <message name="datetime_out_of_range">The date and time you entered were out of range.</message> - </messages> - </field> - <field><id>my_commande_origine</id> <type>ListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <extra_item></extra_item> - <first_item type="int">0</first_item> - <hidden type="int">0</hidden> - <items type="list">[]</items> - <required type="int">0</required> - <size type="int">1</size> - <title>Support de la commande</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <items>here/portal_categories/commande_origine/getFormItemList</items> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - <field><id>my_destination_administration_person_title</id> <type>RelationStringField</type> - <values> - <alternate_name></alternate_name> - <base_category>destination_administration</base_category> - <catalog_index>Title</catalog_index> - <css_class></css_class> - <default></default> - <default_module>person</default_module> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <jump_method>base_jump_relation</jump_method> - <max_length></max_length> - <portal_type type="list">[('Person', 'Person')]</portal_type> - <required type="int">0</required> - <title>Gestionaire</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <update_method>base_update_relation</update_method> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - <field><id>my_price_currency</id> <type>ListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <extra_item></extra_item> - <first_item type="int">0</first_item> - <hidden type="int">0</hidden> - <items type="list">[]</items> - <required type="int">0</required> - <size type="int">1</size> - <title>Devise</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <items>python:[('','')]+map(lambda x:(x.id,'devise/%s' %x.id),here.devise.objectValues())</items> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - <field><id>my_incoterm</id> <type>ListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <extra_item></extra_item> - <first_item type="int">0</first_item> - <hidden type="int">0</hidden> - <items type="list">[]</items> - <required type="int">0</required> - <size type="int">1</size> - <title>Incoterm</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <items>python:here.portal_categories.incoterm.getCategoryChildItemList(display_id = 'getTitle', display_none_category=1)</items> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - <field><id>my_delivery_mode</id> <type>ListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <extra_item></extra_item> - <first_item type="int">0</first_item> - <hidden type="int">0</hidden> - <items type="list">[]</items> - <required type="int">0</required> - <size type="int">1</size> - <title>Mode de livraison</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <items>here/portal_categories/delivery_mode/getFormItemList</items> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>right</title> - <fields> - - <field><id>my_source_title</id> <type>RelationStringField</type> - <values> - <alternate_name></alternate_name> - <base_category>source</base_category> - <catalog_index>Title</catalog_index> - <css_class></css_class> - <default></default> - <default_module>organisation</default_module> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <jump_method>base_jump_relation</jump_method> - <max_length></max_length> - <portal_type type="list">[('Organisation', 'Organisation')]</portal_type> - <required type="int">0</required> - <title>Expédié par</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <update_method>base_update_relation</update_method> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - <field><id>my_source_administration_title</id> <type>RelationStringField</type> - <values> - <alternate_name></alternate_name> - <base_category>source_administration</base_category> - <catalog_index>Title</catalog_index> - <css_class></css_class> - <default></default> - <default_module>person</default_module> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <jump_method>base_jump_relation</jump_method> - <max_length></max_length> - <portal_type type="list">[('Person', 'Person'), ('Organisation', 'Organisation'), ('Category', 'Category')]</portal_type> - <required type="int">0</required> - <title>Contact</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <update_method>base_update_relation</update_method> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - <field><id>my_destination_title</id> <type>RelationStringField</type> - <values> - <alternate_name></alternate_name> - <base_category>destination</base_category> - <catalog_index>Title</catalog_index> - <css_class></css_class> - <default></default> - <default_module>organisation</default_module> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <jump_method>base_jump_relation</jump_method> - <max_length></max_length> - <portal_type type="list">[('Organisation', 'Organisation'), ('Category', 'Category')]</portal_type> - <required type="int">0</required> - <title>Livrer à </title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <update_method>base_update_relation</update_method> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - <field><id>my_target_start_date</id> <type>DateTimeField</type> - <values> - <allow_empty_time type="int">0</allow_empty_time> - <alternate_name></alternate_name> - <ampm_time_style type="int">0</ampm_time_style> - <css_class></css_class> - <date_only type="int">1</date_only> - <date_separator>/</date_separator> - <default_now type="int">0</default_now> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <hidden type="int">0</hidden> - <input_order>dmy</input_order> - <input_style>text</input_style> - <required type="int">0</required> - <time_separator>:</time_separator> - <title>Date d'expédition demandée</title> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="not_datetime">You did not enter a valid date and time.</message> - <message name="datetime_out_of_range">The date and time you entered were out of range.</message> - </messages> - </field> - <field><id>my_target_stop_date</id> <type>DateTimeField</type> - <values> - <allow_empty_time type="int">0</allow_empty_time> - <alternate_name></alternate_name> - <ampm_time_style type="int">0</ampm_time_style> - <css_class></css_class> - <date_only type="int">1</date_only> - <date_separator>/</date_separator> - <default_now type="int">0</default_now> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <hidden type="int">0</hidden> - <input_order>dmy</input_order> - <input_style>text</input_style> - <required type="int">0</required> - <time_separator>:</time_separator> - <title>Date de livraison demandée</title> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="not_datetime">You did not enter a valid date and time.</message> - <message name="datetime_out_of_range">The date and time you entered were out of range.</message> - </messages> - </field> - <field><id>spacer</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">1</hidden> - <max_length></max_length> - <required type="int">0</required> - <title> </title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - <field><id>my_start_date</id> <type>DateTimeField</type> - <values> - <allow_empty_time type="int">0</allow_empty_time> - <alternate_name></alternate_name> - <ampm_time_style type="int">0</ampm_time_style> - <css_class></css_class> - <date_only type="int">1</date_only> - <date_separator>/</date_separator> - <default_now type="int">0</default_now> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <hidden type="int">0</hidden> - <input_order>dmy</input_order> - <input_style>text</input_style> - <required type="int">0</required> - <time_separator>:</time_separator> - <title>Date d'expédition confirmée</title> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="not_datetime">You did not enter a valid date and time.</message> - <message name="datetime_out_of_range">The date and time you entered were out of range.</message> - </messages> - </field> - <field><id>my_stop_date</id> <type>DateTimeField</type> - <values> - <allow_empty_time type="int">0</allow_empty_time> - <alternate_name></alternate_name> - <ampm_time_style type="int">0</ampm_time_style> - <css_class></css_class> - <date_only type="int">1</date_only> - <date_separator>/</date_separator> - <default_now type="int">0</default_now> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <hidden type="int">0</hidden> - <input_order>dmy</input_order> - <input_style>text</input_style> - <required type="int">0</required> - <time_separator>:</time_separator> - <title>Date de livraison confirmée</title> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="not_datetime">You did not enter a valid date and time.</message> - <message name="datetime_out_of_range">The date and time you entered were out of range.</message> - </messages> - </field> - <field><id>order_state</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <max_length></max_length> - <required type="int">0</required> - <title>Etat</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <default>python:here.portal_workflow.getInfoFor(here, 'simulation_state')</default> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - <field><id>my_trade_condition_title</id> <type>RelationStringField</type> - <values> - <alternate_name></alternate_name> - <base_category>specialise</base_category> - <catalog_index>Title</catalog_index> - <css_class></css_class> - <default></default> - <default_module>condition_achat</default_module> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <jump_method>base_jump_relation</jump_method> - <max_length></max_length> - <portal_type type="list">[('Condition Achat', 'Condition Achat')]</portal_type> - <required type="int">0</required> - <title>Condition d'achat</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <update_method>base_update_relation</update_method> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>center</title> - <fields> - - <field><id>my_comment</id> <type>TextAreaField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <height type="int">3</height> - <hidden type="int">0</hidden> - <max_length></max_length> - <max_linelength></max_linelength> - <max_lines></max_lines> - <required type="int">0</required> - <title>Commentaires</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - <width type="int">80</width> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_many_lines">You entered too many lines.</message> - <message name="line_too_long">A line was too long.</message> - <message name="too_long">You entered too many characters.</message> - </messages> - </field> - <field><id>my_total_quantity</id> <type>FloatField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">10</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">1</hidden> - <required type="int">0</required> - <title>Quantité totale</title> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <title>python:'Quantité totale : %.2f' % here.getTargetTotalQuantity()</title> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="not_float">You did not enter a floating point number.</message> - </messages> - </field> - <field><id>my_total_price</id> <type>FloatField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">10</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">1</hidden> - <required type="int">0</required> - <title>Montant total</title> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <title>python:'Montant total : %.2f' % here.getTotalPrice()</title> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="not_float">You did not enter a floating point number.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>bottom</title> - <fields> - - <field><id>listbox</id> <type>ListBox</type> - <values> - <all_columns type="list">[('id', 'Ligne n\xb0'), ('resource_title', 'Produit'), ('total_quantity', 'Quantit\xe9 totale'), ('quantity_unit', 'Unit\xe9'), ('total_price', 'Montant total'), ('target_stop_date', 'Date livraison')]</all_columns> - <all_editable_columns type="list">[('quantity_unit', 'Unit')]</all_editable_columns> - <alternate_name></alternate_name> - <columns type="list">[('id', 'Ligne n\xb0'), ('resource_title', 'Produit'), ('total_quantity', 'Quantit\xe9 totale'), ('quantity_unit', 'Unit\xe9'), ('total_price', 'Montant total'), ('target_stop_date', 'Date livraison')]</columns> - <css_class></css_class> - <default></default> - <default_params type="list">[]</default_params> - <description></description> - <domain_root_list type="list">[]</domain_root_list> - <domain_tree type="int">0</domain_tree> - <editable type="int">1</editable> - <editable_columns type="list">[('quantity_unit', 'Unit')]</editable_columns> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <global_attributes type="list">[]</global_attributes> - <hidden type="int">0</hidden> - <lines type="int">10</lines> - <list_action>list</list_action> - <list_method type="method">searchFolder</list_method> - <meta_types type="list">[]</meta_types> - <portal_types type="list">[('Purchase Order Line', 'Purchase Order Line')]</portal_types> - <report_root_list type="list">[]</report_root_list> - <report_tree type="int">0</report_tree> - <search type="int">0</search> - <search_columns></search_columns> - <select type="int">0</select> - <selection_name>purchase_order_line_selection</selection_name> - <sort type="list">[('id', 'id')]</sort> - <sort_columns></sort_columns> - <stat_method></stat_method> - <title>Ligne de commande</title> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>hidden</title> - <fields> - - <field><id>listbox_quantity</id> <type>FloatField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">10</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <required type="int">0</required> - <title>Quantité</title> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="not_float">You did not enter a floating point number.</message> - </messages> - </field> - <field><id>listbox_quantity_unit</id> <type>ListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <extra_item></extra_item> - <first_item type="int">0</first_item> - <hidden type="int">0</hidden> - <items type="list">[]</items> - <required type="int">0</required> - <size type="int">1</size> - <title>Unité</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <items>here/portal_categories/quantity_unit/getFormItemList</items> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - <field><id>listbox_price</id> <type>FloatField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">10</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <required type="int">0</required> - <title>Prix d'achat</title> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="not_float">You did not enter a floating point number.</message> - </messages> - </field> - </fields> - </group> - </groups> -</form> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_trade/purchase_packing_list_aggregated_view.form b/product/Coramy/skins/coramy_trade/purchase_packing_list_aggregated_view.form deleted file mode 100755 index 3761a72180..0000000000 --- a/product/Coramy/skins/coramy_trade/purchase_packing_list_aggregated_view.form +++ /dev/null @@ -1,613 +0,0 @@ -<?xml version="1.0"?> - -<form> - <title>Livraison achat</title> - <row_length>4</row_length> - <name>purchase_packing_list_view</name> - <pt>form_view</pt> - <action>base_edit</action> - <method>POST</method> - <enctype>multipart/form-data</enctype> - <encoding>UTF-8</encoding> - <stored_encoding>ISO-8859-1</stored_encoding> - <unicode_mode>false</unicode_mode> - <groups> - <group> - <title>left</title> - <fields> - - <field><id>my_id</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">10</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <max_length></max_length> - <required type="int">1</required> - <title>N° livraison</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - <field><id>my_destination_section</id> <type>ListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <extra_item></extra_item> - <first_item type="int">0</first_item> - <hidden type="int">0</hidden> - <items type="list">[]</items> - <required type="int">0</required> - <size type="int">1</size> - <title>Société</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <items>python:here.portal_categories.group.Coramy.getCategoryChildIdItemList(base=1,display_none_category=1)</items> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - <field><id>my_destination_administration_person_title</id> <type>RelationStringField</type> - <values> - <alternate_name></alternate_name> - <base_category>destination_administration</base_category> - <catalog_index>Title</catalog_index> - <css_class></css_class> - <default></default> - <default_module>person</default_module> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <jump_method>base_jump_relation</jump_method> - <max_length></max_length> - <portal_type type="list">[('Person', 'Person')]</portal_type> - <required type="int">0</required> - <title>Gestionaire</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <update_method>base_update_relation</update_method> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <default>python:here.getCausalityValue(portal_type="Sales Order").getDestinationAdministrationPersonTitle()</default> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - <field><id>my_incoterm</id> <type>ListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <extra_item></extra_item> - <first_item type="int">0</first_item> - <hidden type="int">0</hidden> - <items type="list">[]</items> - <required type="int">0</required> - <size type="int">1</size> - <title>Incoterm</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <items>python:here.portal_categories.incoterm.getCategoryChildItemList(display_id = 'getTitle', display_none_category=1)</items> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - <field><id>my_delivery_mode</id> <type>ListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <extra_item></extra_item> - <first_item type="int">0</first_item> - <hidden type="int">0</hidden> - <items type="list">[]</items> - <required type="int">0</required> - <size type="int">1</size> - <title>Mode de livraison</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <items>here/portal_categories/delivery_mode/getFormItemList</items> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>right</title> - <fields> - - <field><id>my_causality_id</id> <type>RelationStringField</type> - <values> - <alternate_name></alternate_name> - <base_category>causality</base_category> - <catalog_index>id</catalog_index> - <css_class></css_class> - <default></default> - <default_module>commande_vente</default_module> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">10</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <jump_method>base_jump_relation</jump_method> - <max_length></max_length> - <portal_type type="list">[('Sales Order', 'Sales Order')]</portal_type> - <required type="int">0</required> - <title>N° commande</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <update_method>base_update_relation</update_method> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - <field><id>my_source_title</id> <type>RelationStringField</type> - <values> - <alternate_name></alternate_name> - <base_category>source</base_category> - <catalog_index>Title</catalog_index> - <css_class></css_class> - <default></default> - <default_module>organisation</default_module> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <jump_method>base_jump_relation</jump_method> - <max_length></max_length> - <portal_type type="list">[('Organisation', 'Organisation')]</portal_type> - <required type="int">0</required> - <title>Expédié par</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <update_method>base_update_relation</update_method> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - <field><id>my_start_date</id> <type>DateTimeField</type> - <values> - <allow_empty_time type="int">0</allow_empty_time> - <alternate_name></alternate_name> - <ampm_time_style type="int">0</ampm_time_style> - <css_class></css_class> - <date_only type="int">1</date_only> - <date_separator>/</date_separator> - <default_now type="int">0</default_now> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <hidden type="int">1</hidden> - <input_order>dmy</input_order> - <input_style>text</input_style> - <required type="int">0</required> - <time_separator>:</time_separator> - <title>Date d'expédition prévue</title> - </values> - <tales> - <title>python:'Date d'expédition prévue : %s' % here.getStartDate()</title> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="not_datetime">You did not enter a valid date and time.</message> - <message name="datetime_out_of_range">The date and time you entered were out of range.</message> - </messages> - </field> - <field><id>my_target_start_date</id> <type>DateTimeField</type> - <values> - <allow_empty_time type="int">0</allow_empty_time> - <alternate_name></alternate_name> - <ampm_time_style type="int">0</ampm_time_style> - <css_class></css_class> - <date_only type="int">1</date_only> - <date_separator>/</date_separator> - <default_now type="int">0</default_now> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <hidden type="int">0</hidden> - <input_order>dmy</input_order> - <input_style>text</input_style> - <required type="int">0</required> - <time_separator>:</time_separator> - <title>Date d'expédition</title> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="not_datetime">You did not enter a valid date and time.</message> - <message name="datetime_out_of_range">The date and time you entered were out of range.</message> - </messages> - </field> - <field><id>my_stop_date</id> <type>DateTimeField</type> - <values> - <allow_empty_time type="int">0</allow_empty_time> - <alternate_name></alternate_name> - <ampm_time_style type="int">0</ampm_time_style> - <css_class></css_class> - <date_only type="int">1</date_only> - <date_separator>/</date_separator> - <default_now type="int">0</default_now> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <hidden type="int">1</hidden> - <input_order>dmy</input_order> - <input_style>text</input_style> - <required type="int">0</required> - <time_separator>:</time_separator> - <title>Date de livraison prévue</title> - </values> - <tales> - <title>python:'Date de livraison prévue : %s' % here.getStopDate()</title> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="not_datetime">You did not enter a valid date and time.</message> - <message name="datetime_out_of_range">The date and time you entered were out of range.</message> - </messages> - </field> - <field><id>my_target_stop_date</id> <type>DateTimeField</type> - <values> - <allow_empty_time type="int">0</allow_empty_time> - <alternate_name></alternate_name> - <ampm_time_style type="int">0</ampm_time_style> - <css_class></css_class> - <date_only type="int">1</date_only> - <date_separator>/</date_separator> - <default_now type="int">0</default_now> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <hidden type="int">0</hidden> - <input_order>dmy</input_order> - <input_style>text</input_style> - <required type="int">0</required> - <time_separator>:</time_separator> - <title>Date de livraison</title> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="not_datetime">You did not enter a valid date and time.</message> - <message name="datetime_out_of_range">The date and time you entered were out of range.</message> - </messages> - </field> - <field><id>delivery_state</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <max_length></max_length> - <required type="int">0</required> - <title>Etat</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <default>python:here.portal_workflow.getInfoFor(here, 'simulation_state')</default> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>center</title> - <fields> - - <field><id>my_comment</id> <type>TextAreaField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <height type="int">3</height> - <hidden type="int">0</hidden> - <max_length></max_length> - <max_linelength></max_linelength> - <max_lines></max_lines> - <required type="int">0</required> - <title>Commentaires</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - <width type="int">80</width> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_many_lines">You entered too many lines.</message> - <message name="line_too_long">A line was too long.</message> - <message name="too_long">You entered too many characters.</message> - </messages> - </field> - <field><id>my_total_quantity</id> <type>FloatField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">10</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">1</hidden> - <required type="int">0</required> - <title>Objectif quantité</title> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <title>python:'Objectif quantité : %.2f' % here.getTotalQuantity()</title> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="not_float">You did not enter a floating point number.</message> - </messages> - </field> - <field><id>my_target_total_quantity</id> <type>FloatField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">10</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">1</hidden> - <required type="int">0</required> - <title>Quantité</title> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <title>python:'Quantité : %.2f' % here.getTargetTotalQuantity()</title> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="not_float">You did not enter a floating point number.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>bottom</title> - <fields> - - <field><id>listbox</id> <type>ListBox</type> - <values> - <all_columns type="list">[('id', 'Ligne n\xb0'), ('resource_title', 'Mod\xe8le'), ('total_quantity', 'Objectif quantit\xe9'), ('target_total_quantity', 'Quantit\xe9'), ('quantity_unit', 'Unit\xe9')]</all_columns> - <all_editable_columns type="list">[('quantity_unit', 'Unit')]</all_editable_columns> - <alternate_name></alternate_name> - <columns type="list">[('id', 'Ligne n\xb0'), ('resource_title', 'Mod\xe8le'), ('total_quantity', 'Objectif quantit\xe9'), ('target_total_quantity', 'Quantit\xe9'), ('quantity_unit', 'Unit\xe9')]</columns> - <css_class></css_class> - <default></default> - <default_params type="list">[]</default_params> - <description></description> - <domain_root_list type="list">[]</domain_root_list> - <domain_tree type="int">0</domain_tree> - <editable type="int">1</editable> - <editable_columns type="list">[('quantity_unit', 'Unit')]</editable_columns> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <global_attributes type="list">[]</global_attributes> - <hidden type="int">0</hidden> - <lines type="int">10</lines> - <list_action>list</list_action> - <list_method type="method">searchFolder</list_method> - <meta_types type="list">[]</meta_types> - <portal_types type="list">[('Purchase Packing List Line', 'Purchase Packing List Line')]</portal_types> - <report_root_list type="list">[]</report_root_list> - <report_tree type="int">0</report_tree> - <search type="int">0</search> - <search_columns></search_columns> - <select type="int">0</select> - <selection_name>sales_packing_list_line_selection</selection_name> - <sort type="list">[('id', 'id')]</sort> - <sort_columns></sort_columns> - <stat_method></stat_method> - <title>Ligne de livraison</title> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>hidden</title> - <fields> - - <field><id>listbox_quantity</id> <type>FloatField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">10</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <required type="int">0</required> - <title>Quantité</title> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="not_float">You did not enter a floating point number.</message> - </messages> - </field> - <field><id>listbox_quantity_unit</id> <type>ListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <extra_item></extra_item> - <first_item type="int">0</first_item> - <hidden type="int">0</hidden> - <items type="list">[]</items> - <required type="int">0</required> - <size type="int">1</size> - <title>Unité</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <items>here/portal_categories/quantity_unit/getFormItemList</items> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - <field><id>listbox_price</id> <type>FloatField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">10</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <required type="int">0</required> - <title>Prix de vente</title> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="not_float">You did not enter a floating point number.</message> - </messages> - </field> - </fields> - </group> - </groups> -</form> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_trade/purchase_packing_list_list.form b/product/Coramy/skins/coramy_trade/purchase_packing_list_list.form deleted file mode 100755 index 46fa2f6c4b..0000000000 --- a/product/Coramy/skins/coramy_trade/purchase_packing_list_list.form +++ /dev/null @@ -1,63 +0,0 @@ -<?xml version="1.0"?> - -<form> - <title>Liste de livraisons</title> - <row_length>4</row_length> - <name>purchase_packing_list_list</name> - <pt>form_list</pt> - <action></action> - <method>POST</method> - <enctype></enctype> - <encoding>UTF-8</encoding> - <stored_encoding>ISO-8859-1</stored_encoding> - <unicode_mode>false</unicode_mode> - <groups> - <group> - <title>Default</title> - <fields> - - <field><id>listbox</id> <type>ListBox</type> - <values> - <all_columns type="list">[('id', 'Livraison'), ('default_causality_id', 'Commande'), ('default_destination_section_title', 'Soci\xe9t\xe9'), ('default_source_title', 'Exp\xe9di\xe9 par'), ('default_destination_title', 'Livr\xe9 \xe0'), ('target_start_date', "Date d'exp\xe9dition"), ('target_stop_date', 'Date de livraison'), ('causality_state', 'Coh\xe9rence'), ('simulation_state', 'Etat')]</all_columns> - <all_editable_columns type="list">[]</all_editable_columns> - <alternate_name></alternate_name> - <columns type="list">[('id', 'Livraison'), ('default_causality_id', 'Commande'), ('default_destination_section_title', 'Soci\xe9t\xe9'), ('default_source_title', 'Exp\xe9di\xe9 par'), ('default_destination_title', 'Livr\xe9 \xe0'), ('target_start_date', "Date d'exp\xe9dition"), ('target_stop_date', 'Date de livraison'), ('causality_state', 'Coh\xe9rence'), ('simulation_state', 'Etat')]</columns> - <css_class></css_class> - <default></default> - <default_params type="list">[]</default_params> - <description></description> - <domain_root_list type="list">[]</domain_root_list> - <domain_tree type="int">0</domain_tree> - <editable type="int">1</editable> - <editable_columns type="list">[]</editable_columns> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <global_attributes type="list">[]</global_attributes> - <hidden type="int">0</hidden> - <lines type="int">30</lines> - <list_action>list</list_action> - <list_method type="method">portal_catalog</list_method> - <meta_types type="list">[]</meta_types> - <portal_types type="list">[('Purchase Packing List', 'Purchase Packing List')]</portal_types> - <report_root_list type="list">[]</report_root_list> - <report_tree type="int">0</report_tree> - <search type="int">1</search> - <search_columns type="list">[]</search_columns> - <select type="int">1</select> - <selection_name>purchase_packing_list_selection</selection_name> - <sort type="list">[('id', 'id')]</sort> - <sort_columns></sort_columns> - <stat_method></stat_method> - <title>Livraisons d'achat</title> - </values> - <tales> - <list_method>python:here.getPortalObject().portal_skins.local_list_method[here.REQUEST.list_method_id]</list_method> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - </messages> - </field> - </fields> - </group> - </groups> -</form> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_trade/purchase_packing_list_view.form b/product/Coramy/skins/coramy_trade/purchase_packing_list_view.form deleted file mode 100755 index 86a8d29bef..0000000000 --- a/product/Coramy/skins/coramy_trade/purchase_packing_list_view.form +++ /dev/null @@ -1,738 +0,0 @@ -<?xml version="1.0"?> - -<form> - <title>Livraison achat</title> - <row_length>4</row_length> - <name>purchase_packing_list_view</name> - <pt>form_view</pt> - <action>base_edit</action> - <method>POST</method> - <enctype>multipart/form-data</enctype> - <encoding>UTF-8</encoding> - <stored_encoding>ISO-8859-1</stored_encoding> - <unicode_mode>false</unicode_mode> - <groups> - <group> - <title>left</title> - <fields> - - <field><id>my_id</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">10</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <max_length></max_length> - <required type="int">1</required> - <title>N° livraison</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - <field><id>my_destination_section</id> <type>ListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <extra_item></extra_item> - <first_item type="int">0</first_item> - <hidden type="int">0</hidden> - <items type="list">[]</items> - <required type="int">0</required> - <size type="int">1</size> - <title>Société</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <items>python:here.portal_categories.group.Coramy.getCategoryChildIdItemList(base=1,display_none_category=1)</items> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - <field><id>my_destination_administration_person_title</id> <type>RelationStringField</type> - <values> - <alternate_name></alternate_name> - <base_category>destination_administration</base_category> - <catalog_index>Title</catalog_index> - <css_class></css_class> - <default></default> - <default_module>person</default_module> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <jump_method>base_jump_relation</jump_method> - <max_length></max_length> - <portal_type type="list">[('Person', 'Person')]</portal_type> - <required type="int">0</required> - <title>Gestionaire</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <update_method>base_update_relation</update_method> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <default>python:here.getCausalityValue(portal_type="Purchase Order").getDestinationAdministrationPersonTitle()</default> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - <field><id>my_incoterm</id> <type>ListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <extra_item></extra_item> - <first_item type="int">0</first_item> - <hidden type="int">0</hidden> - <items type="list">[]</items> - <required type="int">0</required> - <size type="int">1</size> - <title>Incoterm</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <items>python:here.portal_categories.incoterm.getCategoryChildItemList(display_id = 'getTitle', display_none_category=1)</items> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - <field><id>my_delivery_mode</id> <type>ListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <extra_item></extra_item> - <first_item type="int">0</first_item> - <hidden type="int">0</hidden> - <items type="list">[]</items> - <required type="int">0</required> - <size type="int">1</size> - <title>Mode de livraison</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <items>here/portal_categories/delivery_mode/getFormItemList</items> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - <field><id>invoice_state</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <max_length></max_length> - <required type="int">0</required> - <title>Facturation</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <default>python:here.portal_workflow.getInfoFor(here, 'invoice_state')</default> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - <field><id>causality_state</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <max_length></max_length> - <required type="int">0</required> - <title>Cohérence</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <default>python:here.portal_workflow.getInfoFor(here, 'causality_state')</default> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>right</title> - <fields> - - <field><id>my_causality_id</id> <type>RelationStringField</type> - <values> - <alternate_name></alternate_name> - <base_category>causality</base_category> - <catalog_index>id</catalog_index> - <css_class></css_class> - <default></default> - <default_module>commande_vente</default_module> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">10</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <jump_method>base_jump_relation</jump_method> - <max_length></max_length> - <portal_type type="list">[('Sales Order', 'Sales Order')]</portal_type> - <required type="int">0</required> - <title>N° commande</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <update_method>base_update_relation</update_method> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - <field><id>my_source_title</id> <type>RelationStringField</type> - <values> - <alternate_name></alternate_name> - <base_category>source</base_category> - <catalog_index>Title</catalog_index> - <css_class></css_class> - <default></default> - <default_module>organisation</default_module> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <jump_method>base_jump_relation</jump_method> - <max_length></max_length> - <portal_type type="list">[('Organisation', 'Organisation')]</portal_type> - <required type="int">0</required> - <title>Expédié par</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <update_method>base_update_relation</update_method> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - <field><id>my_destination_title</id> <type>RelationStringField</type> - <values> - <alternate_name></alternate_name> - <base_category>destination</base_category> - <catalog_index>Title</catalog_index> - <css_class></css_class> - <default></default> - <default_module>organisation</default_module> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <jump_method>base_jump_relation</jump_method> - <max_length></max_length> - <portal_type type="list">[('Organisation', 'Organisation'), ('Category', 'Category')]</portal_type> - <required type="int">0</required> - <title>Livré à </title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <update_method>base_update_relation</update_method> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - <field><id>my_start_date</id> <type>DateTimeField</type> - <values> - <allow_empty_time type="int">0</allow_empty_time> - <alternate_name></alternate_name> - <ampm_time_style type="int">0</ampm_time_style> - <css_class></css_class> - <date_only type="int">1</date_only> - <date_separator>/</date_separator> - <default_now type="int">0</default_now> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <hidden type="int">1</hidden> - <input_order>dmy</input_order> - <input_style>text</input_style> - <required type="int">0</required> - <time_separator>:</time_separator> - <title>Date d'expédition prévue</title> - </values> - <tales> - <title>python:'Expédition prévue le : %s' % here.getStartDate()</title> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="not_datetime">You did not enter a valid date and time.</message> - <message name="datetime_out_of_range">The date and time you entered were out of range.</message> - </messages> - </field> - <field><id>my_target_start_date</id> <type>DateTimeField</type> - <values> - <allow_empty_time type="int">0</allow_empty_time> - <alternate_name></alternate_name> - <ampm_time_style type="int">0</ampm_time_style> - <css_class></css_class> - <date_only type="int">1</date_only> - <date_separator>/</date_separator> - <default_now type="int">0</default_now> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <hidden type="int">0</hidden> - <input_order>dmy</input_order> - <input_style>text</input_style> - <required type="int">0</required> - <time_separator>:</time_separator> - <title>Date d'expédition</title> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="not_datetime">You did not enter a valid date and time.</message> - <message name="datetime_out_of_range">The date and time you entered were out of range.</message> - </messages> - </field> - <field><id>my_stop_date</id> <type>DateTimeField</type> - <values> - <allow_empty_time type="int">0</allow_empty_time> - <alternate_name></alternate_name> - <ampm_time_style type="int">0</ampm_time_style> - <css_class></css_class> - <date_only type="int">1</date_only> - <date_separator>/</date_separator> - <default_now type="int">0</default_now> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <hidden type="int">1</hidden> - <input_order>dmy</input_order> - <input_style>text</input_style> - <required type="int">0</required> - <time_separator>:</time_separator> - <title>Date de livraison prévue</title> - </values> - <tales> - <title>python:'Livraison prévue le : %s' % here.getStopDate()</title> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="not_datetime">You did not enter a valid date and time.</message> - <message name="datetime_out_of_range">The date and time you entered were out of range.</message> - </messages> - </field> - <field><id>my_target_stop_date</id> <type>DateTimeField</type> - <values> - <allow_empty_time type="int">0</allow_empty_time> - <alternate_name></alternate_name> - <ampm_time_style type="int">0</ampm_time_style> - <css_class></css_class> - <date_only type="int">1</date_only> - <date_separator>/</date_separator> - <default_now type="int">0</default_now> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <hidden type="int">0</hidden> - <input_order>dmy</input_order> - <input_style>text</input_style> - <required type="int">0</required> - <time_separator>:</time_separator> - <title>Date de livraison</title> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="not_datetime">You did not enter a valid date and time.</message> - <message name="datetime_out_of_range">The date and time you entered were out of range.</message> - </messages> - </field> - <field><id>delivery_state</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <max_length></max_length> - <required type="int">0</required> - <title>Etat</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <default>python:here.portal_workflow.getInfoFor(here, 'simulation_state')</default> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>center</title> - <fields> - - <field><id>my_comment</id> <type>TextAreaField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <height type="int">3</height> - <hidden type="int">0</hidden> - <max_length></max_length> - <max_linelength></max_linelength> - <max_lines></max_lines> - <required type="int">0</required> - <title>Commentaires</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - <width type="int">80</width> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_many_lines">You entered too many lines.</message> - <message name="line_too_long">A line was too long.</message> - <message name="too_long">You entered too many characters.</message> - </messages> - </field> - <field><id>my_total_quantity</id> <type>FloatField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">10</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">1</hidden> - <required type="int">0</required> - <title>Objectif quantité</title> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <title>python:'Objectif quantité : %.2f' % here.getTotalQuantity()</title> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="not_float">You did not enter a floating point number.</message> - </messages> - </field> - <field><id>my_target_total_quantity</id> <type>FloatField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">10</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">1</hidden> - <required type="int">0</required> - <title>Quantité</title> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <title>python:'Quantité : %.2f' % here.getTargetTotalQuantity()</title> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="not_float">You did not enter a floating point number.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>bottom</title> - <fields> - - <field><id>listbox</id> <type>ListBox</type> - <values> - <all_columns type="list">[('resource_title', 'Produit'), ('variation_text', 'Variantes'), ('quantity', 'Objectif quantit\xe9'), ('target_quantity', 'Quantit\xe9'), ('item_id_list', 'Lots associ\xe9s'), ('price', 'Prix'), ('quantity_unit', 'Unit\xe9')]</all_columns> - <all_editable_columns type="list">[]</all_editable_columns> - <alternate_name></alternate_name> - <columns type="list">[('resource_title', 'Produit'), ('variation_text', 'Variantes'), ('getPurchaseDeliveryCellSourceReference', 'R\xe9f. fournisseur'), ('quantity', 'Objectif quantit\xe9'), ('target_quantity', 'Quantit\xe9'), ('item_id_list', 'Lots associ\xe9s'), ('price', 'Prix'), ('quantity_unit', 'Unit\xe9')]</columns> - <css_class></css_class> - <default></default> - <default_params type="list">[]</default_params> - <description></description> - <domain_root_list type="list">[]</domain_root_list> - <domain_tree type="int">0</domain_tree> - <editable type="int">1</editable> - <editable_columns type="list">[('target_quantity', 'target_quantity'), ('item_id_list', 'item_id_list')]</editable_columns> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <global_attributes type="list">[]</global_attributes> - <hidden type="int">0</hidden> - <lines type="int">100</lines> - <list_action>folder_contents</list_action> - <list_method type="method">Delivery_zGetCellList</list_method> - <meta_types type="list">[]</meta_types> - <portal_types type="list">[]</portal_types> - <report_root_list type="list">[]</report_root_list> - <report_tree type="int">0</report_tree> - <search type="int">0</search> - <search_columns type="list">[]</search_columns> - <select type="int">0</select> - <selection_name>delivery_cells_selection</selection_name> - <sort type="list">[('variation_text', 'variation_text')]</sort> - <sort_columns></sort_columns> - <stat_method></stat_method> - <title>Lignes de livraison</title> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>hidden</title> - <fields> - - <field><id>listbox_item_id_list</id> <type>LinesField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default type="list">[]</default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <height type="int">2</height> - <hidden type="int">0</hidden> - <max_length></max_length> - <max_linelength></max_linelength> - <max_lines></max_lines> - <required type="int">0</required> - <title>Pièces en stock</title> - <unicode type="int">0</unicode> - <view_separator><br /> -</view_separator> - <whitespace_preserve type="int">0</whitespace_preserve> - <width type="int">8</width> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_many_lines">You entered too many lines.</message> - <message name="line_too_long">A line was too long.</message> - <message name="too_long">You entered too many characters.</message> - </messages> - </field> - <field><id>listbox_price</id> <type>FloatField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">10</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <required type="int">0</required> - <title>Price</title> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="not_float">You did not enter a floating point number.</message> - </messages> - </field> - <field><id>listbox_target_quantity</id> <type>FloatField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">10</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <required type="int">0</required> - <title>Inventory</title> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="not_float">You did not enter a floating point number.</message> - </messages> - </field> - <field><id>listbox_quantity_unit</id> <type>ListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <extra_item></extra_item> - <first_item type="int">0</first_item> - <hidden type="int">0</hidden> - <items type="list">[]</items> - <required type="int">0</required> - <size type="int">1</size> - <title>Unité</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <items>here/portal_categories/quantity_unit/getFormItemList</items> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - </fields> - </group> - </groups> -</form> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_trade/remise_view.form b/product/Coramy/skins/coramy_trade/remise_view.form deleted file mode 100755 index c02efd8a0c..0000000000 --- a/product/Coramy/skins/coramy_trade/remise_view.form +++ /dev/null @@ -1,232 +0,0 @@ -<?xml version="1.0"?> - -<form> - <title>Remise</title> - <row_length>4</row_length> - <name>remise_view</name> - <pt>form_view</pt> - <action>base_edit</action> - <method>POST</method> - <enctype></enctype> - <encoding>UTF-8</encoding> - <stored_encoding>ISO-8859-1</stored_encoding> - <unicode_mode>false</unicode_mode> - <groups> - <group> - <title>left</title> - <fields> - - <field><id>my_id</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <max_length></max_length> - <required type="int">1</required> - <title>Remise</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - <field><id>my_description</id> <type>TextAreaField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <height type="int">3</height> - <hidden type="int">0</hidden> - <max_length></max_length> - <max_linelength></max_linelength> - <max_lines></max_lines> - <required type="int">0</required> - <title>Description</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - <width type="int">40</width> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_many_lines">You entered too many lines.</message> - <message name="line_too_long">A line was too long.</message> - <message name="too_long">You entered too many characters.</message> - </messages> - </field> - <field><id>my_int_index</id> <type>IntegerField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">10</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <end></end> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <required type="int">1</required> - <start></start> - <title>Numéro d'ordre</title> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="not_integer">You did not enter an integer.</message> - <message name="integer_out_of_range">The integer you entered was out of range.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>right</title> - <fields> - - <field><id>my_discount_type</id> <type>ListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <extra_item></extra_item> - <first_item type="int">0</first_item> - <hidden type="int">0</hidden> - <items type="list">[]</items> - <required type="int">1</required> - <size type="int">1</size> - <title>Type de remise</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <items>here/portal_categories/discount_type/getFormItemList</items> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - <field><id>my_immediate_discount</id> <type>CheckBoxField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default type="int">0</default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <title>Remise déduite sur facture</title> - </values> - <tales> - <default>here/getImmediateDiscount</default> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - </messages> - </field> - <field><id>my_discount_ratio</id> <type>FloatField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">10</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <required type="int">0</required> - <title>Taux de remise</title> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="not_float">You did not enter a floating point number.</message> - </messages> - </field> - <field><id>my_discount</id> <type>FloatField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">10</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <required type="int">0</required> - <title>Montant</title> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="not_float">You did not enter a floating point number.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>center</title> - <fields> - - </fields> - </group> - <group> - <title>bottom</title> - <fields> - - </fields> - </group> - <group> - <title>hidden</title> - <fields> - - </fields> - </group> - </groups> -</form> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_trade/sale_invoice_transaction_view.form b/product/Coramy/skins/coramy_trade/sale_invoice_transaction_view.form deleted file mode 100755 index 79be0d18a4..0000000000 --- a/product/Coramy/skins/coramy_trade/sale_invoice_transaction_view.form +++ /dev/null @@ -1,630 +0,0 @@ -<?xml version="1.0" encoding="iso-8859-1"?> - -<form> - <title>Facture vente</title> - <name>sales_order_view</name> - <action>base_edit</action> - <enctype>multipart/form-data</enctype> - <method>POST</method> - <pt>form_view</pt> - - <groups> - <group> - <title>left</title> - <fields> - - <field><id>my_id</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">10</display_width> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <max_length></max_length> - <required type="int">1</required> - <title>Identifiant</title> - <truncate type="int">0</truncate> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - <field><id>my_source_section</id> <type>ListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <external_validator></external_validator> - <extra></extra> - <first_item type="int">0</first_item> - <hidden type="int">0</hidden> - <items type="list">[]</items> - <required type="int">0</required> - <size type="int">1</size> - <title>Société</title> - </values> - <tales> - <items>python:here.portal_categories.group.Coramy.getCategoryChildIdItemList(base=1,display_none_category=1)</items> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - <field><id>my_reference</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">10</display_width> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <max_length></max_length> - <required type="int">0</required> - <title>Numéro de facture</title> - <truncate type="int">0</truncate> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - <field><id>my_description</id> <type>TextAreaField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <external_validator></external_validator> - <extra></extra> - <height type="int">3</height> - <hidden type="int">0</hidden> - <max_length></max_length> - <max_linelength></max_linelength> - <max_lines></max_lines> - <required type="int">0</required> - <title>Description</title> - <width type="int">40</width> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_many_lines">You entered too many lines.</message> - <message name="line_too_long">A line was too long.</message> - <message name="too_long">You entered too many characters.</message> - </messages> - </field> - <field><id>my_source_administration_title</id> <type>RelationStringField</type> - <values> - <alternate_name></alternate_name> - <base_category>source_administration</base_category> - <catalog_index>Title</catalog_index> - <css_class></css_class> - <default></default> - <default_module>person</default_module> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <jump_method>base_jump_relation</jump_method> - <max_length></max_length> - <portal_type type="list">[('Person', 'Person')]</portal_type> - <required type="int">0</required> - <title>Gestionaire</title> - <truncate type="int">0</truncate> - <update_method>base_update_relation</update_method> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - <field><id>my_start_date</id> <type>DateTimeField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <date_only type="int">1</date_only> - <date_separator>/</date_separator> - <default_now type="int">0</default_now> - <description></description> - <external_validator></external_validator> - <hidden type="int">0</hidden> - <input_order>dmy</input_order> - <input_style>text</input_style> - <required type="int">0</required> - <time_separator>:</time_separator> - <title>Date de facture</title> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="not_datetime">You did not enter a valid date and time.</message> - <message name="datetime_out_of_range">The date and time you entered were out of range.</message> - </messages> - </field> - <field><id>my_price_currency</id> <type>ListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <external_validator></external_validator> - <extra></extra> - <first_item type="int">0</first_item> - <hidden type="int">0</hidden> - <items type="list">[]</items> - <required type="int">0</required> - <size type="int">1</size> - <title>Devise</title> - </values> - <tales> - <items>python:[('','')]+map(lambda x:(x.id,'devise/%s' %x.id),here.devise.objectValues())</items> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - <field><id>simulation_state</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <max_length></max_length> - <required type="int">0</required> - <title>Etat</title> - <truncate type="int">0</truncate> - </values> - <tales> - <default>python:here.portal_workflow.getInfoFor(here, 'simulation_state')</default> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>right</title> - <fields> - - <field><id>my_causality_id</id> <type>RelationStringField</type> - <values> - <alternate_name></alternate_name> - <base_category>causality</base_category> - <catalog_index>id</catalog_index> - <css_class></css_class> - <default></default> - <default_module>livraison_vente</default_module> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">10</display_width> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <jump_method>base_jump_relation</jump_method> - <max_length></max_length> - <portal_type type="list">[('Sales Packing List', 'Sales Packing List')]</portal_type> - <required type="int">0</required> - <title>N° livraison</title> - <truncate type="int">0</truncate> - <update_method>base_update_relation</update_method> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - <field><id>my_destination_title</id> <type>RelationStringField</type> - <values> - <alternate_name></alternate_name> - <base_category>destination</base_category> - <catalog_index>Title</catalog_index> - <css_class></css_class> - <default></default> - <default_module>organisation</default_module> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <jump_method>base_jump_relation</jump_method> - <max_length></max_length> - <portal_type type="list">[('Organisation', 'Organisation')]</portal_type> - <required type="int">0</required> - <title>Livrer à</title> - <truncate type="int">0</truncate> - <update_method>base_update_relation</update_method> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - <field><id>my_destination_section_title</id> <type>RelationStringField</type> - <values> - <alternate_name></alternate_name> - <base_category>destination</base_category> - <catalog_index>Title</catalog_index> - <css_class></css_class> - <default></default> - <default_module>organisation</default_module> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <jump_method>base_jump_relation</jump_method> - <max_length></max_length> - <portal_type type="list">[('Organisation', 'Organisation')]</portal_type> - <required type="int">0</required> - <title>Pour le compte de</title> - <truncate type="int">0</truncate> - <update_method>base_update_relation</update_method> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - <field><id>my_value_added_tax_recoverable</id> <type>CheckBoxField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default type="int">0</default> - <description></description> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <title>Soumis à la T.V.A.</title> - </values> - <tales> - <default>here/getValueAddedTaxRecoverable</default> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - </messages> - </field> - <field><id>my_value_added_tax_ratio</id> <type>FloatField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">10</display_width> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <required type="int">0</required> - <title>Taux de TVA</title> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="not_float">You did not enter a floating point number.</message> - </messages> - </field> - <field><id>my_incoterm</id> <type>ListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <external_validator></external_validator> - <extra></extra> - <first_item type="int">0</first_item> - <hidden type="int">0</hidden> - <items type="list">[]</items> - <required type="int">0</required> - <size type="int">1</size> - <title>Incoterm</title> - </values> - <tales> - <items>python:here.portal_categories.incoterm.getCategoryChildItemList(display_id = 'getTitle', display_none_category=1)</items> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - <field><id>my_delivery_mode</id> <type>ListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <external_validator></external_validator> - <extra></extra> - <first_item type="int">0</first_item> - <hidden type="int">0</hidden> - <items type="list">[]</items> - <required type="int">0</required> - <size type="int">1</size> - <title>Mode de livraison</title> - </values> - <tales> - <items>here/portal_categories/delivery_mode/getFormItemList</items> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>center</title> - <fields> - - <field><id>my_comment</id> <type>TextAreaField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <external_validator></external_validator> - <extra></extra> - <height type="int">3</height> - <hidden type="int">0</hidden> - <max_length></max_length> - <max_linelength></max_linelength> - <max_lines></max_lines> - <required type="int">0</required> - <title>Commentaires</title> - <width type="int">80</width> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_many_lines">You entered too many lines.</message> - <message name="line_too_long">A line was too long.</message> - <message name="too_long">You entered too many characters.</message> - </messages> - </field> - <field><id>total_ht</id> <type>FloatField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">10</display_width> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">1</hidden> - <required type="int">0</required> - <title>Total H.T.</title> - </values> - <tales> - <title>python:'Total H.T. : %.2f' % here.getTotalPrice()</title> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="not_float">You did not enter a floating point number.</message> - </messages> - </field> - <field><id>montant_taxable</id> <type>FloatField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">10</display_width> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">1</hidden> - <required type="int">0</required> - <title>Montant taxable</title> - </values> - <tales> - <title>python:'Montant taxable : %.2f' % here.Invoice_zGetTotalNetPrice()</title> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="not_float">You did not enter a floating point number.</message> - </messages> - </field> - <field><id>vat</id> <type>FloatField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">10</display_width> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">1</hidden> - <required type="int">0</required> - <title>TVA</title> - </values> - <tales> - <title>python:'TVA : %.2f' % here.Invoice_zGetTotalVat()</title> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="not_float">You did not enter a floating point number.</message> - </messages> - </field> - <field><id>total_price</id> <type>FloatField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">10</display_width> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">1</hidden> - <required type="int">0</required> - <title>Net à payer</title> - </values> - <tales> - <title>python:'Net à payer : %.2f' % (here.Invoice_zGetTotalVat() + here.Invoice_zGetTotalNetPrice())</title> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="not_float">You did not enter a floating point number.</message> - </messages> - </field> - <field><id>due_date</id> <type>DateTimeField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <date_only type="int">1</date_only> - <date_separator>/</date_separator> - <default_now type="int">0</default_now> - <description></description> - <external_validator></external_validator> - <hidden type="int">1</hidden> - <input_order>dmy</input_order> - <input_style>text</input_style> - <required type="int">0</required> - <time_separator>:</time_separator> - <title>Date d'échéance</title> - </values> - <tales> - <title>python:'Date d échéance : ' + here.Invoice_zGetDueDate().strftime('%d/%m/%Y')</title> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="not_datetime">You did not enter a valid date and time.</message> - <message name="datetime_out_of_range">The date and time you entered were out of range.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>bottom</title> - <fields> - - <field><id>listbox</id> <type>ListBox</type> - <values> - <all_columns type="list">[]</all_columns> - <all_editable_columns type="list">[]</all_editable_columns> - <alternate_name></alternate_name> - <columns type="list">[('id', 'Ligne'), ('getResourceRelativeUrl', 'Produit'), ('description', 'Description'), ('total_quantity', 'Quantit\xe9 totale'), ('total_price', 'Montant total')]</columns> - <css_class></css_class> - <default></default> - <default_params type="list">[]</default_params> - <description></description> - <domain_root_list type="list">[]</domain_root_list> - <domain_tree type="int">0</domain_tree> - <editable_columns type="list">[('description', 'Description')]</editable_columns> - <external_validator></external_validator> - <global_attributes type="list">[]</global_attributes> - <hidden type="int">0</hidden> - <lines type="int">10</lines> - <list_action>folder_contents</list_action> - <list_method type="method">searchFolder</list_method> - <meta_types type="list">[]</meta_types> - <portal_types type="list">[('Invoice Line', 'Invoice Line')]</portal_types> - <report_root_list type="list">[]</report_root_list> - <report_tree type="int">0</report_tree> - <search type="int">0</search> - <search_columns type="list">[]</search_columns> - <select type="int">0</select> - <selection_name>invoice_line_selection</selection_name> - <sort type="list">[('id', 'id')]</sort> - <stat_method></stat_method> - <title>Lignes de facture</title> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>hidden</title> - <fields> - - <field><id>listbox_description</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">40</display_width> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <max_length></max_length> - <required type="int">0</required> - <title>listbox_description</title> - <truncate type="int">0</truncate> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - </fields> - </group> - </groups> -</form> diff --git a/product/Coramy/skins/coramy_trade/sales_invoice_list.form b/product/Coramy/skins/coramy_trade/sales_invoice_list.form deleted file mode 100755 index 477ac06a73..0000000000 --- a/product/Coramy/skins/coramy_trade/sales_invoice_list.form +++ /dev/null @@ -1,62 +0,0 @@ -<?xml version="1.0"?> - -<form> - <title>Liste des factures</title> - <row_length>4</row_length> - <name>sales_invoice_list</name> - <pt>form_list</pt> - <action></action> - <method>POST</method> - <enctype>multipart/form-data</enctype> - <encoding>UTF-8</encoding> - <stored_encoding>ISO-8859-1</stored_encoding> - <unicode_mode>false</unicode_mode> - <groups> - <group> - <title>Default</title> - <fields> - - <field><id>listbox</id> <type>ListBox</type> - <values> - <all_columns type="list">[]</all_columns> - <all_editable_columns type="list">[]</all_editable_columns> - <alternate_name></alternate_name> - <columns type="list">[('id', 'Identifiant'), ('reference', 'N\xb0 facture'), ('default_source_section_title', 'Soci\xe9t\xe9'), ('description', 'Description'), ('default_destination_administration_organisation_title', 'Facturer \xe0'), ('default_causality_id', 'Livraison'), ('default_destination_title', 'Livrer \xe0'), ('simulation_state', 'Etat')]</columns> - <css_class></css_class> - <default></default> - <default_params type="list">[('reference', "''")]</default_params> - <description></description> - <domain_root_list type="list">[]</domain_root_list> - <domain_tree type="int">0</domain_tree> - <editable type="int">1</editable> - <editable_columns type="list">[]</editable_columns> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <global_attributes type="list">[]</global_attributes> - <hidden type="int">0</hidden> - <lines type="int">30</lines> - <list_action>list</list_action> - <list_method type="method">portal_catalog</list_method> - <meta_types type="list">[]</meta_types> - <portal_types type="list">[('Sale Invoice Transaction', 'Sale Invoice Transaction')]</portal_types> - <report_root_list type="list">[]</report_root_list> - <report_tree type="int">0</report_tree> - <search type="int">1</search> - <search_columns type="list">[]</search_columns> - <select type="int">1</select> - <selection_name>order_selection</selection_name> - <sort type="list">[('reference', 'reference')]</sort> - <sort_columns type="list">[]</sort_columns> - <stat_method></stat_method> - <title>Factures</title> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - </messages> - </field> - </fields> - </group> - </groups> -</form> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_trade/sales_invoice_list_view.form b/product/Coramy/skins/coramy_trade/sales_invoice_list_view.form deleted file mode 100755 index 577016e92e..0000000000 --- a/product/Coramy/skins/coramy_trade/sales_invoice_list_view.form +++ /dev/null @@ -1,524 +0,0 @@ -<?xml version="1.0"?> - -<form> - <title>Commande échantillons</title> - <row_length>4</row_length> - <name>order_view</name> - <pt>form_view</pt> - <action>base_edit</action> - <method>POST</method> - <enctype>multipart/form-data</enctype> - <encoding>UTF-8</encoding> - <stored_encoding>ISO-8859-1</stored_encoding> - <unicode_mode>false</unicode_mode> - <groups> - <group> - <title>left</title> - <fields> - - <field><id>my_id</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">10</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <max_length></max_length> - <required type="int">1</required> - <title>Id</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - <field><id>my_reference</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <max_length></max_length> - <required type="int">0</required> - <title>Numéro de facture</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - <field><id>my_destination_title</id> <type>RelationStringField</type> - <values> - <alternate_name></alternate_name> - <base_category>destination</base_category> - <catalog_index>Title</catalog_index> - <css_class></css_class> - <default></default> - <default_module>organisation</default_module> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <jump_method>base_jump_relation</jump_method> - <max_length></max_length> - <portal_type type="list">[('Organisation', 'Organisation')]</portal_type> - <required type="int">0</required> - <title>Client</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <update_method>base_update_relation</update_method> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - <field><id>my_buyer_title</id> <type>RelationStringField</type> - <values> - <alternate_name></alternate_name> - <base_category>contact</base_category> - <catalog_index>Title</catalog_index> - <css_class></css_class> - <default></default> - <default_module>person</default_module> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <jump_method>base_jump_relation</jump_method> - <max_length></max_length> - <portal_type type="list">[('Person', 'Person')]</portal_type> - <required type="int">0</required> - <title>Acheteur</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <update_method>base_update_relation</update_method> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - <field><id>my_description</id> <type>TextAreaField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <height type="int">1</height> - <hidden type="int">0</hidden> - <max_length></max_length> - <max_linelength></max_linelength> - <max_lines></max_lines> - <required type="int">0</required> - <title>Rayon</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - <width type="int">30</width> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_many_lines">You entered too many lines.</message> - <message name="line_too_long">A line was too long.</message> - <message name="too_long">You entered too many characters.</message> - </messages> - </field> - <field><id>my_value_added_tax_ratio</id> <type>FloatField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <required type="int">1</required> - <title>Taux de TVA</title> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="not_float">You did not enter a floating point number.</message> - </messages> - </field> - <field><id>my_value_added_tax_recoverable</id> <type>ListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <extra_item></extra_item> - <first_item type="int">0</first_item> - <hidden type="int">0</hidden> - <items type="list">[('Non', '0'), ('Oui', '1')]</items> - <required type="int">0</required> - <size type="int">1</size> - <title>Soumis à la TVA</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <default>python:str(here.getValueAddedTaxRecoverable())</default> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>right</title> - <fields> - - <field><id>my_date_rdv</id> <type>DateTimeField</type> - <values> - <allow_empty_time type="int">0</allow_empty_time> - <alternate_name></alternate_name> - <ampm_time_style type="int">0</ampm_time_style> - <css_class></css_class> - <date_only type="int">1</date_only> - <date_separator>/</date_separator> - <default_now type="int">0</default_now> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <hidden type="int">0</hidden> - <input_order>dmy</input_order> - <input_style>text</input_style> - <required type="int">0</required> - <time_separator>:</time_separator> - <title>Date rendez-vous</title> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="not_datetime">You did not enter a valid date and time.</message> - <message name="datetime_out_of_range">The date and time you entered were out of range.</message> - </messages> - </field> - <field><id>my_collection</id> <type>ListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <extra_item></extra_item> - <first_item type="int">0</first_item> - <hidden type="int">0</hidden> - <items type="list">[]</items> - <required type="int">0</required> - <size type="int">1</size> - <title>Collection</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <items>here/portal_categories/collection/getFormItemList</items> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - <field><id>my_start_date</id> <type>DateTimeField</type> - <values> - <allow_empty_time type="int">0</allow_empty_time> - <alternate_name></alternate_name> - <ampm_time_style type="int">0</ampm_time_style> - <css_class></css_class> - <date_only type="int">1</date_only> - <date_separator>/</date_separator> - <default_now type="int">0</default_now> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <hidden type="int">0</hidden> - <input_order>dmy</input_order> - <input_style>text</input_style> - <required type="int">0</required> - <time_separator>:</time_separator> - <title>Livrer à partir du</title> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="not_datetime">You did not enter a valid date and time.</message> - <message name="datetime_out_of_range">The date and time you entered were out of range.</message> - </messages> - </field> - <field><id>my_stop_date</id> <type>DateTimeField</type> - <values> - <allow_empty_time type="int">0</allow_empty_time> - <alternate_name></alternate_name> - <ampm_time_style type="int">0</ampm_time_style> - <css_class></css_class> - <date_only type="int">1</date_only> - <date_separator>/</date_separator> - <default_now type="int">0</default_now> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <hidden type="int">0</hidden> - <input_order>dmy</input_order> - <input_style>text</input_style> - <required type="int">0</required> - <time_separator>:</time_separator> - <title>Livrer avant le</title> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="not_datetime">You did not enter a valid date and time.</message> - <message name="datetime_out_of_range">The date and time you entered were out of range.</message> - </messages> - </field> - <field><id>order_state</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <max_length></max_length> - <required type="int">0</required> - <title>Etat</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>center</title> - <fields> - - <field><id>my_commentaires</id> <type>TextAreaField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <height type="int">3</height> - <hidden type="int">0</hidden> - <max_length></max_length> - <max_linelength></max_linelength> - <max_lines></max_lines> - <required type="int">0</required> - <title>Commentaires</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - <width type="int">80</width> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_many_lines">You entered too many lines.</message> - <message name="line_too_long">A line was too long.</message> - <message name="too_long">You entered too many characters.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>bottom</title> - <fields> - - <field><id>listbox</id> <type>ListBox</type> - <values> - <all_columns type="list">[('id', 'Ligne'), ('Description', 'Description'), ('getResourceRelativeUrl', 'Composant'), ('quantity', 'Quantit\xe9'), ('quantity_unit', 'Unit\xe9')]</all_columns> - <all_editable_columns type="list">[('quantity', 'Quantit\xe9'), ('quantity_unit', 'Unit\xe9')]</all_editable_columns> - <alternate_name></alternate_name> - <columns type="list">[('id', 'Ligne'), ('Description', 'Description'), ('getResourceRelativeUrl', 'Composant'), ('quantity', 'Quantit\xe9'), ('quantity_unit', 'Unit\xe9')]</columns> - <css_class></css_class> - <default></default> - <default_params type="list">[]</default_params> - <description></description> - <domain_root_list type="list">[]</domain_root_list> - <domain_tree type="int">0</domain_tree> - <editable type="int">1</editable> - <editable_columns type="list">[('quantity', 'Quantit\xe9'), ('quantity_unit', 'Unit\xe9')]</editable_columns> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <global_attributes type="list">[]</global_attributes> - <hidden type="int">0</hidden> - <lines type="int">10</lines> - <list_action>folder_contents</list_action> - <list_method type="method">searchFolder</list_method> - <meta_types type="list">[]</meta_types> - <portal_types type="list">[('Invoice Line', 'Invoice Line')]</portal_types> - <report_root_list type="list">[]</report_root_list> - <report_tree type="int">0</report_tree> - <search type="int">0</search> - <search_columns type="list">[]</search_columns> - <select type="int">0</select> - <selection_name>order_line_selection</selection_name> - <sort type="list">[('id', 'id')]</sort> - <sort_columns></sort_columns> - <stat_method></stat_method> - <title>Lignes de commande</title> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>hidden</title> - <fields> - - <field><id>listbox_quantity</id> <type>FloatField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <required type="int">0</required> - <title>listbox_quantity</title> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="not_float">You did not enter a floating point number.</message> - </messages> - </field> - <field><id>listbox_quantity_unit</id> <type>ListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <extra_item></extra_item> - <first_item type="int">0</first_item> - <hidden type="int">0</hidden> - <items type="list">[]</items> - <required type="int">0</required> - <size type="int">1</size> - <title>Unité</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <items>here/portal_categories/quantity_unit/getFormItemList</items> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - </fields> - </group> - </groups> -</form> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_trade/sales_invoice_print.pt b/product/Coramy/skins/coramy_trade/sales_invoice_print.pt deleted file mode 100755 index 53dafc7fa9..0000000000 --- a/product/Coramy/skins/coramy_trade/sales_invoice_print.pt +++ /dev/null @@ -1,112 +0,0 @@ -<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> - -<html> - - <head> - <meta http-equiv="content-type" content="text/html;charset=ISO-8859-1"> - <title tal:content="here/getTitle">Coramy</title> - - </head> - - <body bgcolor="#ffffff" - tal:define="client python:here.getDefaultValue('destination',portal_type=['Organisation']); - acheteur python:here.getDefaultValue('contact',portal_type=['Person']); - lignes_cde python:here.contentValues(filter={'portal_type':'Sample Order Line'}) - "> - -<table width="675" border="0" cellpadding="0" cellspacing="0"> - <tr> <!-- Ligne Titre --> - <td><img src="spacer1.png" width="1" height="1"></td> - <td> <div align="center"> - <p><font size="+3" color="red"><span tal:replace="python:'Commande échantillons : %s' %here.getId()">Modèle - </span></font></p> - </div></td> - <td><img src="spacer1.png" width="1" height="1"></td> - </tr> - <tr> <!-- Border-top info --> - <td class="line"><img src="spacer.png" width="1" height="1"></td> - <td class="line"><img src="spacer.png" width="673" height="1"></td> - <td class="line"><img src="spacer.png" width="1" height="1"></td> - </tr> - <tr> <!-- Info --> - <td class="line"><img src="spacer.png" width="1" height="100%"></td> - <td><table class="border" width="100%"> - <tr> - <td><i><b>Client</b></i></td> - <td tal:content="client/getTitle">77H</td> - <td><i><b>Livrer à partir du</b></i></td> - <td tal:content="here/getStartDate"></td> - <td></td> - </tr> - <tr> - <td><i><b>Acheteur</b></i></td> - <td tal:content="acheteur/getTitle">77H</td> - <td><i><b>Livrer avant le</b></i></td> - <td tal:content="here/getStopDate"></td> - <td></td> - </tr> - <tr> - <td valign="top"><i><b>Commentaires</b></i> </td> - <td colspan="3" tal:content="here/getCommentaires">comments</td> - <td></td> - </tr> - </table></td> - <td class="line"><img src="spacer.png" width="1" height="100%"></td> - </tr> - <tr> <!-- Border Bottom info --> - <td class="line"><img src="spacer.png" width="1" height="1"></td> - <td><img src="spacer.png" width="673" height="1"></td> - <td class="line"><img src="spacer.png" width="1" height="1"></td> - </tr> - <tr> <!-- spacer --> - <td><img src="spacer1.png" width="1" height="1"></td> - <td><img src="spacer1.png" width="1" height="1"></td> - <td><img src="spacer1.png" width="1" height="1"></td> - </tr> - <tr> <!-- Border Top Ligne commande --> - <td><img src="spacer.png" width="1" height="1"></td> - <td><img src="spacer.png" width="673" height="1"></td> - <td><img src="spacer.png" width="1" height="1"></td> - </tr> - <tr> <!-- Ligne commande --> - <td><img src="spacer.png" width="1" height="100%"></td> - <td><table class="border" align="center" width="100%"> - <tr> - <td align=center><i><b>N°</b></i></td> - <td align=center><i><b>Modèle</b></i></td> - <td align=center><i><b>Coloris</b></i></td> - <td align=center><i><b>Taille</b></i></td> - <td align=center><i><b>Quantité</b></i></td> - <td align=center><i><b>Etat</b></i></td> - </tr> - <span tal:repeat="ligne lignes_cde"> - <tr> - <td align=right tal:content="ligne/getId">0</td> - <span tal:define="url_items python:modules['string'].split(ligne.getResourceRelativeUrl(),'/')"> - <td align=center tal:content="python:url_items[len(url_items)-1]">resource</td> - </span> - - - <td align=center tal:content="python: '%.0f' % ligne.getQuantity()">2</td> - <td align=left tal:content="ligne/sample_order_line_modele_state">etat</td> - </tr> - </span> - <tr> - <td colspan="3"></td> - <td align=center><b><i>Total</i></b></td> - <td align=center tal:content="python: '%.0f' %here.sample_order_count_samples()"><b><i>Total</i></b></td> - </tr> - </table> - <td><img src="spacer.png" width="1" height="100%"></td> - </tr> - <tr> <!-- Border Bottom Ligne commande --> - <td><img src="spacer.png" width="1" height="1"></td> - <td><img src="spacer.png" width="673" height="1"></td> - <td><img src="spacer.png" width="1" height="1"></td> - </tr> - -</table> - -</body> - -</html> diff --git a/product/Coramy/skins/coramy_trade/sales_invoice_view.form b/product/Coramy/skins/coramy_trade/sales_invoice_view.form deleted file mode 100755 index 400f59dd2b..0000000000 --- a/product/Coramy/skins/coramy_trade/sales_invoice_view.form +++ /dev/null @@ -1,577 +0,0 @@ -<?xml version="1.0"?> - -<form> - <title>Commande échantillons</title> - <row_length>4</row_length> - <name>order_view</name> - <pt>form_view</pt> - <action>base_edit</action> - <method>POST</method> - <enctype>multipart/form-data</enctype> - <encoding>UTF-8</encoding> - <stored_encoding>ISO-8859-1</stored_encoding> - <unicode_mode>false</unicode_mode> - <groups> - <group> - <title>left</title> - <fields> - - <field><id>my_id</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">10</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <max_length></max_length> - <required type="int">1</required> - <title>Commande</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - <field><id>my_destination_title</id> <type>RelationStringField</type> - <values> - <alternate_name></alternate_name> - <base_category>destination</base_category> - <catalog_index>Title</catalog_index> - <css_class></css_class> - <default></default> - <default_module>organisation</default_module> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <jump_method>base_jump_relation</jump_method> - <max_length></max_length> - <portal_type type="list">[('Organisation', 'Organisation')]</portal_type> - <required type="int">0</required> - <title>Client</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <update_method>base_update_relation</update_method> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - <field><id>my_buyer_title</id> <type>RelationStringField</type> - <values> - <alternate_name></alternate_name> - <base_category>contact</base_category> - <catalog_index>Title</catalog_index> - <css_class></css_class> - <default></default> - <default_module>person</default_module> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <jump_method>base_jump_relation</jump_method> - <max_length></max_length> - <portal_type type="list">[('Person', 'Person')]</portal_type> - <required type="int">0</required> - <title>Acheteur</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <update_method>base_update_relation</update_method> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - <field><id>my_description</id> <type>TextAreaField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <height type="int">1</height> - <hidden type="int">0</hidden> - <max_length></max_length> - <max_linelength></max_linelength> - <max_lines></max_lines> - <required type="int">0</required> - <title>Rayon</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - <width type="int">30</width> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_many_lines">You entered too many lines.</message> - <message name="line_too_long">A line was too long.</message> - <message name="too_long">You entered too many characters.</message> - </messages> - </field> - <field><id>my_document_reference</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <max_length></max_length> - <required type="int">0</required> - <title>N°</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - <field><id>my_value_added_tax_ratio</id> <type>FloatField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <required type="int">1</required> - <title>Taux de TVA</title> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="not_float">You did not enter a floating point number.</message> - </messages> - </field> - <field><id>my_value_added_tax_recoverable</id> <type>ListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <extra_item></extra_item> - <first_item type="int">0</first_item> - <hidden type="int">0</hidden> - <items type="list">[('Non', '0'), ('Oui', '1')]</items> - <required type="int">0</required> - <size type="int">1</size> - <title>Soumis à la TVA</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <default>python:str(here.getValueAddedTaxRecoverable())</default> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>right</title> - <fields> - - <field><id>my_date_rdv</id> <type>DateTimeField</type> - <values> - <allow_empty_time type="int">0</allow_empty_time> - <alternate_name></alternate_name> - <ampm_time_style type="int">0</ampm_time_style> - <css_class></css_class> - <date_only type="int">1</date_only> - <date_separator>/</date_separator> - <default_now type="int">0</default_now> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <hidden type="int">0</hidden> - <input_order>dmy</input_order> - <input_style>text</input_style> - <required type="int">0</required> - <time_separator>:</time_separator> - <title>Date rendez-vous</title> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="not_datetime">You did not enter a valid date and time.</message> - <message name="datetime_out_of_range">The date and time you entered were out of range.</message> - </messages> - </field> - <field><id>my_collection</id> <type>ListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <extra_item></extra_item> - <first_item type="int">0</first_item> - <hidden type="int">0</hidden> - <items type="list">[]</items> - <required type="int">0</required> - <size type="int">1</size> - <title>Collection</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <items>here/portal_categories/collection/getFormItemList</items> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - <field><id>my_start_date</id> <type>DateTimeField</type> - <values> - <allow_empty_time type="int">0</allow_empty_time> - <alternate_name></alternate_name> - <ampm_time_style type="int">0</ampm_time_style> - <css_class></css_class> - <date_only type="int">1</date_only> - <date_separator>/</date_separator> - <default_now type="int">0</default_now> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <hidden type="int">0</hidden> - <input_order>dmy</input_order> - <input_style>text</input_style> - <required type="int">0</required> - <time_separator>:</time_separator> - <title>Livrer à partir du</title> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="not_datetime">You did not enter a valid date and time.</message> - <message name="datetime_out_of_range">The date and time you entered were out of range.</message> - </messages> - </field> - <field><id>my_stop_date</id> <type>DateTimeField</type> - <values> - <allow_empty_time type="int">0</allow_empty_time> - <alternate_name></alternate_name> - <ampm_time_style type="int">0</ampm_time_style> - <css_class></css_class> - <date_only type="int">1</date_only> - <date_separator>/</date_separator> - <default_now type="int">0</default_now> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <hidden type="int">0</hidden> - <input_order>dmy</input_order> - <input_style>text</input_style> - <required type="int">0</required> - <time_separator>:</time_separator> - <title>Livrer avant le</title> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="not_datetime">You did not enter a valid date and time.</message> - <message name="datetime_out_of_range">The date and time you entered were out of range.</message> - </messages> - </field> - <field><id>order_state</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <max_length></max_length> - <required type="int">0</required> - <title>Etat</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <default>python:here.portal_workflow.getInfoFor(here, 'simulation_state')</default> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>center</title> - <fields> - - <field><id>my_commentaires</id> <type>TextAreaField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <height type="int">3</height> - <hidden type="int">0</hidden> - <max_length></max_length> - <max_linelength></max_linelength> - <max_lines></max_lines> - <required type="int">0</required> - <title>Commentaires</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - <width type="int">80</width> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_many_lines">You entered too many lines.</message> - <message name="line_too_long">A line was too long.</message> - <message name="too_long">You entered too many characters.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>bottom</title> - <fields> - - <field><id>listbox</id> <type>ListBox</type> - <values> - <all_columns type="list">[('id', 'Ligne'), ('source', 'Account'), ('source_debit', 'Debit'), ('source_credit', 'Credit')]</all_columns> - <all_editable_columns type="list">[]</all_editable_columns> - <alternate_name></alternate_name> - <columns type="list">[('id', 'Ligne'), ('source', 'Account'), ('source_debit', 'Debit'), ('source_credit', 'Credit')]</columns> - <css_class></css_class> - <default></default> - <default_params type="list">[]</default_params> - <description></description> - <domain_root_list type="list">[]</domain_root_list> - <domain_tree type="int">0</domain_tree> - <editable type="int">1</editable> - <editable_columns type="list">[('source_debit', 'Debit'), ('source_credit', 'Credit'), ('source', 'Account')]</editable_columns> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <global_attributes type="list">[('resource', 'resource')]</global_attributes> - <hidden type="int">0</hidden> - <lines type="int">10</lines> - <list_action>folder_contents</list_action> - <list_method type="method">searchFolder</list_method> - <meta_types type="list">[]</meta_types> - <portal_types type="list">[('Sale Invoice Transaction Line', 'Sale Invoice Transaction Line')]</portal_types> - <report_root_list type="list">[]</report_root_list> - <report_tree type="int">0</report_tree> - <search type="int">0</search> - <search_columns type="list">[]</search_columns> - <select type="int">1</select> - <selection_name>order_line_selection</selection_name> - <sort type="list">[('id', 'id')]</sort> - <sort_columns></sort_columns> - <stat_method></stat_method> - <title>Lignes de commande</title> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>hidden</title> - <fields> - - <field><id>listbox_source</id> <type>ListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <extra_item></extra_item> - <first_item type="int">0</first_item> - <hidden type="int">0</hidden> - <items type="list">[('a', 'a'), ('b', 'b'), ('c', 'c')]</items> - <required type="int">0</required> - <size type="int">1</size> - <title>listbox_source</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - <field><id>listbox_source_debit</id> <type>FloatField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">8</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <required type="int">0</required> - <title>listbox_source_debit</title> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="not_float">You did not enter a floating point number.</message> - </messages> - </field> - <field><id>listbox_source_credit</id> <type>FloatField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">8</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <required type="int">0</required> - <title>listbox_source_credit</title> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="not_float">You did not enter a floating point number.</message> - </messages> - </field> - <field><id>listbox_title</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <max_length></max_length> - <required type="int">0</required> - <title>Title</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - </fields> - </group> - </groups> -</form> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_trade/sales_order_apply_condition.py b/product/Coramy/skins/coramy_trade/sales_order_apply_condition.py deleted file mode 100755 index 033ed0f51a..0000000000 --- a/product/Coramy/skins/coramy_trade/sales_order_apply_condition.py +++ /dev/null @@ -1,191 +0,0 @@ -## Script (Python) "sales_order_apply_condition" -##bind container=container -##bind context=context -##bind namespace= -##bind script=script -##bind subpath=traverse_subpath -##parameters=form_id,batch_mode=0 -##title= -## -# appelé sur une commande, ce script recherche une condition de vente -# pouvant s'appliquer à la commande et, s'il en trouve une (et une seule) -# complète le profil de la commande, le paiment, les remises - -order = context -condition_list = [] - -# on commence par regarder si une condition de vente est associée à la commande -condition_list = order.getSpecialiseValueList(portal_type=('Condition Vente',)) -if len(condition_list) == 0 : - - # RECHERCHE d'une condition de vente compatible - # la recherche se fait d'abord sur le couple 'source_section' et 'destination' - - my_source_section = order.getSourceSectionValue() - if my_source_section <> None : - my_source_section_uid = my_source_section.getUid() - else : - my_source_section_uid = '' - my_destination = order.getDestinationValue() - if my_destination <> None : - my_destination_uid = my_destination.getUid() - else : - my_destination_uid = '' - my_group = order.getGroupValue() - if my_group <> None : - my_group_uid = my_group.getUid() - else : - my_group_uid = '' - my_destination_decision = order.getDestinationDecisionValueList(portal_type=('Organisation','Category')) - if len(my_destination_decision) > 0 : - my_destination_decision_uid = my_destination_decision[0].getUid() - else : - my_destination_decision_uid = '' - condition_list = order.condition_vente_sql_search(source_section_uid=my_source_section_uid, destination_uid=my_destination_uid, group_uid="", destination_decision_uid="") - - # si on a trouve une ou plusieurs conditions de vente on s'arrete - # sinon on refait une recherche sur le couple 'source-section' et 'group' - if len(condition_list ) == 0 : - condition_list = order.condition_vente_sql_search(source_section_uid=my_source_section_uid, destination_uid="", group_uid=my_group_uid, destination_decision_uid="") - if len(condition_list) > 1 : - # s'il y a plus d'une condition trouvee, on essaye de réduire le choix - # en intégrant un critère de recherche sur 'destination_decision' - condition_list = order.condition_vente_sql_search(source_section_uid=my_source_section_uid, destination_uid="", group_uid=my_group_uid, destination_decision_uid=my_destination_decision_uid) - - # s'il y a plus d'une condition trouvee, on essaye de réduire le choix - # en intégrant un critère de recherche sur 'destination_decision' - elif len(condition_list) > 1 : - condition_list = order.condition_vente_sql_search(source_section_uid=my_source_section_uid, destination_uid=my_destination_uid, group_uid="", destination_decision_uid=my_destination_decision_uid) - -# resultat des courses sur le recherche -if len(condition_list ) == 0 : - redirect_url = '%s/%s?%s' % ( context.absolute_url(), form_id - , 'portal_status_message=Pas+de+condition+de+vente+applicable.') -elif len(condition_list ) > 1 : - redirect_url = '%s/%s?%s' % ( context.absolute_url(), form_id - , 'portal_status_message=Trop+de+conditions+de+vente+applicables.') -else : # on a une condition applicable - condition=condition_list[0].getObject() - - # MISE A JOUR DU PROFIL DE LA COMMANDE - - categories = order.getCategoryList() - # SOURCE - if order.getSourceValue() == None and condition.getSourceValue() <> None : - categories += ('source/'+condition.getSourceValue().getRelativeUrl(),) - # source_decision - if order.getSourceDecisionValue() == None and condition.getSourceDecisionValue() <> None : - categories += ('source_decision/'+condition.getSourceDecisionValue().getRelativeUrl(),) - # source_administration - if order.getSourceAdministrationValue() == None and condition.getSourceAdministrationValue() <> None : - categories += ('source_administration/'+condition.getSourceAdministrationValue().getRelativeUrl(),) - # source_payment - if order.getSourcePaymentValue() == None and condition.getSourcePaymentValue() <> None : - categories += ('source_payment/'+condition.getSourcePaymentValue().getRelativeUrl(),) - - # DESTINATION_section - if order.getDestinationSectionValue() == None : - if condition.getDestinationSectionValue() <> None : - categories += ('destination_section/'+condition.getDestinationSectionValue().getRelativeUrl(),) - # si destination_section pas presente dans la condition de vente, on utilise destination de order - else : - categories += ('destination_section/'+order.getDestinationValue().getRelativeUrl(),) - # destination_decision - if order.getDestinationDecisionValue(portal_type='Organisation') == None : - if condition.getDestinationDecisionValue(portal_type='Organisation') <> None : - categories += ('destination_decision/'+condition.getDestinationDecisionValue(portal_type='Organisation').getRelativeUrl(),) - # si destination_decision pas presente dans la condition de vente, on utilise destination de order - else : - categories += ('destination_decision/'+order.getDestinationValue().getRelativeUrl(),) - # destination_administration - if order.getDestinationAdministrationValue() == None : - if condition.getDestinationAdministrationValue() <> None : - categories += ('destination_administration/'+condition.getDestinationAdministrationValue().getRelativeUrl(),) - # si destination_administration pas presente dans la condition de vente, on utilise destination de order - else : - categories += ('destination_administration/'+order.getDestinationValue().getRelativeUrl(),) - # destination_payment - if order.getDestinationPaymentValue() == None : - if condition.getDestinationPaymentValue() <> None : - categories += ('destination_payment/'+condition.getDestinationPaymentValue().getRelativeUrl(),) - # si destination_payment pas presente dans la condition de vente, on utilise destination de order - else : - categories += ('destination_payment/'+order.getDestinationValue().getRelativeUrl(),) - - # MISE A JOUR DU PAIEMENT DE LA COMMANDE - my_payment_term='' - if order.hasPaymentTerm() : - my_payment_term = order.getPaymentTerm() - elif condition.hasPaymentTerm() : - my_payment_term = condition.getPaymentTerm() - - my_payment_end_of_month='' - if order.hasPaymentEndOfMonth() : - my_payment_end_of_month = order.getPaymentEndOfMonth() - elif condition.hasPaymentTerm() : - my_payment_end_of_month = condition.getPaymentEndOfMonth() - - my_payment_additional_term='' - if order.hasPaymentAdditionalTerm() : - my_payment_additional_term = order.getPaymentAdditionalTerm() - elif condition.hasPaymentAdditionalTerm() : - my_payment_additional_term = condition.getPaymentAdditionalTerm() - - if order.getPaymentModeValue() == None and condition.getPaymentModeValue() <> None : - categories += (condition.getPaymentModeValue().getRelativeUrl(),) - if order.getTradeDateValue() == None and condition.getTradeDateValue() <> None : - categories += (condition.getTradeDateValue().getRelativeUrl(),) - - # copie des conditions de paiement additionnelles si pas presentes dans commande - if len(order.contentIds(filter={'portal_type':'Condition Paiement'})) == 0 : - to_copy=[] - to_copy=condition.contentIds(filter={'portal_type':'Condition Paiement'}) - if len(to_copy)>0 : - copy_data = condition.manage_copyObjects(ids=to_copy) - new_id_list = order.manage_pasteObjects(copy_data) - - # copie des remises si pas presentes dans commande - if len(order.contentIds(filter={'portal_type':'Remise'})) == 0 : - to_copy=[] - to_copy=condition.contentIds(filter={'portal_type':'Remise'}) - if len(to_copy)>0 : - copy_data = condition.manage_copyObjects(ids=to_copy) - new_id_list = order.manage_pasteObjects(copy_data) - - # copie des conditions logistique - if order.getIncotermValue() == None and condition.getIncotermValue() <> None : - categories += (condition.getIncotermValue().getRelativeUrl(),) - if order.getDeliveryModeValue() == None and condition.getDeliveryModeValue() <> None : - categories += (condition.getDeliveryModeValue().getRelativeUrl(),) - - # copie de la devise - if order.getPriceCurrencyValue() == None and condition.getPriceCurrencyValue() <> None : - categories += ('price_currency/'+condition.getPriceCurrencyValue().getRelativeUrl(),) - - # copie du code fournisseur - my_source_decision_destination_reference = '' - if order.hasSourceDecisionDestinationReference() : - my_source_decision_destination_reference = order.getSourceDecisionDestinationReference() - elif condition.hasSourceDecisionDestinationReference() : - my_source_decision_destination_reference = condition.getSourceDecisionDestinationReference() - - # mise à jour du lien specialise entre order et condition appliquee - final_categories = () - for category_item in categories : - if category_item.find('specialise/') == (-1): - final_categories += (category_item,) - - final_categories += ('specialise/'+condition.getRelativeUrl(),) - - order.edit(categories=final_categories, payment_term=my_payment_term, - payment_end_of_month=my_payment_end_of_month, - payment_additional_term=my_payment_additional_term, - source_decision_destination_reference = my_source_decision_destination_reference) - - redirect_url = '%s/%s?%s' % ( context.absolute_url(), form_id - , 'portal_status_message=Commande+mise+a+jour.') - -if batch_mode: - return None -else: - context.REQUEST[ 'RESPONSE' ].redirect( redirect_url ) diff --git a/product/Coramy/skins/coramy_trade/sales_order_list.form b/product/Coramy/skins/coramy_trade/sales_order_list.form deleted file mode 100755 index bed70c3e37..0000000000 --- a/product/Coramy/skins/coramy_trade/sales_order_list.form +++ /dev/null @@ -1,63 +0,0 @@ -<?xml version="1.0"?> - -<form> - <title>Liste de commandes</title> - <row_length>4</row_length> - <name>sales_order_list</name> - <pt>form_list</pt> - <action></action> - <method>POST</method> - <enctype></enctype> - <encoding>UTF-8</encoding> - <stored_encoding>ISO-8859-1</stored_encoding> - <unicode_mode>false</unicode_mode> - <groups> - <group> - <title>Default</title> - <fields> - - <field><id>listbox</id> <type>ListBox</type> - <values> - <all_columns type="list">[('id', 'Commande'), ('default_source_section_title', 'Soci\xe9t\xe9'), ('group', 'Groupe client'), ('default_destination_decision_organisation_title', 'Command\xe9 par'), ('default_destination_decision_person_title', 'Acheteur'), ('default_destination_title', 'Livrer \xe0'), ('target_stop_date', 'Livraison demand\xe9e'), ('stop_date', 'Livraison confirm\xe9e'), ('simulation_state', 'Etat')]</all_columns> - <all_editable_columns type="list">[]</all_editable_columns> - <alternate_name></alternate_name> - <columns type="list">[('id', 'Commande'), ('default_source_section_title', 'Soci\xe9t\xe9'), ('group', 'Groupe client'), ('default_destination_decision_organisation_title', 'Command\xe9 par'), ('default_destination_decision_person_title', 'Acheteur'), ('default_destination_title', 'Livrer \xe0'), ('target_stop_date', 'Livraison demand\xe9e'), ('stop_date', 'Livraison confirm\xe9e'), ('simulation_state', 'Etat')]</columns> - <css_class></css_class> - <default></default> - <default_params type="list">[]</default_params> - <description></description> - <domain_root_list type="list">[]</domain_root_list> - <domain_tree type="int">0</domain_tree> - <editable type="int">1</editable> - <editable_columns type="list">[]</editable_columns> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <global_attributes type="list">[]</global_attributes> - <hidden type="int">0</hidden> - <lines type="int">30</lines> - <list_action>list</list_action> - <list_method type="method">portal_catalog</list_method> - <meta_types type="list">[]</meta_types> - <portal_types type="list">[('Sales Order', 'Sales Order')]</portal_types> - <report_root_list type="list">[]</report_root_list> - <report_tree type="int">0</report_tree> - <search type="int">1</search> - <search_columns></search_columns> - <select type="int">1</select> - <selection_name>sales_order_selection</selection_name> - <sort type="list">[('id', 'id')]</sort> - <sort_columns></sort_columns> - <stat_method></stat_method> - <title>Commandes</title> - </values> - <tales> - <list_method>python:here.getPortalObject().portal_skins.local_list_method[here.REQUEST.list_method_id]</list_method> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - </messages> - </field> - </fields> - </group> - </groups> -</form> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_trade/sales_order_view.form b/product/Coramy/skins/coramy_trade/sales_order_view.form deleted file mode 100755 index 30387f5f4d..0000000000 --- a/product/Coramy/skins/coramy_trade/sales_order_view.form +++ /dev/null @@ -1,967 +0,0 @@ -<?xml version="1.0"?> - -<form> - <title>Commande vente</title> - <row_length>4</row_length> - <name>sales_order_view</name> - <pt>form_view</pt> - <action>base_edit</action> - <method>POST</method> - <enctype>multipart/form-data</enctype> - <encoding>UTF-8</encoding> - <stored_encoding>ISO-8859-1</stored_encoding> - <unicode_mode>false</unicode_mode> - <groups> - <group> - <title>left</title> - <fields> - - <field><id>my_id</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">10</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <max_length></max_length> - <required type="int">1</required> - <title>N° commande</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - <field><id>my_source_section</id> <type>ListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <extra_item></extra_item> - <first_item type="int">0</first_item> - <hidden type="int">0</hidden> - <items type="list">[]</items> - <required type="int">0</required> - <size type="int">1</size> - <title>Société</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <items>python:here.portal_categories.group.Coramy.getCategoryChildIdItemList(base=1,display_none_category=1)</items> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - <field><id>my_order_type</id> <type>ListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <extra_item></extra_item> - <first_item type="int">0</first_item> - <hidden type="int">0</hidden> - <items type="list">[]</items> - <required type="int">0</required> - <size type="int">1</size> - <title>Type de commande</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <items>here/portal_categories/order_type/getFormItemList</items> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - <field><id>my_date_reception</id> <type>DateTimeField</type> - <values> - <allow_empty_time type="int">0</allow_empty_time> - <alternate_name></alternate_name> - <ampm_time_style type="int">0</ampm_time_style> - <css_class></css_class> - <date_only type="int">1</date_only> - <date_separator>/</date_separator> - <default_now type="int">0</default_now> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <hidden type="int">0</hidden> - <input_order>dmy</input_order> - <input_style>text</input_style> - <required type="int">0</required> - <time_separator>:</time_separator> - <title>Commande reçue le</title> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="not_datetime">You did not enter a valid date and time.</message> - <message name="datetime_out_of_range">The date and time you entered were out of range.</message> - </messages> - </field> - <field><id>my_commande_origine</id> <type>ListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <extra_item></extra_item> - <first_item type="int">0</first_item> - <hidden type="int">0</hidden> - <items type="list">[]</items> - <required type="int">0</required> - <size type="int">1</size> - <title>Support de la commande</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <items>here/portal_categories/commande_origine/getFormItemList</items> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - <field><id>my_source_administration_title</id> <type>RelationStringField</type> - <values> - <alternate_name></alternate_name> - <base_category>source_administration</base_category> - <catalog_index>Title</catalog_index> - <css_class></css_class> - <default></default> - <default_module>person</default_module> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <jump_method>base_jump_relation</jump_method> - <max_length></max_length> - <portal_type type="list">[('Person', 'Person')]</portal_type> - <required type="int">0</required> - <title>Gestionaire</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <update_method>base_update_relation</update_method> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - <field><id>my_source_decision_title</id> <type>RelationStringField</type> - <values> - <alternate_name></alternate_name> - <base_category>source_decision</base_category> - <catalog_index>Title</catalog_index> - <css_class></css_class> - <default></default> - <default_module>person</default_module> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <jump_method>base_jump_relation</jump_method> - <max_length></max_length> - <portal_type type="list">[('Person', 'Person')]</portal_type> - <required type="int">0</required> - <title>Commercial</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <update_method>base_update_relation</update_method> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - <field><id>my_commission_ratio</id> <type>FloatField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">10</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <required type="int">0</required> - <title>Taux de commission</title> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="not_float">You did not enter a floating point number.</message> - </messages> - </field> - <field><id>my_segmentation_strategique</id> <type>ListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <extra_item></extra_item> - <first_item type="int">0</first_item> - <hidden type="int">0</hidden> - <items type="list">[]</items> - <required type="int">0</required> - <size type="int">1</size> - <title>Segmentation</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <items>here/portal_categories/segmentation_strategique/getFormItemList</items> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - <field><id>my_price_currency</id> <type>ListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <extra_item></extra_item> - <first_item type="int">0</first_item> - <hidden type="int">0</hidden> - <items type="list">[]</items> - <required type="int">0</required> - <size type="int">1</size> - <title>Devise</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <items>python:[('','')]+map(lambda x:(x.id,'devise/%s' %x.id),here.devise.objectValues())</items> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - <field><id>my_incoterm</id> <type>ListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <extra_item></extra_item> - <first_item type="int">0</first_item> - <hidden type="int">0</hidden> - <items type="list">[]</items> - <required type="int">0</required> - <size type="int">1</size> - <title>Incoterm</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <items>python:here.portal_categories.incoterm.getCategoryChildItemList(display_id = 'getTitle', display_none_category=1)</items> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - <field><id>my_delivery_mode</id> <type>ListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <extra_item></extra_item> - <first_item type="int">0</first_item> - <hidden type="int">0</hidden> - <items type="list">[]</items> - <required type="int">0</required> - <size type="int">1</size> - <title>Mode de livraison</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <items>here/portal_categories/delivery_mode/getFormItemList</items> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>right</title> - <fields> - - <field><id>my_destination_reference</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <max_length></max_length> - <required type="int">0</required> - <title>N° commande client</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - <field><id>my_destination_title</id> <type>RelationStringField</type> - <values> - <alternate_name></alternate_name> - <base_category>destination</base_category> - <catalog_index>Title</catalog_index> - <css_class></css_class> - <default></default> - <default_module>organisation</default_module> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <jump_method>base_jump_relation</jump_method> - <max_length></max_length> - <portal_type type="list">[('Organisation', 'Organisation')]</portal_type> - <required type="int">0</required> - <title>Livrer à </title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <update_method>base_update_relation</update_method> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - <field><id>my_destination_decision_person_title</id> <type>RelationStringField</type> - <values> - <alternate_name></alternate_name> - <base_category>destination_decision</base_category> - <catalog_index>Title</catalog_index> - <css_class></css_class> - <default></default> - <default_module>person</default_module> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <jump_method>base_jump_relation</jump_method> - <max_length></max_length> - <portal_type type="list">[('Person', 'Person')]</portal_type> - <required type="int">0</required> - <title>Acheteur</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <update_method>base_update_relation</update_method> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - <field><id>my_destination_decision_organisation_title</id> <type>RelationStringField</type> - <values> - <alternate_name></alternate_name> - <base_category>destination_decision</base_category> - <catalog_index>Title</catalog_index> - <css_class></css_class> - <default></default> - <default_module>organistion</default_module> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <jump_method>base_jump_relation</jump_method> - <max_length></max_length> - <portal_type type="list">[('Organisation', 'Organisation')]</portal_type> - <required type="int">0</required> - <title>Commandé par</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <update_method>base_update_relation</update_method> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - <field><id>my_group</id> <type>ListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <extra_item></extra_item> - <first_item type="int">0</first_item> - <hidden type="int">0</hidden> - <items type="list">[]</items> - <required type="int">0</required> - <size type="int">1</size> - <title>Groupe</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <items>here/portal_categories/group/getFormItemList</items> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - <field><id>my_target_start_date</id> <type>DateTimeField</type> - <values> - <allow_empty_time type="int">0</allow_empty_time> - <alternate_name></alternate_name> - <ampm_time_style type="int">0</ampm_time_style> - <css_class></css_class> - <date_only type="int">1</date_only> - <date_separator>/</date_separator> - <default_now type="int">0</default_now> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <hidden type="int">0</hidden> - <input_order>dmy</input_order> - <input_style>text</input_style> - <required type="int">0</required> - <time_separator>:</time_separator> - <title>Date d'expédition demandée</title> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="not_datetime">You did not enter a valid date and time.</message> - <message name="datetime_out_of_range">The date and time you entered were out of range.</message> - </messages> - </field> - <field><id>my_target_stop_date</id> <type>DateTimeField</type> - <values> - <allow_empty_time type="int">0</allow_empty_time> - <alternate_name></alternate_name> - <ampm_time_style type="int">0</ampm_time_style> - <css_class></css_class> - <date_only type="int">1</date_only> - <date_separator>/</date_separator> - <default_now type="int">0</default_now> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <hidden type="int">0</hidden> - <input_order>dmy</input_order> - <input_style>text</input_style> - <required type="int">0</required> - <time_separator>:</time_separator> - <title>Date de livraison demandée</title> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="not_datetime">You did not enter a valid date and time.</message> - <message name="datetime_out_of_range">The date and time you entered were out of range.</message> - </messages> - </field> - <field><id>spacer</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">1</hidden> - <max_length></max_length> - <required type="int">0</required> - <title> </title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - <field><id>my_start_date</id> <type>DateTimeField</type> - <values> - <allow_empty_time type="int">0</allow_empty_time> - <alternate_name></alternate_name> - <ampm_time_style type="int">0</ampm_time_style> - <css_class></css_class> - <date_only type="int">1</date_only> - <date_separator>/</date_separator> - <default_now type="int">0</default_now> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <hidden type="int">0</hidden> - <input_order>dmy</input_order> - <input_style>text</input_style> - <required type="int">0</required> - <time_separator>:</time_separator> - <title>Date d'expédition confirmée</title> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="not_datetime">You did not enter a valid date and time.</message> - <message name="datetime_out_of_range">The date and time you entered were out of range.</message> - </messages> - </field> - <field><id>my_stop_date</id> <type>DateTimeField</type> - <values> - <allow_empty_time type="int">0</allow_empty_time> - <alternate_name></alternate_name> - <ampm_time_style type="int">0</ampm_time_style> - <css_class></css_class> - <date_only type="int">1</date_only> - <date_separator>/</date_separator> - <default_now type="int">0</default_now> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <hidden type="int">0</hidden> - <input_order>dmy</input_order> - <input_style>text</input_style> - <required type="int">0</required> - <time_separator>:</time_separator> - <title>Date de livraison confirmée</title> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="not_datetime">You did not enter a valid date and time.</message> - <message name="datetime_out_of_range">The date and time you entered were out of range.</message> - </messages> - </field> - <field><id>order_state</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">0</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <max_length></max_length> - <required type="int">0</required> - <title>Etat</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <default>python:here.portal_workflow.getInfoFor(here, 'simulation_state')</default> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - <field><id>my_trade_condition_title</id> <type>RelationStringField</type> - <values> - <alternate_name></alternate_name> - <base_category>specialise</base_category> - <catalog_index>Title</catalog_index> - <css_class></css_class> - <default></default> - <default_module>condition_vente</default_module> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <jump_method>base_jump_relation</jump_method> - <max_length></max_length> - <portal_type type="list">[('Condition Vente', 'Condition Vente')]</portal_type> - <required type="int">0</required> - <title>Condition de vente</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <update_method>base_update_relation</update_method> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>center</title> - <fields> - - <field><id>my_comment</id> <type>TextAreaField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <height type="int">3</height> - <hidden type="int">0</hidden> - <max_length></max_length> - <max_linelength></max_linelength> - <max_lines></max_lines> - <required type="int">0</required> - <title>Commentaires</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - <width type="int">80</width> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_many_lines">You entered too many lines.</message> - <message name="line_too_long">A line was too long.</message> - <message name="too_long">You entered too many characters.</message> - </messages> - </field> - <field><id>my_total_quantity</id> <type>FloatField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">10</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">1</hidden> - <required type="int">0</required> - <title>Quantité totale</title> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <title>python:'Quantité totale : %.2f' % here.getTargetTotalQuantity()</title> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="not_float">You did not enter a floating point number.</message> - </messages> - </field> - <field><id>my_total_price</id> <type>FloatField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">10</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">1</hidden> - <required type="int">0</required> - <title>Montant total</title> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <title>python:'Montant total : %.2f' % here.getTotalPrice()</title> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="not_float">You did not enter a floating point number.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>bottom</title> - <fields> - - <field><id>listbox</id> <type>ListBox</type> - <values> - <all_columns type="list">[('id', 'Ligne n\xb0'), ('resource_title', 'Mod\xe8le'), ('total_quantity', 'Quantit\xe9 totale'), ('quantity_unit', 'Unit\xe9'), ('total_price', 'Montant total'), ('target_stop_date', 'Livraison demand\xe9e'), ('stop_date', 'Livraison confirm\xe9e')]</all_columns> - <all_editable_columns type="list">[('quantity_unit', 'Unit')]</all_editable_columns> - <alternate_name></alternate_name> - <columns type="list">[('id', 'Ligne n\xb0'), ('resource_title', 'Mod\xe8le'), ('total_quantity', 'Quantit\xe9 totale'), ('quantity_unit', 'Unit\xe9'), ('total_price', 'Montant total'), ('target_stop_date', 'Livraison demand\xe9e'), ('stop_date', 'Livraison confirm\xe9e')]</columns> - <css_class></css_class> - <default></default> - <default_params type="list">[]</default_params> - <description></description> - <domain_root_list type="list">[]</domain_root_list> - <domain_tree type="int">0</domain_tree> - <editable type="int">1</editable> - <editable_columns type="list">[('quantity_unit', 'Unit')]</editable_columns> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <global_attributes type="list">[]</global_attributes> - <hidden type="int">0</hidden> - <lines type="int">10</lines> - <list_action>list</list_action> - <list_method type="method">searchFolder</list_method> - <meta_types type="list">[]</meta_types> - <portal_types type="list">[('Sales Order Line', 'Sales Order Line')]</portal_types> - <report_root_list type="list">[]</report_root_list> - <report_tree type="int">0</report_tree> - <search type="int">0</search> - <search_columns></search_columns> - <select type="int">0</select> - <selection_name>sales_order_line_selection</selection_name> - <sort type="list">[('id', 'id')]</sort> - <sort_columns></sort_columns> - <stat_method></stat_method> - <title>Ligne de commande</title> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>hidden</title> - <fields> - - <field><id>listbox_quantity</id> <type>FloatField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">10</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <required type="int">0</required> - <title>Quantité</title> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="not_float">You did not enter a floating point number.</message> - </messages> - </field> - <field><id>listbox_quantity_unit</id> <type>ListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <extra_item></extra_item> - <first_item type="int">0</first_item> - <hidden type="int">0</hidden> - <items type="list">[]</items> - <required type="int">0</required> - <size type="int">1</size> - <title>Unité</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <items>here/portal_categories/quantity_unit/getFormItemList</items> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - <field><id>listbox_price</id> <type>FloatField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">10</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <required type="int">0</required> - <title>Prix de vente</title> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="not_float">You did not enter a floating point number.</message> - </messages> - </field> - </fields> - </group> - </groups> -</form> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_trade/sales_packing_list_aggregated_view.form b/product/Coramy/skins/coramy_trade/sales_packing_list_aggregated_view.form deleted file mode 100755 index a432d1c6eb..0000000000 --- a/product/Coramy/skins/coramy_trade/sales_packing_list_aggregated_view.form +++ /dev/null @@ -1,739 +0,0 @@ -<?xml version="1.0"?> - -<form> - <title>Livraison vente</title> - <row_length>4</row_length> - <name>sales_packing_list_view</name> - <pt>form_view</pt> - <action>base_edit</action> - <method>POST</method> - <enctype>multipart/form-data</enctype> - <encoding>UTF-8</encoding> - <stored_encoding>ISO-8859-1</stored_encoding> - <unicode_mode>false</unicode_mode> - <groups> - <group> - <title>left</title> - <fields> - - <field><id>my_id</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">10</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <max_length></max_length> - <required type="int">1</required> - <title>N° livraison</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - <field><id>my_source_section</id> <type>ListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <extra_item></extra_item> - <first_item type="int">0</first_item> - <hidden type="int">0</hidden> - <items type="list">[]</items> - <required type="int">0</required> - <size type="int">1</size> - <title>Société</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <items>python:here.portal_categories.group.Coramy.getCategoryChildIdItemList(base=1,display_none_category=1)</items> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - <field><id>my_source_administration_title</id> <type>RelationStringField</type> - <values> - <alternate_name></alternate_name> - <base_category>source_administration</base_category> - <catalog_index>Title</catalog_index> - <css_class></css_class> - <default></default> - <default_module>person</default_module> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <jump_method>base_jump_relation</jump_method> - <max_length></max_length> - <portal_type type="list">[('Person', 'Person')]</portal_type> - <required type="int">0</required> - <title>Gestionaire</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <update_method>base_update_relation</update_method> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <default>python:here.getCausalityValue(portal_type="Sales Order").getSourceAdministrationTitle()</default> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - <field><id>my_incoterm</id> <type>ListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <extra_item></extra_item> - <first_item type="int">0</first_item> - <hidden type="int">0</hidden> - <items type="list">[]</items> - <required type="int">0</required> - <size type="int">1</size> - <title>Incoterm</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <items>python:here.portal_categories.incoterm.getCategoryChildItemList(display_id = 'getTitle', display_none_category=1)</items> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - <field><id>my_delivery_mode</id> <type>ListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <extra_item></extra_item> - <first_item type="int">0</first_item> - <hidden type="int">0</hidden> - <items type="list">[]</items> - <required type="int">0</required> - <size type="int">1</size> - <title>Mode de livraison</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <items>here/portal_categories/delivery_mode/getFormItemList</items> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - <field><id>my_source_title</id> <type>RelationStringField</type> - <values> - <alternate_name></alternate_name> - <base_category>source</base_category> - <catalog_index>Title</catalog_index> - <css_class></css_class> - <default></default> - <default_module>organisation</default_module> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <jump_method>base_jump_relation</jump_method> - <max_length></max_length> - <portal_type type="list">[('Organisation', 'Organisation'), ('Category', 'Category'), ('Person', 'Person')]</portal_type> - <required type="int">0</required> - <title>Expédié par</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <update_method>base_update_relation</update_method> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>right</title> - <fields> - - <field><id>my_causality_id</id> <type>RelationStringField</type> - <values> - <alternate_name></alternate_name> - <base_category>causality</base_category> - <catalog_index>id</catalog_index> - <css_class></css_class> - <default></default> - <default_module>commande_vente</default_module> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">10</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <jump_method>base_jump_relation</jump_method> - <max_length></max_length> - <portal_type type="list">[('Sales Order', 'Sales Order')]</portal_type> - <required type="int">0</required> - <title>N° commande</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <update_method>base_update_relation</update_method> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - <field><id>my_destination_reference</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <max_length></max_length> - <required type="int">0</required> - <title>N° commande client</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <default>python:here.getCausalityValue().getDestinationReference()</default> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - <field><id>my_destination_title</id> <type>RelationStringField</type> - <values> - <alternate_name></alternate_name> - <base_category>destination</base_category> - <catalog_index>Title</catalog_index> - <css_class></css_class> - <default></default> - <default_module>organisation</default_module> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <jump_method>base_jump_relation</jump_method> - <max_length></max_length> - <portal_type type="list">[('Organisation', 'Organisation')]</portal_type> - <required type="int">0</required> - <title>Livrer à </title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <update_method>base_update_relation</update_method> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - <field><id>destination_address</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">1</hidden> - <max_length></max_length> - <required type="int">0</required> - <title>Lieu livraison : inconnu</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <title>python: here.getDestinationValue(portal_type=['Organisation']).Organisation_getOneLineAddress()</title> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - <field><id>my_destination_section_title</id> <type>RelationStringField</type> - <values> - <alternate_name></alternate_name> - <base_category>destination_section</base_category> - <catalog_index>Title</catalog_index> - <css_class></css_class> - <default></default> - <default_module>organisation</default_module> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <jump_method>base_jump_relation</jump_method> - <max_length></max_length> - <portal_type type="list">[('Organisation', 'Organisation'), ('Category', 'Category'), ('Person', 'Person')]</portal_type> - <required type="int">0</required> - <title>Pour le compte de</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <update_method>base_update_relation</update_method> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - <field><id>my_start_date</id> <type>DateTimeField</type> - <values> - <allow_empty_time type="int">0</allow_empty_time> - <alternate_name></alternate_name> - <ampm_time_style type="int">0</ampm_time_style> - <css_class></css_class> - <date_only type="int">1</date_only> - <date_separator>/</date_separator> - <default_now type="int">0</default_now> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <hidden type="int">1</hidden> - <input_order>dmy</input_order> - <input_style>text</input_style> - <required type="int">0</required> - <time_separator>:</time_separator> - <title>Date d'expédition prévue</title> - </values> - <tales> - <title>python:'Expédition prévue le : ' + here.getStartDate().strftime('%d/%m/%Y')</title> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="not_datetime">You did not enter a valid date and time.</message> - <message name="datetime_out_of_range">The date and time you entered were out of range.</message> - </messages> - </field> - <field><id>my_target_start_date</id> <type>DateTimeField</type> - <values> - <allow_empty_time type="int">0</allow_empty_time> - <alternate_name></alternate_name> - <ampm_time_style type="int">0</ampm_time_style> - <css_class></css_class> - <date_only type="int">1</date_only> - <date_separator>/</date_separator> - <default_now type="int">0</default_now> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <hidden type="int">0</hidden> - <input_order>dmy</input_order> - <input_style>text</input_style> - <required type="int">0</required> - <time_separator>:</time_separator> - <title>Date d'expédition</title> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="not_datetime">You did not enter a valid date and time.</message> - <message name="datetime_out_of_range">The date and time you entered were out of range.</message> - </messages> - </field> - <field><id>my_stop_date</id> <type>DateTimeField</type> - <values> - <allow_empty_time type="int">0</allow_empty_time> - <alternate_name></alternate_name> - <ampm_time_style type="int">0</ampm_time_style> - <css_class></css_class> - <date_only type="int">1</date_only> - <date_separator>/</date_separator> - <default_now type="int">0</default_now> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <hidden type="int">1</hidden> - <input_order>dmy</input_order> - <input_style>text</input_style> - <required type="int">0</required> - <time_separator>:</time_separator> - <title>Date de livraison prévue</title> - </values> - <tales> - <title>python:'Livraison prévue le : ' + here.getStopDate().strftime('%d/%m/%Y')</title> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="not_datetime">You did not enter a valid date and time.</message> - <message name="datetime_out_of_range">The date and time you entered were out of range.</message> - </messages> - </field> - <field><id>my_target_stop_date</id> <type>DateTimeField</type> - <values> - <allow_empty_time type="int">0</allow_empty_time> - <alternate_name></alternate_name> - <ampm_time_style type="int">0</ampm_time_style> - <css_class></css_class> - <date_only type="int">1</date_only> - <date_separator>/</date_separator> - <default_now type="int">0</default_now> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <hidden type="int">0</hidden> - <input_order>dmy</input_order> - <input_style>text</input_style> - <required type="int">0</required> - <time_separator>:</time_separator> - <title>Date de livraison</title> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="not_datetime">You did not enter a valid date and time.</message> - <message name="datetime_out_of_range">The date and time you entered were out of range.</message> - </messages> - </field> - <field><id>delivery_state</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <max_length></max_length> - <required type="int">0</required> - <title>Etat</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <default>python:here.portal_workflow.getInfoFor(here, 'simulation_state')</default> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>center</title> - <fields> - - <field><id>my_comment</id> <type>TextAreaField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <height type="int">3</height> - <hidden type="int">0</hidden> - <max_length></max_length> - <max_linelength></max_linelength> - <max_lines></max_lines> - <required type="int">0</required> - <title>Commentaires</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - <width type="int">80</width> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_many_lines">You entered too many lines.</message> - <message name="line_too_long">A line was too long.</message> - <message name="too_long">You entered too many characters.</message> - </messages> - </field> - <field><id>my_total_quantity</id> <type>FloatField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">10</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">1</hidden> - <required type="int">0</required> - <title>Objectif quantité</title> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <title>python:'Objectif quantité : %.2f' % here.getTotalQuantity()</title> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="not_float">You did not enter a floating point number.</message> - </messages> - </field> - <field><id>my_target_total_quantity</id> <type>FloatField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">10</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">1</hidden> - <required type="int">0</required> - <title>Quantité</title> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <title>python:'Quantité : %.2f' % here.getTargetTotalQuantity()</title> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="not_float">You did not enter a floating point number.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>bottom</title> - <fields> - - <field><id>listbox</id> <type>ListBox</type> - <values> - <all_columns type="list">[('id', 'Ligne n\xb0'), ('resource_title', 'Produit'), ('total_quantity', 'Objectif quantit\xe9'), ('target_total_quantity', 'Quantit\xe9'), ('quantity_unit', 'Unit\xe9')]</all_columns> - <all_editable_columns type="list">[('quantity_unit', 'Unit')]</all_editable_columns> - <alternate_name></alternate_name> - <columns type="list">[('id', 'Ligne n\xb0'), ('resource_title', 'Produit'), ('total_quantity', 'Objectif quantit\xe9'), ('target_total_quantity', 'Quantit\xe9'), ('quantity_unit', 'Unit\xe9')]</columns> - <css_class></css_class> - <default></default> - <default_params type="list">[]</default_params> - <description></description> - <domain_root_list type="list">[]</domain_root_list> - <domain_tree type="int">0</domain_tree> - <editable type="int">1</editable> - <editable_columns type="list">[('quantity_unit', 'Unit')]</editable_columns> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <global_attributes type="list">[]</global_attributes> - <hidden type="int">0</hidden> - <lines type="int">10</lines> - <list_action>list</list_action> - <list_method type="method">searchFolder</list_method> - <meta_types type="list">[]</meta_types> - <portal_types type="list">[('Sales Packing List Line', 'Sales Packing List Line')]</portal_types> - <report_root_list type="list">[]</report_root_list> - <report_tree type="int">0</report_tree> - <search type="int">0</search> - <search_columns></search_columns> - <select type="int">0</select> - <selection_name>sales_packing_list_line_selection</selection_name> - <sort type="list">[('id', 'id')]</sort> - <sort_columns></sort_columns> - <stat_method></stat_method> - <title>Ligne de livraison</title> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>hidden</title> - <fields> - - <field><id>listbox_price</id> <type>FloatField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">10</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <required type="int">0</required> - <title>Prix de vente</title> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="not_float">You did not enter a floating point number.</message> - </messages> - </field> - <field><id>listbox_quantity</id> <type>FloatField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">10</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <required type="int">0</required> - <title>Quantité</title> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="not_float">You did not enter a floating point number.</message> - </messages> - </field> - <field><id>listbox_quantity_unit</id> <type>ListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <extra_item></extra_item> - <first_item type="int">0</first_item> - <hidden type="int">0</hidden> - <items type="list">[]</items> - <required type="int">0</required> - <size type="int">1</size> - <title>Unité</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <items>here/portal_categories/quantity_unit/getFormItemList</items> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - </fields> - </group> - </groups> -</form> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_trade/sales_packing_list_container_list_print.pt b/product/Coramy/skins/coramy_trade/sales_packing_list_container_list_print.pt deleted file mode 100755 index ad937693ea..0000000000 --- a/product/Coramy/skins/coramy_trade/sales_packing_list_container_list_print.pt +++ /dev/null @@ -1,210 +0,0 @@ -<HTML> - <HEAD> - <meta http-equiv="content-type" content="text/html;charset=ISO-8859-1"> - <title tal:content="here/getTitle">Coramy</title> - <link rel=stylesheet type="text/css" href="modele_catalog_c"> - </HEAD> - <BODY bgcolor="#ffffff" tal:define="delivery_list python:here.object_action_list(selection_name='sales_packing_list_selection',max_nb=10); - page_number python:[0]"> - <TABLE tal:repeat="delivery delivery_list" width="660" height="955" cellpadding="0" cellspacing="0" tal:attributes="class python:here.PT_pageBreak(page_number)"> - <TABLE border="0" width="660" height="900" cellpadding="0" cellspacing="0" - tal:define="order python:delivery.getCausalityValue(portal_type=['Sales Order']); - destination python:delivery.getDestinationValue(portal_type=['Organisation']); - distinct_container_list python:delivery.PackingList_getDistinctContainerList(); - totalizer python:[0,0,0,0]"><!-- Tableau general --> - <TR> - <TD> - <TABLE border="0" width="100%" height="100%"> - <TR> - <TD class="Titre" tal:content="python:delivery.getSourceSectionTitle()">Coramy</TD> - <TD align="center"> - <span class="Titre2">Liste de colisage<span tal:content="python:' n° '+delivery.getId()"/></span><br> - Lieferschein Nr / Delivery note N° - </TD> - <TD align="right"> - <span tal:content="python:'Gravelines, le '+str(here.DateTime_getFormattedDate())"/> - </TD> - </TR> - </TABLE> - </TD> - </TR> - <TR height="18%"><!-- Infos --> - <TD><br> - <TABLE border="0" width="100%" height="100%"> - <TR> - <TD nowrap align="center" class="Bordereau">Commande N°<br>Auftrag Nr / Order N°<br><span class="Normal" tal:content="python:order.getDestinationReference()" /></TD> - <TD nowrap align="center" class="Bordereau" >Poids brut (Kg)<br>Brutto-gewicht / Gross weight <br><span class="Normal" tal:content="python:delivery.PackingList_getTotalGrossWeight()" /></TD> - <TD nowrap rowspan="3"> - <SPAN tal:condition="python:destination<>None"> - <b><SPAN tal:content="python:modules['string'].capwords(destination.getTitle())"/></b> - <br><SPAN tal:condition="python:destination.getPortalType()<>'Category'"> - <SPAN tal:define="address_items python:modules['string']. - split(destination.getDefaultAddress().asText(country='France'),'\n')"> - <SPAN tal:repeat="item address_items"> - <SPAN tal:content="item"/><br> - </SPAN> - </SPAN> - </SPAN> - </SPAN> - </TD> - <TD nowrap align="center" rowspan="2" class="Bordereau">Port<br>Porto / Freight<br><span class="Normal" tal:content="python:delivery.getIncoterm()" /></TD> - </TR> - <TR> - <TD nowrap align="center" class="Bordereau">Confirmation N°<br>Bestätigung Nr <br><span class="Normal" tal:content="python:order.getId()" /></TD> - <TD nowrap align="center" class="Bordereau">Nombre de colis<br>Kolli Anzahl / Nb of parcels <br><span class="Normal" tal:content="python:len(delivery.contentValues(filter={'portal_type':'Container'}))" /></TD> - </TR> - <TR> - <TD nowrap align="center" class="Bordereau"> Date d'expédition<br>Versand Tag / Sending Date <br><span class="Normal" tal:content="python:str(here.DateTime_getFormattedDate(delivery.getTargetStartDate()))" /></TD> - <TD nowrap align="center" class="Bordereau" >Nombre d'articles<br>Artikel Anzahl / Nb of items<br><span class="Normal" tal:content="python:delivery.getTargetTotalQuantity()" /></TD> - <TD nowrap align="center" class="Bordereau" >Transporteur <br> Carrier / Spediteur<br><span class="Normal" tal:content="python:delivery.getDeliveryMode()" /></TD> - </TR> - </TABLE> - </TD> - </TR> - - - <SPAN tal:repeat="container_template distinct_container_list"> - <SPAN tal:define="toto python:here.PT_reset_total_list(totalizer,[1])"/> - <SPAN tal:repeat="delivery_line python:container_template[0].contentValues(filter={'portal_type': - 'Container Line'})"> - <TR><!-- Matrice de ligne de livraison --> - <TD> - - <TABLE border="1" width="100%" - tal:define="correspondance_tailles python:delivery_line.getResourceValue().getSpecialiseValue(portal_type=['Correspondance Tailles']); - coloris_list python:delivery_line.Variated_getColorisList(); - taille_qty python:len(delivery_line.Variated_getTailleList(correspondance_tailles)[0]); - morphologie_list python:delivery_line.getMorphologieList() - "> - <TR> - <TD align="left" - tal:condition="python:container_template[1][0]==container_template[1][1]"> - <b tal:content="python:'Colis %s'%container_template[1][0]"/> - </TD> - <TD align="left" - tal:condition="python:container_template[1][0]<>container_template[1][1]"> - <b tal:content="python:'Colis %s a %s'%(container_template[1][0],container_template[1][1])"/> - </TD> - <TD tal:attributes="colspan python:taille_qty+1" align="center">Quantités réparties par tailles</TD> - </TR> - - <SPAN tal:condition="python:len(morphologie_list)==0" - tal:define="taille_list python:delivery_line.Variated_getTailleList(correspondance_tailles)"><!-- S'Il N'Y A PAS DE VARIANTES MORPHOLOGIQUES --> - <TR tal:condition="python:1"> - <TD nowrap><SPAN tal:content="python:'Modèle : %s' %delivery_line.getResourceValue().getId()"/></TD> - <TD rowspan="2" align="center" tal:repeat="index python:range(taille_qty)" - tal:content="python:taille_list[1][index]">36</TD><!-- BOUCLE SUR LE NB DE TAILLES --> - <TD align="center" rowspan="2" nowrap>Total</TD> - </TR> - <TR> - - <TD> - <SPAN tal:condition="python:delivery_line.getResourceValue().getPortalType()=='Modele'" width="30%" tal:content="python:delivery_line.getResourceValue().getComposition()"/> - <SPAN tal:condition="python:delivery_line.getResourceValue().getPortalType()=='Assortiment'" width="30%" tal:content="python:delivery_line.getResourceValue().getDescription()"/> - </TD> - </TR> - - <SPAN tal:condition="python:len(coloris_list[0])>0"> - <TR tal:repeat="index python:range(len(coloris_list[0]))"><!-- BOUCLE SUR LES COLORIS --> - <TD align="left" tal:content="python:'coloris '+coloris_list[1][index]"></TD> - <SPAN tal:define="toto python:delivery_line.PT_reset_total_list(totalizer,[2,3])"/> - <SPAN tal:repeat="target_quantity python:delivery_line.DeliveryLine_getTargetQuantityList(taille_list[2],coloris_list[2][index])"> - <TD align = right tal:content="python: '%.0f' %target_quantity"/> - <SPAN tal:define="toto python:delivery_line.PT_update_total_list(totalizer,[0,1,2,3],target_quantity)"/> - </SPAN> - <TD align="right" tal:content="python: '%.0f' %totalizer[3]"/> - </TR> - </SPAN> - - <SPAN tal:condition="python:len(coloris_list[0])==0"> - <TR><!-- PAS DE COLORIS --> - <TD align="left"></TD> - <SPAN tal:define="toto python:delivery_line.PT_reset_total_list(totalizer,[2,3])"/> - <SPAN tal:repeat="target_quantity python:delivery_line.DeliveryLine_getTargetQuantityList(taille_list[2])"> - <TD align = right tal:content="python: '%.0f' %target_quantity"/> - <SPAN tal:define="toto python:delivery_line.PT_update_total_list(totalizer,[0,1,2,3],target_quantity)"/> - </SPAN> - <SPAN tal:condition="python:taille_qty==0" - tal:define="toto python:delivery_line.PT_update_total_list(totalizer,[0,1,2,3],delivery_line.getTargetQuantity())"/> - <TD align="right" tal:content="python: '%.0f' %totalizer[3]"/> - </TR> - </SPAN> - - <TR> - <TD align = "right" tal:attributes="colspan python:taille_qty+1">Total colis - </TD> - <TD align="right" tal:content="python: '%.0f' %totalizer[1]"> - </TD> - </TR> - </SPAN> - - <SPAN tal:condition="python:len(morphologie_list)>0"><!-- S'Il Y A DES VARIANTES MORPHOLOGIQUES --> - <SPAN tal:repeat="morphologie morphologie_list"> - <SPAN tal:define="taille_list python:delivery_line.Variated_getTailleList(correspondance_tailles,morphologie); - toto python:delivery_line.PT_reset_total_list(totalizer,[3])"><!-- BOUCLE SUR LES VARIANTES MORPHOLOGIQUES --> - <TR tal:condition="python:1"> - <TD nowrap><SPAN tal:content="python:'Modèle : %s' % '/'.join(morphologie.split('/')[1:])"/></TD> - <TD rowspan="2" align="center" tal:repeat="index python:range(taille_qty)" - tal:content="python:taille_list[1][index]">36</TD><!-- BOUCLE SUR LE NB DE TAILLES --> - <TD align="center" rowspan="2" nowrap>Total</TD> - </TR> - <TR> - - <TD> - <SPAN tal:condition="python:delivery_line.getResourceValue().getPortalType()=='Modele'" width="30%" tal:content="python:delivery_line.getResourceValue().getComposition()"/> - <SPAN tal:condition="python:delivery_line.getResourceValue().getPortalType()=='Assortiment'" width="30%" tal:content="python:delivery_line.getResourceValue().getDescription()"/> - </TD> - </TR> - - <TR tal:repeat="index python:range(len(coloris_list[0]))"><!-- BOUCLE SUR LES COLORIS --> - <TD align="left" tal:content="python:'coloris '+coloris_list[1][index]"></TD> - <SPAN tal:define="toto python:delivery_line.PT_reset_total_list(totalizer,[3])"/> - <SPAN tal:repeat="target_quantity python:delivery_line.DeliveryLine_getTargetQuantityList(taille_list[2],coloris_list[2][index],morphologie)"> - <TD align = right tal:content="python: '%.0f' %target_quantity"/> - <SPAN tal:define="toto python:delivery_line.PT_update_total_list(totalizer,[0,1,2,3],target_quantity)"/> - </SPAN> - <TD align="right" tal:content="python: '%.0f' %totalizer[3]"/> - </TR> - </SPAN> - <TR> - <TD align = "right" tal:attributes="colspan python:taille_qty+1">Total colis - </TD> - <TD align="right" tal:content="python: '%.0f' %totalizer[1]"> - </TD> - </TR> - </SPAN> - - </SPAN> - - </TABLE> - </TD> - </TR> - - <TR tal:define="commentaires_list python:modules['string'].split('','\n')"><!-- Notes --> - <TD valign="top"> - <span tal:repeat="commentaires_item commentaires_list"> - <span tal:content="python:commentaires_item"/></span> - </TD> - </TR> - - </SPAN> - </SPAN> - - <TR> - <TD height="40%"/> - </TR> - <TR> - <TD tal:condition="python:delivery.getSourceSectionTitle()=='BLS'" align="center">BLS - 5 bis, rue Denis Cordonnier - 59820 Gravelines (FRANCE)<br>Tél. : + 33 (0) 3 28 51 86 26 - Fax : + 33 (0) 3 28 23 34 96 - <p class="Copy">S.A.R.L. au capital de 10.000 € - T.V.A. FR 51 442 959 243 - R.C. Dunkerque 442 959 243 - SIRET 442 959 243 00019</p> - </TD> - <TD tal:condition="python:delivery.getSourceSectionTitle()=='Houvenaegel'" align="center">Houvenaegel Création - 5 bis, rue Denis Cordonnier - 59820 Gravelines (FRANCE)<br>Tél. : + 33 (0) 3 28 51 91 55 - Fax : + 33 (0) 3 28 23 34 96 - <p class="Copy">S.A.R.L. au capital de 7.622,45 € - T.V.A. FR 07 422 769 810 - R.C. Dunkerque 422 769 810 - SIRET 422 769 810 00025</p> - </TD> - <TD tal:condition="python:delivery.getSourceSectionTitle()=='Coramy'" align="center">Coramy - 5 bis, rue Denis Cordonnier - 59820 Gravelines (FRANCE)<br>Tél. : + 33 (0) 3 28 51 91 51 - Fax : + 33 (0) 3 28 23 34 96 - <p class="Copy">S.A.S. au capital de 435.200 € - T.V.A. FR 67 611 750 274 - R.C. Dunkerque 611 750 274 - SIRET 611 750 274 00023 - CNUF 15971</p> - </TD> - </TR> - </TABLE> - </TABLE> - </BODY> -</HTML> diff --git a/product/Coramy/skins/coramy_trade/sales_packing_list_container_view.form b/product/Coramy/skins/coramy_trade/sales_packing_list_container_view.form deleted file mode 100755 index 8cf0dae485..0000000000 --- a/product/Coramy/skins/coramy_trade/sales_packing_list_container_view.form +++ /dev/null @@ -1,685 +0,0 @@ -<?xml version="1.0"?> - -<form> - <title>Livraison vente</title> - <row_length>4</row_length> - <name>sales_packing_list_view</name> - <pt>form_view</pt> - <action>base_edit</action> - <method>POST</method> - <enctype>multipart/form-data</enctype> - <encoding>UTF-8</encoding> - <stored_encoding>ISO-8859-1</stored_encoding> - <unicode_mode>false</unicode_mode> - <groups> - <group> - <title>left</title> - <fields> - - <field><id>my_id</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">10</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <max_length></max_length> - <required type="int">1</required> - <title>N° livraison</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - <field><id>my_source_section</id> <type>ListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <extra_item></extra_item> - <first_item type="int">0</first_item> - <hidden type="int">0</hidden> - <items type="list">[]</items> - <required type="int">0</required> - <size type="int">1</size> - <title>Société</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <items>python:here.portal_categories.group.Coramy.getCategoryChildIdItemList(base=1,display_none_category=1)</items> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - <field><id>my_source_administration_title</id> <type>RelationStringField</type> - <values> - <alternate_name></alternate_name> - <base_category>source_administration</base_category> - <catalog_index>Title</catalog_index> - <css_class></css_class> - <default></default> - <default_module>person</default_module> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <jump_method>base_jump_relation</jump_method> - <max_length></max_length> - <portal_type type="list">[('Person', 'Person')]</portal_type> - <required type="int">0</required> - <title>Gestionaire</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <update_method>base_update_relation</update_method> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <default>python:here.getCausalityValue(portal_type="Sales Order").getSourceAdministrationTitle()</default> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - <field><id>my_incoterm</id> <type>ListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <extra_item></extra_item> - <first_item type="int">0</first_item> - <hidden type="int">0</hidden> - <items type="list">[]</items> - <required type="int">0</required> - <size type="int">1</size> - <title>Incoterm</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <items>python:here.portal_categories.incoterm.getCategoryChildItemList(display_id = 'getTitle', display_none_category=1)</items> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - <field><id>my_delivery_mode</id> <type>ListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <extra_item></extra_item> - <first_item type="int">0</first_item> - <hidden type="int">0</hidden> - <items type="list">[]</items> - <required type="int">0</required> - <size type="int">1</size> - <title>Mode de livraison</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <items>here/portal_categories/delivery_mode/getFormItemList</items> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - <field><id>my_source_title</id> <type>RelationStringField</type> - <values> - <alternate_name></alternate_name> - <base_category>source</base_category> - <catalog_index>Title</catalog_index> - <css_class></css_class> - <default></default> - <default_module>organisation</default_module> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <jump_method>base_jump_relation</jump_method> - <max_length></max_length> - <portal_type type="list">[('Organisation', 'Organisation'), ('Category', 'Category'), ('Person', 'Person')]</portal_type> - <required type="int">0</required> - <title>Expédié par</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <update_method>base_update_relation</update_method> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>right</title> - <fields> - - <field><id>my_causality_id</id> <type>RelationStringField</type> - <values> - <alternate_name></alternate_name> - <base_category>causality</base_category> - <catalog_index>id</catalog_index> - <css_class></css_class> - <default></default> - <default_module>commande_vente</default_module> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">10</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <jump_method>base_jump_relation</jump_method> - <max_length></max_length> - <portal_type type="list">[('Sales Order', 'Sales Order')]</portal_type> - <required type="int">0</required> - <title>N° commande</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <update_method>base_update_relation</update_method> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - <field><id>my_destination_reference</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <max_length></max_length> - <required type="int">0</required> - <title>N° commande client</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <default>python:here.getCausalityValue().getDestinationReference()</default> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - <field><id>my_destination_title</id> <type>RelationStringField</type> - <values> - <alternate_name></alternate_name> - <base_category>destination</base_category> - <catalog_index>Title</catalog_index> - <css_class></css_class> - <default></default> - <default_module>organisation</default_module> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <jump_method>base_jump_relation</jump_method> - <max_length></max_length> - <portal_type type="list">[('Organisation', 'Organisation')]</portal_type> - <required type="int">0</required> - <title>Livrer à </title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <update_method>base_update_relation</update_method> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - <field><id>destination_address</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">1</hidden> - <max_length></max_length> - <required type="int">0</required> - <title>Lieu livraison : inconnu</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <title>python: here.getDestinationValue(portal_type=['Organisation']).Organisation_getOneLineAddress()</title> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - <field><id>my_destination_section_title</id> <type>RelationStringField</type> - <values> - <alternate_name></alternate_name> - <base_category>destination_section</base_category> - <catalog_index>Title</catalog_index> - <css_class></css_class> - <default></default> - <default_module>organisation</default_module> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <jump_method>base_jump_relation</jump_method> - <max_length></max_length> - <portal_type type="list">[('Organisation', 'Organisation'), ('Category', 'Category'), ('Person', 'Person')]</portal_type> - <required type="int">0</required> - <title>Pour le compte de</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <update_method>base_update_relation</update_method> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - <field><id>my_start_date</id> <type>DateTimeField</type> - <values> - <allow_empty_time type="int">0</allow_empty_time> - <alternate_name></alternate_name> - <ampm_time_style type="int">0</ampm_time_style> - <css_class></css_class> - <date_only type="int">1</date_only> - <date_separator>/</date_separator> - <default_now type="int">0</default_now> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <hidden type="int">1</hidden> - <input_order>dmy</input_order> - <input_style>text</input_style> - <required type="int">0</required> - <time_separator>:</time_separator> - <title>Date d'expédition prévue</title> - </values> - <tales> - <title>python:'Expédition prévue le : ' + here.getStartDate().strftime('%d/%m/%Y')</title> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="not_datetime">You did not enter a valid date and time.</message> - <message name="datetime_out_of_range">The date and time you entered were out of range.</message> - </messages> - </field> - <field><id>my_target_start_date</id> <type>DateTimeField</type> - <values> - <allow_empty_time type="int">0</allow_empty_time> - <alternate_name></alternate_name> - <ampm_time_style type="int">0</ampm_time_style> - <css_class></css_class> - <date_only type="int">1</date_only> - <date_separator>/</date_separator> - <default_now type="int">0</default_now> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <hidden type="int">0</hidden> - <input_order>dmy</input_order> - <input_style>text</input_style> - <required type="int">0</required> - <time_separator>:</time_separator> - <title>Date d'expédition</title> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="not_datetime">You did not enter a valid date and time.</message> - <message name="datetime_out_of_range">The date and time you entered were out of range.</message> - </messages> - </field> - <field><id>my_stop_date</id> <type>DateTimeField</type> - <values> - <allow_empty_time type="int">0</allow_empty_time> - <alternate_name></alternate_name> - <ampm_time_style type="int">0</ampm_time_style> - <css_class></css_class> - <date_only type="int">1</date_only> - <date_separator>/</date_separator> - <default_now type="int">0</default_now> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <hidden type="int">1</hidden> - <input_order>dmy</input_order> - <input_style>text</input_style> - <required type="int">0</required> - <time_separator>:</time_separator> - <title>Date de livraison prévue</title> - </values> - <tales> - <title>python:'Livraison prévue le : ' + here.getStopDate().strftime('%d/%m/%Y')</title> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="not_datetime">You did not enter a valid date and time.</message> - <message name="datetime_out_of_range">The date and time you entered were out of range.</message> - </messages> - </field> - <field><id>my_target_stop_date</id> <type>DateTimeField</type> - <values> - <allow_empty_time type="int">0</allow_empty_time> - <alternate_name></alternate_name> - <ampm_time_style type="int">0</ampm_time_style> - <css_class></css_class> - <date_only type="int">1</date_only> - <date_separator>/</date_separator> - <default_now type="int">0</default_now> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <hidden type="int">0</hidden> - <input_order>dmy</input_order> - <input_style>text</input_style> - <required type="int">0</required> - <time_separator>:</time_separator> - <title>Date de livraison</title> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="not_datetime">You did not enter a valid date and time.</message> - <message name="datetime_out_of_range">The date and time you entered were out of range.</message> - </messages> - </field> - <field><id>delivery_state</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <max_length></max_length> - <required type="int">0</required> - <title>Etat</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <default>python:here.portal_workflow.getInfoFor(here, 'simulation_state')</default> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>center</title> - <fields> - - <field><id>my_comment</id> <type>TextAreaField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <height type="int">3</height> - <hidden type="int">0</hidden> - <max_length></max_length> - <max_linelength></max_linelength> - <max_lines></max_lines> - <required type="int">0</required> - <title>Commentaires</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - <width type="int">80</width> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_many_lines">You entered too many lines.</message> - <message name="line_too_long">A line was too long.</message> - <message name="too_long">You entered too many characters.</message> - </messages> - </field> - <field><id>my_total_quantity</id> <type>FloatField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">10</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">1</hidden> - <required type="int">0</required> - <title>Objectif quantité</title> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <title>python:'Objectif quantité : %.2f' % here.getTotalQuantity()</title> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="not_float">You did not enter a floating point number.</message> - </messages> - </field> - <field><id>my_target_total_quantity</id> <type>FloatField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">10</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">1</hidden> - <required type="int">0</required> - <title>Quantité</title> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <title>python:'Quantité : %.2f' % here.getTargetTotalQuantity()</title> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="not_float">You did not enter a floating point number.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>bottom</title> - <fields> - - <field><id>listbox</id> <type>ListBox</type> - <values> - <all_columns type="list">[]</all_columns> - <all_editable_columns type="list">[]</all_editable_columns> - <alternate_name></alternate_name> - <columns type="list">[('Id', 'Colis'), ('int_index', 'Num\xe9ro'), ('resource_title', 'Conteneur'), ('variation_text', 'Variantes'), ('gross_weight', 'Poids brut'), ('target_total_quantity', 'Quantit\xe9 colis\xe9e'), ('Description', 'Description')]</columns> - <css_class></css_class> - <default></default> - <default_params type="list">[]</default_params> - <description></description> - <domain_root_list type="list">[]</domain_root_list> - <domain_tree type="int">0</domain_tree> - <editable type="int">1</editable> - <editable_columns type="list">[('gross_weight', 'gross_weight')]</editable_columns> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <global_attributes type="list">[]</global_attributes> - <hidden type="int">0</hidden> - <lines type="int">100</lines> - <list_action>container_list</list_action> - <list_method type="method">searchFolder</list_method> - <meta_types type="list">[]</meta_types> - <portal_types type="list">[('Container', 'Container')]</portal_types> - <report_root_list type="list">[]</report_root_list> - <report_tree type="int">0</report_tree> - <search type="int">0</search> - <search_columns type="list">[]</search_columns> - <select type="int">0</select> - <selection_name>container_selection</selection_name> - <sort type="list">[('id', 'id')]</sort> - <sort_columns type="list">[]</sort_columns> - <stat_method></stat_method> - <title>Colis</title> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>hidden</title> - <fields> - - <field><id>listbox_gross_weight</id> <type>FloatField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">10</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <required type="int">0</required> - <title>Poids brut</title> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="not_float">You did not enter a floating point number.</message> - </messages> - </field> - </fields> - </group> - </groups> -</form> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_trade/sales_packing_list_list.form b/product/Coramy/skins/coramy_trade/sales_packing_list_list.form deleted file mode 100755 index 212dab41cd..0000000000 --- a/product/Coramy/skins/coramy_trade/sales_packing_list_list.form +++ /dev/null @@ -1,63 +0,0 @@ -<?xml version="1.0"?> - -<form> - <title>Liste de livraisons</title> - <row_length>4</row_length> - <name>sales_packing_list_list</name> - <pt>form_list</pt> - <action></action> - <method>POST</method> - <enctype></enctype> - <encoding>UTF-8</encoding> - <stored_encoding>ISO-8859-1</stored_encoding> - <unicode_mode>false</unicode_mode> - <groups> - <group> - <title>Default</title> - <fields> - - <field><id>listbox</id> <type>ListBox</type> - <values> - <all_columns type="list">[('id', 'Livraison'), ('default_causality_id', 'Commande'), ('default_source_section_title', 'Soci\xe9t\xe9'), ('default_destination_title', 'Livrer \xe0'), ('target_start_date', "Date d'exp\xe9dition"), ('target_stop_date', 'Date de livraison'), ('causality_state', 'Coh\xe9rence'), ('simulation_state', 'Etat')]</all_columns> - <all_editable_columns type="list">[]</all_editable_columns> - <alternate_name></alternate_name> - <columns type="list">[('id', 'Livraison'), ('default_causality_id', 'Commande'), ('default_source_section_title', 'Soci\xe9t\xe9'), ('default_destination_title', 'Livrer \xe0'), ('target_start_date', "Date d'exp\xe9dition"), ('target_stop_date', 'Date de livraison'), ('causality_state', 'Coh\xe9rence'), ('simulation_state', 'Etat')]</columns> - <css_class></css_class> - <default></default> - <default_params type="list">[]</default_params> - <description></description> - <domain_root_list type="list">[]</domain_root_list> - <domain_tree type="int">0</domain_tree> - <editable type="int">1</editable> - <editable_columns type="list">[]</editable_columns> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <global_attributes type="list">[]</global_attributes> - <hidden type="int">0</hidden> - <lines type="int">30</lines> - <list_action>list</list_action> - <list_method type="method">portal_catalog</list_method> - <meta_types type="list">[]</meta_types> - <portal_types type="list">[('Sales Packing List', 'Sales Packing List')]</portal_types> - <report_root_list type="list">[]</report_root_list> - <report_tree type="int">0</report_tree> - <search type="int">1</search> - <search_columns type="list">[]</search_columns> - <select type="int">1</select> - <selection_name>sales_packing_list_selection</selection_name> - <sort type="list">[('id', 'id')]</sort> - <sort_columns></sort_columns> - <stat_method></stat_method> - <title>Livraisons de vente</title> - </values> - <tales> - <list_method>python:here.getPortalObject().portal_skins.local_list_method[here.REQUEST.list_method_id]</list_method> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - </messages> - </field> - </fields> - </group> - </groups> -</form> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_trade/sales_packing_list_print.pt b/product/Coramy/skins/coramy_trade/sales_packing_list_print.pt deleted file mode 100755 index 038ab2075b..0000000000 --- a/product/Coramy/skins/coramy_trade/sales_packing_list_print.pt +++ /dev/null @@ -1,200 +0,0 @@ -<HTML> - <HEAD> - <meta http-equiv="content-type" content="text/html;charset=ISO-8859-1"> - <title tal:content="here/getTitle">Coramy</title> - <link rel=stylesheet type="text/css" href="modele_catalog_c"> - </HEAD> - <BODY bgcolor="#ffffff" tal:define="delivery_list python:here.object_action_list(selection_name='sales_packing_list_selection',max_nb=10); - page_number python:[0]"> - <TABLE tal:repeat="delivery delivery_list" width="660" height="955" cellpadding="0" cellspacing="0" tal:attributes="class python:here.PT_pageBreak(page_number)"> - <TABLE border="0" width="660" height="900" cellpadding="0" cellspacing="0" - tal:define="order python:delivery.getCausalityValue(portal_type=['Sales Order','Sales Packing List']); - destination python:delivery.getDestinationValue(portal_type=['Organisation']); - delivery_line_list python:filter(lambda line_item: line_item.getTargetTotalQuantity() > 0, delivery.contentValues(filter={'portal_type': - 'Sales Packing List Line'})); - totalizer python:[0,0,0]"><!-- Tableau general --> - <TR> - <TD> - <TABLE border="0" width="100%" height="100%"> - <TR> - <TD class="Titre" tal:content="python:delivery.getSourceSectionTitle()">Coramy</TD> - <TD align="center"> - <span class="Titre2">Bordereau de livraison<span tal:content="python:' n° '+delivery.getId()"/></span><br> - Lieferschein Nr / Delivery note N° - </TD> - <TD align="right"> - <span tal:content="python:'Gravelines, le '+str(delivery.DateTime_getFormattedDate())"/> - </TD> - </TR> - </TABLE> - </TD> - </TR> - <TR height="18%"><!-- Infos --> - <TD><br> - <TABLE border="0" width="100%" height="100%"> - <TR> - <TD nowrap align="center" class="Bordereau">Commande N°<br>Auftrag Nr / Order N°<br><span class="Normal" tal:content="python:order.getDestinationReference()" /></TD> - <TD nowrap align="center" class="Bordereau" >Poids brut (Kg)<br>Brutto-gewicht / Gross weight <br><span class="Normal" tal:content="python:delivery.PackingList_getTotalGrossWeight()" /></TD> - <TD nowrap rowspan="3"> - <SPAN tal:condition="python:destination<>None"> - <b><SPAN tal:content="python:modules['string'].capwords(destination.getTitle())"/></b> - <br><SPAN tal:condition="python:destination.getPortalType()<>'Category'"> - <SPAN tal:define="address_items python:modules['string']. - split(destination.getDefaultAddress().asText(country='France'),'\n')"> - <SPAN tal:repeat="item address_items"> - <SPAN tal:content="item"/><br> - </SPAN> - </SPAN> - </SPAN> - </SPAN> - </TD> - <TD nowrap align="center" rowspan="2" class="Bordereau">Port<br>Porto / Freight<br><span class="Normal" tal:content="python:delivery.getIncoterm()" /></TD> - </TR> - <TR> - <TD nowrap align="center" class="Bordereau">Confirmation N°<br>Bestätigung Nr <br><span class="Normal" tal:content="python:order.getId()" /></TD> - <TD nowrap align="center" class="Bordereau">Nombre de colis<br>Kolli Anzahl / Nb of parcels <br><span class="Normal" tal:content="python:len(delivery.contentValues(filter={'portal_type':'Container'}))" /></TD> - </TR> - <TR> - <TD nowrap align="center" class="Bordereau"> Date d'expédition<br>Versand Tag / Sending Date <br><span class="Normal" tal:content="python:str(here.DateTime_getFormattedDate(delivery.getTargetStartDate()))" /></TD> - <TD nowrap align="center" class="Bordereau" >Nombre d'articles<br>Artikel Anzahl / Nb of items<br><span class="Normal" tal:content="python:delivery.getTargetTotalQuantity()" /></TD> - <TD nowrap align="center" class="Bordereau" >Transporteur <br> Carrier / Spediteur<br><span class="Normal" tal:content="python:delivery.getDeliveryMode()" /></TD> - </TR> - </TABLE> - </TD> - </TR> - - - <SPAN tal:repeat="delivery_line delivery_line_list"> - <TR><!-- Matrice de ligne de livraison --> - <TD> - - <TABLE border="1" width="100%" - tal:define="correspondance_tailles python:delivery_line.getResourceValue().getSpecialiseValue(portal_type=['Correspondance Tailles']); - coloris_list python:delivery_line.Variated_getColorisList(); - taille_qty python:len(delivery_line.Variated_getTailleList(correspondance_tailles)[0]); - morphologie_list python:delivery_line.getMorphologieList(); - toto python:delivery_line.PT_reset_total_list(totalizer,[1]) - "> - <TR> - <TD align="center">Dénomination des produits</TD> - <TD tal:attributes="colspan python:taille_qty+1" align="center">Quantités réparties par tailles</TD> - </TR> - - <SPAN tal:condition="python:len(morphologie_list)==0" - tal:define="taille_list python:delivery_line.Variated_getTailleList(correspondance_tailles)"><!-- S'Il N'Y A PAS DE VARIANTES MORPHOLOGIQUES --> - <TR tal:condition="python:1"> - <TD nowrap><SPAN tal:content="python:'Modèle : %s / %s' % (delivery_line.getResourceValue().getId() , delivery_line.getResourceValue().getDestinationReference(''))"/></TD> - <TD rowspan="2" align="center" tal:repeat="index python:range(taille_qty)" - tal:content="python:taille_list[1][index]">36</TD><!-- BOUCLE SUR LE NB DE TAILLES --> - <TD align="center" rowspan="2" nowrap>Total</TD> - </TR> - <TR> - - <TD> - <SPAN tal:condition="python:delivery_line.getResourceValue().getPortalType()=='Modele'" width="30%" tal:content="python:delivery_line.getResourceValue().getComposition()"/> - <SPAN tal:condition="python:delivery_line.getResourceValue().getPortalType()=='Assortiment'" width="30%" tal:content="python:delivery_line.getResourceValue().getDescription()"/> - </TD> - </TR> - - <SPAN tal:condition="python:len(coloris_list[0])>0"> - <TR tal:repeat="index python:range(len(coloris_list[0]))"><!-- BOUCLE SUR LES COLORIS --> - <TD align="left" tal:content="python:'coloris '+coloris_list[1][index]"></TD> - <SPAN tal:define="toto python:delivery_line.PT_reset_total_list(totalizer,[2])"/> - <SPAN tal:repeat="target_quantity python:delivery_line.DeliveryLine_getTargetQuantityList(taille_list[2],coloris_list[2][index])"> - <TD tal:condition="python:taille_qty!=0" align = "right" tal:content="python: '%.0f' %target_quantity"/> - <SPAN tal:define="toto python:delivery_line.PT_update_total_list(totalizer,[0,1,2],target_quantity)"/> - </SPAN> - <TD align="right" tal:content="python: '%.0f' %totalizer[2]"/> - </TR> - </SPAN> - - <SPAN tal:condition="python:len(coloris_list[0])==0"> - <TR><!-- PAS DE COLORIS --> - <TD align="left"></TD> - <SPAN tal:define="toto python:delivery_line.PT_reset_total_list(totalizer,[2])"/> - <SPAN tal:condition="python:taille_qty!=0" - tal:repeat="target_quantity python:delivery_line.DeliveryLine_getTargetQuantityList(taille_list[2])"> - <TD align = right tal:content="python: '%.0f' %target_quantity"/> - <SPAN tal:define="toto python:delivery_line.PT_update_total_list(totalizer,[0,1,2],target_quantity)"/> - </SPAN> - <SPAN tal:condition="python:taille_qty==0" - tal:define="toto python:delivery_line.PT_update_total_list(totalizer,[0,1,2],delivery_line.getTargetQuantity())"/> - <TD align="right" tal:content="python: '%.0f' %totalizer[2]"/> - </TR> - </SPAN> - - <TR> - <TD tal:attributes="colspan python:taille_qty+1" /> - <TD align="right" tal:content="python: '%.0f' %totalizer[1]"> - </TD> - </TR> - </SPAN> - - <SPAN tal:condition="python:len(morphologie_list)>0"><!-- S'Il Y A DES VARIANTES MORPHOLOGIQUES --> - <SPAN tal:repeat="morphologie morphologie_list"> - <SPAN tal:define="taille_list python:delivery_line.Variated_getTailleList(correspondance_tailles,morphologie); - toto python:delivery_line.PT_reset_total_list(totalizer,[1])"><!-- BOUCLE SUR LES VARIANTES MORPHOLOGIQUES --> - <TR tal:condition="python:1"> - <TD nowrap><SPAN tal:content="python:'Modèle : %s' % '/'.join(morphologie.split('/')[1:])"/></TD> - <TD rowspan="2" align="center" tal:repeat="index python:range(taille_qty)" - tal:content="python:taille_list[1][index]">36</TD><!-- BOUCLE SUR LE NB DE TAILLES --> - <TD align="center" rowspan="2" nowrap>Total</TD> - </TR> - <TR> - - <TD> - <SPAN tal:condition="python:delivery_line.getResourceValue().getPortalType()=='Modele'" width="30%" tal:content="python:delivery_line.getResourceValue().getComposition()"/> - <SPAN tal:condition="python:delivery_line.getResourceValue().getPortalType()=='Assortiment'" width="30%" tal:content="python:delivery_line.getResourceValue().getDescription()"/> - </TD> - </TR> - - <TR tal:repeat="index python:range(len(coloris_list[0]))"><!-- BOUCLE SUR LES COLORIS --> - <TD align="left" tal:content="python:'coloris '+coloris_list[1][index]"></TD> - <SPAN tal:define="toto python:delivery_line.PT_reset_total_list(totalizer,[2])"/> - <SPAN tal:repeat="target_quantity python:delivery_line.DeliveryLine_getTargetQuantityList(taille_list[2],coloris_list[2][index],morphologie)"> - <TD align = right tal:content="python: '%.0f' %target_quantity"/> - <SPAN tal:define="toto python:delivery_line.PT_update_total_list(totalizer,[0,1,2],target_quantity)"/> - </SPAN> - <TD align="right" tal:content="python: '%.0f' %totalizer[2]"/> - </TR> - </SPAN> - <TR> - <TD tal:attributes="colspan python:taille_qty+1" /> - <TD align="right" tal:content="python: '%.0f' %totalizer[1]"> - </TD> - </TR> - </SPAN> - - </SPAN> - - </TABLE> - </TD> - </TR> - - <TR tal:define="commentaires_list python:modules['string'].split('','\n')"><!-- Notes --> - <TD valign="top"> - <span tal:repeat="commentaires_item commentaires_list"> - <span tal:content="python:commentaires_item"/></span> - </TD> - </TR> - - </SPAN> - - <TR> - <TD height="40%"/> - </TR> - <TR> - <TD tal:condition="python:delivery.getSourceSectionTitle()=='BLS'" align="center">BLS - 5 bis, rue Denis Cordonnier - 59820 Gravelines (FRANCE)<br>Tél. : + 33 (0) 3 28 51 86 26 - Fax : + 33 (0) 3 28 23 34 96 - <p class="Copy">S.A.R.L. au capital de 10.000 € - T.V.A. FR 51 442 959 243 - R.C. Dunkerque 442 959 243 - SIRET 442 959 243 00019</p> - </TD> - <TD tal:condition="python:delivery.getSourceSectionTitle()=='Houvenaegel'" align="center">Houvenaegel Création - 5 bis, rue Denis Cordonnier - 59820 Gravelines (FRANCE)<br>Tél. : + 33 (0) 3 28 51 91 55 - Fax : + 33 (0) 3 28 23 34 96 - <p class="Copy">S.A.R.L. au capital de 7.622,45 € - T.V.A. FR 07 422 769 810 - R.C. Dunkerque 422 769 810 - SIRET 422 769 810 00025</p> - </TD> - <TD tal:condition="python:delivery.getSourceSectionTitle()=='Coramy'" align="center">Coramy - 5 bis, rue Denis Cordonnier - 59820 Gravelines (FRANCE)<br>Tél. : + 33 (0) 3 28 51 91 51 - Fax : + 33 (0) 3 28 23 34 96 - <p class="Copy">S.A.S. au capital de 435.200 € - T.V.A. FR 67 611 750 274 - R.C. Dunkerque 611 750 274 - SIRET 611 750 274 00023 - CNUF 15971</p> - </TD> - </TR> - </TABLE> - </TABLE> - </BODY> -</HTML> diff --git a/product/Coramy/skins/coramy_trade/sales_packing_list_print_remise_transporteur.pt b/product/Coramy/skins/coramy_trade/sales_packing_list_print_remise_transporteur.pt deleted file mode 100755 index f7b53032b3..0000000000 --- a/product/Coramy/skins/coramy_trade/sales_packing_list_print_remise_transporteur.pt +++ /dev/null @@ -1,130 +0,0 @@ -<HTML> - <HEAD> - <meta http-equiv="content-type" content="text/html;charset=ISO-8859-1"> - <title tal:content="here/getTitle">Coramy</title> - <link rel=stylesheet type="text/css" href="modele_catalog_c"> - </HEAD> - <BODY bgcolor="#ffffff" tal:define="delivery_dict python:here.SalesPackingList_buildRemiseTransporteurDict(); - page_number python:[0]"> - <SPAN tal:repeat="societe python:delivery_dict.keys()"> - <SPAN tal:repeat="transporteur python:delivery_dict[societe].keys()" - tal:define="totalizer python:[0,0,0,0]"> - - <TABLE border="0" width="660" height="900" cellpadding="0" cellspacing="0" - tal:define="transporteur_items python:transporteur.split('/'); - pretty_transporteur python:transporteur_items[len(transporteur_items)-1]"><!-- Tableau general --> - <TR> - <TD> - <TABLE border="0" width="100%" height="100%"> - <TR> - <TD class="Titre" tal:content="societe">Coramy</TD> - <TD align="center"> - <span class="Titre2">Remise de colis à <span tal:content="pretty_transporteur"/></span> - </TD> - <TD align="right"> - <span tal:content="python:'Gravelines, le '+str(here.DateTime_getFormattedDate())"/> - </TD> - </TR> - </TABLE> - </TD> - </TR> - <TR height="18%"><!-- Infos --> - <TD><br> - <TABLE border="1" width="100%" height="100%"> - <TR> - <TD>Destinataire - </TD> - <TD nowrap>No Livraison - </TD> - <TD nowrap>No Commande client - </TD> - <TD>Nb Colis - </TD> - <TD>Poids (kg) - </TD> - </TR> - <SPAN tal:repeat="destination_organisation python:delivery_dict[societe][transporteur].keys()" width="660" height="955" cellpadding="0" cellspacing="0" tal:attributes="class python:here.PT_pageBreak(page_number)"> - <TR> - <SPAN tal:define="destination python:here.restrictedTraverse(destination_organisation); - toto python:here.PT_reset_total_list(totalizer,[1,3])"> - <TD valign="top" tal:attributes="rowspan python:len(delivery_dict[societe][transporteur][destination_organisation])+2"> - <SPAN tal:condition="python:destination<>None"> - <b><SPAN tal:content="python:modules['string'].capwords(destination.getTitle())"/></b> - <br><SPAN tal:condition="python:destination.getPortalType()<>'Category'"> - <SPAN tal:define="address_items python:modules['string']. - split(destination.getDefaultAddress().asText(country='France'),'\n')"> - <SPAN tal:repeat="item address_items"> - <SPAN tal:content="item"/><br> - </SPAN> - </SPAN> - </SPAN> - </SPAN> - </TD> - </SPAN> - </TR> - <SPAN tal:repeat="delivery python:delivery_dict[societe][transporteur][destination_organisation]"> - <TR><!-- Détail des livraisons --> - <TD tal:content="python:delivery.getId()"> - </TD> - <TD tal:define="order python:delivery.getCausalityValue(portal_type=['Sales Order'])"> - <SPAN tal:content="python:order.getDestinationReference()"/> - </TD> - <TD align="right" tal:define="colis_nb python:len(delivery.contentValues(filter={'portal_type':'Container'}))"> - <SPAN tal:define="toto python:delivery.PT_update_total_list(totalizer,[0,1],colis_nb)"/> - <SPAN tal:content="colis_nb"/> - </TD> - <TD align="right" tal:define="weight python:delivery.PackingList_getTotalGrossWeight()"> - <SPAN tal:define="toto python:delivery.PT_update_total_list(totalizer,[2,3],weight)"/> - <SPAN tal:content="python:'%.1f' %weight"/> - </TD> - </TR> - </SPAN> - - <TR> <!-- Totaux par destinataire --> - <TD align="right" colspan="2"><b>Sous-total</b> - </TD> - <TD align="right"><b> - <SPAN tal:content="python:totalizer[1]"/></b> - </TD> - <TD align="right"><b> - <SPAN tal:content="python:'%.1f' %totalizer[3]"/></b> - </TD> - </TR> - - </SPAN> - - <TR> <!-- Totaux par transporteur --> - <TD align="right" colspan="3"><b>TOTAL</b> - </TD> - <TD align="right"><b> - <SPAN tal:content="python:totalizer[0]"/></b> - </TD> - <TD align="right"><b> - <SPAN tal:content="python:'%.1f' %totalizer[2]"/></b> - </TD> - </TR> - - <TR> - <TD colspan="5"> - <b><SPAN tal:content="python:'Je reconnais avoir pris en charge %s colis pour un poids approximatif de %s kg pour le compte de la société %s.' %(totalizer[0],totalizer[2],pretty_transporteur)"/></b><br>Le chauffeur - </TD> - </TR> - </TABLE> - </TD> - </TR> - <TR> - <TD tal:condition="python:societe=='BLS'" align="center">BLS - 5 bis, rue Denis Cordonnier - 59820 Gravelines (FRANCE)<br>Tél. : + 33 (0) 3 28 51 86 26 - Fax : + 33 (0) 3 28 23 34 96 - <p class="Copy">S.A.R.L. au capital de 10.000 € - T.V.A. FR 51 442 959 243 - R.C. Dunkerque 442 959 243 - SIRET 442 959 243 00019</p> - </TD> - <TD tal:condition="python:societe=='Houvenaegel'" align="center">Houvenaegel Création - 5 bis, rue Denis Cordonnier - 59820 Gravelines (FRANCE)<br>Tél. : + 33 (0) 3 28 51 91 55 - Fax : + 33 (0) 3 28 23 34 96 - <p class="Copy">S.A.R.L. au capital de 7.622,45 € - T.V.A. FR 07 422 769 810 - R.C. Dunkerque 422 769 810 - SIRET 422 769 810 00025</p> - </TD> - <TD tal:condition="python:societe=='Coramy'" align="center">Coramy - 5 bis, rue Denis Cordonnier - 59820 Gravelines (FRANCE)<br>Tél. : + 33 (0) 3 28 51 91 51 - Fax : + 33 (0) 3 28 23 34 96 - <p class="Copy">S.A.S. au capital de 435.200 € - T.V.A. FR 67 611 750 274 - R.C. Dunkerque 611 750 274 - SIRET 611 750 274 00023 - CNUF 15971</p> - </TD> - </TR> - </TABLE> - </SPAN> - </SPAN> - </BODY> -</HTML> diff --git a/product/Coramy/skins/coramy_trade/sales_packing_list_secure_print.py b/product/Coramy/skins/coramy_trade/sales_packing_list_secure_print.py deleted file mode 100755 index 9309750966..0000000000 --- a/product/Coramy/skins/coramy_trade/sales_packing_list_secure_print.py +++ /dev/null @@ -1,19 +0,0 @@ -## Script (Python) "sales_packing_list_secure_print" -##bind container=container -##bind context=context -##bind namespace= -##bind script=script -##bind subpath=traverse_subpath -##parameters=form_id='', packing_list_page_template -##title= -## -packing_list = context -request = context.REQUEST - -packing_list.flushActivity(invoke=1) - -redirect_url = '%s/%s?%s' % ( context.absolute_url() - , packing_list_page_template - , 'portal_status_message=Impression+en+cours.' - ) -request[ 'RESPONSE' ].redirect( redirect_url ) diff --git a/product/Coramy/skins/coramy_trade/sales_packing_list_view.form b/product/Coramy/skins/coramy_trade/sales_packing_list_view.form deleted file mode 100755 index f8a1666029..0000000000 --- a/product/Coramy/skins/coramy_trade/sales_packing_list_view.form +++ /dev/null @@ -1,747 +0,0 @@ -<?xml version="1.0"?> - -<form> - <title>Livraison vente</title> - <row_length>4</row_length> - <name>sales_packing_list_view</name> - <pt>form_view</pt> - <action>base_edit</action> - <method>POST</method> - <enctype>multipart/form-data</enctype> - <encoding>UTF-8</encoding> - <stored_encoding>ISO-8859-1</stored_encoding> - <unicode_mode>false</unicode_mode> - <groups> - <group> - <title>left</title> - <fields> - - <field><id>my_id</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">10</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <max_length></max_length> - <required type="int">1</required> - <title>N° livraison</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - <field><id>my_source_section</id> <type>ListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <extra_item></extra_item> - <first_item type="int">0</first_item> - <hidden type="int">0</hidden> - <items type="list">[]</items> - <required type="int">0</required> - <size type="int">1</size> - <title>Société</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <items>python:here.portal_categories.group.Coramy.getCategoryChildIdItemList(base=1,display_none_category=1)</items> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - <field><id>my_source_administration_title</id> <type>RelationStringField</type> - <values> - <alternate_name></alternate_name> - <base_category>source_administration</base_category> - <catalog_index>Title</catalog_index> - <css_class></css_class> - <default></default> - <default_module>person</default_module> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <jump_method>base_jump_relation</jump_method> - <max_length></max_length> - <portal_type type="list">[('Person', 'Person')]</portal_type> - <required type="int">0</required> - <title>Gestionaire</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <update_method>base_update_relation</update_method> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <default>python:here.getCausalityValue(portal_type="Sales Order").getSourceAdministrationTitle()</default> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - <field><id>my_incoterm</id> <type>ListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <extra_item></extra_item> - <first_item type="int">0</first_item> - <hidden type="int">0</hidden> - <items type="list">[]</items> - <required type="int">0</required> - <size type="int">1</size> - <title>Incoterm</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <items>python:here.portal_categories.incoterm.getCategoryChildItemList(display_id = 'getTitle', display_none_category=1)</items> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - <field><id>my_delivery_mode</id> <type>ListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <extra_item></extra_item> - <first_item type="int">0</first_item> - <hidden type="int">0</hidden> - <items type="list">[]</items> - <required type="int">0</required> - <size type="int">1</size> - <title>Mode de livraison</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <items>here/portal_categories/delivery_mode/getFormItemList</items> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - <field><id>my_source_title</id> <type>RelationStringField</type> - <values> - <alternate_name></alternate_name> - <base_category>source</base_category> - <catalog_index>Title</catalog_index> - <css_class></css_class> - <default></default> - <default_module>organisation</default_module> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <jump_method>base_jump_relation</jump_method> - <max_length></max_length> - <portal_type type="list">[('Organisation', 'Organisation'), ('Category', 'Category'), ('Person', 'Person')]</portal_type> - <required type="int">0</required> - <title>Expédié par</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <update_method>base_update_relation</update_method> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>right</title> - <fields> - - <field><id>my_causality_id</id> <type>RelationStringField</type> - <values> - <alternate_name></alternate_name> - <base_category>causality</base_category> - <catalog_index>id</catalog_index> - <css_class></css_class> - <default></default> - <default_module>commande_vente</default_module> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">10</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <jump_method>base_jump_relation</jump_method> - <max_length></max_length> - <portal_type type="list">[('Sales Order', 'Sales Order')]</portal_type> - <required type="int">0</required> - <title>N° commande</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <update_method>base_update_relation</update_method> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - <field><id>my_destination_reference</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <max_length></max_length> - <required type="int">0</required> - <title>N° commande client</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <default>python:here.getCausalityValue().getDestinationReference()</default> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - <field><id>my_destination_title</id> <type>RelationStringField</type> - <values> - <alternate_name></alternate_name> - <base_category>destination</base_category> - <catalog_index>Title</catalog_index> - <css_class></css_class> - <default></default> - <default_module>organisation</default_module> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <jump_method>base_jump_relation</jump_method> - <max_length></max_length> - <portal_type type="list">[('Organisation', 'Organisation')]</portal_type> - <required type="int">0</required> - <title>Livrer à </title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <update_method>base_update_relation</update_method> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - <field><id>destination_address</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">1</hidden> - <max_length></max_length> - <required type="int">0</required> - <title>Lieu livraison : inconnu</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <title>python: here.getDestinationValue(portal_type=['Organisation']).Organisation_getOneLineAddress()</title> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - <field><id>my_destination_section_title</id> <type>RelationStringField</type> - <values> - <alternate_name></alternate_name> - <base_category>destination_section</base_category> - <catalog_index>Title</catalog_index> - <css_class></css_class> - <default></default> - <default_module>organisation</default_module> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <jump_method>base_jump_relation</jump_method> - <max_length></max_length> - <portal_type type="list">[('Organisation', 'Organisation'), ('Category', 'Category'), ('Person', 'Person')]</portal_type> - <required type="int">0</required> - <title>Pour le compte de</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <update_method>base_update_relation</update_method> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - <field><id>my_start_date</id> <type>DateTimeField</type> - <values> - <allow_empty_time type="int">0</allow_empty_time> - <alternate_name></alternate_name> - <ampm_time_style type="int">0</ampm_time_style> - <css_class></css_class> - <date_only type="int">1</date_only> - <date_separator>/</date_separator> - <default_now type="int">0</default_now> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <hidden type="int">1</hidden> - <input_order>dmy</input_order> - <input_style>text</input_style> - <required type="int">0</required> - <time_separator>:</time_separator> - <title>Date d'expédition prévue</title> - </values> - <tales> - <title>python:'Expédition prévue le : ' + here.getStartDate().strftime('%d/%m/%Y')</title> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="not_datetime">You did not enter a valid date and time.</message> - <message name="datetime_out_of_range">The date and time you entered were out of range.</message> - </messages> - </field> - <field><id>my_target_start_date</id> <type>DateTimeField</type> - <values> - <allow_empty_time type="int">0</allow_empty_time> - <alternate_name></alternate_name> - <ampm_time_style type="int">0</ampm_time_style> - <css_class></css_class> - <date_only type="int">1</date_only> - <date_separator>/</date_separator> - <default_now type="int">0</default_now> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <hidden type="int">0</hidden> - <input_order>dmy</input_order> - <input_style>text</input_style> - <required type="int">0</required> - <time_separator>:</time_separator> - <title>Date d'expédition</title> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="not_datetime">You did not enter a valid date and time.</message> - <message name="datetime_out_of_range">The date and time you entered were out of range.</message> - </messages> - </field> - <field><id>my_stop_date</id> <type>DateTimeField</type> - <values> - <allow_empty_time type="int">0</allow_empty_time> - <alternate_name></alternate_name> - <ampm_time_style type="int">0</ampm_time_style> - <css_class></css_class> - <date_only type="int">1</date_only> - <date_separator>/</date_separator> - <default_now type="int">0</default_now> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <hidden type="int">1</hidden> - <input_order>dmy</input_order> - <input_style>text</input_style> - <required type="int">0</required> - <time_separator>:</time_separator> - <title>Date de livraison prévue</title> - </values> - <tales> - <title>python:'Livraison prévue le : ' + here.getStopDate().strftime('%d/%m/%Y')</title> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="not_datetime">You did not enter a valid date and time.</message> - <message name="datetime_out_of_range">The date and time you entered were out of range.</message> - </messages> - </field> - <field><id>my_target_stop_date</id> <type>DateTimeField</type> - <values> - <allow_empty_time type="int">0</allow_empty_time> - <alternate_name></alternate_name> - <ampm_time_style type="int">0</ampm_time_style> - <css_class></css_class> - <date_only type="int">1</date_only> - <date_separator>/</date_separator> - <default_now type="int">0</default_now> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <hidden type="int">0</hidden> - <input_order>dmy</input_order> - <input_style>text</input_style> - <required type="int">0</required> - <time_separator>:</time_separator> - <title>Date de livraison</title> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="not_datetime">You did not enter a valid date and time.</message> - <message name="datetime_out_of_range">The date and time you entered were out of range.</message> - </messages> - </field> - <field><id>delivery_state</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <max_length></max_length> - <required type="int">0</required> - <title>Etat</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <default>python:here.portal_workflow.getInfoFor(here, 'simulation_state')</default> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>center</title> - <fields> - - <field><id>my_comment</id> <type>TextAreaField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <height type="int">3</height> - <hidden type="int">0</hidden> - <max_length></max_length> - <max_linelength></max_linelength> - <max_lines></max_lines> - <required type="int">0</required> - <title>Commentaires</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - <width type="int">80</width> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_many_lines">You entered too many lines.</message> - <message name="line_too_long">A line was too long.</message> - <message name="too_long">You entered too many characters.</message> - </messages> - </field> - <field><id>my_total_quantity</id> <type>FloatField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">10</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">1</hidden> - <required type="int">0</required> - <title>Objectif quantité</title> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <title>python:'Objectif quantité : %.2f' % here.getTotalQuantity()</title> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="not_float">You did not enter a floating point number.</message> - </messages> - </field> - <field><id>my_target_total_quantity</id> <type>FloatField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">10</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">1</hidden> - <required type="int">0</required> - <title>Quantité</title> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <title>python:'Quantité colisée : %.2f' % here.getTargetTotalQuantity()</title> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="not_float">You did not enter a floating point number.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>bottom</title> - <fields> - - <field><id>listbox</id> <type>ListBox</type> - <values> - <all_columns type="list">[]</all_columns> - <all_editable_columns type="list">[]</all_editable_columns> - <alternate_name></alternate_name> - <columns type="list">[('resource_title', 'Produit'), ('variation_text', 'Variantes'), ('Amount_getColorisClient', 'Coloris client'), ('Amount_getTailleClient', 'Taille client'), ('Amount_getCodeArticleClient', 'Code article'), ('quantity', 'Objectif quantit\xe9'), ('target_quantity', 'Quantit\xe9 colis\xe9e'), ('quantity_unit', 'Unit\xe9'), ('item_id_list', 'Lots associ\xe9s')]</columns> - <css_class></css_class> - <default></default> - <default_params type="list">[]</default_params> - <description></description> - <domain_root_list type="list">[]</domain_root_list> - <domain_tree type="int">0</domain_tree> - <editable type="int">1</editable> - <editable_columns type="list">[('price', 'price'), ('target_quantity', 'target_quantity'), ('item_id_list', 'item_id_list'), ('quantity_unit', 'quantity_unit')]</editable_columns> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <global_attributes type="list">[]</global_attributes> - <hidden type="int">0</hidden> - <lines type="int">20</lines> - <list_action>folder_contents</list_action> - <list_method type="method">Delivery_zGetNeededCellList</list_method> - <meta_types type="list">[]</meta_types> - <portal_types type="list">[]</portal_types> - <report_root_list type="list">[]</report_root_list> - <report_tree type="int">0</report_tree> - <search type="int">0</search> - <search_columns type="list">[]</search_columns> - <select type="int">0</select> - <selection_name>delivery_cells_selection</selection_name> - <sort type="list">[('variation_text', 'variation_text')]</sort> - <sort_columns></sort_columns> - <stat_method></stat_method> - <title>Lignes de livraison</title> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>hidden</title> - <fields> - - <field><id>listbox_item_id_list</id> <type>LinesField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default type="list">[]</default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <height type="int">2</height> - <hidden type="int">0</hidden> - <max_length></max_length> - <max_linelength></max_linelength> - <max_lines></max_lines> - <required type="int">0</required> - <title>Pièces en stock</title> - <unicode type="int">0</unicode> - <view_separator><br /> -</view_separator> - <whitespace_preserve type="int">0</whitespace_preserve> - <width type="int">20</width> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_many_lines">You entered too many lines.</message> - <message name="line_too_long">A line was too long.</message> - <message name="too_long">You entered too many characters.</message> - </messages> - </field> - <field><id>listbox_quantity_unit</id> <type>ListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <extra_item></extra_item> - <first_item type="int">0</first_item> - <hidden type="int">0</hidden> - <items type="list">[]</items> - <required type="int">0</required> - <size type="int">1</size> - <title>Unité</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <items>here/portal_categories/quantity_unit/getFormItemList</items> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - <field><id>listbox_target_quantity</id> <type>FloatField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">10</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <required type="int">0</required> - <title>Target quantity</title> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="not_float">You did not enter a floating point number.</message> - </messages> - </field> - </fields> - </group> - </groups> -</form> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_trade/sample_delivery_count_samples.py b/product/Coramy/skins/coramy_trade/sample_delivery_count_samples.py deleted file mode 100755 index 8922477ebb..0000000000 --- a/product/Coramy/skins/coramy_trade/sample_delivery_count_samples.py +++ /dev/null @@ -1,17 +0,0 @@ -## Script (Python) "sample_delivery_count_samples" -##bind container=container -##bind context=context -##bind namespace= -##bind script=script -##bind subpath=traverse_subpath -##parameters= -##title= -## -sample_delivery = context -lignes_cde = sample_delivery.contentValues(filter={'portal_type':'Delivery Line'}) -total = 0 - -for ligne in lignes_cde: - total += ligne.getQuantity() - -return total diff --git a/product/Coramy/skins/coramy_trade/sample_etiquette_BLS_print.py b/product/Coramy/skins/coramy_trade/sample_etiquette_BLS_print.py deleted file mode 100755 index a16f8ab7d6..0000000000 --- a/product/Coramy/skins/coramy_trade/sample_etiquette_BLS_print.py +++ /dev/null @@ -1,42 +0,0 @@ -## Script (Python) "sample_etiquette_BLS_print" -##bind container=container -##bind context=context -##bind namespace= -##bind script=script -##bind subpath=traverse_subpath -##parameters= -##title= -## -sample_order=context -lignes_list = sample_order.contentValues(filter={'portal_type':'Sample Order Line'}) -request = context.REQUEST -possible_qty=('00300','01000','05000','10000') - -for ligne in lignes_list: - modele=ligne.getDefaultValue('resource',portal_type=['Modele']) - - if modele <> None : - ligne_modele = '' - ligne_modele += modele.getDestinationReference()+'£' - ligne_modele += modele.getCollection()+'£' - ligne_modele += string.capwords(string.lower(modele.composition))+'£' - - price_list = ligne.contentValues(filter={'portal_type':'Element Tarif'}) - - for price in price_list: - printed_price=0 - ligne_modele += string.lower(price.description)+'£' - for qty in possible_qty: - qty_price = price.getCell(None, qty, base_id='destination_base_price') - if qty_price <>None: - printed_price +=1 - ligne_modele += str(int(qty))+'£' - ligne_modele += str(qty_price.getProperty(key='destination_base_price'))+'£' - for i in range(4-printed_price): - ligne_modele += '££' - - print ligne_modele - -request.RESPONSE.setHeader('Content-Type','application/text') - -return printed diff --git a/product/Coramy/skins/coramy_trade/sample_etiquette_print.py b/product/Coramy/skins/coramy_trade/sample_etiquette_print.py deleted file mode 100755 index 19d69271ef..0000000000 --- a/product/Coramy/skins/coramy_trade/sample_etiquette_print.py +++ /dev/null @@ -1,41 +0,0 @@ -## Script (Python) "sample_etiquette_print" -##bind container=container -##bind context=context -##bind namespace= -##bind script=script -##bind subpath=traverse_subpath -##parameters= -##title= -## -sample_order=context -lignes_list = sample_order.contentValues(filter={'portal_type':'Sample Order Line'}) -request = context.REQUEST -possible_qty=('00300','01000','05000','10000') - -for ligne in lignes_list: - modele=ligne.getDefaultValue('resource',portal_type=['Modele']) - - ligne_modele = '' - ligne_modele += modele.getId()+'£' - ligne_modele += modele.getCollection()+'£' - ligne_modele += string.capwords(string.lower(modele.getComposition('')))+'£' - - price_list = ligne.contentValues(filter={'portal_type':'Element Tarif'}) - - for price in price_list: - printed_price=0 - ligne_modele += string.lower(price.getDescription(''))+'£' - for qty in possible_qty: - qty_price = price.getCell(None, qty, base_id='destination_base_price') - if qty_price <>None: - printed_price +=1 - ligne_modele += str(int(qty))+'£' - ligne_modele += str(qty_price.getProperty(key='destination_base_price'))+'£' - for i in range(4-printed_price): - ligne_modele += '££' - - print ligne_modele - -request.RESPONSE.setHeader('Content-Type','application/text') - -return printed diff --git a/product/Coramy/skins/coramy_trade/sample_order_control.pt b/product/Coramy/skins/coramy_trade/sample_order_control.pt deleted file mode 100755 index 752f94e81d..0000000000 --- a/product/Coramy/skins/coramy_trade/sample_order_control.pt +++ /dev/null @@ -1,158 +0,0 @@ -<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> - -<html> - - <head> - <meta http-equiv="content-type" content="text/html;charset=ISO-8859-1"> - <title tal:content="here/getTitle">Coramy</title> - - </head> - - <body bgcolor="#ffffff" - tal:define="client python:here.getDefaultValue('destination',portal_type=['Organisation']); - acheteur python:here.getDefaultValue('contact',portal_type=['Person']); - lignes_cde python:here.contentValues(filter={'portal_type':'Sample Order Line'}); - ordered_lines python:here.sort_object_list(unordered_list=lignes_cde, - sort_order = (('default_resource', 'ASC'),) ) - "> - -<table width="675" border="0" cellpadding="0" cellspacing="0"> - <tr> <!-- Ligne Titre --> - <td><img src="spacer1.png" width="1" height="1"></td> - <td> <div align="center"> - <p><font size="+3" color="red"><span tal:replace="python:'Commande échantillons : %s' %here.getId()">Modèle - </span></font></p> - </div></td> - <td><img src="spacer1.png" width="1" height="1"></td> - </tr> - <tr> <!-- Border-top info --> - <td class="line"><img src="spacer.png" width="1" height="1"></td> - <td class="line"><img src="spacer.png" width="673" height="1"></td> - <td class="line"><img src="spacer.png" width="1" height="1"></td> - </tr> - <tr> <!-- Info --> - <td class="line"><img src="spacer.png" width="1" height="100%"></td> - <td><table class="border" width="100%"> - <tr> - <td><i><b>Client</b></i></td> - <td tal:content="client/getTitle">77H</td> - <td><i><b>Livrer à partir du</b></i></td> - <td tal:content="here/getStartDate"></td> - <td></td> - </tr> - <tr> - <td><i><b>Acheteur</b></i></td> - <td> - <span tal:condition="python:acheteur<>None" - tal:content="acheteur/getTitle"> - </span> - </td> - <td><i><b>Livrer avant le</b></i></td> - <td tal:content="here/getStopDate"></td> - <td></td> - </tr> - <tr> - <td valign="top"><i><b>Commentaires</b></i> </td> - <td colspan="3" tal:content="here/getCommentaires">comments</td> - <td></td> - </tr> - </table></td> - <td class="line"><img src="spacer.png" width="1" height="100%"></td> - </tr> - <tr> <!-- Border Bottom info --> - <td class="line"><img src="spacer.png" width="1" height="1"></td> - <td><img src="spacer.png" width="673" height="1"></td> - <td class="line"><img src="spacer.png" width="1" height="1"></td> - </tr> - <tr> <!-- spacer --> - <td><img src="spacer1.png" width="1" height="1"></td> - <td><img src="spacer1.png" width="1" height="1"></td> - <td><img src="spacer1.png" width="1" height="1"></td> - </tr> - <tr> <!-- Border Top Ligne commande --> - <td><img src="spacer.png" width="1" height="1"></td> - <td><img src="spacer.png" width="673" height="1"></td> - <td><img src="spacer.png" width="1" height="1"></td> - </tr> - <tr> <!-- Ligne commande --> - <td><img src="spacer.png" width="1" height="100%"></td> - <td><table class="border" align="center" width="100%"> - <tr> - <td align=center><i><b>N°</b></i></td> - <td align=center><i><b>Description</b></i></td> - <td align=center><i><b>Modèle</b></i></td> - <td align=center><i><b>Coloris</b></i></td> - <td align=center><i><b>Taille</b></i></td> - <td align=center><i><b>Quantité</b></i></td> - <td align=center><i><b>Etat modèle</b></i></td> - <td align=center><i><b>Transformation</b></i></td> - <td align=center><i><b>Prix</b></i></td> - </tr> - <span tal:repeat="ligne ordered_lines"> - <tr tal:define="modele python:ligne.getDefaultValue('resource',portal_type=['Modele'])"> - - <td align=right tal:content="ligne/getId"></td> - - <td align=right tal:content="ligne/getDescription"></td> - - <td align=center> - <span tal:condition="python:modele<>None"> - <span tal:content="python:modele.getId()">resource</span> - </span> - </td> - - <td align=center> - <span tal:condition="python:modele <> None and ligne.getColoris() <> None"> - <span tal:define="url_items python:modules['string'].split(ligne.getColoris(),'/')" - tal:content="python:url_items[len(url_items)-1]"> - </span> - </span> - </td> - - <td align=center> - <span tal:condition="python:modele<>None and ligne.getTaille() <> None"> - <span tal:define="url_items python:modules['string'].split(ligne.getTaille(),'/')" - tal:content="python:url_items[len(url_items)-1]"> - </span> - </span> - </td> - - <td align=center tal:content="python: '%.0f' % ligne.getQuantity()">2</td> - <td align=left tal:content="ligne/sample_order_line_modele_state">etat</td> - - <td align=left> - <span tal:condition="python:modele <> None"> - <span tal:define="transformation python:modele.modele_transformation()" - tal:condition="python:transformation<>None"> - <span tal:content="python:transformation.portal_workflow.getInfoFor(transformation, 'transform_state')">etat</span> - </span> - </span> - </td> - - <td align=left tal:define="tarif_list python:ligne.contentValues(filter={'portal_type':'Element Tarif'})"> - <span tal:repeat="tarif_item tarif_list"> - <span tal:content="python:'%s ' %tarif_item.getDestinationBasePrice()">prix</span> - </span> - </td> - - </tr> - </span> - <tr> - <td colspan="3"></td> - <td align=center><b><i>Total</i></b></td> - <td align=center tal:content="python: '%.0f' %here.sample_order_count_samples()"><b><i>Total</i></b></td> - </tr> - </table> - <td><img src="spacer.png" width="1" height="100%"></td> - </tr> - <tr> <!-- Border Bottom Ligne commande --> - <td><img src="spacer.png" width="1" height="1"></td> - <td><img src="spacer.png" width="673" height="1"></td> - <td><img src="spacer.png" width="1" height="1"></td> - </tr> - -</table> - -</body> - -</html> diff --git a/product/Coramy/skins/coramy_trade/sample_order_count_samples.py b/product/Coramy/skins/coramy_trade/sample_order_count_samples.py deleted file mode 100755 index ef86d4fe0a..0000000000 --- a/product/Coramy/skins/coramy_trade/sample_order_count_samples.py +++ /dev/null @@ -1,17 +0,0 @@ -## Script (Python) "sample_order_count_samples" -##bind container=container -##bind context=context -##bind namespace= -##bind script=script -##bind subpath=traverse_subpath -##parameters= -##title= -## -sample_order = context -lignes_cde = sample_order.contentValues(filter={'portal_type':'Sample Order Line'}) -total = 0 - -for ligne in lignes_cde: - total += ligne.getQuantity() - -return total diff --git a/product/Coramy/skins/coramy_trade/sample_order_export.py b/product/Coramy/skins/coramy_trade/sample_order_export.py deleted file mode 100755 index a6c632af6b..0000000000 --- a/product/Coramy/skins/coramy_trade/sample_order_export.py +++ /dev/null @@ -1,45 +0,0 @@ -## Script (Python) "sample_order_export" -##bind container=container -##bind context=context -##bind namespace= -##bind script=script -##bind subpath=traverse_subpath -##parameters= -##title= -## -sample_order=context -lignes_list = sample_order.contentValues(filter={'portal_type':'Sample Order Line'}) -request = context.REQUEST -possible_qty=('00300','01000','05000','10000') -tab = '\t' -cr = '\r' -ligne_modele = '' - -for ligne in lignes_list: - modele=ligne.getDefaultValue('resource',portal_type=['Modele']) - - ligne_modele += modele.getId()+tab - ligne_modele += modele.getCollection()+tab - ligne_modele += string.capwords(string.lower(modele.getComposition('')))+tab - ligne_modele += modele.getCodeEan13()+tab - ligne_modele += string.lower(modele.getDescription('')[0:20])+tab - - price_list = ligne.contentValues(filter={'portal_type':'Element Tarif'}) - - for price in price_list: - printed_price=0 - ligne_modele += string.lower(price.getDescription(''))+tab - for qty in possible_qty: - qty_price = price.getCell(None, qty, base_id='destination_base_price') - if qty_price <>None: - printed_price +=1 - ligne_modele += str(int(qty))+tab - ligne_modele += str(qty_price.getProperty(key='destination_base_price'))+tab - for i in range(3-printed_price): - ligne_modele += tab+tab - - ligne_modele += cr - -request.RESPONSE.setHeader('Content-Type','application/text') - -return ligne_modele diff --git a/product/Coramy/skins/coramy_trade/sample_order_line_compute_price.py b/product/Coramy/skins/coramy_trade/sample_order_line_compute_price.py deleted file mode 100755 index 88487268a4..0000000000 --- a/product/Coramy/skins/coramy_trade/sample_order_line_compute_price.py +++ /dev/null @@ -1,33 +0,0 @@ -## Script (Python) "sample_order_line_compute_price" -##bind container=container -##bind context=context -##bind namespace= -##bind script=script -##bind subpath=traverse_subpath -##parameters=form_id, selection_index, selection_name, batch_mode=0 -##title=Update Quantity Price for Element Tarif -## -# First define some data -# which should better be defined as portal data - -message = "" -request = context.REQUEST - -for o in context.searchFolder(portal_type='Element Tarif'): - o = o.getObject() - error = o.element_tarif_compute_price(form_id=form_id, selection_index=selection_index, selection_name=selection_name, batch_mode=1) - if error is not None: - message += error - -if batch_mode: - return message -else: - if message is None: - message = "Price updated" - redirect_url = '%s/%s?selection_index=%s&selection_name=%s&%s' % ( context.absolute_url() - , form_id - , selection_index - , selection_name - , 'portal_status_message=%s' % message - ) - request[ 'RESPONSE' ].redirect( redirect_url ) diff --git a/product/Coramy/skins/coramy_trade/sample_order_line_copy_price.py b/product/Coramy/skins/coramy_trade/sample_order_line_copy_price.py deleted file mode 100755 index 8e09c43f73..0000000000 --- a/product/Coramy/skins/coramy_trade/sample_order_line_copy_price.py +++ /dev/null @@ -1,88 +0,0 @@ -## Script (Python) "sample_order_line_copy_price" -##bind container=container -##bind context=context -##bind namespace= -##bind script=script -##bind subpath=traverse_subpath -##parameters=form_id='' -##title= -## -request = context.REQUEST - -# First define some data -# which should better be defined as portal data -cout_minute_france = 0.348 -cout_minute_tunisie = 0.174 -cout_fixe_article = 0.404 -ratio_securite_temps = 1.075 -ratio_securite_appro = 1.07 -france_ratio_dict = { - 'F0_T100' : 0.0, - 'F20_T80' : 0.2, - 'F50_T50' : 0.5, - 'F80_T20' : 0.8, - 'F100_T0' : 1.0 -} -coef_qte_dict = {} -coef_qte_dict['00300'] = 85.0/72.5 -coef_qte_dict['01000'] = 1 -coef_qte_dict['05000'] = 85.0/92.5 -coef_qte_dict['10000'] = 0.88 - -ligne = context -modele = ligne.getDefaultValue('resource',portal_type=['Modele']) - -if modele <> None : - modele_tarif_list = modele.contentValues(filter={'portal_type':'Element Tarif'}) - if modele.getTarif() <> ligne.getTarif() and modele.getTempsPiquage() == 0 : - redirect_url = '%s/%s?%s' % ( context.absolute_url() - , form_id - , 'portal_status_message=Pas+de+temps+de+piquage+pour+ce+modele.' - ) - else : - for modele_tarif in modele_tarif_list : - ligne.invokeFactory(type_name="Element Tarif", - id=modele_tarif.id, - RESPONSE=request.RESPONSE) - ligne[modele_tarif.id].edit(description = modele_tarif.getDescription(), category_list = modele_tarif.getCategoryList(), commentaires = modele_tarif.getCommentaires()) - ligne[modele_tarif.id].setCellRange([None],ligne[modele_tarif.id].getQuantityRangeList(),base_id='destination_base_price') - for q in ligne[modele_tarif.id].getQuantityRangeList(): - price_value = 0 - ecart = 0 - if modele.getTarif() == ligne.getTarif() : - price_value = modele_tarif.getCell(None, q, base_id='destination_base_price').destination_base_price*ligne.getCoefMarge()/modele.getCoefMarge() - else : - price_value = modele_tarif.getCell(None, q, base_id='destination_base_price').destination_base_price/modele.getCoefMarge() - if modele.getCoefMajoration() <> 0 : - price_value = price_value/modele.getCoefMajoration() - ecart = (france_ratio_dict[ligne.getTarif()]*cout_minute_france+(1-france_ratio_dict[ligne.getTarif()])*cout_minute_tunisie)*modele.getTempsPiquage()*1.075 - ecart += -1*(france_ratio_dict[modele.getTarif()]*cout_minute_france+(1-france_ratio_dict[modele.getTarif()])*cout_minute_tunisie)*modele.getTempsPiquage()*1.075 - price_value += ecart*coef_qte_dict[q] - price_value = price_value*ligne.getCoefMarge() - - if ligne.getCoefMajoration() <> 0 : - price_value = price_value*ligne.getCoefMajoration() - cell = ligne[modele_tarif.id].newCell(None, q, base_id='destination_base_price') - cell.edit(mapped_value_attribute_list = ('destination_base_price',), - domain_base_category_list = ('quantity_range',), - predicate_operator = 'SUPERSET_OF', - predicate_value_list = ('quantity_range/%s' % q,), - destination_base_price = round(price_value,2)) - if q == '01000' : - ligne[modele_tarif.id].edit(destination_base_price = round(price_value,2)) - - - redirect_url = '%s/%s?%s' % ( context.absolute_url() - , form_id - , 'portal_status_message=%s+elements+de+tarif+crees.'%len(modele_tarif_list) - ) - -else : - - redirect_url = '%s/%s?%s' % ( context.absolute_url() - , form_id - , 'portal_status_message=Problème+de+modèle.' - ) - - -request[ 'RESPONSE' ].redirect( redirect_url ) diff --git a/product/Coramy/skins/coramy_trade/sample_order_line_list.form b/product/Coramy/skins/coramy_trade/sample_order_line_list.form deleted file mode 100755 index 2fae69a64c..0000000000 --- a/product/Coramy/skins/coramy_trade/sample_order_line_list.form +++ /dev/null @@ -1,62 +0,0 @@ -<?xml version="1.0"?> - -<form> - <title>Liste des livraisons</title> - <row_length>4</row_length> - <name>packing_list_list</name> - <pt>form_list</pt> - <action></action> - <method>POST</method> - <enctype>multipart/form-data</enctype> - <encoding>UTF-8</encoding> - <stored_encoding>ISO-8859-1</stored_encoding> - <unicode_mode>false</unicode_mode> - <groups> - <group> - <title>Default</title> - <fields> - - <field><id>listbox</id> <type>ListBox</type> - <values> - <all_columns type="list">[('id', 'Ligne'), ('Description', 'Description'), ('getResourceRelativeUrl', 'Composant'), ('quantity', 'Quantit\xe9')]</all_columns> - <all_editable_columns type="list">[]</all_editable_columns> - <alternate_name></alternate_name> - <columns type="list">[('id', 'Ligne'), ('Description', 'Description'), ('getResourceRelativeUrl', 'Composant'), ('quantity', 'Quantit\xe9')]</columns> - <css_class></css_class> - <default></default> - <default_params type="list">[('id', "''")]</default_params> - <description></description> - <domain_root_list type="list">[]</domain_root_list> - <domain_tree type="int">0</domain_tree> - <editable type="int">1</editable> - <editable_columns type="list">[]</editable_columns> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <global_attributes type="list">[]</global_attributes> - <hidden type="int">0</hidden> - <lines type="int">30</lines> - <list_action>list</list_action> - <list_method type="method">searchFolder</list_method> - <meta_types type="list">[]</meta_types> - <portal_types type="list">[('Sample Order Line', 'Sample Order Line')]</portal_types> - <report_root_list type="list">[]</report_root_list> - <report_tree type="int">0</report_tree> - <search type="int">1</search> - <search_columns></search_columns> - <select type="int">1</select> - <selection_name>order_line_selection</selection_name> - <sort type="list">[('id', 'id')]</sort> - <sort_columns></sort_columns> - <stat_method></stat_method> - <title>Lignes de commande</title> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - </messages> - </field> - </fields> - </group> - </groups> -</form> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_trade/sample_order_line_modele_state.py b/product/Coramy/skins/coramy_trade/sample_order_line_modele_state.py deleted file mode 100755 index 0bfa429e26..0000000000 --- a/product/Coramy/skins/coramy_trade/sample_order_line_modele_state.py +++ /dev/null @@ -1,17 +0,0 @@ -## Script (Python) "sample_order_line_modele_state" -##bind container=container -##bind context=context -##bind namespace= -##bind script=script -##bind subpath=traverse_subpath -##parameters= -##title= -## -modele = context.getDefaultValue('resource',portal_type=['Modele']) - -if modele : - modele_state = modele.portal_workflow.getInfoFor(modele, 'modele_state') -else : - modele_state = "" - -return modele_state diff --git a/product/Coramy/skins/coramy_trade/sample_order_line_search.zsql b/product/Coramy/skins/coramy_trade/sample_order_line_search.zsql deleted file mode 100755 index 65652f5419..0000000000 --- a/product/Coramy/skins/coramy_trade/sample_order_line_search.zsql +++ /dev/null @@ -1,13 +0,0 @@ -<dtml-comment> -title: -connection_id:erp5_sql_connection -max_rows:1000 -max_cache:100 -cache_time:300 -class_name:ZSQLBrain -class_file:zsqlbrain.py -</dtml-comment> -<params></params> -SELECT DISTINCT ligne.id, ligne.relative_url, ligne.path, ligne.Description -FROM catalog AS ligne -WHERE ligne.portal_type="Sample Order Line" diff --git a/product/Coramy/skins/coramy_trade/sample_order_line_theme_sort.py b/product/Coramy/skins/coramy_trade/sample_order_line_theme_sort.py deleted file mode 100755 index db422cf578..0000000000 --- a/product/Coramy/skins/coramy_trade/sample_order_line_theme_sort.py +++ /dev/null @@ -1,35 +0,0 @@ -## Script (Python) "sample_order_line_theme_sort" -##bind container=container -##bind context=context -##bind namespace= -##bind script=script -##bind subpath=traverse_subpath -##parameters=form_id -##title= -## -request = context.REQUEST -samples_order = context -sample_order_line_list = samples_order.objectValues() -theme_list = samples_order.getThemes().split("\n") -theme_dict = {} - -for index in range(len(theme_list)) : - theme_dict[theme_list[index]] = index+1 - -for sample_order_line in sample_order_line_list : - if sample_order_line.getTheme() in theme_list : - theme_index = theme_dict[sample_order_line.getTheme()] - else : - theme_index = len(theme_list)+1 - - sample_order_line.edit(theme_index = theme_index) - - - -redirect_url = '%s/%s?%s' % ( context.absolute_url() - , form_id - , 'portal_status_message=lignes+triées.' - ) - - -request[ 'RESPONSE' ].redirect( redirect_url ) diff --git a/product/Coramy/skins/coramy_trade/sample_order_line_view.form b/product/Coramy/skins/coramy_trade/sample_order_line_view.form deleted file mode 100755 index d3f217a0b6..0000000000 --- a/product/Coramy/skins/coramy_trade/sample_order_line_view.form +++ /dev/null @@ -1,745 +0,0 @@ -<?xml version="1.0"?> - -<form> - <title>Ligne de commande</title> - <row_length>4</row_length> - <name>order_line_view</name> - <pt>form_view</pt> - <action>base_edit</action> - <method>POST</method> - <enctype>multipart/form-data</enctype> - <encoding>UTF-8</encoding> - <stored_encoding>ISO-8859-1</stored_encoding> - <unicode_mode>false</unicode_mode> - <groups> - <group> - <title>left</title> - <fields> - - <field><id>my_id</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">5</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <max_length></max_length> - <required type="int">1</required> - <title>Ligne n°</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - <field><id>my_description</id> <type>TextAreaField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <height type="int">3</height> - <hidden type="int">0</hidden> - <max_length></max_length> - <max_linelength></max_linelength> - <max_lines></max_lines> - <required type="int">0</required> - <title>Description</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - <width type="int">40</width> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_many_lines">You entered too many lines.</message> - <message name="line_too_long">A line was too long.</message> - <message name="too_long">You entered too many characters.</message> - </messages> - </field> - <field><id>my_resource_relative_url</id> <type>RelationStringField</type> - <values> - <alternate_name></alternate_name> - <base_category>resource</base_category> - <catalog_index>relative_url</catalog_index> - <css_class></css_class> - <default></default> - <default_module>modele</default_module> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">40</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <jump_method>base_jump_relation</jump_method> - <max_length></max_length> - <portal_type type="list">[('Composant', 'Composant'), ('Tissu', 'Tissu'), ('Modele', 'Modele'), ('Forme', 'Forme'), ('Vetement', 'Vetement'), ('Category', 'Category'), ('Gamme', 'Gamme')]</portal_type> - <required type="int">0</required> - <title>Modèle</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <update_method>base_update_relation</update_method> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - <field><id>my_coloris</id> <type>ListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <extra_item></extra_item> - <first_item type="int">0</first_item> - <hidden type="int">0</hidden> - <items type="list">[]</items> - <required type="int">0</required> - <size type="int">1</size> - <title>Coloris</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <items>python:[('','')] + here.getVariationRangeCategoryItemList(base_category_list=['coloris'], base=0)</items> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - <field><id>my_taille</id> <type>ListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <extra_item></extra_item> - <first_item type="int">0</first_item> - <hidden type="int">0</hidden> - <items type="list">[]</items> - <required type="int">0</required> - <size type="int">1</size> - <title>Taille</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <items>python:[('','')] + here.getVariationRangeCategoryItemList(base_category_list=['taille'], base=0)</items> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - <field><id>modele_state</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <max_length></max_length> - <required type="int">0</required> - <title>Etat modèle</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <default>python:here.getOrderLineModeleState()</default> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>right</title> - <fields> - - <field><id>my_quantity</id> <type>FloatField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">10</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <required type="int">0</required> - <title>Quantité</title> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="not_float">You did not enter a floating point number.</message> - </messages> - </field> - <field><id>my_quantity_unit</id> <type>ListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <extra_item></extra_item> - <first_item type="int">0</first_item> - <hidden type="int">0</hidden> - <items type="list">[]</items> - <required type="int">0</required> - <size type="int">1</size> - <title>Unité</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <items>here/getQuantityUnitRangeItemList</items> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - <field><id>my_price</id> <type>FloatField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">10</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <required type="int">0</required> - <title>Prix facturé</title> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="not_float">You did not enter a floating point number.</message> - </messages> - </field> - <field><id>my_tarif</id> <type>ListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <extra_item></extra_item> - <first_item type="int">0</first_item> - <hidden type="int">0</hidden> - <items type="list">[]</items> - <required type="int">0</required> - <size type="int">1</size> - <title>Tarif</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <items>here/portal_categories/tarif/getFormItemList</items> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - <field><id>my_cout_additionnel</id> <type>FloatField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">10</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <required type="int">0</required> - <title>Coût sup. (euros)</title> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="not_float">You did not enter a floating point number.</message> - </messages> - </field> - <field><id>my_coef_marge</id> <type>FloatField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">10</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <required type="int">0</required> - <title>Coef. de marge</title> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="not_float">You did not enter a floating point number.</message> - </messages> - </field> - <field><id>my_coef_majoration</id> <type>FloatField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">10</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <required type="int">0</required> - <title>Coef. majoration</title> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="not_float">You did not enter a floating point number.</message> - </messages> - </field> - <field><id>transform_state</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <max_length></max_length> - <required type="int">0</required> - <title>Etat transformation</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <default>python:here.getOrderLineTransformationState()</default> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>center</title> - <fields> - - </fields> - </group> - <group> - <title>bottom</title> - <fields> - - <field><id>listbox</id> <type>ListBox</type> - <values> - <all_columns type="list">[('id', 'El\xe9ment'), ('description', 'Description'), ('coloris_list', 'Coloris'), ('taille_list', 'Tailles'), ('default_taille', 'Taille centrale'), ('quantity_range_list', 'Quantit\xe9s'), ('destination_base_price', 'Prix par d\xe9faut')]</all_columns> - <all_editable_columns type="list">[('description', 'description'), ('taille_list', 'tailles_list'), ('default_taille', 'Taille par d\xe9faut'), ('coloris_list', 'coloris_list'), ('destination_base_price', 'price'), ('quantity_range_list', 'quantity_range_list')]</all_editable_columns> - <alternate_name></alternate_name> - <columns type="list">[('id', 'El\xe9ment'), ('description', 'Description'), ('coloris_list', 'Coloris'), ('taille_list', 'Tailles'), ('default_taille', 'Taille centrale'), ('quantity_range_list', 'Quantit\xe9s'), ('destination_base_price', 'Prix par d\xe9faut')]</columns> - <css_class></css_class> - <default></default> - <default_params type="list">[('id', "''"), ('description', "''")]</default_params> - <description></description> - <domain_root_list type="list">[]</domain_root_list> - <domain_tree type="int">0</domain_tree> - <editable type="int">1</editable> - <editable_columns type="list">[('description', 'description'), ('taille_list', 'tailles_list'), ('default_taille', 'Taille par d\xe9faut'), ('coloris_list', 'coloris_list'), ('destination_base_price', 'price'), ('quantity_range_list', 'quantity_range_list')]</editable_columns> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <global_attributes type="list">[('predicate_operator', 'predicate_operator'), ('mapped_value_property_list', 'mapped_value_property_list'), ('domain_base_category_list', 'domain_base_category_list')]</global_attributes> - <hidden type="int">0</hidden> - <lines type="int">20</lines> - <list_action>list</list_action> - <list_method type="method">searchFolder</list_method> - <meta_types type="list">[]</meta_types> - <portal_types type="list">[('Element Tarif', 'Element Tarif')]</portal_types> - <report_root_list type="list">[]</report_root_list> - <report_tree type="int">0</report_tree> - <search type="int">0</search> - <search_columns></search_columns> - <select type="int">0</select> - <selection_name>elements_tarif_selection</selection_name> - <sort type="list">[]</sort> - <sort_columns></sort_columns> - <stat_method></stat_method> - <title>Eléments de tarif</title> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - </messages> - </field> - <field><id>domain_base_category_list</id> <type>LinesField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default type="list">['taille', 'coloris']</default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <height type="int">5</height> - <hidden type="int">1</hidden> - <max_length></max_length> - <max_linelength></max_linelength> - <max_lines></max_lines> - <required type="int">0</required> - <title>Valid Domain</title> - <unicode type="int">0</unicode> - <view_separator><br /> -</view_separator> - <whitespace_preserve type="int">0</whitespace_preserve> - <width type="int">40</width> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_many_lines">You entered too many lines.</message> - <message name="line_too_long">A line was too long.</message> - <message name="too_long">You entered too many characters.</message> - </messages> - </field> - <field><id>mapped_value_property_list</id> <type>LinesField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default type="list">['destination_base_price']</default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <height type="int">5</height> - <hidden type="int">1</hidden> - <max_length></max_length> - <max_linelength></max_linelength> - <max_lines></max_lines> - <required type="int">0</required> - <title>Modified categories</title> - <unicode type="int">0</unicode> - <view_separator><br /> -</view_separator> - <whitespace_preserve type="int">0</whitespace_preserve> - <width type="int">40</width> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_many_lines">You entered too many lines.</message> - <message name="line_too_long">A line was too long.</message> - <message name="too_long">You entered too many characters.</message> - </messages> - </field> - <field><id>predicate_operator</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default>SUPERSET_OF</default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">1</hidden> - <max_length></max_length> - <required type="int">0</required> - <title>Operator</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>hidden</title> - <fields> - - <field><id>listbox_coloris_list</id> <type>MultiListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default type="list">[]</default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <extra_item></extra_item> - <hidden type="int">0</hidden> - <items type="list">[]</items> - <required type="int">0</required> - <size type="int">5</size> - <title>Coloris</title> - <unicode type="int">0</unicode> - <view_separator><br /> -</view_separator> - </values> - <tales> - <items>python:here.getVariationRangeCategoryItemList(base_category_list=['coloris'], base=0)</items> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - <field><id>listbox_default_taille</id> <type>ListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <extra_item></extra_item> - <first_item type="int">0</first_item> - <hidden type="int">0</hidden> - <items type="list">[]</items> - <required type="int">0</required> - <size type="int">1</size> - <title>Taille centrale</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <default>here/getDefaultTaille</default> - <items>python:here.getVariationRangeCategoryItemList(base_category_list=['taille'],base=0)</items> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - <field><id>listbox_description</id> <type>TextAreaField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <height type="int">2</height> - <hidden type="int">0</hidden> - <max_length></max_length> - <max_linelength></max_linelength> - <max_lines></max_lines> - <required type="int">0</required> - <title>Description</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - <width type="int">20</width> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_many_lines">You entered too many lines.</message> - <message name="line_too_long">A line was too long.</message> - <message name="too_long">You entered too many characters.</message> - </messages> - </field> - <field><id>listbox_destination_base_price</id> <type>FloatField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">10</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <required type="int">0</required> - <title>Price</title> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="not_float">You did not enter a floating point number.</message> - </messages> - </field> - <field><id>listbox_taille_list</id> <type>MultiListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default type="list">[]</default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <extra_item></extra_item> - <hidden type="int">0</hidden> - <items type="list">[]</items> - <required type="int">0</required> - <size type="int">5</size> - <title>Tailles</title> - <unicode type="int">0</unicode> - <view_separator><br /> -</view_separator> - </values> - <tales> - <items>python:here.getVariationRangeCategoryItemList(base_category_list=['taille'],base=0)</items> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - <field><id>listbox_quantity_range_list</id> <type>MultiListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default type="list">[]</default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <extra_item></extra_item> - <hidden type="int">0</hidden> - <items type="list">[]</items> - <required type="int">0</required> - <size type="int">5</size> - <title>Quantités</title> - <unicode type="int">0</unicode> - <view_separator><br /> -</view_separator> - </values> - <tales> - <items>python:here.portal_categories.quantity_range.getBaseItemList(base=0)</items> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - </fields> - </group> - </groups> -</form> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_trade/sample_order_lines_to_prepare.pt b/product/Coramy/skins/coramy_trade/sample_order_lines_to_prepare.pt deleted file mode 100755 index 480d3deb6f..0000000000 --- a/product/Coramy/skins/coramy_trade/sample_order_lines_to_prepare.pt +++ /dev/null @@ -1,84 +0,0 @@ -<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> - -<html> - - <head> - <meta http-equiv="content-type" content="text/html;charset=ISO-8859-1"> - <title tal:content="here/getTitle">Coramy</title> - - </head> - - <body bgcolor="#ffffff" - tal:define="filtered_models python:here.filtered_sample_order_lines(); - sorted_models python:filtered_models.keys(); - nada python:sorted_models.sort()"> - -<table width="675" border="0" cellpadding="0" cellspacing="0"> - <tr> <!-- Ligne Titre --> - <td><img src="spacer1.png" width="1" height="1"></td> - <td> <div align="center"> - <p><font size="+3" color="red">Modèles échantillonnés</font></p> - </div></td> - <td><img src="spacer1.png" width="1" height="1"></td> - </tr> - <tr> <!-- Border-top info --> - <td class="line"><img src="spacer.png" width="1" height="1"></td> - <td class="line"><img src="spacer.png" width="673" height="1"></td> - <td class="line"><img src="spacer.png" width="1" height="1"></td> - </tr> - <tr> <!-- Info --> - <td class="line"><img src="spacer.png" width="1" height="100%"></td> - <td><table class="border" width="100%"> - <tr> - <td><i><b>Nombre total</b></i></td> - <td tal:content="python:len(filtered_models)"/> - </tr> - - </table></td> - <td class="line"><img src="spacer.png" width="1" height="100%"></td> - </tr> - <tr> <!-- Border Bottom info --> - <td class="line"><img src="spacer.png" width="1" height="1"></td> - <td><img src="spacer.png" width="673" height="1"></td> - <td class="line"><img src="spacer.png" width="1" height="1"></td> - </tr> - <tr> <!-- spacer --> - <td><img src="spacer1.png" width="1" height="1"></td> - <td><img src="spacer1.png" width="1" height="1"></td> - <td><img src="spacer1.png" width="1" height="1"></td> - </tr> - <tr> <!-- Border Top Ligne commande --> - <td><img src="spacer.png" width="1" height="1"></td> - <td><img src="spacer.png" width="673" height="1"></td> - <td><img src="spacer.png" width="1" height="1"></td> - </tr> - <tr> <!-- Ligne commande --> - <td><img src="spacer.png" width="1" height="100%"></td> - <td><table class="border" align="center" width="100%"> - <tr> - <td align=center><i><b>Modèle</b></i></td> - <td align=center><i><b>Date</b></i></td> - <td align=center><i><b>Clients</b></i></td> - <td align=center><i><b>Etat</b></i></td> - </tr> - - <tr tal:repeat="i python:range(len(sorted_models))"> - <td tal:content="python:sorted_models[i]"/> - <td tal:content="python:filtered_models[sorted_models[i]]['date']"/> - <td tal:content="python:filtered_models[sorted_models[i]]['client']"/> - <td tal:content="python:filtered_models[sorted_models[i]]['etat']"/> - </tr> - </table> - <td><img src="spacer.png" width="1" height="100%"></td> - </tr> - <tr> <!-- Border Bottom Ligne commande --> - <td><img src="spacer.png" width="1" height="1"></td> - <td><img src="spacer.png" width="673" height="1"></td> - <td><img src="spacer.png" width="1" height="1"></td> - </tr> - -</table> - -</body> - -</html> diff --git a/product/Coramy/skins/coramy_trade/sample_order_list.form b/product/Coramy/skins/coramy_trade/sample_order_list.form deleted file mode 100755 index 44552818e6..0000000000 --- a/product/Coramy/skins/coramy_trade/sample_order_list.form +++ /dev/null @@ -1,62 +0,0 @@ -<?xml version="1.0"?> - -<form> - <title>Liste des commandes</title> - <row_length>4</row_length> - <name>order_list</name> - <pt>form_list</pt> - <action></action> - <method>POST</method> - <enctype>multipart/form-data</enctype> - <encoding>UTF-8</encoding> - <stored_encoding>ISO-8859-1</stored_encoding> - <unicode_mode>false</unicode_mode> - <groups> - <group> - <title>Default</title> - <fields> - - <field><id>listbox</id> <type>ListBox</type> - <values> - <all_columns type="list">[('id', 'Commande'), ('default_destination_title', 'Client'), ('buyer_title', 'Acheteur'), ('Description', 'Description'), ('order_state', 'Etat'), ('stop_date', 'Date')]</all_columns> - <all_editable_columns type="list">[]</all_editable_columns> - <alternate_name></alternate_name> - <columns type="list">[('id', 'Commande'), ('default_destination_title', 'Client'), ('buyer_title', 'Acheteur'), ('Description', 'Description'), ('order_state', 'Etat'), ('stop_date', 'Date')]</columns> - <css_class></css_class> - <default></default> - <default_params type="list">[('id', "''")]</default_params> - <description></description> - <domain_root_list type="list">[]</domain_root_list> - <domain_tree type="int">0</domain_tree> - <editable type="int">1</editable> - <editable_columns type="list">[]</editable_columns> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <global_attributes type="list">[]</global_attributes> - <hidden type="int">0</hidden> - <lines type="int">30</lines> - <list_action>list</list_action> - <list_method type="method">portal_catalog</list_method> - <meta_types type="list">[]</meta_types> - <portal_types type="list">[('Samples Order', 'Samples Order')]</portal_types> - <report_root_list type="list">[]</report_root_list> - <report_tree type="int">0</report_tree> - <search type="int">1</search> - <search_columns></search_columns> - <select type="int">1</select> - <selection_name>order_selection</selection_name> - <sort type="list">[('id', 'id')]</sort> - <sort_columns></sort_columns> - <stat_method></stat_method> - <title>Commandes</title> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - </messages> - </field> - </fields> - </group> - </groups> -</form> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_trade/sample_order_modele_search.form b/product/Coramy/skins/coramy_trade/sample_order_modele_search.form deleted file mode 100755 index 143476dc65..0000000000 --- a/product/Coramy/skins/coramy_trade/sample_order_modele_search.form +++ /dev/null @@ -1,56 +0,0 @@ -<?xml version="1.0"?> - -<form> - <title>Rechercher</title> - <row_length>4</row_length> - <name>search</name> - <pt>form_dialog</pt> - <action>sample_order_modele_search_list</action> - <method>POST</method> - <enctype></enctype> - <encoding>UTF-8</encoding> - <stored_encoding>ISO-8859-1</stored_encoding> - <unicode_mode>false</unicode_mode> - <groups> - <group> - <title>left</title> - <fields> - - <field><id>my_modele_id</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">60</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <max_length></max_length> - <required type="int">1</required> - <title>Modèle</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>right</title> - <fields> - - </fields> - </group> - </groups> -</form> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_trade/sample_order_modele_search_list.form b/product/Coramy/skins/coramy_trade/sample_order_modele_search_list.form deleted file mode 100755 index 8bed0d335d..0000000000 --- a/product/Coramy/skins/coramy_trade/sample_order_modele_search_list.form +++ /dev/null @@ -1,62 +0,0 @@ -<?xml version="1.0"?> - -<form> - <title>Liste des commandes</title> - <row_length>4</row_length> - <name>order_list</name> - <pt>form_list</pt> - <action></action> - <method>POST</method> - <enctype>multipart/form-data</enctype> - <encoding>UTF-8</encoding> - <stored_encoding>ISO-8859-1</stored_encoding> - <unicode_mode>false</unicode_mode> - <groups> - <group> - <title>Default</title> - <fields> - - <field><id>listbox</id> <type>ListBox</type> - <values> - <all_columns type="list">[('id', 'Commande'), ('default_destination_title', 'Client'), ('buyer_title', 'Acheteur'), ('Description', 'Description'), ('order_state', 'Etat')]</all_columns> - <all_editable_columns type="list">[]</all_editable_columns> - <alternate_name></alternate_name> - <columns type="list">[('id', 'Commande'), ('default_destination_title', 'Client'), ('buyer_title', 'Acheteur'), ('Description', 'Description'), ('order_state', 'Etat')]</columns> - <css_class></css_class> - <default></default> - <default_params type="list">[('id', "''")]</default_params> - <description></description> - <domain_root_list type="list">[]</domain_root_list> - <domain_tree type="int">0</domain_tree> - <editable type="int">1</editable> - <editable_columns type="list">[]</editable_columns> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <global_attributes type="list">[]</global_attributes> - <hidden type="int">0</hidden> - <lines type="int">30</lines> - <list_action>list</list_action> - <list_method type="method">sample_order_sql_modele_search</list_method> - <meta_types type="list">[]</meta_types> - <portal_types type="list">[('Samples Order', 'Samples Order')]</portal_types> - <report_root_list type="list">[]</report_root_list> - <report_tree type="int">0</report_tree> - <search type="int">1</search> - <search_columns></search_columns> - <select type="int">1</select> - <selection_name>order_selection</selection_name> - <sort type="list">[('id', 'id')]</sort> - <sort_columns></sort_columns> - <stat_method></stat_method> - <title>Commandes</title> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - </messages> - </field> - </fields> - </group> - </groups> -</form> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_trade/sample_order_print.pt b/product/Coramy/skins/coramy_trade/sample_order_print.pt deleted file mode 100755 index 79a9489b94..0000000000 --- a/product/Coramy/skins/coramy_trade/sample_order_print.pt +++ /dev/null @@ -1,133 +0,0 @@ -<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> - -<html> - - <head> - <meta http-equiv="content-type" content="text/html;charset=ISO-8859-1"> - <title tal:content="here/getTitle">Coramy</title> - - </head> - - <body bgcolor="#ffffff" - tal:define="client python:here.getDefaultValue('destination',portal_type=['Organisation']); - acheteur python:here.getDefaultValue('contact',portal_type=['Person']); - lignes_cde python:here.contentValues(filter={'portal_type':'Sample Order Line'}); - ordered_lines python:here.sort_object_list(unordered_list=lignes_cde, - sort_order = (('default_resource', 'ASC'),) ) - "> - -<table width="675" border="0" cellpadding="0" cellspacing="0"> - <tr> <!-- Ligne Titre --> - <td><img src="spacer1.png" width="1" height="1"></td> - <td> <div align="center"> - <p><font size="+3" color="red"><span tal:replace="python:'Commande échantillons : %s' %here.getId()">Modèle - </span></font></p> - </div></td> - <td><img src="spacer1.png" width="1" height="1"></td> - </tr> - <tr> <!-- Border-top info --> - <td class="line"><img src="spacer.png" width="1" height="1"></td> - <td class="line"><img src="spacer.png" width="673" height="1"></td> - <td class="line"><img src="spacer.png" width="1" height="1"></td> - </tr> - <tr> <!-- Info --> - <td class="line"><img src="spacer.png" width="1" height="100%"></td> - <td><table class="border" width="100%"> - <tr> - <td><i><b>Client</b></i></td> - <td tal:content="client/getTitle">77H</td> - <td><i><b>Livrer à partir du</b></i></td> - <td tal:content="here/getStartDate"></td> - <td></td> - </tr> - <tr> - <td><i><b>Acheteur</b></i></td> - <td tal:content="acheteur/getTitle">77H</td> - <td><i><b>Livrer avant le</b></i></td> - <td tal:content="here/getStopDate"></td> - <td></td> - </tr> - </table></td> - <td class="line"><img src="spacer.png" width="1" height="100%"></td> - </tr> - <tr> <!-- Border Bottom info --> - <td class="line"><img src="spacer.png" width="1" height="1"></td> - <td><img src="spacer.png" width="673" height="1"></td> - <td class="line"><img src="spacer.png" width="1" height="1"></td> - </tr> - <tr> <!-- spacer --> - <td><img src="spacer1.png" width="1" height="1"></td> - <td><img src="spacer1.png" width="1" height="1"></td> - <td><img src="spacer1.png" width="1" height="1"></td> - </tr> - <tr> <!-- Border Top Ligne commande --> - <td><img src="spacer.png" width="1" height="1"></td> - <td><img src="spacer.png" width="673" height="1"></td> - <td><img src="spacer.png" width="1" height="1"></td> - </tr> - <tr> <!-- Ligne commande --> - <td><img src="spacer.png" width="1" height="100%"></td> - <td><table class="border" align="center" width="100%"> - <tr> - <td align=center><i><b>N°</b></i></td> - <td align=center><i><b>Modèle</b></i></td> - <td align=center><i><b>Coloris</b></i></td> - <td align=center><i><b>Taille</b></i></td> - <td align=center><i><b>Quantité</b></i></td> - <td align= center ><i><b>Description</b></i></td> - </tr> - <span tal:repeat="ligne ordered_lines"> - <tr> - <td align=right tal:content="structure python:'<font size=-2>'+ligne.getId()+'</font>'" nowrap></td> - <span tal:define="url_items python:modules['string'].split(ligne.getResourceRelativeUrl(),'/')"> - <td align=center tal:content="python:url_items[len(url_items)-1]" nowrap >resource</td> - </span> - - <td align=center nowrap > - <span tal:condition="python:ligne.getDefaultResource()<>None and ligne.getColoris() <> None"> - <span tal:define="url_items python:modules['string'].split(ligne.getColoris(),'/')" - tal:content="python:url_items[len(url_items)-1]"> - </span> - </span> - </td> - - <td align=center nowrap > - <span tal:condition="python:ligne.getDefaultResource()<>None and ligne.getTaille() <> None"> - <span tal:define="url_items python:modules['string'].split(ligne.getTaille(),'/')" - tal:content="python:url_items[len(url_items)-1]"> - </span> - </span> - </td> - - <td align=center tal:content="python: '%.0f' % ligne.getQuantity()" nowrap >2</td> - - <td align=left> - <span tal:condition="python:ligne.getDefaultResource()<>None" - tal:define="modele python:ligne.getDefaultValue('resource',portal_type=['Modele'])"> - <span tal:content="structure python:'<font size=-2>'+modules['string'].lower(modele.getDescription())+'</font>'"> - </span> - </span> - </td> - - - </tr> - </span> - <tr> - <td colspan="3"></td> - <td align=center><b><i>Total</i></b></td> - <td align=center tal:content="python: '%.0f' %here.sample_order_count_samples()"><b><i>Total</i></b></td> - </tr> - </table> - <td><img src="spacer.png" width="1" height="100%"></td> - </tr> - <tr> <!-- Border Bottom Ligne commande --> - <td><img src="spacer.png" width="1" height="1"></td> - <td><img src="spacer.png" width="673" height="1"></td> - <td><img src="spacer.png" width="1" height="1"></td> - </tr> - -</table> - -</body> - -</html> diff --git a/product/Coramy/skins/coramy_trade/sample_order_sql_modele_search.zsql b/product/Coramy/skins/coramy_trade/sample_order_sql_modele_search.zsql deleted file mode 100755 index 6aa2fe74a9..0000000000 --- a/product/Coramy/skins/coramy_trade/sample_order_sql_modele_search.zsql +++ /dev/null @@ -1,17 +0,0 @@ -<dtml-comment> -title: -connection_id:erp5_sql_connection -max_rows:1000 -max_cache:100 -cache_time:0 -class_name:ZSQLBrain -class_file:zsqlbrain.py -</dtml-comment> -<params>modele_id</params> -SELECT DISTINCT commande.id, commande.uid, commande.path, commande.relative_url, commande.parent_uid, commande.Description -FROM catalog AS commande, catalog AS ligne_cde, catalog AS modele, category -WHERE ligne_cde.parent_uid=commande.uid -AND modele.id="<dtml-var modele_id>" -AND ligne_cde.uid=category.uid -AND modele.uid=category.category_uid -AND commande.portal_type="Samples Order" \ No newline at end of file diff --git a/product/Coramy/skins/coramy_trade/sample_order_view.form b/product/Coramy/skins/coramy_trade/sample_order_view.form deleted file mode 100755 index 1fe94b07d2..0000000000 --- a/product/Coramy/skins/coramy_trade/sample_order_view.form +++ /dev/null @@ -1,617 +0,0 @@ -<?xml version="1.0"?> - -<form> - <title>Commande échantillons</title> - <row_length>4</row_length> - <name>order_view</name> - <pt>form_view</pt> - <action>base_edit</action> - <method>POST</method> - <enctype>multipart/form-data</enctype> - <encoding>UTF-8</encoding> - <stored_encoding>ISO-8859-1</stored_encoding> - <unicode_mode>false</unicode_mode> - <groups> - <group> - <title>left</title> - <fields> - - <field><id>my_id</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">10</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <max_length></max_length> - <required type="int">1</required> - <title>Commande</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - <field><id>my_destination_title</id> <type>RelationStringField</type> - <values> - <alternate_name></alternate_name> - <base_category>destination</base_category> - <catalog_index>Title</catalog_index> - <css_class></css_class> - <default></default> - <default_module>organisation</default_module> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <jump_method>base_jump_relation</jump_method> - <max_length></max_length> - <portal_type type="list">[('Organisation', 'Organisation')]</portal_type> - <required type="int">0</required> - <title>Client</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <update_method>base_update_relation</update_method> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - <field><id>my_buyer_title</id> <type>RelationStringField</type> - <values> - <alternate_name></alternate_name> - <base_category>contact</base_category> - <catalog_index>Title</catalog_index> - <css_class></css_class> - <default></default> - <default_module>person</default_module> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <jump_method>base_jump_relation</jump_method> - <max_length></max_length> - <portal_type type="list">[('Person', 'Person')]</portal_type> - <required type="int">0</required> - <title>Acheteur</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <update_method>base_update_relation</update_method> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - <field><id>my_description</id> <type>TextAreaField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <height type="int">1</height> - <hidden type="int">0</hidden> - <max_length></max_length> - <max_linelength></max_linelength> - <max_lines></max_lines> - <required type="int">0</required> - <title>Rayon</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - <width type="int">30</width> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_many_lines">You entered too many lines.</message> - <message name="line_too_long">A line was too long.</message> - <message name="too_long">You entered too many characters.</message> - </messages> - </field> - <field><id>my_themes</id> <type>TextAreaField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <height type="int">3</height> - <hidden type="int">0</hidden> - <max_length></max_length> - <max_linelength></max_linelength> - <max_lines></max_lines> - <required type="int">0</required> - <title>Themes</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - <width type="int">30</width> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_many_lines">You entered too many lines.</message> - <message name="line_too_long">A line was too long.</message> - <message name="too_long">You entered too many characters.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>right</title> - <fields> - - <field><id>my_samples_order_type</id> <type>ListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <extra_item></extra_item> - <first_item type="int">0</first_item> - <hidden type="int">0</hidden> - <items type="list">[]</items> - <required type="int">0</required> - <size type="int">1</size> - <title>Type de commande</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <items>here/portal_categories/samples_order_type/getFormItemList</items> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - <field><id>my_commande_origine</id> <type>ListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <extra_item></extra_item> - <first_item type="int">0</first_item> - <hidden type="int">0</hidden> - <items type="list">[]</items> - <required type="int">0</required> - <size type="int">1</size> - <title>Origine de la commande</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <items>here/portal_categories/commande_origine/getFormItemList</items> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - <field><id>my_date_rdv</id> <type>DateTimeField</type> - <values> - <allow_empty_time type="int">0</allow_empty_time> - <alternate_name></alternate_name> - <ampm_time_style type="int">0</ampm_time_style> - <css_class></css_class> - <date_only type="int">1</date_only> - <date_separator>/</date_separator> - <default_now type="int">0</default_now> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <hidden type="int">0</hidden> - <input_order>dmy</input_order> - <input_style>text</input_style> - <required type="int">0</required> - <time_separator>:</time_separator> - <title>Commande reçue le</title> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="not_datetime">You did not enter a valid date and time.</message> - <message name="datetime_out_of_range">The date and time you entered were out of range.</message> - </messages> - </field> - <field><id>my_collection</id> <type>ListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <extra_item></extra_item> - <first_item type="int">0</first_item> - <hidden type="int">0</hidden> - <items type="list">[]</items> - <required type="int">0</required> - <size type="int">1</size> - <title>Collection</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <items>here/portal_categories/collection/getFormItemList</items> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - <field><id>my_start_date</id> <type>DateTimeField</type> - <values> - <allow_empty_time type="int">0</allow_empty_time> - <alternate_name></alternate_name> - <ampm_time_style type="int">0</ampm_time_style> - <css_class></css_class> - <date_only type="int">1</date_only> - <date_separator>/</date_separator> - <default_now type="int">0</default_now> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <hidden type="int">0</hidden> - <input_order>dmy</input_order> - <input_style>text</input_style> - <required type="int">0</required> - <time_separator>:</time_separator> - <title>Livrer à partir du</title> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="not_datetime">You did not enter a valid date and time.</message> - <message name="datetime_out_of_range">The date and time you entered were out of range.</message> - </messages> - </field> - <field><id>my_stop_date</id> <type>DateTimeField</type> - <values> - <allow_empty_time type="int">0</allow_empty_time> - <alternate_name></alternate_name> - <ampm_time_style type="int">0</ampm_time_style> - <css_class></css_class> - <date_only type="int">1</date_only> - <date_separator>/</date_separator> - <default_now type="int">0</default_now> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <hidden type="int">0</hidden> - <input_order>dmy</input_order> - <input_style>text</input_style> - <required type="int">0</required> - <time_separator>:</time_separator> - <title>Livrer avant le</title> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="not_datetime">You did not enter a valid date and time.</message> - <message name="datetime_out_of_range">The date and time you entered were out of range.</message> - </messages> - </field> - <field><id>order_state</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <max_length></max_length> - <required type="int">0</required> - <title>Etat</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <default>python:here.portal_workflow.getInfoFor(here, 'order_state')</default> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>center</title> - <fields> - - <field><id>my_commentaires</id> <type>TextAreaField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <height type="int">3</height> - <hidden type="int">0</hidden> - <max_length></max_length> - <max_linelength></max_linelength> - <max_lines></max_lines> - <required type="int">0</required> - <title>Commentaires</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - <width type="int">80</width> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_many_lines">You entered too many lines.</message> - <message name="line_too_long">A line was too long.</message> - <message name="too_long">You entered too many characters.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>bottom</title> - <fields> - - <field><id>listbox</id> <type>ListBox</type> - <values> - <all_columns type="list">[('id', 'Ligne'), ('Description', 'Description'), ('getResourceRelativeUrl', 'Composant'), ('quantity', 'Quantit\xe9'), ('quantity_unit', 'Unit\xe9'), ('theme', 'Theme'), ('sort_index', 'Ordre')]</all_columns> - <all_editable_columns type="list">[('quantity', 'Quantit\xe9'), ('quantity_unit', 'Unit\xe9')]</all_editable_columns> - <alternate_name></alternate_name> - <columns type="list">[('id', 'Ligne'), ('Description', 'Description'), ('getResourceRelativeUrl', 'Composant'), ('quantity', 'Quantit\xe9'), ('quantity_unit', 'Unit\xe9'), ('theme', 'Theme'), ('sort_index', 'Ordre')]</columns> - <css_class></css_class> - <default></default> - <default_params type="list">[]</default_params> - <description></description> - <domain_root_list type="list">[]</domain_root_list> - <domain_tree type="int">0</domain_tree> - <editable type="int">1</editable> - <editable_columns type="list">[('quantity', 'Quantit\xe9'), ('quantity_unit', 'Unit\xe9'), ('theme', 'Theme'), ('sort_index', 'Ordre')]</editable_columns> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <global_attributes type="list">[]</global_attributes> - <hidden type="int">0</hidden> - <lines type="int">10</lines> - <list_action>sample_order_line_list</list_action> - <list_method type="method">searchFolder</list_method> - <meta_types type="list">[]</meta_types> - <portal_types type="list">[('Sample Order Line', 'Sample Order Line')]</portal_types> - <report_root_list type="list">[]</report_root_list> - <report_tree type="int">0</report_tree> - <search type="int">0</search> - <search_columns></search_columns> - <select type="int">0</select> - <selection_name>order_line_selection</selection_name> - <sort type="list">[('id', 'id')]</sort> - <sort_columns></sort_columns> - <stat_method></stat_method> - <title>Lignes de commande</title> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>hidden</title> - <fields> - - <field><id>listbox_quantity</id> <type>FloatField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">5</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <required type="int">0</required> - <title>listbox_quantity</title> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="not_float">You did not enter a floating point number.</message> - </messages> - </field> - <field><id>listbox_quantity_unit</id> <type>ListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <extra_item></extra_item> - <first_item type="int">0</first_item> - <hidden type="int">0</hidden> - <items type="list">[]</items> - <required type="int">0</required> - <size type="int">1</size> - <title>Unité</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <items>here/portal_categories/quantity_unit/getFormItemList</items> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - <field><id>listbox_sort_index</id> <type>IntegerField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">5</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <end></end> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <required type="int">0</required> - <start></start> - <title>Ordre</title> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="not_integer">You did not enter an integer.</message> - <message name="integer_out_of_range">The integer you entered was out of range.</message> - </messages> - </field> - <field><id>listbox_theme_index</id> <type>IntegerField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <end></end> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <required type="int">0</required> - <start></start> - <title>listbox_theme_index</title> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="not_integer">You did not enter an integer.</message> - <message name="integer_out_of_range">The integer you entered was out of range.</message> - </messages> - </field> - <field><id>listbox_theme</id> <type>ListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <extra_item></extra_item> - <first_item type="int">0</first_item> - <hidden type="int">0</hidden> - <items type="list">[]</items> - <required type="int">0</required> - <size type="int">1</size> - <title>listbox_theme</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <items>python:[""]+here.getThemes().split("\n")</items> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - </fields> - </group> - </groups> -</form> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_trade/sample_price2.py b/product/Coramy/skins/coramy_trade/sample_price2.py deleted file mode 100755 index 788630463d..0000000000 --- a/product/Coramy/skins/coramy_trade/sample_price2.py +++ /dev/null @@ -1,34 +0,0 @@ -## Script (Python) "sample_price2" -##bind container=container -##bind context=context -##bind namespace= -##bind script=script -##bind subpath=traverse_subpath -##parameters=form_id='' -##title= -## -REQUEST = context.REQUEST -ligne = context -modele = ligne.getDefaultValue('resource',portal_type=['Modele']) - -if modele <> None : - modele_tarif_list = modele.contentValues(filter={'portal_type':'Element Tarif'}) - for modele_tarif in modele_tarif_list : - modele.manage_copyObjects(modele_tarif.getId(), REQUEST, REQUEST.RESPONSE) - if ligne.cb_dataValid: - ligne.manage_pasteObjects(REQUEST['__cp']) - - redirect_url = '%s/%s?%s' % ( context.absolute_url() - , form_id - , 'portal_status_message=%s+elements+de+tarif+crees.'%len(modele_tarif_list) - ) - -else : - - redirect_url = '%s/%s?%s' % ( context.absolute_url() - , form_id - , 'portal_status_message=Pas+de+modèle+défini.' - ) - - -request[ 'RESPONSE' ].redirect( redirect_url ) diff --git a/product/Coramy/skins/coramy_trade/samples_delivered.zsql b/product/Coramy/skins/coramy_trade/samples_delivered.zsql deleted file mode 100755 index 1b80f01751..0000000000 --- a/product/Coramy/skins/coramy_trade/samples_delivered.zsql +++ /dev/null @@ -1,30 +0,0 @@ -<dtml-comment> -title: -connection_id:erp5_sql_connection -max_rows:0 -max_cache:0 -cache_time:0 -class_name:ZSQLBrain -class_file:zsqlbrain.py -</dtml-comment> -<params></params> -SELECT modele.id, SUM(movement.quantity) AS quantity -FROM catalog AS ligne_livr, catalog AS modele, catalog AS livraison, category AS cat1, category AS cat2, movement - -WHERE ligne_livr.portal_type="Delivery Line" -AND livraison.portal_type="Samples Packing List" -AND ligne_livr.parent_uid=livraison.uid -AND livraison.delivery_state='expediee' - -AND cat2.uid=modele.uid -AND ( cat2.category_uid = <dtml-var "portal_categories.collection['2004'].Coramy.Planches.uid"> -OR cat2.category_uid = <dtml-var "portal_categories.collection['2004'].Etudes.uid"> ) - -AND modele.uid=cat1.category_uid -AND ligne_livr.uid=cat1.uid -AND cat1.base_category_uid=<dtml-var "portal_categories.resource.uid"> - -AND movement.uid=ligne_livr.uid - -GROUP BY modele.id -ORDER BY modele.id \ No newline at end of file diff --git a/product/Coramy/skins/coramy_trade/samples_delivery_sql_order_id_search.zsql b/product/Coramy/skins/coramy_trade/samples_delivery_sql_order_id_search.zsql deleted file mode 100755 index 145c3710f9..0000000000 --- a/product/Coramy/skins/coramy_trade/samples_delivery_sql_order_id_search.zsql +++ /dev/null @@ -1,17 +0,0 @@ -<dtml-comment> -title: -connection_id:erp5_sql_connection -max_rows:1000 -max_cache:100 -cache_time:0 -class_name:ZSQLBrain -class_file:zsqlbrain.py -</dtml-comment> -<params>order_id</params> -SELECT DISTINCT livraison.id, livraison.uid, livraison.path, livraison.relative_url, livraison.parent_uid, livraison.Description -FROM catalog AS livraison, catalog AS commande, category -WHERE commande.id="<dtml-var order_id>" -AND livraison.uid=category.uid -AND category.category_uid=commande.uid -AND category.base_category_uid=<dtml-var "portal_categories.causality.uid"> -AND livraison.portal_type="Samples Packing List" \ No newline at end of file diff --git a/product/Coramy/skins/coramy_trade/samples_delivery_workflow_annuler_reliquat.form b/product/Coramy/skins/coramy_trade/samples_delivery_workflow_annuler_reliquat.form deleted file mode 100755 index 4fc533b658..0000000000 --- a/product/Coramy/skins/coramy_trade/samples_delivery_workflow_annuler_reliquat.form +++ /dev/null @@ -1,81 +0,0 @@ -<?xml version="1.0"?> - -<form> - <title>Annuler le reliquat</title> - <row_length>4</row_length> - <name>main</name> - <pt>form_view_dialog</pt> - <action>workflow_status_modify</action> - <method>POST</method> - <enctype>multipart/form-data</enctype> - <encoding>UTF-8</encoding> - <stored_encoding>ISO-8859-1</stored_encoding> - <unicode_mode>false</unicode_mode> - <groups> - <group> - <title>Default</title> - <fields> - - <field><id>my_comment</id> <type>TextAreaField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <height type="int">5</height> - <hidden type="int">0</hidden> - <max_length></max_length> - <max_linelength></max_linelength> - <max_lines></max_lines> - <required type="int">0</required> - <title>Commentaires</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - <width type="int">80</width> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_many_lines">You entered too many lines.</message> - <message name="line_too_long">A line was too long.</message> - <message name="too_long">You entered too many characters.</message> - </messages> - </field> - <field><id>my_workflow_action</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default>annuler_reliquat</default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">1</hidden> - <max_length></max_length> - <required type="int">1</required> - <title> </title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - </fields> - </group> - </groups> -</form> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_trade/samples_delivery_workflow_creer_reliquat.form b/product/Coramy/skins/coramy_trade/samples_delivery_workflow_creer_reliquat.form deleted file mode 100755 index 327e7e9684..0000000000 --- a/product/Coramy/skins/coramy_trade/samples_delivery_workflow_creer_reliquat.form +++ /dev/null @@ -1,81 +0,0 @@ -<?xml version="1.0"?> - -<form> - <title>Créer un reliquat</title> - <row_length>4</row_length> - <name>main</name> - <pt>form_view_dialog</pt> - <action>workflow_status_modify</action> - <method>POST</method> - <enctype>multipart/form-data</enctype> - <encoding>UTF-8</encoding> - <stored_encoding>ISO-8859-1</stored_encoding> - <unicode_mode>false</unicode_mode> - <groups> - <group> - <title>Default</title> - <fields> - - <field><id>my_comment</id> <type>TextAreaField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <height type="int">5</height> - <hidden type="int">0</hidden> - <max_length></max_length> - <max_linelength></max_linelength> - <max_lines></max_lines> - <required type="int">0</required> - <title>Commentaires</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - <width type="int">80</width> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_many_lines">You entered too many lines.</message> - <message name="line_too_long">A line was too long.</message> - <message name="too_long">You entered too many characters.</message> - </messages> - </field> - <field><id>my_workflow_action</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default>creer_reliquat</default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">1</hidden> - <max_length></max_length> - <required type="int">1</required> - <title> </title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - </fields> - </group> - </groups> -</form> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_trade/samples_delivery_workflow_expedier_livraison.form b/product/Coramy/skins/coramy_trade/samples_delivery_workflow_expedier_livraison.form deleted file mode 100755 index 4b73ea3629..0000000000 --- a/product/Coramy/skins/coramy_trade/samples_delivery_workflow_expedier_livraison.form +++ /dev/null @@ -1,81 +0,0 @@ -<?xml version="1.0"?> - -<form> - <title>Expédier la livraison</title> - <row_length>4</row_length> - <name>main</name> - <pt>form_view_dialog</pt> - <action>workflow_status_modify</action> - <method>POST</method> - <enctype>multipart/form-data</enctype> - <encoding>UTF-8</encoding> - <stored_encoding>ISO-8859-1</stored_encoding> - <unicode_mode>false</unicode_mode> - <groups> - <group> - <title>Default</title> - <fields> - - <field><id>my_comment</id> <type>TextAreaField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <height type="int">5</height> - <hidden type="int">0</hidden> - <max_length></max_length> - <max_linelength></max_linelength> - <max_lines></max_lines> - <required type="int">0</required> - <title>Commentaires</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - <width type="int">80</width> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_many_lines">You entered too many lines.</message> - <message name="line_too_long">A line was too long.</message> - <message name="too_long">You entered too many characters.</message> - </messages> - </field> - <field><id>my_workflow_action</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default>expedier_livraison</default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">1</hidden> - <max_length></max_length> - <required type="int">1</required> - <title> </title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - </fields> - </group> - </groups> -</form> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_trade/samples_delivery_workflow_rectifier_preparation.form b/product/Coramy/skins/coramy_trade/samples_delivery_workflow_rectifier_preparation.form deleted file mode 100755 index 3159ee0087..0000000000 --- a/product/Coramy/skins/coramy_trade/samples_delivery_workflow_rectifier_preparation.form +++ /dev/null @@ -1,81 +0,0 @@ -<?xml version="1.0"?> - -<form> - <title>Rectifier la préparation</title> - <row_length>4</row_length> - <name>main</name> - <pt>form_view_dialog</pt> - <action>workflow_status_modify</action> - <method>POST</method> - <enctype>multipart/form-data</enctype> - <encoding>UTF-8</encoding> - <stored_encoding>ISO-8859-1</stored_encoding> - <unicode_mode>false</unicode_mode> - <groups> - <group> - <title>Default</title> - <fields> - - <field><id>my_comment</id> <type>TextAreaField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <height type="int">5</height> - <hidden type="int">0</hidden> - <max_length></max_length> - <max_linelength></max_linelength> - <max_lines></max_lines> - <required type="int">1</required> - <title>Commentaires</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - <width type="int">80</width> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_many_lines">You entered too many lines.</message> - <message name="line_too_long">A line was too long.</message> - <message name="too_long">You entered too many characters.</message> - </messages> - </field> - <field><id>my_workflow_action</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default>rectifier_preparation</default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">1</hidden> - <max_length></max_length> - <required type="int">1</required> - <title> </title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - </fields> - </group> - </groups> -</form> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_trade/samples_delivery_workflow_valider_preparation.form b/product/Coramy/skins/coramy_trade/samples_delivery_workflow_valider_preparation.form deleted file mode 100755 index 6e15806431..0000000000 --- a/product/Coramy/skins/coramy_trade/samples_delivery_workflow_valider_preparation.form +++ /dev/null @@ -1,81 +0,0 @@ -<?xml version="1.0"?> - -<form> - <title>Valider la préparation</title> - <row_length>4</row_length> - <name>main</name> - <pt>form_view_dialog</pt> - <action>workflow_status_modify</action> - <method>POST</method> - <enctype>multipart/form-data</enctype> - <encoding>UTF-8</encoding> - <stored_encoding>ISO-8859-1</stored_encoding> - <unicode_mode>false</unicode_mode> - <groups> - <group> - <title>Default</title> - <fields> - - <field><id>my_comment</id> <type>TextAreaField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <height type="int">5</height> - <hidden type="int">0</hidden> - <max_length></max_length> - <max_linelength></max_linelength> - <max_lines></max_lines> - <required type="int">0</required> - <title>Commentaires</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - <width type="int">80</width> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_many_lines">You entered too many lines.</message> - <message name="line_too_long">A line was too long.</message> - <message name="too_long">You entered too many characters.</message> - </messages> - </field> - <field><id>my_workflow_action</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default>valider_preparation</default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">1</hidden> - <max_length></max_length> - <required type="int">1</required> - <title> </title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - </fields> - </group> - </groups> -</form> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_trade/samples_order_create_packing_list.py b/product/Coramy/skins/coramy_trade/samples_order_create_packing_list.py deleted file mode 100755 index f81285ccba..0000000000 --- a/product/Coramy/skins/coramy_trade/samples_order_create_packing_list.py +++ /dev/null @@ -1,64 +0,0 @@ -## Script (Python) "samples_order_create_packing_list" -##bind container=container -##bind context=context -##bind namespace= -##bind script=script -##bind subpath=traverse_subpath -##parameters= -##title= -## -#request = context.REQUEST -#response = request.RESPONSE -delivery_module = context.getPortalObject().livraison_echantillon -delivery_type = 'Samples Packing List' -delivery_line_type = 'Delivery Line' -order_line_type = 'Sample Order Line' - -# Create a new packing list -order = context.getObject() -new_id = str(delivery_module.generateNewId()) -context.portal_types.constructContent(type_name=delivery_type, - container=delivery_module, - id=new_id, - order_id=order.getId(), - title = order.getTitle(), - target_start_date = order.getStartDate(), - target_stop_date = order.getStopDate(), - ) -delivery = delivery_module[new_id] - - -# delivery.edit( -# source = order.getSource(), -# destination = order.getDestination(), -# causality_reference = order -# ) - -# Create each line -for order_line in context.contentValues(filter={'portal_type':order_line_type}): - order_line_object = order_line.getObject() - if order_line_object is not None: - new_id = order_line_object.getId() - context.portal_types.constructContent(type_name=delivery_line_type, - container=delivery, - id=new_id, - title = order_line_object.getTitle(), - description = order_line_object.getDescription(), - quantity = order_line_object.getQuantity(), - target_quantity = order_line_object.getQuantity(), - target_start_date = order.getStartDate(), - target_stop_date = order.getStopDate(), - resource = order_line_object.getResource(), - quantity_unit = order_line_object.getQuantityUnit() - ) - delivery[new_id].setVariationCategoryList(order_line_object.getVariationCategoryList()) - -# If we do this before, each added line will take 20 times more time -# because of programmable acquisition -delivery.edit( - source = order.getSource(), - destination = order.getDestination(), - causality_value = order -) - -return delivery diff --git a/product/Coramy/skins/coramy_trade/samples_order_element_tarif_create.py b/product/Coramy/skins/coramy_trade/samples_order_element_tarif_create.py deleted file mode 100755 index edfde74788..0000000000 --- a/product/Coramy/skins/coramy_trade/samples_order_element_tarif_create.py +++ /dev/null @@ -1,26 +0,0 @@ -## Script (Python) "samples_order_element_tarif_create" -##bind container=container -##bind context=context -##bind namespace= -##bind script=script -##bind subpath=traverse_subpath -##parameters=form_id='' -##title= -## -request = context.REQUEST -order = context - -order_line_list = order.contentValues(filter={'portal_type':'Sample Order Line'}) -for order_line in order_line_list : - elements_tarif_list = order_line.contentValues(filter={'portal_type':'Element Tarif'}) - - order_line.invokeFactory(type_name="Element Tarif", - id="t"+str(len(elements_tarif_list)), - RESPONSE=request.RESPONSE) - -redirect_url = '%s/%s?%s' % ( context.absolute_url() - , form_id - , 'portal_status_message=Eléments+de+tarif+créés.' - ) - -request[ 'RESPONSE' ].redirect( redirect_url ) diff --git a/product/Coramy/skins/coramy_trade/samples_order_selection_to_list.py b/product/Coramy/skins/coramy_trade/samples_order_selection_to_list.py deleted file mode 100755 index 81faf3e720..0000000000 --- a/product/Coramy/skins/coramy_trade/samples_order_selection_to_list.py +++ /dev/null @@ -1,20 +0,0 @@ -## Script (Python) "samples_order_selection_to_list" -##bind container=container -##bind context=context -##bind namespace= -##bind script=script -##bind subpath=traverse_subpath -##parameters= -##title= -## -selection = context.portal_selections.getSelectionFor('order_selection',REQUEST=context.REQUEST) -order_sql_list = selection(context=context) -request = context.REQUEST -order_id_list =[] - -for order_item in order_sql_list : - order=order_item.getObject() - if order <> None : - order_id_list.append(order.getId()) - -return order_id_list diff --git a/product/Coramy/skins/coramy_trade/samples_order_suivi.pt b/product/Coramy/skins/coramy_trade/samples_order_suivi.pt deleted file mode 100755 index d8229b2346..0000000000 --- a/product/Coramy/skins/coramy_trade/samples_order_suivi.pt +++ /dev/null @@ -1,99 +0,0 @@ -<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> - -<html> - - <head> - <meta http-equiv="content-type" content="text/html;charset=ISO-8859-1"> - <title tal:content="here/getTitle">Coramy</title> - - </head> - - - <body bgcolor="#ffffff" - tal:define="order_id_list python:here.samples_order_selection_to_list(); - order_list python:here.find_order_lines_sql_order_list(order_list=order_id_list)"> - -<table width="954" border="0" cellpadding="0" cellspacing="0"> - <tr> <!-- Ligne Titre --> - <td><img src="spacer1.png" width="1" height="1"></td> - <td> <div align="center"> - <p><font size="+3" color="red">Suivi de l'échantillonnage</font></p> - </div></td> - <td><img src="spacer1.png" width="1" height="1"></td> - </tr> - <tr> <!-- Border-top info --> - <td class="line"><img src="spacer.png" width="1" height="1"></td> - <td class="line"><img src="spacer.png" width="952" height="1"></td> - <td class="line"><img src="spacer.png" width="1" height="1"></td> - </tr> - - <tr> <!-- Border Top Ligne commande --> - <td><img src="spacer.png" width="1" height="1"></td> - <td><img src="spacer.png" width="952" height="1"></td> - <td><img src="spacer.png" width="1" height="1"></td> - </tr> - <tr> <!-- Ligne commande --> - <td><img src="spacer.png" width="1" height="100%"></td> - <td><table class="border" align="center" width="100%"> - <tr> - <td align=center><i><b>Cde</b></i></td> - <td align=center><i><b>Client</b></i></td> - <td align=center><i><b>Acheteur</b></i></td> - <td align=center><i><b>Rayon</b></i></td> - <td align=center><i><b>Etat</b></i></td> - <td align=center><i><b>Date demandée</b></i></td> - <td align=center><i><b>Qté demandée</b></i></td> - <td align=center><i><b>Livraison 1</b></i></td> - <td align=center><i><b>Qté livrée</b></i></td> - <td align=center><i><b>Livraison 2</b></i></td> - <td align=center><i><b>Qté livrée</b></i></td> - <td align=center><i><b>Livraison 3</b></i></td> - <td align=center><i><b>Qté livrée</b></i></td> - </tr> - <tr tal:repeat="order_item order_list"> - <span tal:define="order python:order_item.getObject()"> - <td align="center" tal:content="python:order_item.id"> - </td> - <td tal:content="python:order_item.default_destination_title"> - </td> - <td tal:define="acheteur python:order.getDefaultValue('contact',portal_type=['Person'])"> - <span tal:condition="python:acheteur <> None"> - <span tal:content="python:acheteur.getTitle()"/> - </span> - </td> - <td tal:content="python:order.getDescription()"> - </td> - <td> - <span tal:condition="python:order <> None"> - <span tal:content="python:order.portal_workflow.getInfoFor(order, 'order_state')"/> - </span> - </td> - <td tal:content="python:order.getStopDate()"> - </td> - <td align="center" tal:content="python:int(order_item.quantity)"> - </td> - <span tal:define="delivery_list python:here.find_delivery_lines_sql_order_list(order_list=[order_item.id,])"> - <span tal:repeat="delivery_item delivery_list"> - <span tal:define="delivery python:delivery_item.getObject()"> - <td tal:content="python:delivery.getStartDate()"/> - <td align="center" tal:content="python:int(delivery_item.quantity)"/> - </span> - </span> - </span> - </span> - </tr> - - </table> - <td><img src="spacer.png" width="1" height="100%"></td> - </tr> - <tr> <!-- Border Bottom Ligne commande --> - <td><img src="spacer.png" width="1" height="1"></td> - <td><img src="spacer.png" width="952" height="1"></td> - <td><img src="spacer.png" width="1" height="1"></td> - </tr> - -</table> - -</body> - -</html> diff --git a/product/Coramy/skins/coramy_trade/samples_order_workflow_preparer_livraison.form b/product/Coramy/skins/coramy_trade/samples_order_workflow_preparer_livraison.form deleted file mode 100755 index e110e386a4..0000000000 --- a/product/Coramy/skins/coramy_trade/samples_order_workflow_preparer_livraison.form +++ /dev/null @@ -1,81 +0,0 @@ -<?xml version="1.0"?> - -<form> - <title>Préparer une livraison</title> - <row_length>4</row_length> - <name>main</name> - <pt>form_view_dialog</pt> - <action>workflow_status_modify</action> - <method>POST</method> - <enctype>multipart/form-data</enctype> - <encoding>UTF-8</encoding> - <stored_encoding>ISO-8859-1</stored_encoding> - <unicode_mode>false</unicode_mode> - <groups> - <group> - <title>Default</title> - <fields> - - <field><id>my_comment</id> <type>TextAreaField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <height type="int">5</height> - <hidden type="int">0</hidden> - <max_length></max_length> - <max_linelength></max_linelength> - <max_lines></max_lines> - <required type="int">0</required> - <title>Commentaires</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - <width type="int">80</width> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_many_lines">You entered too many lines.</message> - <message name="line_too_long">A line was too long.</message> - <message name="too_long">You entered too many characters.</message> - </messages> - </field> - <field><id>my_workflow_action</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default>preparer_livraison</default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">1</hidden> - <max_length></max_length> - <required type="int">1</required> - <title> </title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - </fields> - </group> - </groups> -</form> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_trade/samples_order_workflow_preparer_nouvelle_livraison.form b/product/Coramy/skins/coramy_trade/samples_order_workflow_preparer_nouvelle_livraison.form deleted file mode 100755 index 2c94d7af56..0000000000 --- a/product/Coramy/skins/coramy_trade/samples_order_workflow_preparer_nouvelle_livraison.form +++ /dev/null @@ -1,81 +0,0 @@ -<?xml version="1.0"?> - -<form> - <title>Préparer une livraison</title> - <row_length>4</row_length> - <name>main</name> - <pt>form_view_dialog</pt> - <action>workflow_status_modify</action> - <method>POST</method> - <enctype>multipart/form-data</enctype> - <encoding>UTF-8</encoding> - <stored_encoding>ISO-8859-1</stored_encoding> - <unicode_mode>false</unicode_mode> - <groups> - <group> - <title>Default</title> - <fields> - - <field><id>my_comment</id> <type>TextAreaField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <height type="int">5</height> - <hidden type="int">0</hidden> - <max_length></max_length> - <max_linelength></max_linelength> - <max_lines></max_lines> - <required type="int">0</required> - <title>Commentaires</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - <width type="int">80</width> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_many_lines">You entered too many lines.</message> - <message name="line_too_long">A line was too long.</message> - <message name="too_long">You entered too many characters.</message> - </messages> - </field> - <field><id>my_workflow_action</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default>preparer_nouvelle_livraison</default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">1</hidden> - <max_length></max_length> - <required type="int">1</required> - <title> </title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - </fields> - </group> - </groups> -</form> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_trade/samples_order_workflow_valider_commande.form b/product/Coramy/skins/coramy_trade/samples_order_workflow_valider_commande.form deleted file mode 100755 index df03b04a6c..0000000000 --- a/product/Coramy/skins/coramy_trade/samples_order_workflow_valider_commande.form +++ /dev/null @@ -1,81 +0,0 @@ -<?xml version="1.0"?> - -<form> - <title>Valider la commande</title> - <row_length>4</row_length> - <name>main</name> - <pt>form_view_dialog</pt> - <action>workflow_status_modify</action> - <method>POST</method> - <enctype>multipart/form-data</enctype> - <encoding>UTF-8</encoding> - <stored_encoding>ISO-8859-1</stored_encoding> - <unicode_mode>false</unicode_mode> - <groups> - <group> - <title>Default</title> - <fields> - - <field><id>my_comment</id> <type>TextAreaField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <height type="int">5</height> - <hidden type="int">0</hidden> - <max_length></max_length> - <max_linelength></max_linelength> - <max_lines></max_lines> - <required type="int">0</required> - <title>Commentaires</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - <width type="int">80</width> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_many_lines">You entered too many lines.</message> - <message name="line_too_long">A line was too long.</message> - <message name="too_long">You entered too many characters.</message> - </messages> - </field> - <field><id>my_workflow_action</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default>valider_commande</default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">1</hidden> - <max_length></max_length> - <required type="int">1</required> - <title> </title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - </fields> - </group> - </groups> -</form> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_trade/samples_ordered.zsql b/product/Coramy/skins/coramy_trade/samples_ordered.zsql deleted file mode 100755 index 659d01f1e7..0000000000 --- a/product/Coramy/skins/coramy_trade/samples_ordered.zsql +++ /dev/null @@ -1,29 +0,0 @@ -<dtml-comment> -title: -connection_id:erp5_sql_connection -max_rows:0 -max_cache:0 -cache_time:0 -class_name:ZSQLBrain -class_file:zsqlbrain.py -</dtml-comment> -<params></params> -SELECT modele.id, SUM(movement.quantity) AS quantity -FROM catalog AS ligne_cde, catalog AS modele, catalog AS commande, category AS cat1, category AS cat2, movement -WHERE commande.portal_type="Samples Order" -AND commande.order_state="active" -AND ligne_cde.parent_uid=commande.uid -AND ligne_cde.portal_type="Sample Order Line" - -AND modele.uid=cat1.category_uid -AND ligne_cde.uid=cat1.uid -AND cat1.base_category_uid=<dtml-var "portal_categories.resource.uid"> - -AND cat2.uid=modele.uid -AND ( cat2.category_uid = <dtml-var "portal_categories.collection['2004'].Coramy.Planches.uid"> -OR cat2.category_uid = <dtml-var "portal_categories.collection['2004'].Etudes.uid"> ) - -AND movement.uid=ligne_cde.uid - -GROUP BY modele.id -ORDER BY modele.id \ No newline at end of file diff --git a/product/Coramy/skins/coramy_trade/samples_ordered_delivered.zsql b/product/Coramy/skins/coramy_trade/samples_ordered_delivered.zsql deleted file mode 100755 index 8607b48785..0000000000 --- a/product/Coramy/skins/coramy_trade/samples_ordered_delivered.zsql +++ /dev/null @@ -1,37 +0,0 @@ -<dtml-comment> -title: -connection_id:erp5_sql_connection -max_rows:0 -max_cache:0 -cache_time:0 -class_name:ZSQLBrain -class_file:zsqlbrain.py -</dtml-comment> -<params></params> -SELECT modele.id, SUM(movement.quantity) AS quantity -FROM catalog AS ligne_livr, catalog AS modele, catalog AS livraison, -catalog AS commande, category AS cat1, category AS cat2, category AS cat3, movement - -WHERE ligne_livr.portal_type="Delivery Line" -AND livraison.portal_type="Samples Packing List" -AND ligne_livr.parent_uid=livraison.uid -AND livraison.delivery_state='expediee' - -AND livraison.uid=cat3.uid -AND commande.uid=cat3.category_uid -AND cat3.base_category_uid = <dtml-var "portal_categories.causality.uid"> -AND commande.portal_type="Samples Order" -AND commande.order_state="active" - -AND cat2.uid=modele.uid -AND ( cat2.category_uid = <dtml-var "portal_categories.collection['2004'].Coramy.Planches.uid"> -OR cat2.category_uid = <dtml-var "portal_categories.collection['2004'].Etudes.uid"> ) - -AND modele.uid=cat1.category_uid -AND ligne_livr.uid=cat1.uid -AND cat1.base_category_uid=<dtml-var "portal_categories.resource.uid"> - -AND movement.uid=ligne_livr.uid - -GROUP BY modele.id -ORDER BY modele.id \ No newline at end of file diff --git a/product/Coramy/skins/coramy_trade/samples_packing_list_list.form b/product/Coramy/skins/coramy_trade/samples_packing_list_list.form deleted file mode 100755 index c2f9b96e71..0000000000 --- a/product/Coramy/skins/coramy_trade/samples_packing_list_list.form +++ /dev/null @@ -1,62 +0,0 @@ -<?xml version="1.0"?> - -<form> - <title>Liste des livraisons</title> - <row_length>4</row_length> - <name>packing_list_list</name> - <pt>form_list</pt> - <action></action> - <method>POST</method> - <enctype>multipart/form-data</enctype> - <encoding>UTF-8</encoding> - <stored_encoding>ISO-8859-1</stored_encoding> - <unicode_mode>false</unicode_mode> - <groups> - <group> - <title>Default</title> - <fields> - - <field><id>listbox</id> <type>ListBox</type> - <values> - <all_columns type="list">[('id', 'Livraison'), ('order_id', 'Commande'), ('default_destination_title', 'Client'), ('target_stop_date', 'Date demand\xe9e'), ('start_date', "Date d'exp\xe9dition"), ('delivery_state', 'Etat')]</all_columns> - <all_editable_columns type="list">[]</all_editable_columns> - <alternate_name></alternate_name> - <columns type="list">[('id', 'Livraison'), ('order_id', 'Commande'), ('default_destination_title', 'Client'), ('target_stop_date', 'Date demand\xe9e'), ('start_date', "Date d'exp\xe9dition"), ('delivery_state', 'Etat')]</columns> - <css_class></css_class> - <default></default> - <default_params type="list">[('id', "''")]</default_params> - <description></description> - <domain_root_list type="list">[]</domain_root_list> - <domain_tree type="int">0</domain_tree> - <editable type="int">1</editable> - <editable_columns type="list">[]</editable_columns> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <global_attributes type="list">[]</global_attributes> - <hidden type="int">0</hidden> - <lines type="int">30</lines> - <list_action>list</list_action> - <list_method type="method">portal_catalog</list_method> - <meta_types type="list">[]</meta_types> - <portal_types type="list">[('Samples Packing List', 'Samples Packing List')]</portal_types> - <report_root_list type="list">[]</report_root_list> - <report_tree type="int">0</report_tree> - <search type="int">1</search> - <search_columns></search_columns> - <select type="int">1</select> - <selection_name>delivery_selection</selection_name> - <sort type="list">[('id', 'id')]</sort> - <sort_columns></sort_columns> - <stat_method></stat_method> - <title>Livraisons</title> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - </messages> - </field> - </fields> - </group> - </groups> -</form> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_trade/samples_packing_list_modele_search.form b/product/Coramy/skins/coramy_trade/samples_packing_list_modele_search.form deleted file mode 100755 index 8e53843868..0000000000 --- a/product/Coramy/skins/coramy_trade/samples_packing_list_modele_search.form +++ /dev/null @@ -1,56 +0,0 @@ -<?xml version="1.0"?> - -<form> - <title>Rechercher</title> - <row_length>4</row_length> - <name>search</name> - <pt>form_dialog</pt> - <action>samples_packing_list_modele_search_list</action> - <method>POST</method> - <enctype></enctype> - <encoding>UTF-8</encoding> - <stored_encoding>ISO-8859-1</stored_encoding> - <unicode_mode>false</unicode_mode> - <groups> - <group> - <title>left</title> - <fields> - - <field><id>my_modele_id</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">60</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <max_length></max_length> - <required type="int">1</required> - <title>Modèle</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>right</title> - <fields> - - </fields> - </group> - </groups> -</form> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_trade/samples_packing_list_modele_search_list.form b/product/Coramy/skins/coramy_trade/samples_packing_list_modele_search_list.form deleted file mode 100755 index 828e495c50..0000000000 --- a/product/Coramy/skins/coramy_trade/samples_packing_list_modele_search_list.form +++ /dev/null @@ -1,62 +0,0 @@ -<?xml version="1.0"?> - -<form> - <title>Liste des livraisons</title> - <row_length>4</row_length> - <name>order_list</name> - <pt>form_list</pt> - <action></action> - <method>POST</method> - <enctype>multipart/form-data</enctype> - <encoding>UTF-8</encoding> - <stored_encoding>ISO-8859-1</stored_encoding> - <unicode_mode>false</unicode_mode> - <groups> - <group> - <title>Default</title> - <fields> - - <field><id>listbox</id> <type>ListBox</type> - <values> - <all_columns type="list">[('id', 'Livraison'), ('order_id', 'Commande'), ('default_destination_title', 'Client'), ('target_stop_date', 'Date demand\xe9e'), ('start_date', "Date d'exp\xe9dition"), ('delivery_state', 'Etat')]</all_columns> - <all_editable_columns type="list">[]</all_editable_columns> - <alternate_name></alternate_name> - <columns type="list">[('id', 'Livraison'), ('order_id', 'Commande'), ('default_destination_title', 'Client'), ('target_stop_date', 'Date demand\xe9e'), ('start_date', "Date d'exp\xe9dition"), ('delivery_state', 'Etat')]</columns> - <css_class></css_class> - <default></default> - <default_params type="list">[('id', "''")]</default_params> - <description></description> - <domain_root_list type="list">[]</domain_root_list> - <domain_tree type="int">0</domain_tree> - <editable type="int">1</editable> - <editable_columns type="list">[]</editable_columns> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <global_attributes type="list">[]</global_attributes> - <hidden type="int">0</hidden> - <lines type="int">30</lines> - <list_action>list</list_action> - <list_method type="method">samples_packing_list_sql_modele_search</list_method> - <meta_types type="list">[]</meta_types> - <portal_types type="list">[('Samples Packing List', 'Samples Packing List')]</portal_types> - <report_root_list type="list">[]</report_root_list> - <report_tree type="int">0</report_tree> - <search type="int">1</search> - <search_columns></search_columns> - <select type="int">1</select> - <selection_name>delivery_selection</selection_name> - <sort type="list">[('id', 'id')]</sort> - <sort_columns></sort_columns> - <stat_method></stat_method> - <title>Livraisons</title> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - </messages> - </field> - </fields> - </group> - </groups> -</form> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_trade/samples_packing_list_print.pt b/product/Coramy/skins/coramy_trade/samples_packing_list_print.pt deleted file mode 100755 index b42a1d8758..0000000000 --- a/product/Coramy/skins/coramy_trade/samples_packing_list_print.pt +++ /dev/null @@ -1,134 +0,0 @@ -<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> - -<html> - - <head> - <meta http-equiv="content-type" content="text/html;charset=ISO-8859-1"> - <title tal:content="here/getTitle">Coramy</title> - - </head> - - <body bgcolor="#ffffff" - tal:define="client python:here.getDefaultValue('destination',portal_type=['Organisation']); - commande python:here.getDefaultValue('causality',portal_type=['Samples Order']); - acheteur python:commande.getDefaultValue('contact',portal_type=['Person']); - lignes_livr python:here.contentValues(filter={'portal_type':'Delivery Line'}); - ordered_lines python:here.sort_object_list(unordered_list=lignes_livr, - sort_order = (('default_resource', 'ASC'),) ) - "> - -<table width="675" border="0" cellpadding="0" cellspacing="0"> - <tr> <!-- Ligne Titre --> - <td><img src="spacer1.png" width="1" height="1"></td> - <td> <div align="center"> - <p><font size="+3" color="red"><span tal:replace="python:'Livraison échantillons : %s' %here.getId()">Modèle - </span></font></p> - </div></td> - <td><img src="spacer1.png" width="1" height="1"></td> - </tr> - <tr> <!-- Border-top info --> - <td class="line"><img src="spacer.png" width="1" height="1"></td> - <td class="line"><img src="spacer.png" width="673" height="1"></td> - <td class="line"><img src="spacer.png" width="1" height="1"></td> - </tr> - <tr> <!-- Info --> - <td class="line"><img src="spacer.png" width="1" height="100%"></td> - <td><table class="border" width="100%"> - <tr> - <td><i><b>Client</b></i></td> - <td tal:content="client/getTitle">77H</td> - <td><i><b>Livrer avant le</b></i></td> - <td tal:content="here/getTargetStopDate"></td> - <td></td> - </tr> - <tr> - <td><i><b>Acheteur</b></i></td> - <td tal:content="acheteur/getTitle">77H</td> - <td><i><b>Expédié le</b></i></td> - <td tal:content="here/getStartDate"></td> - <td></td> - </tr> - </table></td> - <td class="line"><img src="spacer.png" width="1" height="100%"></td> - </tr> - <tr> <!-- Border Bottom info --> - <td class="line"><img src="spacer.png" width="1" height="1"></td> - <td><img src="spacer.png" width="673" height="1"></td> - <td class="line"><img src="spacer.png" width="1" height="1"></td> - </tr> - <tr> <!-- spacer --> - <td><img src="spacer1.png" width="1" height="1"></td> - <td><img src="spacer1.png" width="1" height="1"></td> - <td><img src="spacer1.png" width="1" height="1"></td> - </tr> - <tr> <!-- Border Top Ligne commande --> - <td><img src="spacer.png" width="1" height="1"></td> - <td><img src="spacer.png" width="673" height="1"></td> - <td><img src="spacer.png" width="1" height="1"></td> - </tr> - <tr> <!-- Ligne commande --> - <td><img src="spacer.png" width="1" height="100%"></td> - <td><table class="border" align="center" width="100%"> - <tr> - <td align=center><i><b>N°</b></i></td> - <td align=center><i><b>Modèle</b></i></td> - <td align=center><i><b>Coloris</b></i></td> - <td align=center><i><b>Taille</b></i></td> - <td align=center><i><b>Quantité</b></i></td> - <td align= center ><i><b>Description</b></i></td> - </tr> - <span tal:repeat="ligne ordered_lines"> - <tr tal:condition="python:ligne.getQuantity()>0"> - <td align=right tal:content="structure python:'<font size=-2>'+ligne.getId()+'</font>'" nowrap></td> - <span tal:define="url_items python:modules['string'].split(ligne.getResourceRelativeUrl(),'/')"> - <td align=center tal:content="python:url_items[len(url_items)-1]" nowrap >resource</td> - </span> - - <td align=center nowrap > - <span tal:condition="python:ligne.getDefaultResource()<>None and ligne.getColoris() <> None"> - <span tal:define="url_items python:modules['string'].split(ligne.getColoris(),'/')" - tal:content="python:url_items[len(url_items)-1]"> - </span> - </span> - </td> - - <td align=center nowrap > - <span tal:condition="python:ligne.getDefaultResource()<>None and ligne.getTaille() <> None"> - <span tal:define="url_items python:modules['string'].split(ligne.getTaille(),'/')" - tal:content="python:url_items[len(url_items)-1]"> - </span> - </span> - </td> - - <td align=center tal:content="python: '%.0f' % ligne.getQuantity()" nowrap >2</td> - - <td align=left> - <span tal:condition="python:ligne.getDefaultResource()<>None" - tal:define="modele python:ligne.getDefaultValue('resource',portal_type=['Modele'])"> - <span tal:content="structure python:'<font size=-2>'+modules['string'].lower(modele.getDescription())+'</font>'"> - </span> - </span> - </td> - - - </tr> - </span> - <tr> - <td colspan="3"></td> - <td align=center><b><i>Total</i></b></td> - <td align=center tal:content="python: '%.0f' %here.sample_delivery_count_samples()"><b><i>Total</i></b></td> - </tr> - </table> - <td><img src="spacer.png" width="1" height="100%"></td> - </tr> - <tr> <!-- Border Bottom Ligne commande --> - <td><img src="spacer.png" width="1" height="1"></td> - <td><img src="spacer.png" width="673" height="1"></td> - <td><img src="spacer.png" width="1" height="1"></td> - </tr> - -</table> - -</body> - -</html> diff --git a/product/Coramy/skins/coramy_trade/samples_packing_list_sql_modele_search.zsql b/product/Coramy/skins/coramy_trade/samples_packing_list_sql_modele_search.zsql deleted file mode 100755 index 0da2bf52d1..0000000000 --- a/product/Coramy/skins/coramy_trade/samples_packing_list_sql_modele_search.zsql +++ /dev/null @@ -1,17 +0,0 @@ -<dtml-comment> -title: -connection_id:erp5_sql_connection -max_rows:1000 -max_cache:100 -cache_time:0 -class_name:ZSQLBrain -class_file:zsqlbrain.py -</dtml-comment> -<params>modele_id</params> -SELECT DISTINCT livraison.id, livraison.uid, livraison.path, livraison.relative_url, livraison.delivery_state, livraison.Description, livraison.order_id -FROM catalog AS livraison, catalog AS ligne_livr, catalog AS modele, category -WHERE ligne_livr.parent_uid=livraison.uid -AND modele.id="<dtml-var modele_id>" -AND ligne_livr.uid=category.uid -AND modele.uid=category.category_uid -AND livraison.portal_type="Samples Packing List" \ No newline at end of file diff --git a/product/Coramy/skins/coramy_trade/samples_packing_list_view.form b/product/Coramy/skins/coramy_trade/samples_packing_list_view.form deleted file mode 100755 index ceb1350e9d..0000000000 --- a/product/Coramy/skins/coramy_trade/samples_packing_list_view.form +++ /dev/null @@ -1,383 +0,0 @@ -<?xml version="1.0"?> - -<form> - <title>Livraison échantillons</title> - <row_length>4</row_length> - <name>samples_packing_list_view</name> - <pt>form_view</pt> - <action>base_edit</action> - <method>POST</method> - <enctype>multipart/form-data</enctype> - <encoding>UTF-8</encoding> - <stored_encoding>ISO-8859-1</stored_encoding> - <unicode_mode>false</unicode_mode> - <groups> - <group> - <title>left</title> - <fields> - - <field><id>my_id</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">10</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <max_length></max_length> - <required type="int">1</required> - <title>Livraison</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - <field><id>my_destination_title</id> <type>RelationStringField</type> - <values> - <alternate_name></alternate_name> - <base_category>destination</base_category> - <catalog_index>Title</catalog_index> - <css_class></css_class> - <default></default> - <default_module>organisation</default_module> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <jump_method>base_jump_relation</jump_method> - <max_length></max_length> - <portal_type type="list">[('Organisation', 'Organisation')]</portal_type> - <required type="int">0</required> - <title>Client</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <update_method>base_update_relation</update_method> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - <field><id>my_order_id</id> <type>RelationStringField</type> - <values> - <alternate_name></alternate_name> - <base_category>causality</base_category> - <catalog_index>id</catalog_index> - <css_class></css_class> - <default></default> - <default_module>commande_echantillons</default_module> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">10</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <jump_method>base_jump_relation</jump_method> - <max_length></max_length> - <portal_type type="list">[('Samples Order', 'Samples Order')]</portal_type> - <required type="int">0</required> - <title>Commande</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <update_method>base_update_relation</update_method> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - <field><id>delivery_state</id> <type>StringField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <max_length></max_length> - <required type="int">0</required> - <title>Etat</title> - <truncate type="int">0</truncate> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <default>python:here.portal_workflow.getInfoFor(here, 'delivery_state')</default> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_long">Too much input was given.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>right</title> - <fields> - - <field><id>my_target_start_date</id> <type>DateTimeField</type> - <values> - <allow_empty_time type="int">0</allow_empty_time> - <alternate_name></alternate_name> - <ampm_time_style type="int">0</ampm_time_style> - <css_class></css_class> - <date_only type="int">1</date_only> - <date_separator>/</date_separator> - <default_now type="int">0</default_now> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <hidden type="int">0</hidden> - <input_order>dmy</input_order> - <input_style>text</input_style> - <required type="int">0</required> - <time_separator>:</time_separator> - <title>Livrer à partir du</title> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="not_datetime">You did not enter a valid date and time.</message> - <message name="datetime_out_of_range">The date and time you entered were out of range.</message> - </messages> - </field> - <field><id>my_target_stop_date</id> <type>DateTimeField</type> - <values> - <allow_empty_time type="int">0</allow_empty_time> - <alternate_name></alternate_name> - <ampm_time_style type="int">0</ampm_time_style> - <css_class></css_class> - <date_only type="int">1</date_only> - <date_separator>/</date_separator> - <default_now type="int">0</default_now> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <hidden type="int">0</hidden> - <input_order>dmy</input_order> - <input_style>text</input_style> - <required type="int">0</required> - <time_separator>:</time_separator> - <title>Livrer avant le</title> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="not_datetime">You did not enter a valid date and time.</message> - <message name="datetime_out_of_range">The date and time you entered were out of range.</message> - </messages> - </field> - <field><id>my_start_date</id> <type>DateTimeField</type> - <values> - <allow_empty_time type="int">0</allow_empty_time> - <alternate_name></alternate_name> - <ampm_time_style type="int">0</ampm_time_style> - <css_class></css_class> - <date_only type="int">1</date_only> - <date_separator>/</date_separator> - <default_now type="int">0</default_now> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <hidden type="int">0</hidden> - <input_order>dmy</input_order> - <input_style>text</input_style> - <required type="int">0</required> - <time_separator>:</time_separator> - <title>Date d'expédition</title> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="not_datetime">You did not enter a valid date and time.</message> - <message name="datetime_out_of_range">The date and time you entered were out of range.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>center</title> - <fields> - - <field><id>my_commentaires</id> <type>TextAreaField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <height type="int">3</height> - <hidden type="int">0</hidden> - <max_length></max_length> - <max_linelength></max_linelength> - <max_lines></max_lines> - <required type="int">0</required> - <title>Commentaires</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - <width type="int">80</width> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_many_lines">You entered too many lines.</message> - <message name="line_too_long">A line was too long.</message> - <message name="too_long">You entered too many characters.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>bottom</title> - <fields> - - <field><id>listbox</id> <type>ListBox</type> - <values> - <all_columns type="list">[('id', 'Ligne'), ('Description', 'Description'), ('getResourceRelativeUrl', 'Mod\xe8le'), ('target_quantity', 'Quantit\xe9 demand\xe9e'), ('quantity', 'Quantit\xe9 livr\xe9e')]</all_columns> - <all_editable_columns type="list">[('quantity', 'Quantit\xe9 livr\xe9e')]</all_editable_columns> - <alternate_name></alternate_name> - <columns type="list">[('id', 'Ligne'), ('Description', 'Description'), ('getResourceRelativeUrl', 'Mod\xe8le'), ('target_quantity', 'Quantit\xe9 demand\xe9e'), ('quantity', 'Quantit\xe9 livr\xe9e')]</columns> - <css_class></css_class> - <default></default> - <default_params type="list">[]</default_params> - <description></description> - <domain_root_list type="list">[]</domain_root_list> - <domain_tree type="int">0</domain_tree> - <editable type="int">1</editable> - <editable_columns type="list">[('quantity', 'Quantit\xe9 livr\xe9e')]</editable_columns> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <global_attributes type="list">[]</global_attributes> - <hidden type="int">0</hidden> - <lines type="int">100</lines> - <list_action>folder_contents</list_action> - <list_method type="method">searchFolder</list_method> - <meta_types type="list">[]</meta_types> - <portal_types type="list">[('Delivery Line', 'Delivery Line')]</portal_types> - <report_root_list type="list">[]</report_root_list> - <report_tree type="int">0</report_tree> - <search type="int">0</search> - <search_columns></search_columns> - <select type="int">0</select> - <selection_name>order_line_selection</selection_name> - <sort type="list">[('id', 'id')]</sort> - <sort_columns></sort_columns> - <stat_method></stat_method> - <title>Lignes de livraison</title> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>hidden</title> - <fields> - - <field><id>listbox_quantity</id> <type>FloatField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">20</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <required type="int">0</required> - <title>listbox_quantity</title> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="not_float">You did not enter a floating point number.</message> - </messages> - </field> - <field><id>listbox_quantity_unit</id> <type>ListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <extra_item></extra_item> - <first_item type="int">0</first_item> - <hidden type="int">0</hidden> - <items type="list">[]</items> - <required type="int">0</required> - <size type="int">1</size> - <title>Unité</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <items>here/portal_categories/quantity_unit/getFormItemList</items> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - </fields> - </group> - </groups> -</form> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_trade/samples_to_produce.py b/product/Coramy/skins/coramy_trade/samples_to_produce.py deleted file mode 100755 index 421abbd63d..0000000000 --- a/product/Coramy/skins/coramy_trade/samples_to_produce.py +++ /dev/null @@ -1,45 +0,0 @@ -## Script (Python) "samples_to_produce" -##bind container=container -##bind context=context -##bind namespace= -##bind script=script -##bind subpath=traverse_subpath -##parameters= -##title= -## -request = context.REQUEST -tab = '\t' -cr = '\r' -liste='Modele'+tab+'Qte livree'+tab+'Qte commandee'+cr -delivered_modele_list = context.samples_delivered() -ordered_modele_list = context.samples_ordered() -ordered_delivered_modele_list = context.samples_ordered_delivered() - -delivered_modele_dict ={} -for modele in delivered_modele_list : - delivered_modele_dict[modele.id] = modele.quantity - -ordered_modele_dict ={} -for modele in ordered_modele_list : - ordered_modele_dict[modele.id] = modele.quantity - -for modele in ordered_delivered_modele_list : - ordered_modele_dict[modele.id] = ordered_modele_dict[modele.id] - modele.quantity - -delivered_modele_keys = delivered_modele_dict.keys() -ordered_modele_keys = ordered_modele_dict.keys() -for modele_key in ordered_modele_keys: - if not(modele_key in delivered_modele_keys) : - delivered_modele_dict[modele_key] = 0 - -delivered_modele_keys = delivered_modele_dict.keys() -delivered_modele_keys.sort() -for modele_key in delivered_modele_keys: - if modele_key in ordered_modele_keys : - liste += 'modele/'+modele_key+tab+str(int(delivered_modele_dict[modele_key]))+tab+str(int(ordered_modele_dict[modele_key]))+cr - else : - liste += 'modele/'+modele_key+tab+str(int(delivered_modele_dict[modele_key]))+tab+'0'+cr - -request.RESPONSE.setHeader('Content-Type','application/text') - -return liste diff --git a/product/Coramy/skins/coramy_trade/speed_order_input.py b/product/Coramy/skins/coramy_trade/speed_order_input.py deleted file mode 100755 index f8a24f440e..0000000000 --- a/product/Coramy/skins/coramy_trade/speed_order_input.py +++ /dev/null @@ -1,70 +0,0 @@ -## Script (Python) "speed_order_input" -##bind container=container -##bind context=context -##bind namespace= -##bind script=script -##bind subpath=traverse_subpath -##parameters=form_id,dialog_id,modeles,quantity,tarif,cout_additionnel,coef_marge,coef_majoration -##title= -## -request=context.REQUEST -order = context.getObject() -error_modeles = [] - -for modele_item in modeles : - modele_list = order.modele_sql_search_id(modele_id = modele_item) - - # create a new line for each modle_item - new_id = str(order.generateNewId()) - context.portal_types.constructContent(type_name="Sample Order Line", - container=order, - id=new_id, - ) - categories = [] - categories.append('tarif/'+tarif) - - if len(modele_list) == 1 : - modele = modele_list[0].getObject() - - if modele <> None : - - # search for default_coloris and update if found - coloris_list = modele.contentValues(filter={'portal_type':'Variante Modele'}) - default_coloris = None - for coloris in coloris_list : - if coloris.getPrototype() == 1 : - default_coloris = coloris - if default_coloris <> None : - categories.append('coloris/'+default_coloris.getRelativeUrl()) - - - order[new_id].edit(quantity=quantity, cout_additionnel=cout_additionnel, - coef_marge=coef_marge, coef_majoration=coef_majoration, - resource_relative_url=modele.getRelativeUrl(), - categories=categories) - uids = [modele.getUid()] - order[new_id].setValueUids('resource', uids, portal_type='Modele') - - else : - order[new_id].edit(quantity=quantity, cout_additionnel=cout_additionnel, - coef_marge=coef_marge, coef_majoration=coef_majoration, - description = modele_item, categories=categories) - error_modeles.append(modele_item) - else : - order[new_id].edit(quantity=quantity, cout_additionnel=cout_additionnel, - coef_marge=coef_marge, coef_majoration=coef_majoration, - description = modele_item, categories=categories) - error_modeles.append(modele_item) - -if len(error_modeles)>0 : - redirect_url = '%s/%s?%s' % ( context.absolute_url(), form_id - , 'portal_status_message=%s+lignes+créées.+%s+modeles+non+trouves.' - %(len(modeles),len(error_modeles)) - ) -else : - redirect_url = '%s/%s?%s' % ( context.absolute_url(), form_id - , 'portal_status_message=%s+lignes+créées.' - %len(modeles) - ) - -context.REQUEST[ 'RESPONSE' ].redirect( redirect_url ) diff --git a/product/Coramy/skins/coramy_trade/speed_order_input_form.form b/product/Coramy/skins/coramy_trade/speed_order_input_form.form deleted file mode 100755 index c0add731e0..0000000000 --- a/product/Coramy/skins/coramy_trade/speed_order_input_form.form +++ /dev/null @@ -1,190 +0,0 @@ -<?xml version="1.0"?> - -<form> - <title>Saisie rapide</title> - <row_length>4</row_length> - <name>speed_order_input_form</name> - <pt>form_view_dialog</pt> - <action>speed_order_input</action> - <method>POST</method> - <enctype>multipart/form-data</enctype> - <encoding>UTF-8</encoding> - <stored_encoding>ISO-8859-1</stored_encoding> - <unicode_mode>false</unicode_mode> - <groups> - <group> - <title>left</title> - <fields> - - <field><id>my_modeles</id> <type>LinesField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default type="list">[]</default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <height type="int">10</height> - <hidden type="int">0</hidden> - <max_length></max_length> - <max_linelength></max_linelength> - <max_lines></max_lines> - <required type="int">1</required> - <title>Liste de modèles</title> - <unicode type="int">0</unicode> - <view_separator><br /> -</view_separator> - <whitespace_preserve type="int">0</whitespace_preserve> - <width type="int">40</width> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="too_many_lines">You entered too many lines.</message> - <message name="line_too_long">A line was too long.</message> - <message name="too_long">You entered too many characters.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>right</title> - <fields> - - <field><id>my_quantity</id> <type>FloatField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default>1</default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">10</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <required type="int">1</required> - <title>Quantité</title> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="not_float">You did not enter a floating point number.</message> - </messages> - </field> - <field><id>my_tarif</id> <type>ListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <extra_item></extra_item> - <first_item type="int">0</first_item> - <hidden type="int">0</hidden> - <items type="list">[]</items> - <required type="int">1</required> - <size type="int">1</size> - <title>Tarif</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <items>here/portal_categories/tarif/getFormItemList</items> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - <field><id>my_cout_additionnel</id> <type>FloatField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default>0.0</default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">10</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <required type="int">1</required> - <title>Coût sup. (euros)</title> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="not_float">You did not enter a floating point number.</message> - </messages> - </field> - <field><id>my_coef_marge</id> <type>FloatField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default>1.43</default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">10</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <required type="int">1</required> - <title>Coef. de marge</title> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="not_float">You did not enter a floating point number.</message> - </messages> - </field> - <field><id>my_coef_majoration</id> <type>FloatField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default>1.0</default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">10</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <required type="int">1</required> - <title>Coef. majoration</title> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="not_float">You did not enter a floating point number.</message> - </messages> - </field> - </fields> - </group> - </groups> -</form> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_trade/trade_condition_discount_view.form b/product/Coramy/skins/coramy_trade/trade_condition_discount_view.form deleted file mode 100755 index bc3dbc8c4d..0000000000 --- a/product/Coramy/skins/coramy_trade/trade_condition_discount_view.form +++ /dev/null @@ -1,86 +0,0 @@ -<?xml version="1.0"?> - -<form> - <title>Remises</title> - <row_length>4</row_length> - <name>trade_condition_profile_view</name> - <pt>form_view</pt> - <action>base_edit</action> - <method>POST</method> - <enctype></enctype> - <encoding>UTF-8</encoding> - <stored_encoding>ISO-8859-1</stored_encoding> - <unicode_mode>false</unicode_mode> - <groups> - <group> - <title>left</title> - <fields> - - </fields> - </group> - <group> - <title>right</title> - <fields> - - </fields> - </group> - <group> - <title>center</title> - <fields> - - </fields> - </group> - <group> - <title>bottom</title> - <fields> - - <field><id>listbox</id> <type>ListBox</type> - <values> - <all_columns type="list">[('id', 'Remise'), ('description', 'Description'), ('getDiscountRation', 'Taux')]</all_columns> - <all_editable_columns type="list">[]</all_editable_columns> - <alternate_name></alternate_name> - <columns type="list">[('id', 'Remise'), ('description', 'Description'), ('getDiscountRation', 'Taux')]</columns> - <css_class></css_class> - <default></default> - <default_params type="list">[('id', "''"), ('description', "''")]</default_params> - <description></description> - <domain_root_list type="list">[]</domain_root_list> - <domain_tree type="int">0</domain_tree> - <editable type="int">1</editable> - <editable_columns type="list">[]</editable_columns> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <global_attributes type="list">[]</global_attributes> - <hidden type="int">0</hidden> - <lines type="int">10</lines> - <list_action>list</list_action> - <list_method type="method">searchFolder</list_method> - <meta_types type="list">[]</meta_types> - <portal_types type="list">[('Remise', 'Remise')]</portal_types> - <report_root_list type="list">[]</report_root_list> - <report_tree type="int">0</report_tree> - <search type="int">0</search> - <search_columns></search_columns> - <select type="int">0</select> - <selection_name>remise_selection</selection_name> - <sort type="list">[('id', 'id')]</sort> - <sort_columns></sort_columns> - <stat_method></stat_method> - <title>Remises</title> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>hidden</title> - <fields> - - </fields> - </group> - </groups> -</form> \ No newline at end of file diff --git a/product/Coramy/skins/coramy_trade/trade_condition_payment_view.form b/product/Coramy/skins/coramy_trade/trade_condition_payment_view.form deleted file mode 100755 index 32d72f5087..0000000000 --- a/product/Coramy/skins/coramy_trade/trade_condition_payment_view.form +++ /dev/null @@ -1,220 +0,0 @@ -<?xml version="1.0"?> - -<form> - <title>Paiement</title> - <row_length>4</row_length> - <name>trade_condition_profile_view</name> - <pt>form_view</pt> - <action>base_edit</action> - <method>POST</method> - <enctype></enctype> - <encoding>UTF-8</encoding> - <stored_encoding>ISO-8859-1</stored_encoding> - <unicode_mode>false</unicode_mode> - <groups> - <group> - <title>left</title> - <fields> - - <field><id>my_payment_mode</id> <type>ListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <extra_item></extra_item> - <first_item type="int">0</first_item> - <hidden type="int">0</hidden> - <items type="list">[]</items> - <required type="int">1</required> - <size type="int">1</size> - <title>Mode de paiement</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <items>here/portal_categories/payment_mode/getFormItemList</items> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - <field><id>my_payment_term</id> <type>IntegerField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">10</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <end></end> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <required type="int">1</required> - <start></start> - <title>Délai de paiement (jours)</title> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="not_integer">You did not enter an integer.</message> - <message name="integer_out_of_range">The integer you entered was out of range.</message> - </messages> - </field> - <field><id>my_payment_end_of_month</id> <type>CheckBoxField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default type="int">0</default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <title>Paiement en fin de mois</title> - </values> - <tales> - <default>here/getPaymentEndOfMonth</default> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - </messages> - </field> - <field><id>my_payment_additional_term</id> <type>IntegerField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <display_maxwidth></display_maxwidth> - <display_width type="int">10</display_width> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <end></end> - <external_validator></external_validator> - <extra></extra> - <hidden type="int">0</hidden> - <required type="int">0</required> - <start></start> - <title>Délai supplémentaire (jours)</title> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="not_integer">You did not enter an integer.</message> - <message name="integer_out_of_range">The integer you entered was out of range.</message> - </messages> - </field> - <field><id>my_trade_date</id> <type>ListField</type> - <values> - <alternate_name></alternate_name> - <css_class></css_class> - <default></default> - <description></description> - <editable type="int">1</editable> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <extra></extra> - <extra_item></extra_item> - <first_item type="int">0</first_item> - <hidden type="int">0</hidden> - <items type="list">[]</items> - <required type="int">1</required> - <size type="int">1</size> - <title>Date de référence</title> - <unicode type="int">0</unicode> - <whitespace_preserve type="int">0</whitespace_preserve> - </values> - <tales> - <items>here/portal_categories/trade_date/getFormItemList</items> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - <message name="required_not_found">Input is required but no input given.</message> - <message name="unknown_selection">You selected an item that was not in the list.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>right</title> - <fields> - - </fields> - </group> - <group> - <title>center</title> - <fields> - - </fields> - </group> - <group> - <title>bottom</title> - <fields> - - <field><id>listbox</id> <type>ListBox</type> - <values> - <all_columns type="list">[('id', 'Paiement'), ('description', 'Description')]</all_columns> - <all_editable_columns type="list">[]</all_editable_columns> - <alternate_name></alternate_name> - <columns type="list">[('id', 'Paiement'), ('description', 'Description')]</columns> - <css_class></css_class> - <default></default> - <default_params type="list">[('id', "''"), ('description', "''")]</default_params> - <description></description> - <domain_root_list type="list">[]</domain_root_list> - <domain_tree type="int">0</domain_tree> - <editable type="int">1</editable> - <editable_columns type="list">[]</editable_columns> - <enabled type="int">1</enabled> - <external_validator></external_validator> - <global_attributes type="list">[]</global_attributes> - <hidden type="int">0</hidden> - <lines type="int">10</lines> - <list_action>list</list_action> - <list_method type="method">searchFolder</list_method> - <meta_types type="list">[]</meta_types> - <portal_types type="list">[('Condition Paiement', 'Condition Paiement')]</portal_types> - <report_root_list type="list">[]</report_root_list> - <report_tree type="int">0</report_tree> - <search type="int">0</search> - <search_columns></search_columns> - <select type="int">0</select> - <selection_name>payment_condition_selection</selection_name> - <sort type="list">[('id', 'id')]</sort> - <sort_columns></sort_columns> - <stat_method></stat_method> - <title>Paiements supplémentaires</title> - </values> - <tales> - </tales> - <messages> - <message name="external_validator_failed">The input failed the external validator.</message> - </messages> - </field> - </fields> - </group> - <group> - <title>hidden</title> - <fields> - - </fields> - </group> - </groups> -</form> \ No newline at end of file diff --git a/product/Coramy/tests/.cvsignore b/product/Coramy/tests/.cvsignore deleted file mode 100755 index 5e3adbee3a..0000000000 --- a/product/Coramy/tests/.cvsignore +++ /dev/null @@ -1,3 +0,0 @@ -.AppleDouble -*.pyc -zLOG.log diff --git a/product/Coramy/tests/__init__.py b/product/Coramy/tests/__init__.py deleted file mode 100755 index 4817854199..0000000000 --- a/product/Coramy/tests/__init__.py +++ /dev/null @@ -1,5 +0,0 @@ -"""\ -Unit test package for CMFCategory - -To run all tests type 'python runalltests.py' -""" diff --git a/product/Coramy/tests/coramy_catalog.zexp b/product/Coramy/tests/coramy_catalog.zexp deleted file mode 100755 index d44cde09e9a63eaa4ba3297e502bf59c4b3a43e4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 130783 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 diff --git a/product/Coramy/tests/coramy_delivery.zexp b/product/Coramy/tests/coramy_delivery.zexp deleted file mode 100755 index 72a810ba571af836a2467f60c5cf163aed5726cd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1401676 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%0AmULO|{@Yuv7>nxY&Y{Q?v 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[+rC)I2FR74`rC)L3uc?rbB~aM7 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 QcTXFq&oWZoQe{EW|FdJ5VE_OC diff --git a/product/Coramy/tests/coramy_order.zexp b/product/Coramy/tests/coramy_order.zexp deleted file mode 100755 index 986fe75b942c2614c5d0c8187a24822c43ae6ff9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 856202 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 X{o8fx)hVTK+F^au^(%knUw{4&xZA5j diff --git a/product/Coramy/tests/framework.py b/product/Coramy/tests/framework.py deleted file mode 100755 index c36e5abb81..0000000000 --- a/product/Coramy/tests/framework.py +++ /dev/null @@ -1,112 +0,0 @@ -############################################################################## -# -# ZopeTestCase -# -# COPY THIS FILE TO YOUR 'tests' DIRECTORY. -# -# This version of framework.py will use the SOFTWARE_HOME -# environment variable to locate Zope and the Testing package. -# -# If the tests are run in an INSTANCE_HOME installation of Zope, -# Products.__path__ and sys.path with be adjusted to include the -# instance's Products and lib/python directories respectively. -# -# If you explicitly set INSTANCE_HOME prior to running the tests, -# auto-detection is disabled and the specified path will be used -# instead. -# -# If the 'tests' directory contains a custom_zodb.py file, INSTANCE_HOME -# will be adjusted to use it. -# -# If you set the ZEO_INSTANCE_HOME environment variable a ZEO setup -# is assumed, and you can attach to a running ZEO server (via the -# instance's custom_zodb.py). -# -############################################################################## -# -# The following code should be at the top of every test module: -# -# import os, sys -# if __name__ == '__main__': -# execfile(os.path.join(sys.path[0], 'framework.py')) -# -# ...and the following at the bottom: -# -# if __name__ == '__main__': -# framework() -# -############################################################################## - -__version__ = '0.2.1' - -# Save start state -# -__SOFTWARE_HOME = os.environ.get('SOFTWARE_HOME', '') -__INSTANCE_HOME = os.environ.get('INSTANCE_HOME', '') - -if __SOFTWARE_HOME.endswith(os.sep): - __SOFTWARE_HOME = os.path.dirname(__SOFTWARE_HOME) - -if __INSTANCE_HOME.endswith(os.sep): - __INSTANCE_HOME = os.path.dirname(__INSTANCE_HOME) - -# Find and import the Testing package -# -if not sys.modules.has_key('Testing'): - p0 = sys.path[0] - if p0 and __name__ == '__main__': - os.chdir(p0) - p0 = '' - s = __SOFTWARE_HOME - p = d = s and s or os.getcwd() - while d: - if os.path.isdir(os.path.join(p, 'Testing')): - zope_home = os.path.dirname(os.path.dirname(p)) - # Do not add the parent directory into the path list. - # Why did the author put it? -yo - if 0: - sys.path[:1] = [p0, os.pardir, p, zope_home] - else: - sys.path[:1] = [p0, p, zope_home] - break - p, d = s and ('','') or os.path.split(p) - else: - print 'Unable to locate Testing package.', - print 'You might need to set SOFTWARE_HOME.' - sys.exit(1) - -import Testing, unittest -execfile(os.path.join(os.path.dirname(Testing.__file__), 'common.py')) - -# Include ZopeTestCase support -# -if 1: # Create a new scope - - p = os.path.join(os.path.dirname(Testing.__file__), 'ZopeTestCase') - - if not os.path.isdir(p): - print 'Unable to locate ZopeTestCase package.', - print 'You might need to install ZopeTestCase.' - sys.exit(1) - - ztc_common = 'ztc_common.py' - ztc_common_global = os.path.join(p, ztc_common) - - f = 0 - if os.path.exists(ztc_common_global): - execfile(ztc_common_global) - f = 1 - if os.path.exists(ztc_common): - execfile(ztc_common) - f = 1 - - if not f: - print 'Unable to locate %s.' % ztc_common - sys.exit(1) - - -# Debug -# -print 'SOFTWARE_HOME: %s' % os.environ.get('SOFTWARE_HOME', 'Not set') -print 'INSTANCE_HOME: %s' % os.environ.get('INSTANCE_HOME', 'Not set') - diff --git a/product/Coramy/tests/run_test_example.sh b/product/Coramy/tests/run_test_example.sh deleted file mode 100755 index deb684687f..0000000000 --- a/product/Coramy/tests/run_test_example.sh +++ /dev/null @@ -1,10 +0,0 @@ -export INSTANCE_HOME=/home/$USER/zope -export SOFTWARE_HOME=/usr/lib/zope/lib/python/ -export COPY_OF_INSTANCE_HOME=$INSTANCE_HOME -export COPY_OF_SOFTWARE_HOME=$SOFTWARE_HOME - -dir="`dirname $0`" -if test -n "$dir"; then - cd $dir -fi -python runalltests.py diff --git a/product/Coramy/tests/runalltests.py b/product/Coramy/tests/runalltests.py deleted file mode 100755 index 3a0d03daaf..0000000000 --- a/product/Coramy/tests/runalltests.py +++ /dev/null @@ -1,29 +0,0 @@ -# -# Runs all tests in the current directory -# -# Execute like: -# python runalltests.py -# -# Alternatively use the testrunner: -# python /path/to/Zope/utilities/testrunner.py -qa -# - -import os, sys -if __name__ == '__main__': - execfile(os.path.join(sys.path[0], 'framework.py')) - -import unittest -TestRunner = unittest.TextTestRunner -suite = unittest.TestSuite() - -tests = os.listdir(os.curdir) -tests = [n[:-3] for n in tests if n.startswith('test') and n.endswith('.py')] - -for test in tests: - m = __import__(test) - if hasattr(m, 'test_suite'): - suite.addTest(m.test_suite()) - -if __name__ == '__main__': - TestRunner().run(suite) - diff --git a/product/Coramy/tests/testCoramyCMFActivity.py b/product/Coramy/tests/testCoramyCMFActivity.py deleted file mode 100755 index e22d1b2366..0000000000 --- a/product/Coramy/tests/testCoramyCMFActivity.py +++ /dev/null @@ -1,353 +0,0 @@ -############################################################################## -# -# Copyright (c) 2004 Nexedi SARL and Contributors. All Rights Reserved. -# Sebastien Robin <seb@nexedi.com> -# -# WARNING: This program as such is intended to be used by professional -# programmers who take the whole responsability of assessing all potential -# consequences resulting from its eventual inadequacies and bugs -# End users who are looking for a ready-to-use solution with commercial -# garantees and support are strongly adviced to contract a Free Software -# Service Company -# -# This program is Free Software; you can redistribute it and/or -# modify it under the terms of the GNU General Public License -# as published by the Free Software Foundation; either version 2 -# of the License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -# -############################################################################## - - - -# -# Skeleton ZopeTestCase -# - -from random import randint - -import os, sys -if __name__ == '__main__': - execfile(os.path.join(sys.path[0], 'framework.py')) - -# Needed in order to have a log file inside the current folder -os.environ['EVENT_LOG_FILE'] = os.path.join(os.getcwd(), 'zLOG.log') -os.environ['EVENT_LOG_SEVERITY'] = '-300' - -from Testing import ZopeTestCase -from Products.ERP5Type.tests.ERP5TypeTestCase import ERP5TypeTestCase -from AccessControl.SecurityManagement import newSecurityManager, noSecurityManager -from DateTime import DateTime -from Acquisition import aq_base, aq_inner -from zLOG import LOG -import time - -class TestCMFActivity(ERP5TypeTestCase): - - run_all_test = 1 - # Different variables used for this test - company_id = 'Nexedi' - title1 = 'title1' - title2 = 'title2' - destination_company_stock = 'site/Stock_MP/Gravelines' - destination_company_group = 'group/Coramy' - destination_company_id = 'Coramy' - component_id = 'brick' - sales_order_id = '1' - purchase_order_id = '1' - quantity = 10 - base_price = 0.7832 - - def getBusinessTemplateList(self): - """ - Return the list of business templates. - - the business template crm give the following things : - modules: - - person - - organisation - base categories: - - region - - subordination - - /organisation - """ - return ('erp5_crm',) - - def getCategoriesTool(self): - return getattr(self.getPortal(), 'portal_categories', None) - - def getRuleTool(self): - return getattr(self.getPortal(), 'portal_Rules', None) - - def getPersonModule(self): - return getattr(self.getPortal(), 'person', None) - - def getOrganisationModule(self): - return getattr(self.getPortal(), 'organisation', None) - - #def populate(self, quiet=1, run=1): - def afterSetUp(self, quiet=1, run=1): - self.login() - portal = self.getPortal() - # Then add new components - if not(hasattr(portal,'organisation')): - portal.portal_types.constructContent(type_name='Organisation Module', - container=portal, - id='organisation') - organisation_module = self.getOrganisationModule() - if not(organisation_module.hasContent(self.company_id)): - o1 = organisation_module.newContent(id=self.company_id) - - def login(self, quiet=0, run=run_all_test): - uf = self.getPortal().acl_users - uf._doAddUser('seb', '', ['Manager'], []) - user = uf.getUserById('seb').__of__(uf) - newSecurityManager(None, user) - - def test_01_DeferedSetTitleSQLDict(self, quiet=0, run=run_all_test): - # Test if we can add a complete sales order - if not run: return - if not quiet: - message = '\nTest Defered Set Title SQLDict ' - ZopeTestCase._print(message) - LOG('Testing... ',0,message) - portal = self.getPortal() - organisation = portal.organisation._getOb(self.company_id) - organisation.setTitle(self.title1) - self.assertEquals(self.title1,organisation.getTitle()) - organisation.activate(activity='SQLDict').setTitle(self.title2) - organisation.reindexObject() - # Needed so that the message are commited into the queue - get_transaction().commit() - self.assertEquals(self.title1,organisation.getTitle()) - portal.portal_activities.distribute() - portal.portal_activities.tic() - self.assertEquals(self.title2,organisation.getTitle()) - message_list = portal.portal_activities.getMessageList() - self.assertEquals(len(message_list),0) - - def test_02_DeferedSetTitleSQLQueue(self, quiet=0, run=run_all_test): - # Test if we can add a complete sales order - if not run: return - if not quiet: - message = '\nTest Defered Set Title SQLQueue ' - ZopeTestCase._print(message) - LOG('Testing... ',0,message) - portal = self.getPortal() - organisation = portal.organisation._getOb(self.company_id) - organisation.setTitle(self.title1) - self.assertEquals(self.title1,organisation.getTitle()) - organisation.activate(activity='SQLQueue').setTitle(self.title2) - # Needed so that the message are commited into the queue - get_transaction().commit() - self.assertEquals(self.title1,organisation.getTitle()) - portal.portal_activities.distribute() - portal.portal_activities.tic() - self.assertEquals(self.title2,organisation.getTitle()) - message_list = portal.portal_activities.getMessageList() - self.assertEquals(len(message_list),0) - - def test_03_DeferedSetTitleRAMDict(self, quiet=0, run=run_all_test): - # Test if we can add a complete sales order - if not run: return - if not quiet: - message = '\nTest Defered Set Title RAMDict ' - ZopeTestCase._print(message) - LOG('Testing... ',0,message) - portal = self.getPortal() - organisation = portal.organisation._getOb(self.company_id) - organisation.setTitle(self.title1) - self.assertEquals(self.title1,organisation.getTitle()) - organisation.activate(activity='RAMDict').setTitle(self.title2) - # Needed so that the message are commited into the queue - get_transaction().commit() - self.assertEquals(self.title1,organisation.getTitle()) - portal.portal_activities.distribute() - portal.portal_activities.tic() - self.assertEquals(self.title2,organisation.getTitle()) - message_list = portal.portal_activities.getMessageList() - self.assertEquals(len(message_list),0) - - def test_04_DeferedSetTitleRAMQueue(self, quiet=0, run=run_all_test): - # Test if we can add a complete sales order - if not run: return - if not quiet: - message = '\nTest Defered Set Title RAMQueue ' - ZopeTestCase._print(message) - LOG('Testing... ',0,message) - portal = self.getPortal() - organisation = portal.organisation._getOb(self.company_id) - organisation.setTitle(self.title1) - self.assertEquals(self.title1,organisation.getTitle()) - organisation.activate(activity='RAMQueue').setTitle(self.title2) - # Needed so that the message are commited into the queue - get_transaction().commit() - self.assertEquals(self.title1,organisation.getTitle()) - portal.portal_activities.distribute() - portal.portal_activities.tic() - self.assertEquals(self.title2,organisation.getTitle()) - message_list = portal.portal_activities.getMessageList() - self.assertEquals(len(message_list),0) - - def test_05_InvokeAndCancelSQLDict(self, quiet=0, run=run_all_test): - # Test if we can add a complete sales order - if not run: return - if not quiet: - message = '\nTest Invoke And Cancel SQLDict ' - ZopeTestCase._print(message) - LOG('Testing... ',0,message) - portal = self.getPortal() - organisation = portal.organisation._getOb(self.company_id) - organisation.setTitle(self.title1) - self.assertEquals(self.title1,organisation.getTitle()) - organisation.activate(activity='SQLDict').setTitle(self.title2) - # Needed so that the message are commited into the queue - get_transaction().commit() - message_list = portal.portal_activities.getMessageList() - self.assertEquals(len(message_list),1) - portal.portal_activities.manageCancel(organisation.getPhysicalPath(),'setTitle') - # Needed so that the message are removed from the queue - get_transaction().commit() - self.assertEquals(self.title1,organisation.getTitle()) - message_list = portal.portal_activities.getMessageList() - self.assertEquals(len(message_list),0) - organisation.activate(activity='SQLDict').setTitle(self.title2) - # Needed so that the message are commited into the queue - get_transaction().commit() - message_list = portal.portal_activities.getMessageList() - self.assertEquals(len(message_list),1) - portal.portal_activities.manageInvoke(organisation.getPhysicalPath(),'setTitle') - # Needed so that the message are removed from the queue - get_transaction().commit() - self.assertEquals(self.title2,organisation.getTitle()) - message_list = portal.portal_activities.getMessageList() - self.assertEquals(len(message_list),0) - - def test_06_InvokeAndCancelSQLQueue(self, quiet=0, run=run_all_test): - # Test if we can add a complete sales order - if not run: return - if not quiet: - message = '\nTest Invoke And Cancel SQLQueue ' - ZopeTestCase._print(message) - LOG('Testing... ',0,message) - portal = self.getPortal() - organisation = portal.organisation._getOb(self.company_id) - organisation.setTitle(self.title1) - self.assertEquals(self.title1,organisation.getTitle()) - organisation.activate(activity='SQLQueue').setTitle(self.title2) - # Needed so that the message are commited into the queue - get_transaction().commit() - message_list = portal.portal_activities.getMessageList() - self.assertEquals(len(message_list),1) - portal.portal_activities.manageCancel(organisation.getPhysicalPath(),'setTitle') - # Needed so that the message are removed from the queue - get_transaction().commit() - self.assertEquals(self.title1,organisation.getTitle()) - message_list = portal.portal_activities.getMessageList() - self.assertEquals(len(message_list),0) - organisation.activate(activity='SQLQueue').setTitle(self.title2) - # Needed so that the message are commited into the queue - get_transaction().commit() - message_list = portal.portal_activities.getMessageList() - self.assertEquals(len(message_list),1) - portal.portal_activities.manageInvoke(organisation.getPhysicalPath(),'setTitle') - # Needed so that the message are removed from the queue - get_transaction().commit() - self.assertEquals(self.title2,organisation.getTitle()) - message_list = portal.portal_activities.getMessageList() - self.assertEquals(len(message_list),0) - - def test_07_InvokeAndCancelRAMQueue(self, quiet=0, run=run_all_test): - # Test if we can add a complete sales order - if not run: return - if not quiet: - message = '\nTest Invoke And Cancel RAMQueue ' - ZopeTestCase._print(message) - LOG('Testing... ',0,message) - portal = self.getPortal() - organisation = portal.organisation._getOb(self.company_id) - organisation.setTitle(self.title1) - self.assertEquals(self.title1,organisation.getTitle()) - organisation.activate(activity='RAMQueue').setTitle(self.title2) - # Needed so that the message are commited into the queue - get_transaction().commit() - message_list = portal.portal_activities.getMessageList() - self.assertEquals(len(message_list),1) - portal.portal_activities.manageCancel(organisation.getPhysicalPath(),'setTitle') - # Needed so that the message are removed from the queue - get_transaction().commit() - self.assertEquals(self.title1,organisation.getTitle()) - message_list = portal.portal_activities.getMessageList() - self.assertEquals(len(message_list),0) - organisation.activate(activity='RAMQueue').setTitle(self.title2) - # Needed so that the message are commited into the queue - get_transaction().commit() - message_list = portal.portal_activities.getMessageList() - self.assertEquals(len(message_list),1) - portal.portal_activities.manageInvoke(organisation.getPhysicalPath(),'setTitle') - # Needed so that the message are removed from the queue - get_transaction().commit() - self.assertEquals(self.title2,organisation.getTitle()) - message_list = portal.portal_activities.getMessageList() - self.assertEquals(len(message_list),0) - - def test_08_InvokeAndCancelRAMDict(self, quiet=0, run=run_all_test): - # Test if we can add a complete sales order - if not run: return - if not quiet: - message = '\nTest Invoke And Cancel RAMDict ' - ZopeTestCase._print(message) - LOG('Testing... ',0,message) - portal = self.getPortal() - organisation = portal.organisation._getOb(self.company_id) - organisation.setTitle(self.title1) - self.assertEquals(self.title1,organisation.getTitle()) - organisation.activate(activity='RAMDict').setTitle(self.title2) - # Needed so that the message are commited into the queue - get_transaction().commit() - message_list = portal.portal_activities.getMessageList() - self.assertEquals(len(message_list),1) - portal.portal_activities.manageCancel(organisation.getPhysicalPath(),'setTitle') - # Needed so that the message are removed from the queue - get_transaction().commit() - self.assertEquals(self.title1,organisation.getTitle()) - message_list = portal.portal_activities.getMessageList() - self.assertEquals(len(message_list),0) - organisation.activate(activity='RAMDict').setTitle(self.title2) - # Needed so that the message are commited into the queue - get_transaction().commit() - message_list = portal.portal_activities.getMessageList() - self.assertEquals(len(message_list),1) - portal.portal_activities.manageInvoke(organisation.getPhysicalPath(),'setTitle') - # Needed so that the message are removed from the queue - get_transaction().commit() - self.assertEquals(self.title2,organisation.getTitle()) - message_list = portal.portal_activities.getMessageList() - self.assertEquals(len(message_list),0) - - - - - - - - - -if __name__ == '__main__': - framework() -else: - import unittest - def test_suite(): - suite = unittest.TestSuite() - suite.addTest(unittest.makeSuite(TestCMFActivity)) - return suite - diff --git a/product/Coramy/tests/testCoramyFusion.py b/product/Coramy/tests/testCoramyFusion.py deleted file mode 100755 index 227ef36e47..0000000000 --- a/product/Coramy/tests/testCoramyFusion.py +++ /dev/null @@ -1,586 +0,0 @@ -############################################################################## -# -# Copyright (c) 2004 Nexedi SARL and Contributors. All Rights Reserved. -# Yoshinori Okuji <yo@nexedi.com> -# -# WARNING: This program as such is intended to be used by professional -# programmers who take the whole responsability of assessing all potential -# consequences resulting from its eventual inadequacies and bugs -# End users who are looking for a ready-to-use solution with commercial -# garantees and support are strongly adviced to contract a Free Software -# Service Company -# -# This program is Free Software; you can redistribute it and/or -# modify it under the terms of the GNU General Public License -# as published by the Free Software Foundation; either version 2 -# of the License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -# -############################################################################## - - - -# -# Skeleton ZopeTestCase -# - -from random import randint - -import os, sys -if __name__ == '__main__': - execfile(os.path.join(sys.path[0], 'framework.py')) - -# Needed in order to have a log file inside the current folder -os.environ['EVENT_LOG_FILE'] = os.path.join(os.getcwd(), 'zLOG.log') -os.environ['EVENT_LOG_SEVERITY'] = '-300' - -from Testing import ZopeTestCase -from Products.ERP5Type.tests.ERP5TypeTestCase import ERP5TypeTestCase -from AccessControl.SecurityManagement import newSecurityManager, noSecurityManager -from DateTime import DateTime -from Acquisition import aq_base, aq_inner -from zLOG import LOG -import time - -class TestFusion(ERP5TypeTestCase): - """ - Test the fusion code 'mergeDeliveryList' in Simulation Tool. - Need to test these types: - - - commande_vente (Sales Order) - - livraison_vente (Sales Packing List) - - facture_vente (Sale Invoice Transaction) - - commande_achat (Purchase Order) - - livraison_achat (Purchase Packing List) - - ordre_fabrication (Production Order) - - livraison_fabrication (Production Packing List) - - rapport_fabrication (Production Report) - """ - run_all_test = 1 - # Various variables used for this test - customer_organisation_id = 'nexedi' - customer_person_id = 'yo' - vendor_organisation_id = 'coramy' - vendor_person_id = 'tb' - vendor_section = 'group/Coramy' - - def getBusinessTemplateList(self): - """ - Return the list of business templates. - - the business template crm give the following things : - modules: - - person - - organisation - base categories: - - region - - subordination - - /organisation - """ - return ('erp5_crm', 'coramy_catalog', 'coramy_delivery', ) - #return ('erp5_crm', 'coramy_delivery', ) - - def getCatalogTool(self): - return getattr(self.getPortal(), 'portal_catalog', None) - - def getSimulationTool(self): - return getattr(self.getPortal(), 'portal_simulation', None) - - def getPersonModule(self): - return getattr(self.getPortal(), 'person', None) - - def getOrganisationModule(self): - return getattr(self.getPortal(), 'organisation', None) - - def getSalesOrderModule(self): - return getattr(self.getPortal(), 'commande_vente', None) - - def getSalesPackingListModule(self): - return getattr(self.getPortal(), 'livraison_vente', None) - - def getSaleInvoiceTransactionModule(self): - return getattr(self.getPortal(), 'facture_vente', None) - - def getPurchaseOrderModule(self): - return getattr(self.getPortal(), 'commande_achat', None) - - def getPurchasePackingListModule(self): - return getattr(self.getPortal(), 'livraison_achat', None) - - def getProductionOrderModule(self): - return getattr(self.getPortal(), 'ordre_fabrication', None) - - def getProductionPackingListModule(self): - return getattr(self.getPortal(), 'livraison_fabrication', None) - - def getProductionReportModule(self): - return getattr(self.getPortal(), 'rapport_fabrication', None) - - def getComposantModule(self): - return getattr(self.getPortal(), 'composant', None) - - def getAssortimentModule(self): - return getattr(self.getPortal(), 'assortiment', None) - - def afterSetUp(self, quiet=1, run=1): - self.login() - portal = self.getPortal() - portal_catalog = self.getCatalogTool() - portal_catalog.manage_catalogClear() - portal.ERP5_setAcquisition() - portal.portal_categories.immediateReindexObject() - for o in portal.portal_categories.objectValues(): - o.recursiveImmediateReindexObject() - portal.portal_simulation.immediateReindexObject() - for o in portal.portal_simulation.objectValues(): - o.recursiveImmediateReindexObject() - portal.portal_rules.immediateReindexObject() - # Create organisations. - portal.portal_types.constructContent(type_name='Organisation Module', - container=portal, - id='organisation') - organisation_module = portal.organisation - self.customer_organisation = organisation_module.newContent(id=self.customer_organisation_id) - self.vendor_organisation = organisation_module.newContent(id=self.vendor_organisation_id) - # Create persons. - portal.portal_types.constructContent(type_name='Person Module', - container=portal, - id='person') - person_module = portal.person - self.customer_person = person_module.newContent(id=self.customer_person_id) - self.vendor_person = person_module.newContent(id=self.vendor_person_id) - # Create models. - modele_module = portal.modele - self.model1 = modele_module.newContent(id='060E404') - self.model1.newContent(id='B', portal_type='Variante Morphologique') - self.model1.newContent(id='C', portal_type='Variante Morphologique') - self.model1.newContent(id='Violet_rose', portal_type='Variante Modele') - self.model1.newContent(id='noir_gris', portal_type='Variante Modele') - self.model2 = modele_module.newContent(id='004C401') - - def login(self, quiet=0, run=run_all_test): - uf = self.getPortal().acl_users - uf._doAddUser('seb', '', ['Manager'], []) - user = uf.getUserById('seb').__of__(uf) - newSecurityManager(None, user) - - def test_01_SanityCheck(self, quiet=0, run=run_all_test): - # Test if the environment is not broken - if not run: return - if not quiet: - message = '\nTest Sanity Check ' - ZopeTestCase._print(message) - LOG('Testing... ',0,message) - portal = self.getPortal() - self.assertNotEqual(self.getOrganisationModule(), None) - organisation_module = portal.organisation - self.assertNotEqual(organisation_module._getOb(self.customer_organisation_id), None) - self.assertNotEqual(organisation_module._getOb(self.vendor_organisation_id), None) - self.assertNotEqual(self.getPersonModule(), None) - person_module = portal.person - self.assertNotEqual(person_module._getOb(self.customer_person_id), None) - self.assertNotEqual(person_module._getOb(self.vendor_person_id), None) - self.assertNotEqual(self.getSimulationTool(), None) - self.assertNotEqual(self.getSalesOrderModule(), None) - self.assertNotEqual(self.getSalesPackingListModule(), None) - - def test_02_InvalidDeliveriesPassed(self, quiet=0, run=run_all_test): - # Test if mergeDeliveryList raises an exception when no delivery or a single one is passed - # and when deliveries have different organisations/persons/discounts/payment conditions. - if not run: return - if not quiet: - message = '\nInvalid Deliveries Passed ' - ZopeTestCase._print(message) - LOG('Testing... ',0,message) - portal_simulation = self.getSimulationTool() - self.assertRaises(portal_simulation.MergeDeliveryListError, - portal_simulation.mergeDeliveryList, - []) - self.assertRaises(portal_simulation.MergeDeliveryListError, - portal_simulation.mergeDeliveryList, - [None]) # None is okay here, since it is never used. - module = self.getSalesOrderModule() - # Test source sections. - if module.hasContent('1'): module.deleteContent('1') - if module.hasContent('2'): module.deleteContent('2') - d1 = module.newContent(id='1', portal_type='Sales Order', - source_section=self.vendor_organisation.getRelativeUrl()) - self.assertEqual(d1.getSourceSection(), self.vendor_organisation.getRelativeUrl()) - d2 = module.newContent(id='2', portal_type='Sales Order', - source_section=self.customer_organisation.getRelativeUrl()) - self.assertEqual(d2.getSourceSection(), self.customer_organisation.getRelativeUrl()) - self.assertRaises(portal_simulation.MergeDeliveryListError, - portal_simulation.mergeDeliveryList, - [d1, d2]) - d2.setSourceSection(self.vendor_organisation.getRelativeUrl()) - self.assertEqual(d2.getSourceSection(), self.vendor_organisation.getRelativeUrl()) - # Test source decisions. - d1.setSourceDecision(self.vendor_person.getRelativeUrl()) - d2.setSourceDecision(self.customer_person.getRelativeUrl()) - self.assertEqual(d1.getSourceDecision(), self.vendor_person.getRelativeUrl()) - self.assertEqual(d2.getSourceDecision(), self.customer_person.getRelativeUrl()) - self.assertRaises(portal_simulation.MergeDeliveryListError, - portal_simulation.mergeDeliveryList, - [d1, d2]) - d2.setSourceDecision(self.vendor_person.getRelativeUrl()) - self.assertEqual(d2.getSourceDecision(), self.vendor_person.getRelativeUrl()) - # Test discounts. - r1 = d1.newContent(id='ESCOMPTE', portal_type='Remise', immediate_discount=1) - r2 = d2.newContent(id='ESCOMPTE', portal_type='Remise', immediate_discount=0) - self.assertEqual(r1.getImmediateDiscount(), 1) - self.assertEqual(r2.getImmediateDiscount(), 0) - self.assertRaises(portal_simulation.MergeDeliveryListError, - portal_simulation.mergeDeliveryList, - [d1, d2]) - r2.setImmediateDiscount(1) - self.assertEqual(r2.getImmediateDiscount(), 1) - # Test payment conditions. - c1 = d1.newContent(id='RFA', portal_type='Condition Paiement', payment_term=90) - c2 = d2.newContent(id='RFA', portal_type='Condition Paiement', payment_term=180) - self.assertEqual(c1.getPaymentTerm(), 90) - self.assertEqual(c2.getPaymentTerm(), 180) - self.assertRaises(portal_simulation.MergeDeliveryListError, - portal_simulation.mergeDeliveryList, - [d1, d2]) - c2.setPaymentTerm(90) - self.assertEqual(c2.getPaymentTerm(), 90) - # Now fusion must succeed. - portal_simulation.mergeDeliveryList([d1, d2]) - - def setCell(self, line, category_list, **kw): - category_list = list(category_list) - category_list.sort() - #LOG('setCell', 0, 'line = %s, line.contentValues() = %s, line.objectIds() = %s' % (repr(line), repr(line.contentValues()), repr(list(line.objectIds())))) - for cell in line.contentValues(): - predicate_value_list = cell.getPredicateValueList() - predicate_value_list.sort() - if predicate_value_list == category_list: - cell.edit(**kw) - return cell - - def makeDeliveries(self, module, delivery_type, delivery_line_type): - for id in ('1', '2', '3'): - if module.hasContent(id): - module.deleteContent(id) - d1 = module.newContent(id='1', portal_type=delivery_type) - self.assertEqual(d1.getPortalType(), delivery_type) - d1_line1 = d1.newContent(id='1', portal_type=delivery_line_type, - resource='modele/004C401', - price=2.0, - quantity=1.0, - target_quantity=1.0) - self.assertEqual(d1_line1.getPortalType(), delivery_line_type) - d1_line2 = d1.newContent(id='2', portal_type=delivery_line_type, - resource='modele/060E404', - variation_base_category_list = ['morphologie', 'taille', 'coloris'], - variation_category_list = ['morphologie/modele/060E404/C', 'morphologie/modele/060E404/B', 'taille/adulte/38', 'taille/adulte/40', 'taille/adulte/42', 'coloris/modele/060E404/Violet_rose', 'coloris/modele/060E404/noir_gris']) - self.assertEqual(d1_line2.getPortalType(), delivery_line_type) - cell = self.setCell(d1_line2, - ('coloris/modele/060E404/Violet_rose', 'morphologie/modele/060E404/C', 'taille/adulte/38'), - price = 5.0, - quantity = 1.0, - target_quantity = 1.0) - self.assertNotEqual(cell, None) - #self.assertNotEqual(cell.getPortalType(), 'Delivery Cell') - cell = self.setCell(d1_line2, - ('coloris/modele/060E404/noir_gris', 'morphologie/modele/060E404/C', 'taille/adulte/40'), - price = 5.0, - quantity = 2.0, - target_quantity = 2.0) - self.assertNotEqual(cell, None) - d1_line2.recursiveImmediateReindexObject() - self.assertAlmostEqual(d1_line2.getTotalPrice(), 5.0 * (1.0 + 2.0)) - self.assertAlmostEqual(d1_line2.getTotalQuantity(), 1.0 + 2.0) - d1_line3 = d1.newContent(id='3', portal_type=delivery_line_type, - resource='modele/060E404', - price=0.0, - variation_base_category_list = ['taille', 'coloris'], - variation_category_list = ['coloris/modele/060E404/Violet_rose', 'taille/adulte/38', 'taille/adulte/40', 'taille/adulte/42', 'coloris/modele/060E404/noir_gris']) - cell = self.setCell(d1_line3, - ('coloris/modele/060E404/Violet_rose', 'taille/adulte/40'), - price = 3.0, - quantity = 3.0, - target_quantity = 3.0) - self.assertNotEqual(cell, None) - cell = self.setCell(d1_line3, - ('coloris/modele/060E404/noir_gris', 'taille/adulte/42'), - price = 4.0, - quantity = 5.0, - target_quantity = 5.0) - self.assertNotEqual(cell, None) - d1.recursiveImmediateReindexObject() - #LOG('testFusion _makeDeliveries', 0, 'cell = %s, cell.getVariationCategoryList() = %s, cell.showDict() = %s' % (repr(cell), str(cell.getVariationCategoryList()), repr(cell.showDict()))) - - d2 = module.newContent(id='2', portal_type=delivery_type) - d2_line1 = d2.newContent(id='1', portal_type=delivery_line_type, - resource='modele/004C401', - price=7.0, - quantity=2.0, - target_quantity=2.0) - d2_line2 = d2.newContent(id='2', portal_type=delivery_line_type, - resource='modele/060E404', - variation_base_category_list = ['morphologie', 'taille', 'coloris'], - variation_category_list = ['morphologie/modele/060E404/C', 'morphologie/modele/060E404/B', 'taille/adulte/36', 'taille/adulte/38', 'taille/adulte/40', 'coloris/modele/060E404/Violet_rose', 'coloris/modele/060E404/noir_gris']) - cell = self.setCell(d2_line2, - ('coloris/modele/060E404/Violet_rose', 'morphologie/modele/060E404/C', 'taille/adulte/36'), - price = 5.0, - quantity = 1.0, - target_quantity = 1.0) - self.assertNotEqual(cell, None) - cell = self.setCell(d2_line2, - ('coloris/modele/060E404/noir_gris', 'morphologie/modele/060E404/C', 'taille/adulte/40'), - price = 5.0, - quantity = 2.0, - target_quantity = 2.0) - self.assertNotEqual(cell, None) - d2_line2.recursiveImmediateReindexObject() - self.assertAlmostEqual(d2_line2.getTotalPrice(), 5.0 * (1.0 + 2.0)) - self.assertAlmostEqual(d2_line2.getTotalQuantity(), 1.0 + 2.0) - d2.recursiveImmediateReindexObject() - - d3 = module.newContent(id='3', portal_type=delivery_type) - d3_line1 = d3.newContent(id='1', portal_type=delivery_line_type, - resource='modele/060E404', - variation_base_category_list = ['morphologie', 'taille', 'coloris'], - variation_category_list = ['morphologie/modele/060E404/C', 'morphologie/modele/060E404/B', 'taille/adulte/44', 'coloris/modele/060E404/Violet_rose', 'coloris/modele/060E404/noir_gris']) - cell = self.setCell(d3_line1, - ('coloris/modele/060E404/Violet_rose', 'morphologie/modele/060E404/C', 'taille/adulte/44'), - price = 3.0, - quantity = 3.0, - target_quantity = 3.0) - self.assertNotEqual(cell, None) - d3.recursiveImmediateReindexObject() - - def _checkDeliveries(self, d1, d2, d3): - self.assertEqual(len(d1.objectIds()), 3) - self.assertEqual(d2.getSimulationState(), 'cancelled') - self.assertEqual(d3.getSimulationState(), 'cancelled') - line1 = line2 = line3 = None - for line in d1.contentValues(): - if line.getResource() == 'modele/004C401': - line1 = line - elif line.getResource() == 'modele/060E404': - if 'morphologie' in line.getVariationBaseCategoryList(): - line2 = line - else: - line3 = line - #LOG('_checkDeliveries', 0, 'line1 = %s, line1.objectIds() = %s' % (repr(line1), repr(list(line1.objectIds())))) - #LOG('_checkDeliveries', 0, 'line2 = %s, line2.objectIds() = %s' % (repr(line2), repr(list(line2.objectIds())))) - #LOG('_checkDeliveries', 0, 'line3 = %s, line3.objectIds() = %s' % (repr(line3), repr(list(line3.objectIds())))) - self.assertNotEqual(line1, None) - self.assertAlmostEqual(line1.getTotalQuantity(), 1.0 + 2.0) - self.assertAlmostEqual(line1.getTotalPrice(), 2.0 * 1.0 + 7.0 * 2.0) - self.assertAlmostEqual(line1.getPrice(), line1.getTotalPrice() / line1.getTotalQuantity()) - self.assertNotEqual(line2, None) - self.assertAlmostEqual(line2.getTotalQuantity(), 1.0 + 2.0 + 1.0 + 2.0 + 3.0) - self.assertAlmostEqual(line2.getTotalPrice(), 5.0 * 1.0 + 5.0 * 2.0 + 5.0 * 1.0 + 5.0 * 2.0 + 3.0 * 3.0) - category_list = list(line2.getVariationCategoryList()) - category_list.sort() - self.assertEqual(category_list, ['coloris/modele/060E404/Violet_rose', 'coloris/modele/060E404/noir_gris', 'morphologie/modele/060E404/B', 'morphologie/modele/060E404/C', 'taille/adulte/36', 'taille/adulte/38', 'taille/adulte/40', 'taille/adulte/42', 'taille/adulte/44']) - #self.assertAlmostEqual(line2.getPrice(), line2.getTotalPrice() / line2.getTotalQuantity()) - self.assertNotEqual(line3, None) - self.assertAlmostEqual(line3.getTotalQuantity(), 3.0 + 5.0) - self.assertAlmostEqual(line3.getTotalPrice(), 3.0 * 3.0 + 4.0 * 5.0) - category_list = list(line3.getVariationCategoryList()) - category_list.sort() - self.assertEqual(category_list, ['coloris/modele/060E404/Violet_rose', 'coloris/modele/060E404/noir_gris', 'taille/adulte/38', 'taille/adulte/40', 'taille/adulte/42']) - #self.assertAlmostEqual(line3.getPrice(), line3.getTotalPrice() / line3.getTotalQuantity()) - - def _testDeliveries(self, module, delivery_type, delivery_line_type, quiet=0, run=run_all_test): - # Test mergeDeliveryList with Deliveries. This is shared among various deliveries. - if not run: return - if not quiet: - message = '\n%s ' % delivery_type - ZopeTestCase._print(message) - LOG('Testing... ',0,message) - portal_simulation = self.getSimulationTool() - - self.makeDeliveries(module, delivery_type, delivery_line_type) - pl = portal_simulation.mergeDeliveryList([module['1'], module['2'], module['3']]) - pl.recursiveImmediateReindexObject() - self._checkDeliveries(module['1'], module['2'], module['3']) - - self.makeDeliveries(module, delivery_type, delivery_line_type) - pl = portal_simulation.mergeDeliveryList([module['2'], module['3'], module['1']]) - pl.recursiveImmediateReindexObject() - self._checkDeliveries(module['2'], module['3'], module['1']) - - self.makeDeliveries(module, delivery_type, delivery_line_type) - pl = portal_simulation.mergeDeliveryList([module['3'], module['1'], module['2']]) - pl.recursiveImmediateReindexObject() - self._checkDeliveries(module['3'], module['1'], module['2']) - - def test_03_SalesOrders(self, quiet=0, run=run_all_test): - # Test mergeDeliveryList with Sales Orders - module = self.getSalesOrderModule() - self._testDeliveries(module, 'Sales Order', 'Sales Order Line', quiet=quiet, run=run) - - def test_04_SalesPackingLists(self, quiet=0, run=run_all_test): - # Test mergeDeliveryList with Sales Packing Lists - module = self.getSalesPackingListModule() - self._testDeliveries(module, 'Sales Packing List', 'Sales Packing List Line', quiet=quiet, run=run) - - def test_06_PurchaseOrders(self, quiet=0, run=run_all_test): - # Test mergeDeliveryList with Purchase Orders - module = self.getPurchaseOrderModule() - self._testDeliveries(module, 'Purchase Order', 'Purchase Order Line', quiet=quiet, run=run) - - def test_07_PurchasePackingLists(self, quiet=0, run=run_all_test): - # Test mergeDeliveryList with Purchase Packing Lists - module = self.getPurchasePackingListModule() - self._testDeliveries(module, 'Purchase Packing List', 'Purchase Packing List Line', quiet=quiet, run=run) - - def test_08_ProductionOrders(self, quiet=0, run=run_all_test): - # Test mergeDeliveryList with Production Orders - module = self.getProductionOrderModule() - self._testDeliveries(module, 'Production Order', 'Production Order Line', quiet=quiet, run=run) - - def test_09_ProductionPackingLists(self, quiet=0, run=run_all_test): - # Test mergeDeliveryList with Production Packing Lists - module = self.getProductionPackingListModule() - self._testDeliveries(module, 'Production Packing List', 'Production Packing List Line', quiet=quiet, run=run) - - def test_10_ProductionReports(self, quiet=0, run=run_all_test): - # Test mergeDeliveryList with Production Reports - module = self.getProductionReportModule() - self._testDeliveries(module, 'Production Report', 'Production Report Component', quiet=quiet, run=run) - - def test_11_Containers(self, quiet=0, run=run_all_test): - # Test Containers with Sales Packing Lists. - module = self.getComposantModule() - self.assertNotEqual(module, None) - composant = module.newContent(id='CAame', portal_type='Composant', - type_composant = 'Carton') - variante = composant.newContent(id='A', portal_type='Variante Composant', - source_base_price = 0.6, - default_source_reference = 'A', - base_height = 400.0, - base_length = 600.0, - base_width = 300.0, - base_price = None, - base_weight = None) - composant.recursiveImmediateReindexObject() - module = self.getSalesPackingListModule() - for id in ('1', '2'): - if module.hasContent(id): - module.deleteContent(id) - d = module.newContent(id=id, portal_type='Sales Packing List') - c = d.newContent(id='c1', portal_type='Container', - resource='composant/CAame', - serial_number = '0000640009', - gross_weight = 0.0, - price = 0.0, - variation_base_category_list = ['variante'], - variation_category_list = ['variante/composant/CAame/A']) - l = c.newContent(id='1', portal_type='Container Line', - resource = 'modele/060E404', - price = 0.0, - variation_base_category_list = ['coloris', 'taille'], - variation_category_list = ['taille/adulte/42', 'coloris/modele/060E404/Violet_rose']) - cell = self.setCell(l, - ('taille/adulte/42', 'coloris/modele/060E404/Violet_rose'), - target_quantity = 53.0) - self.assertNotEqual(cell, None) - self.assertAlmostEqual(cell.getTargetQuantity(), 53.0) - d.recursiveImmediateReindexObject() - #LOG('test_11_Containers', 0, 'id = %s, d = %s, d.contentValues() = %s, d.objectIds() = %s, c = %s, c.contentValues() = %s, c.objectIds() = %s' % (repr(id), repr(d), repr(d.contentValues()), repr(d.objectIds()), repr(c), repr(c.contentValues()), repr(c.objectIds()))) - self.assertAlmostEqual(c.getTargetTotalQuantity(), 53.0) - portal_simulation = self.getSimulationTool() - d = portal_simulation.mergeDeliveryList([module['1'], module['2']]) - d.recursiveImmediateReindexObject() - self.assertEqual(len(d.objectIds()), 2) - self.assertEqual(d.getTargetTotalQuantity(), None) - for c in d.contentValues(): - self.assertAlmostEqual(c.getTargetTotalQuantity(), 53.0) - - def test_12_SaleInvoiceTransactions(self, quiet=0, run=run_all_test): - # Test Sale Invoice Transacations. - module = self.getAssortimentModule() - assortiment = module.newContent(id='712C405UNI_12P', portal_type='Assortiment') - assortiment = module.newContent(id='GALEC_067C403GLC(38-48)_12p', portal_type='Assortiment') - assortiment.newContent(id='aura') - assortiment.newContent(id='curaco') - module = self.getSaleInvoiceTransactionModule() - for id in ('1', '2'): - if module.hasContent(id): - module.deleteContent(id) - i1 = module.newContent(id='1', portal_type='Sale Invoice Transaction') - l = i1.newContent(id='1', portal_type='Invoice Line', - resource = 'assortiment/712C405UNI_12P', - quantity_unit = 'Unite', - price = 52.8, - quantity = 2.0, - variation_base_category_list = (), - variation_category_list = ()) - self.assertAlmostEqual(l.getPrice(), 52.8) - self.assertAlmostEqual(l.getQuantity(), 2.0) - l = i1.newContent(id='2', portal_type='Invoice Line', - resource = 'assortiment/GALEC_067C403GLC(38-48)_12p', - quantity_unit = 'Unite', - price = 0.0, - variation_base_category_list = ('coloris',), - variation_category_list = ('coloris/assortiment/GALEC_067C403GLC(38-48)_12p/aura', 'coloris/assortiment/GALEC_067C403GLC(38-48)_12p/curaco')) - cell = self.setCell(l, - ('coloris/assortiment/GALEC_067C403GLC(38-48)_12p/aura',), - price = 67.0, - quantity = 1.0) - self.assertNotEqual(cell, None) - self.assertAlmostEqual(cell.getPrice(), 67.0) - self.assertAlmostEqual(cell.getQuantity(), 1.0) - cell = self.setCell(l, - ('coloris/assortiment/GALEC_067C403GLC(38-48)_12p/curaco',), - price = 67.0, - quantity = 1.0) - self.assertNotEqual(cell, None) - i1.recursiveImmediateReindexObject() - i2 = module.newContent(id='2', portal_type='Sale Invoice Transaction') - i2.newContent(id='1', portal_type='Invoice Line', - resource = 'assortiment/712C405UNI_12P', - quantity_unit = 'Unite', - price = 32.8, - quantity = 2.0, - variation_base_category_list = (), - variation_category_list = ()) - l = i2.newContent(id='2', portal_type='Invoice Line', - resource = 'assortiment/GALEC_067C403GLC(38-48)_12p', - quantity_unit = 'Unite', - price = 0.0, - variation_base_category_list = ('coloris',), - variation_category_list = ('coloris/assortiment/GALEC_067C403GLC(38-48)_12p/aura', 'coloris/assortiment/GALEC_067C403GLC(38-48)_12p/curaco')) - cell = self.setCell(l, - ('coloris/assortiment/GALEC_067C403GLC(38-48)_12p/aura',), - price = 67.0, - quantity = 2.0) - self.assertNotEqual(cell, None) - cell = self.setCell(l, - ('coloris/assortiment/GALEC_067C403GLC(38-48)_12p/curaco',), - price = 67.0, - quantity = 3.0) - self.assertNotEqual(cell, None) - i2.recursiveImmediateReindexObject() - portal_simulation = self.getSimulationTool() - d = portal_simulation.mergeDeliveryList([i1, i2]) - d.recursiveImmediateReindexObject() - #LOG('test_12_SaleInvoiceTransactions', 0, 'd.getUid() = %s' % repr(d.getUid())) - self.assertEqual(len(d.objectIds()), 3) - self.assertAlmostEqual(d.getTotalPrice(), 52.8 * 2.0 + 32.8 * 2.0 + 67.0 * (1.0 + 1.0 + 2.0 + 3.0)) - - -if __name__ == '__main__': - framework() -else: - import unittest - def test_suite(): - suite = unittest.TestSuite() - suite.addTest(unittest.makeSuite(TestFusion)) - return suite - diff --git a/product/Coramy/tests/testCoramyOrder.py b/product/Coramy/tests/testCoramyOrder.py deleted file mode 100755 index b024741a26..0000000000 --- a/product/Coramy/tests/testCoramyOrder.py +++ /dev/null @@ -1,1261 +0,0 @@ -############################################################################## -# -# Copyright (c) 2004 Nexedi SARL and Contributors. All Rights Reserved. -# Sebastien Robin <seb@nexedi.com> -# -# WARNING: This program as such is intended to be used by professional -# programmers who take the whole responsability of assessing all potential -# consequences resulting from its eventual inadequacies and bugs -# End users who are looking for a ready-to-use solution with commercial -# garantees and support are strongly adviced to contract a Free Software -# Service Company -# -# This program is Free Software; you can redistribute it and/or -# modify it under the terms of the GNU General Public License -# as published by the Free Software Foundation; either version 2 -# of the License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -# -############################################################################## - - - -# -# Skeleton ZopeTestCase -# - -from random import randint - -import os, sys -if __name__ == '__main__': - execfile(os.path.join(sys.path[0], 'framework.py')) - -# Needed in order to have a log file inside the current folder -os.environ['EVENT_LOG_FILE'] = os.path.join(os.getcwd(), 'zLOG.log') -os.environ['EVENT_LOG_SEVERITY'] = '-300' - -from Testing import ZopeTestCase -from Products.ERP5Type.tests.ERP5TypeTestCase import ERP5TypeTestCase -from AccessControl.SecurityManagement import newSecurityManager, noSecurityManager -from DateTime import DateTime -from Acquisition import aq_base, aq_inner -from Globals import PersistentMapping -from zLOG import LOG -from Products.ERP5Type.tests.Sequence import Sequence, SequenceList -import time - - -class TestOrder(ERP5TypeTestCase): - - # Different variables used for this test - run_all_test = 1 - source_company_id = 'Nexedi' - sale_manager_id = 'seb' - destination_company_stock = 'site/Stock_MP/Gravelines' - production_destination_site = 'site/Stock_PF/Gravelines' - production_destination_site2 = 'site/Stock_PF/Bonningues' - production_source_site = 'site/Piquage/France/Sylitex' - second_production_source_site = 'site/Piquage/Tunisie/String' - destination_company_group = 'group/Coramy' - first_name1 = 'Sebastien' - last_name1 = 'Robin' - destination_company_id = 'Coramy' - component_id = 'brick' - component_id2 = 'tissu' - sales_order_id = '1' - purchase_order_id = '1' - quantity = 10 - low_quantity = 4 - modele_id1 = '001B402' - base_price1 = 0.7832 - base_price2 = 5.3349 - variante_id1 = 'variante_1' - variante_id2 = 'variante_2' - taille_list1 = ('taille/adulte/36','taille/adulte/40','taille/adulte/42') - variation_base_category_list1 = ('coloris','taille') - variation_category_list1 = ('coloris/modele/%s/%s' % (modele_id1,variante_id1), - 'coloris/modele/%s/%s' % (modele_id1,variante_id2), - 'taille/adulte/40','taille/adulte/42') - simulation_line_id_list = ('1_movement_0_0','1_movement_0_1','1_movement_1_0','1_movement_1_1') - simple_simulation_line_id_list = ('1') - - def getBusinessTemplateList(self): - """ - Return the list of business templates. - - the business template crm give the following things : - modules: - - person - - organisation - base categories: - - region - - subordination - - /organisation - """ - #return ('erp5_crm','coramy_catalog','coramy_order') - return ('erp5_core','coramy_catalog','coramy_order') - - def convertToLowerCase(self, key): - """ - This function returns an attribute name - thanks to the name of a class - for example convert 'Purchase Order' to 'purchase_order' - """ - result = key.lower() - result = result.replace(' ','_') - return result - - - def getPersonModule(self): - return getattr(self.getPortal(), 'person', None) - - def getOrganisationModule(self): - return getattr(self.getPortal(), 'organisation', None) - - def getModeleModule(self): - return getattr(self.getPortal(), 'modele', None) - - def getTransformationModule(self): - return getattr(self.getPortal(), 'transformation', None) - - def getPurchaseOrderModule(self): - return getattr(self.getPortal(), 'commande_achat', None) - - def getPurchasePackingListModule(self): - return getattr(self.getPortal(), 'livraison_achat', None) - - def getSalesPackingListModule(self): - return getattr(self.getPortal(), 'livraison_vente', None) - - def getProductionPackingListModule(self): - return getattr(self.getPortal(), 'livraison_fabrication', None) - - def getProductionOrderModule(self): - return getattr(self.getPortal(), 'ordre_fabrication', None) - - def getGammeModule(self): - return getattr(self.getPortal(), 'gamme', None) - - def getSalesOrderModule(self): - return getattr(self.getPortal(), 'commande_vente', None) - - def getTissuModule(self): - return getattr(self.getPortal(), 'tissu', None) - - def getTransformationModule(self): - return getattr(self.getPortal(), 'transformation', None) - - def getComponentModule(self): - return getattr(self.getPortal(), 'composant', None) - - def getPortalId(self): - return self.getPortal().getId() - - def failIfDifferentSet(self, a,b): - LOG('failIfDifferentSet',0,'a:%s b:%s' % (repr(a),repr(b))) - for i in a: - self.failUnless(i in b) - for i in b: - self.failUnless(i in a) - self.assertEquals(len(a),len(b)) - - def afterSetUp(self, quiet=1, run=1): - self.login() - portal = self.getPortal() - portal_catalog = self.getCatalogTool() - portal_catalog.manage_catalogClear() - # First set Acquisition - portal.ERP5_setAcquisition() - # Then reindex - # portal.ERP5Site_reindexAll() - LOG('afterSetup',0,'portal.portal_categories.immediateReindexObject') - portal.portal_categories.immediateReindexObject() - for o in portal.portal_categories.objectValues(): - LOG('afterSetup portal_categies',0,o.getPath()) - o.recursiveImmediateReindexObject() - LOG('afterSetup',0,'portal.portal_simulation.immediateReindexObject') - portal.portal_simulation.immediateReindexObject() - for o in portal.portal_simulation.objectValues(): - o.recursiveImmediateReindexObject() - LOG('afterSetup',0,'portal.portal_rules.immediateReindexObject') - portal.portal_rules.immediateReindexObject() - - organisation_module = self.getOrganisationModule() - organisation_module.immediateReindexObject() - o1 = organisation_module.newContent(id=self.source_company_id) - o2 = organisation_module.newContent(id=self.destination_company_id) - component_module = self.getComponentModule() - component_module.immediateReindexObject() - c1 = component_module.newContent(id=self.component_id) - c1.setBasePrice(self.base_price1) - c1.setPrice(self.base_price1) - c1 = component_module.newContent(id=self.component_id2) - c1.setBasePrice(self.base_price2) - c1.setPrice(self.base_price2) - person_module = self.getPersonModule() - person_module.immediateReindexObject() - p1 = person_module.newContent(id=self.sale_manager_id) - kw = {'first_name':self.first_name1,'last_name':self.last_name1} - p1.edit(**kw) - modele_module = self.getModeleModule() - - def login(self, quiet=0, run=run_all_test): - uf = self.getPortal().acl_users - uf._doAddUser('seb', '', ['Manager','Superviseur'], []) - user = uf.getUserById('seb').__of__(uf) - newSecurityManager(None, user) - - def constructEmptyOrder(self, sequence=None, sequence_list=None,order_type=None,**kw): - # create a complete order - #sales_module = self.getSalesOrderModule() - method_name = 'get' + order_type.replace(' ','') + 'Module' - method = getattr(self,method_name) - order_module = method() - order = order_module.newContent(portal_type=order_type) - sequence.edit(order=order) - portal = self.getPortal() - source_company = self.getOrganisationModule()._getOb(self.source_company_id) - destination_company = self.getOrganisationModule()._getOb(self.destination_company_id) - sale_manager = self.getPersonModule()._getOb(self.sale_manager_id) - # Set date - date = DateTime() # the value is now - target_start_date = date + 10 # Add 10 days - target_stop_date = date + 12 # Add 12 days - order.setTargetStartDate(target_start_date) - order.setTargetStopDate(target_stop_date) - # Set Profile - portal_categories = self.getCategoryTool() - if order_type == 'Production Order': - stock_category = portal_categories.resolveCategory(self.production_destination_site) - source_company = portal_categories.resolveCategory(self.production_source_site) - else: - stock_category = portal_categories.resolveCategory(self.destination_company_stock) - group_category = portal_categories.resolveCategory(self.destination_company_group) - sequence.edit(source_value=source_company, - source_section_value=source_company, - source_decision_value=source_company, - source_administration_value=source_company, - source_payment_value=source_company, - destination_value=stock_category, - destination_section_value=group_category, - destination_decision_value=destination_company, - destination_administration_value=sale_manager, - destination_payment_value=destination_company) - order.setTargetSourceValue(source_company) - order.setTargetSourceSectionValue(source_company) - order.setSourceDecisionValue(source_company) - order.setSourceAdministrationValue(source_company) - order.setSourcePaymentValue(source_company) - order.setTargetDestinationValue(stock_category) - order.setTargetDestinationSectionValue(group_category) - order.setDestinationDecisionValue(destination_company) - order.setDestinationAdministrationValue(sale_manager) - order.setDestinationPaymentValue(destination_company) - # Look if the profile is good - self.failUnless(order.getTargetSourceValue()!=None) - self.failUnless(order.getTargetDestinationValue()!=None) - self.failUnless(order.getTargetSourceSectionValue()!=None) - self.failUnless(order.getTargetDestinationSectionValue()!=None) - self.failUnless(order.getSourceDecisionValue()!=None) - self.failUnless(order.getDestinationDecisionValue()!=None) - self.failUnless(order.getSourceAdministrationValue()!=None) - self.failUnless(order.getDestinationAdministrationValue()!=None) - self.failUnless(order.getSourcePaymentValue()!=None) - self.failUnless(order.getDestinationPaymentValue()!=None) - attribute_name = self.convertToLowerCase(order_type) - kw = {attribute_name:order} - sequence.edit(**kw) - sequence.edit(order_type=order_type) - -# def constructEmptySalesOrder(self, sequence=None, sequence_list=None,**kw): -# # Test if we can add a complete sales order -# self.constructEmptyOrder(sequence=sequence,sequence_list=sequence_list, -# order_type='Sales Order', **kw) -# -# def constructEmptyProductionOrder(self, sequence=None, sequence_list=None,**kw): -# # Test if we can add a complete sales order -# self.constructEmptyOrder(sequence=sequence,sequence_list=sequence_list, -# order_type='Production Order', **kw) -# - def constructResource(self, sequence=None, sequence_list=None,**kw): - component_module = self.getComponentModule() - resource = component_module.newContent() - resource.setBasePrice(self.base_price1) - resource.setPrice(self.base_price1) - sequence.edit(resource=resource) - resource2 = component_module.newContent() - resource2.setBasePrice(self.base_price1) - resource2.setPrice(self.base_price1) - sequence.edit(resource2=resource2) - - def constructVariatedResource(self, sequence=None, sequence_list=None,**kw): - modele_module = self.getModeleModule() - modele = modele_module.newContent() - modele.setTailleList(self.taille_list1) - # Add variation to the modele - variante_modele_1 = modele.newContent(id=self.variante_id1,portal_type='Variante Modele') - category_variante_modele_1 = 'coloris/modele/%s/%s' % (modele.getId(),self.variante_id1) - sequence.edit(category_variante_modele_1=category_variante_modele_1) - variante_modele_2 = modele.newContent(id=self.variante_id2,portal_type='Variante Modele') - category_variante_modele_2 = 'coloris/modele/%s/%s' % (modele.getId(),self.variante_id2) - sequence.edit(category_variante_modele_2=category_variante_modele_2) - sequence.edit(resource=modele) - # We should also construct the corresponding transformation - transformation_module = self.getTransformationModule() - transformation = transformation_module.newContent(portal_type='Transformation') - sequence.edit(transformation=transformation) - transformation.setResourceValue(modele) - transformation.setVariationBaseCategoryList(self.variation_base_category_list1) - transformation.setVariationBaseCategoryLine('coloris') - transformation.setVariationBaseCategoryColumn('taille') - variation_category_list = (category_variante_modele_1, category_variante_modele_2, - 'taille/adulte/40','taille/adulte/42') - sequence.edit(variation_category_list=variation_category_list) - transformation.setVariationCategoryList(variation_category_list) - color_list = filter(lambda x: x.find('coloris')>=0,variation_category_list) - sequence.edit(color_list=color_list) - size_list = filter(lambda x: x.find('taille')>=0,variation_category_list) - sequence.edit(size_list=size_list) - color_and_size_list = [] - # This define (('coloris/modele/1/1,taille/adulte/40',('coloris/modele/1/1',taille/adulte/42)...) - for c in color_list: - for s in size_list: - color_and_size_list.append((c,s)) - sequence.edit(color_and_size_list=color_and_size_list) - self.addTissuToTransformation(sequence=sequence,sequence_list=sequence_list) - sequence.edit(good_tissu_list=sequence.get('tissu_list')) - # We should construct the corresponding gamme - # XXX Finally I'm not sure we really need the gamme XXX -# gamme_module = self.getGammeModule() -# gamme = gamme_module.newContent(portal_type='Gamme') -# modele.setSpecialiseValue(gamme) -# sequence.edit(gamme=gamme) -# tissu1_variante1 = sequence.get('tissu1_variante1') -# tissu1_variante2 = sequence.get('tissu1_variante2') -# variante_gamme1 = gamme.newContent(portal_type='Variante Gamme',id=self.variante_id1) -# variante_gamme1.setCouleurValueList([tissu1_variante1]) -# variante_gamme2 = gamme.newContent(portal_type='Variante Gamme',id=self.variante_id2) -# variante_gamme2.setCouleurValueList([tissu1_variante2]) -# LOG("transformation._getOb('1').__dict__",0,transformation._getOb('1').__dict__) -# LOG("transformation._getOb('1').quantity_0_0.__dict__",0,transformation._getOb('1').quantity_0_0.__dict__) -# LOG("gamme.__dict__",0,gamme.__dict__) -# LOG("variante_gamme1.__dict__",0,variante_gamme1.__dict__) - LOG("modele.__dict__",0,modele.__dict__) - LOG("transformation.sowDict()",0,transformation.showDict()) - LOG("transformation.getAggregatedAmountList()",0,transformation.getAggregatedAmountList()) - - def addTissuToTransformation(self, sequence=None, sequence_list=None, **kw): - # We should construct the corresponding tissu - tissu_list = sequence.get('tissu_list',[]) - transformation = sequence.get('transformation') - tissu_module = self.getTissuModule() - tissu = tissu_module.newContent(portal_type='Tissu') - tissu.setSourceBasePrice('7.7') - tissu.setPricedQuantity('1') - tissu.setVariationBaseCategoryList(['coloris']) - tissu_list.extend([tissu]) - sequence.edit(tissu_list=tissu_list) - tissu.setQuantityUnit('Longueur/Metre') - tissu_variante1 = tissu.newContent(portal_type='Variante Tissu',id=self.variante_id1) - category_tissu_variante1 = 'coloris/tissu/%s/%s' % (tissu.getId(),tissu_variante1.getId()) - tissu_variante2 = tissu.newContent(portal_type='Variante Tissu',id=self.variante_id2) - category_tissu_variante2 = 'coloris/tissu/%s/%s' % (tissu.getId(),tissu_variante2.getId()) - seq_kw = {'tissu%s' % tissu.getId():tissu, - 'tissu%s_variante1' % tissu.getId():tissu_variante1, - 'tissu%s_variante2' % tissu.getId():tissu_variante2, - 'category_tissu%s_variante1' % tissu.getId():category_tissu_variante1, - 'category_tissu%s_variante2' % tissu.getId():category_tissu_variante2} - sequence.edit(**seq_kw) - if sequence.get('tissu_first') is None: - sequence.edit(tissu_first=tissu) - elif sequence.get('tissu_second') is None: - sequence.edit(tissu_second=tissu) - # Add a transformed resource to this transformation - transformation_component = transformation.newContent(portal_type='Transformation Component') - transformation_component.setResourceValue(tissu) - transformation_component.setElementComposition(True) # This is one element of the transformation - transformation_component.setVVariationBaseCategoryList(['coloris']) - transformation_component.setQVariationBaseCategoryList(['taille']) - #transformation_component.setTailleList(['taille/adulte/40','taille/adulte/42']) - # Create quantity cells for the transformation component - args = (None,'taille/adulte/40') - kw = {'base_id':'quantity'} - cell = transformation_component.newCell(*args,**kw) - cell.setPredicateOperator('SUPERSET_OF') - cell.setMembershipCriterionCategoryList(['taille/adulte/40']) - cell.setMembershipCriterionBaseCategoryList(['taille']) - cell.setMappedValuePropertyList(['quantity']) - cell.setQuantity(4200.0) - LOG('transformation_cell.showDict()',0,cell.showDict()) - args = (None,'taille/adulte/42') - kw = {'base_id':'quantity'} - cell = transformation_component.newCell(*args,**kw) - cell.setPredicateOperator('SUPERSET_OF') - cell.setMembershipCriterionCategoryList(['taille/adulte/42']) - cell.setMembershipCriterionBaseCategoryList(['taille']) - cell.setMappedValuePropertyList(['quantity']) - cell.setQuantity(4500.0) - LOG('transformation_cell.showDict()',0,cell.showDict()) - cell_list = transformation_component.objectValues() - cell_list = filter(lambda x: x.getId().find('quantity')==0, cell_list) - self.assertEquals(len(cell_list),2) - # Create variation cells for the transformation component - # First variation cell - category_variante_modele_1 = sequence.get('category_variante_modele_1') - args = (category_variante_modele_1,None) - kw = {'base_id':'variation'} - cell = transformation_component.newCell(*args,**kw) - cell.setPredicateOperator('SUPERSET_OF') - cell.setMembershipCriterionBaseCategoryList(['coloris']) - cell.setMappedValueBaseCategoryList(['coloris']) # XXX This looks like mandatory in TransformedResource for - # getAggregatedAmountList, why ???? - cell.setMembershipCriterionCategoryList([category_variante_modele_1]) - cell.setCategoryList([category_tissu_variante1]) - # Second variation cell - category_variante_modele_2 = sequence.get('category_variante_modele_2') - LOG('transformation_cell.showDict()',0,cell.showDict()) - args = (category_variante_modele_2,None) - kw = {'base_id':'variation'} - cell = transformation_component.newCell(*args,**kw) - cell.setPredicateOperator('SUPERSET_OF') - cell.setMembershipCriterionBaseCategoryList(['coloris']) - cell.setMappedValueBaseCategoryList(['coloris']) # XXX This looks like mandatory in TransformedResource for - # getAggregatedAmountList, why ???? - cell.setMembershipCriterionCategoryList([category_variante_modele_2]) - cell.setCategoryList([category_tissu_variante2]) - LOG('transformation_cell.showDict()',0,cell.showDict()) - # Finally check the number of cells - cell_list = transformation_component.objectValues() - cell_list = filter(lambda x: x.getId().find('variation')==0, cell_list) - self.assertEquals(len(cell_list),2) - LOG('transformation_component.showDict()',0,transformation_component.showDict()) - - def stepAddSalesOrder(self, sequence=None, sequence_list=None,**kw): - self.constructEmptyOrder(sequence=sequence,sequence_list=sequence_list, - order_type='Sales Order', **kw) - # Add a sales order line - sales_order = sequence.get('sales_order') - sales_order_line = sales_order.newContent(id='1',portal_type='Sales Order Line') - component_module = self.getComponentModule() - component = component_module._getOb(self.component_id) - sequence.edit(resource=component) - self.constructResource(sequence=sequence,sequence_list=sequence_list,**kw) - component = sequence.get('resource') - sales_order_line.setResourceValue(component) - self.assertEquals(sales_order_line.getResourceValue(),component) - sales_order_line.setTargetQuantity(self.quantity) - sales_order_line.setPrice(self.base_price1) - # See what's the output of Order_lightControl - result=sales_order.Order_lightControl() - self.assertEquals(result,'') - # See what's the output of Order_heavyControl - result=sales_order.Order_heavyControl() - result = result.replace('\n','') - self.assertEquals(result,'') - - def stepModifyVariationId(self, sequence=None, sequence_list=None,**kw): - resource = sequence.get('resource') - content_list = resource.contentValues(filter={'portal_type':'Variante Modele'}) - # Rename the first variation - variation = content_list[0] - #variation.setId('renamed_' + variation.getId()) - variation.setId('renamed_' + variation.getId()) - variation_category_list = ('coloris/modele/%s/%s' % (resource.getId(),content_list[0].getId()), - 'coloris/modele/%s/%s' % (resource.getId(),content_list[1].getId()), - 'taille/adulte/40','taille/adulte/42') - sequence.edit(variation_category_list=variation_category_list) - color_list = filter(lambda x: x.find('coloris')>=0,variation_category_list) - sequence.edit(color_list=color_list) - size_list = filter(lambda x: x.find('taille')>=0,variation_category_list) - sequence.edit(size_list=size_list) - sequence.edit(renamed_variation=1) - color_and_size_list = [] - # This define (('coloris/modele/1/1,taille/adulte/40'),('coloris/modele/1/1',taille/adulte/42)...) - for c in color_list: - for s in size_list: - color_and_size_list.append((c,s)) - sequence.edit(color_and_size_list=color_and_size_list) - - def stepAddVariatedSalesOrder(self, sequence=None, sequence_list=None,**kw): - #self.constructEmptySalesOrder(sequence=sequence,sequence_list=sequence_list,**kw) - self.constructEmptyOrder(sequence=sequence,sequence_list=sequence_list, - order_type='Sales Order', **kw) - # Add lines with many variations - sales_order = sequence.get('sales_order') - sales_order_line = sales_order.newContent(id='1',portal_type='Sales Order Line') - self.constructVariatedResource(sequence=sequence,sequence_list=sequence_list,**kw) - sequence.edit(variated_order=1) - resource = sequence.get('resource') - sales_order_line.setResourceValue(resource) - self.assertEquals(sales_order_line.getResourceValue(),resource) - sales_order_line.setVariationBaseCategoryList(self.variation_base_category_list1) - variation_category_list = sequence.get('variation_category_list') - sales_order_line.setVariationCategoryList(variation_category_list) - self.assertEquals(tuple(sales_order_line.getVariationBaseCategoryList()),self.variation_base_category_list1) - self.assertEquals(tuple(sales_order_line.getVariationCategoryList()),variation_category_list) - cell_list = sales_order_line.objectValues() - self.assertEquals(len(cell_list),4) - for cell in cell_list: - cell.setTargetQuantity(self.quantity) - cell.setPrice(self.base_price1) - # See what's the output of Order_lightControl - result=sales_order.Order_lightControl() - self.assertEquals(result,'') - - def stepAddProductionOrder(self, sequence=None, sequence_list=None,**kw): - #self.constructEmptyProductionOrder(sequence=sequence,sequence_list=sequence_list,**kw) - self.constructEmptyOrder(sequence=sequence,sequence_list=sequence_list, - order_type='Production Order', **kw) - production_order = sequence.get('production_order') - order_line = production_order.newContent(id='1',portal_type='Production Order Line') - self.constructVariatedResource(sequence=sequence,sequence_list=sequence_list,**kw) - sequence.edit(variated_order=1) - resource = sequence.get('resource') - order_line.setResourceValue(resource) - order_line.setVariationBaseCategoryList(self.variation_base_category_list1) - variation_category_list = sequence.get('variation_category_list') - order_line.setVariationCategoryList(variation_category_list) - self.assertEquals(tuple(order_line.getVariationBaseCategoryList()),self.variation_base_category_list1) - self.assertEquals(tuple(order_line.getVariationCategoryList()),variation_category_list) - cell_list = order_line.objectValues() - self.assertEquals(len(cell_list),4) - LOG('stepAddProductionOrder, order.showDict',0,production_order.showDict()) - LOG('stepAddProductionOrder, order_line.showDict',0,order_line.showDict()) - transformation = sequence.get('transformation') - for cell in cell_list: - cell.setTargetQuantity(self.quantity) - LOG('stepAddProductionOrder, cell.showDict',0,cell.showDict()) - variation = cell.getVariationCategoryList() - LOG('stepAddProductionOrder, cell.getVariationCategoryList',0,variation) - LOG('stepAddProductionOrder, transformation.getAggregatedAmountList',0,transformation.getAggregatedAmountList(REQUEST = {'categories':variation})) - REQUEST = {'categories':variation} - REQUEST = transformation.asContext(context=transformation,REQUEST=REQUEST) - LOG('stepAddProductionOrder, line.getAggregatedAmountList',0,transformation._getOb('1').getAggregatedAmountList(REQUEST)) - LOG('stepAddProductionOrder, line.getAgg[0].__dict__',0,transformation._getOb('1').getAggregatedAmountList(REQUEST)[0][0].__dict__) - - # See what's the output of Order_lightControl - result=production_order.Order_lightControl() - self.assertEquals(result,'') - - def stepConfirmSalesOrder(self, sequence=None,sequence_list=None): - sales_order = sequence.get('sales_order') - #sales_order.confirm() - LOG('stepConfirmSalesOrder, sales_order',0,sales_order) - sales_order.portal_workflow.doActionFor(sales_order,'user_confirm', - wf_id='order_workflow') - - def stepAcceptPackingList(self, sequence=None,sequence_list=None): - packing_list = sequence.get('packing_list') - LOG('stepAcceptPackingList, packing_list.isDivergent()',0,packing_list.isDivergent()) - portal_workflow = self.getWorkflowTool() - packing_list.portal_workflow.doActionFor(packing_list,'accept_delivery', - wf_id='delivery_causality_workflow') - - def stepSplitAndDeferPackingList(self, sequence=None,sequence_list=None): - portal_workflow = self.getWorkflowTool() - date = DateTime() # the value is now - target_start_date = date + 10 # Add 10 days - target_stop_date = date + 12 # Add 12 days - packing_list = sequence.get('packing_list') - packing_list.portal_workflow.doActionFor(packing_list,'split_defer_delivery', - wf_id='delivery_causality_workflow', - target_start_date=target_start_date, - target_stop_date=target_stop_date) - - # XXX To be checked - def stepRedirectPackingList(self, sequence=None,sequence_list=None): - packing_list = sequence.get('packing_list') - portal_workflow = self.getWorkflowTool() - packing_list.portal_workflow.doActionFor(packing_list,'redirect_delivery', - wf_id='delivery_causality_workflow') - - def stepAcceptDeliveryPackingList(self, sequence=None,sequence_list=None): - packing_list = sequence.get('packing_list') - packing_list.portal_workflow.doActionFor(packing_list,'accept_delivery', - wf_id='delivery_causality_workflow') - - def stepUserGetReadyPackingList(self, sequence=None,sequence_list=None): - packing_list = sequence.get('packing_list') - packing_list.portal_workflow.doActionFor(packing_list,'user_get_ready', - wf_id='delivery_workflow') - - def stepUserSetReadyPackingList(self, sequence=None,sequence_list=None): - packing_list = sequence.get('packing_list') - packing_list.portal_workflow.doActionFor(packing_list,'user_set_ready', - wf_id='delivery_workflow') - - def stepUserStartPackingList(self, sequence=None,sequence_list=None): - packing_list = sequence.get('packing_list') - packing_list.portal_workflow.doActionFor(packing_list,'user_start', - wf_id='delivery_workflow') - - def stepUserConfirmPackingList(self, sequence=None,sequence_list=None): - packing_list = sequence.get('packing_list') - packing_list.portal_workflow.doActionFor(packing_list,'user_confirm', - wf_id='delivery_workflow') - - def stepOrderSalesOrder(self, sequence=None,sequence_list=None): - sales_order = sequence.get('sales_order') - sales_order.portal_workflow.doActionFor(sales_order,'user_order', - wf_id='order_workflow') - - def stepPlanSalesOrder(self, sequence=None, sequence_list=None, **kw): - portal = self.getPortal() - sales_order = sequence.get('sales_order') - sales_order.portal_workflow.doActionFor(sales_order,'user_plan', - wf_id='order_workflow') - - def stepConfirmProductionOrder(self, sequence=None, sequence_list=None, **kw): - portal = self.getPortal() - production_order = sequence.get('production_order') - production_order.portal_workflow.doActionFor(production_order,'usof_confirm', - wf_id='order_workflow') - - def stepOrderProductionOrder(self, sequence=None, sequence_list=None, **kw): - portal = self.getPortal() - production_order = sequence.get('production_order') - production_order.portal_workflow.doActionFor(production_order,'usof_order', - wf_id='order_workflow') - - def stepPlanProductionOrder(self, sequence=None, sequence_list=None, **kw): - portal = self.getPortal() - production_order = sequence.get('production_order') - production_order.portal_workflow.doActionFor(production_order,'usof_plan', - wf_id='order_workflow') - - def stepCheckConfirmOrder(self, sequence=None, sequence_list=None, **kw): - if sequence.get('order_type') == 'Production Order': - order = sequence.get('production_order') - else: - order = sequence.get('sales_order') - order_line = order._getOb('1') - simulation_tool = self.getSimulationTool() - simulation_object_list = simulation_tool.objectValues() - self.failUnless(len(simulation_object_list)>0) - related_simulation_object_list = [] - simulation_object = None - for o in simulation_object_list: - if o.getCausalityValue()==order: - related_simulation_object_list.append(o) - if len(related_simulation_object_list)>0: - simulation_object = related_simulation_object_list[0] - sequence.edit(simulation_object=simulation_object) - self.assertNotEquals(simulation_object,None) - sequence.edit(simulation_object_list=related_simulation_object_list) - self.assertEquals(len(related_simulation_object_list),1) - sequence.edit(simulation_object=simulation_object) - - # XXX to be removed - packing_list = sequence.get('packing_list') - if packing_list is not None: - LOG('stepCheckConfirmOrder, packing_list.isConvergent()',0,packing_list.isConvergent()) - LOG('stepCheckConfirmOrder, packing_list.getMovementList()',0,packing_list.getMovementList()) - - - # Check if there is a line on the simulation object - # And if this line get all informations - line_list = simulation_object.objectValues() - line = line_list[0] - sequence.edit(simulation_line_list=line_list) - if sequence.get('variated_order') is None: - self.assertEquals(len(line_list),1) - self.assertEquals(line.getQuantity(),self.quantity) - else: - self.assertEquals(len(line_list),4) - # Check if the order of each line of the simulation - # object is a cell of the order - cell_list = order_line.objectValues() - LOG('CheckConfirmOrder cell_list',0,cell_list) - order_list = map(lambda x: x.getOrderValue(), line_list) - LOG('CheckConfirmOrder order_list',0,order_list) - self.failIfDifferentSet(cell_list,order_list) - color_and_size_list = sequence.get('color_and_size_list') - cell_color_and_size_list = map(lambda x: x.getCategoryList(),cell_list) - LOG('stepCheckConfirmOrder color_and_size_list',0,color_and_size_list) - LOG('stepCheckConfirmOrder cell_color_and_size_list',0,cell_color_and_size_list) - self.failIfDifferentSet(color_and_size_list,cell_color_and_size_list) - for cell in cell_list: - LOG('stepCheckConfirmOrder cell.getPhysicalPath()',0,cell.getPhysicalPath()) - self.assertEquals(cell.getTargetQuantity(),self.quantity) - self.failIfDifferentSet(cell.getDomainBaseCategoryList(),self.variation_base_category_list1) - # Check the profile for this cell - if sequence.get('modified_packing_list_path') is None: # if - self.assertEquals(cell.getSourceValue(),sequence.get('source_value')) - self.assertEquals(cell.getSourceSectionValue(),sequence.get('source_section_value')) - self.assertEquals(cell.getSourceDecisionValue(),sequence.get('source_decision_value')) - self.assertEquals(cell.getSourceAdministrationValue(),sequence.get('source_administration_value')) - self.assertEquals(cell.getSourcePaymentValue(),sequence.get('source_payment_value')) - self.assertEquals(cell.getDestinationValue(),sequence.get('destination_value')) - self.assertEquals(cell.getDestinationSectionValue(),sequence.get('destination_section_value')) - self.assertEquals(cell.getDestinationDecisionValue(),sequence.get('destination_decision_value')) - self.assertEquals(cell.getDestinationAdministrationValue(),sequence.get('destination_administration_value')) - self.assertEquals(cell.getDestinationPaymentValue(),sequence.get('destination_payment_value')) - # Check membership criterion - membership_criterion_category_list_list = map(lambda x: tuple(x.getMembershipCriterionCategoryList()),cell_list) - LOG('stepCheckConfirmOrder, color_and_size_list',0,color_and_size_list) - LOG('stepCheckConfirmOrder, membership_criterion_category_list_list',0,membership_criterion_category_list_list) - self.failIfDifferentSet(color_and_size_list,membership_criterion_category_list_list) - predicate_value_list_list = map(lambda x: tuple(x.getPredicateValueList()),cell_list) - LOG('stepCheckConfirmOrder, color_and_size_list',0,color_and_size_list) - LOG('stepCheckConfirmOrder, predicate_value_list_list',0,predicate_value_list_list) - self.failIfDifferentSet(color_and_size_list,predicate_value_list_list) - - def stepCheckPackingListDiverged(self, sequence=None, sequence_list=None, **kw): - packing_list = sequence.get('packing_list') - portal_workflow = self.getWorkflowTool() - LOG('stepCheckPackingListDiverged, isDivergent()',0,packing_list.isDivergent()) - LOG('stepCheckPackingListDiverged, isConvergent()',0,packing_list.isConvergent()) - self.assertEquals(packing_list.isDivergent(),1) - self.assertEquals(portal_workflow.getInfoFor(packing_list,'causality_state'),'diverged') - - def stepCheckPackingListConverged(self, sequence=None, sequence_list=None, **kw): - packing_list = sequence.get('packing_list') - portal_workflow = self.getWorkflowTool() - LOG('stepCheckPackingListConverged, packing_list.isConvergent()',0,packing_list.isConvergent()) - self.assertEquals(portal_workflow.getInfoFor(packing_list,'causality_state'),'solved') - - def stepModifySalesOrder(self, sequence=None, sequence_list=None, **kw): - sales_order = sequence.get('sales_order') - sales_order_line = sales_order._getOb('1') - sales_order_line.setTargetQuantity(self.quantity + 1) - component_module = self.getComponentModule() - component = component_module._getOb(self.component_id2) - sales_order_line.setResourceValue(component) - self.assertEquals(sales_order_line.getResourceValue(),component) - - def stepActivateRequirementList(self, sequence=None, sequence_list=None, **kw): - portal = self.getPortal() - result = portal.SimulationTool_activateRequirementList() - result = result.replace('\n','') - self.assertEquals(result,'') - - def stepCheckActivateRequirementList(self, sequence=None, sequence_list=None, **kw): - mp_packing_list_list = [] # mp stands for Raw Material - packing_list_list = [] - if sequence.get('order_type') == 'Production Order': - packing_list_module = self.getProductionPackingListModule() - order = sequence.get('production_order') - else: - packing_list_module = self.getSalesPackingListModule() - order = sequence.get('sales_order') - all_packing_list_list = packing_list_module.objectValues() - packing_list = None - related_list = [] - for o in all_packing_list_list: - if o.getCausalityValue()==order: - related_list.append(o) - LOG('stepCheckActivateRequirementList, 1 packing_list.asXML()',0,o.asXML()) - if sequence.get('order_type')=='Production Order': - # We should find the packing list corresponding the the - # delivery of the resource, not the delivery of raw materials - if sequence.get('modified_packing_list_resource') == 1: - self.assertEquals(len(related_list),3) - else: - #self.assertEquals(len(related_list),2) - self.assertEquals(len(related_list),2) # XXXXXXXXXXXXXXXXXXXXXXXXXXX must be 2 - else: - self.assertEquals(len(related_list),1) - for p in related_list: - LOG('stepCheckActivateRequirementList, packing_list.asXML()',0,p.asXML()) - for o in p.objectValues(): - found = 0 - if o.getResourceValue()==sequence.get('resource'): - packing_list_list.extend([p]) - found = 1 - if not found: - mp_packing_list_list.extend([p]) - - self.assertEquals(len(packing_list_list),1) - portal_workflow = self.getWorkflowTool() - sequence.edit(packing_list=packing_list_list[0]) - sequence.edit(mp_packing_list_list=mp_packing_list_list) - - # Check everything inside the simulation - # Check the applied rule - simulation_object = sequence.get('simulation_object') - self.assertEquals(simulation_object.getLastExpandSimulationState(),'confirmed') - self.assertEquals(simulation_object.getSpecialiseId(),'default_order_rule') - self.assertEquals(simulation_object.getCausalityValue(),order) - # Then check every line of the applied rule - simulation_line_list = sequence.get('simulation_line_list') - simulation_line_id_list = map(lambda x: x.getId(),simulation_line_list) - #if sequence.get('order_type') == 'Production Order': - if sequence.get('variated_order'): - self.failIfDifferentSet(self.simulation_line_id_list,simulation_line_id_list) - else: - self.failIfDifferentSet(self.simple_simulation_line_id_list,simulation_line_id_list) - for line in simulation_line_list: - self.assertEquals(line.getDeliverable(),1) - self.assertEquals(line.getCausalityState(),'expanded') - #if sequence.get('order_type') == 'Production Order': - if sequence.get('variated_order'): - delivery_line_id = line.getId().split('_',1)[1] - self.assertEquals(line.getOrderValue(),order._getOb('1')._getOb(delivery_line_id)) - else: - delivery_line_id = line.getId() - self.assertEquals(line.getOrderValue(),order._getOb('1')) - self.assertEquals(line.getStartDate(),order.getStartDate()) - self.assertEquals(line.getStopDate(),order.getStopDate()) - #FAILS self.assertEquals(line.getTargetStartDate(),order.getTargetStartDate()) - #FAILS self.assertEquals(line.getTargetStopDate(),order.getTargetStopDate()) - self.assertEquals(line.getTargetSourceValue(),sequence.get('source_value')) - self.assertEquals(line.getSourceValue(),sequence.get('source_value')) - self.assertEquals(line.getSourceSectionValue(),sequence.get('source_section_value')) - self.assertEquals(line.getSourceDecisionValue(),sequence.get('source_decision_value')) - self.assertEquals(line.getSourceAdministrationValue(),sequence.get('source_administration_value')) - self.assertEquals(line.getSourcePaymentValue(),sequence.get('source_payment_value')) - self.assertEquals(line.getDestinationValue(),sequence.get('destination_value')) - self.assertEquals(line.getDestinationSectionValue(),sequence.get('destination_section_value')) - self.assertEquals(line.getDestinationDecisionValue(),sequence.get('destination_decision_value')) - self.assertEquals(line.getDestinationAdministrationValue(),sequence.get('destination_administration_value')) - self.assertEquals(line.getDestinationPaymentValue(),sequence.get('destination_payment_value')) - order_cell = line.getOrderValue() - delivery_cell = line.getDeliveryValue() - root_order = order_cell.getRootDeliveryValue() - root_delivery = delivery_cell.getRootDeliveryValue() - self.assertEquals(line.getQuantityUnit(),order_cell.getQuantityUnit()) - # now check the rule inside this line - rule_list = line.objectValues() - - if sequence.get('order_type') == 'Production Order': - self.assertEquals(len(rule_list),1) - rule = rule_list[0] - self.assertEquals(rule.getId(),'default_transformation_rule') - self.assertEquals(rule.getSpecialiseId(),'default_transformation_rule') - self.assertEquals(rule.getCausalityValue(),sequence.get('transformation')) - # now check objects inside this rule - rule_line_list = rule.objectValues() - rule_line_list = rule.objectValues() - self.assertEquals(len(rule_line_list),2) - good_rule_line_id_list = ('produced_resource','transformed_resource_0') - rule_line_id_list = map(lambda x: x.getId(),rule_line_list) - self.failIfDifferentSet(good_rule_line_id_list,rule_line_id_list) - for rule_line in rule_line_list: - self.assertEquals(rule_line.getPortalType(),'Simulation Movement') - if rule_line.getId()=='produced_resource': - self.assertEquals(rule_line.getResourceValue(),sequence.get('resource')) - #self.assertEquals(rule_line.getTargetStartDate(),order.getTargetStartDate()) - self.assertEquals(rule_line.getCausalityState(),'expanded') - #self.assertEquals(rule_line.getDestinationSection(),sequence.get('destination_section_value')) - self.failIfDifferentSet(line.getVariationCategoryList(),rule_line.getVariationCategoryList()) - # Check if there is nothing inside - self.assertEquals(len(rule_line.objectValues()),0) - if rule_line.getId()=='transformed_resource_0': - tissu = rule_line.getResourceValue() - self.assertNotEquals(tissu,None) - #good_variation_list = [sequence.get('category_tissu%s_variante')] - #good_variation_list = filter(lambda x: x.find('color')==0,line.getVariationCategoryList()) - self.assertEquals(len(rule_line.getVariationCategoryList()),1) - variante = rule_line.getVariationCategoryList()[0] - variante = variante.split('_')[len(variante.split('_'))-1] - good_variation_list = [sequence.get('category_tissu%s_variante%s' % (tissu.getId(),variante))] - - LOG('good_variation_list',0,good_variation_list) - LOG('rule_line.getVariationCategoryList()',0,rule_line.getVariationCategoryList()) - LOG('rule_line.showDict',0,rule_line.showDict()) - self.failIfDifferentSet(good_variation_list,rule_line.getVariationCategoryList()) - tissu = sequence.get('tissu_list')[0] - self.assertEquals(rule_line.getResourceValue(),tissu) - self.assertEquals(rule_line.getSourceValue(),sequence.get('source_value')) - self.assertEquals(rule_line.getSourceSectionValue(),sequence.get('source_section_value')) - # Check object inside - sourcing_line_list = rule_line.objectValues() - self.assertEquals(len(sourcing_line_list),1) - sourcing_line = sourcing_line_list[0] - self.assertEquals(sourcing_line.getId(),'default_transformation_sourcing_rule') - self.assertEquals(sourcing_line.getSpecialiseId(),'default_transformation_sourcing_rule') - self.assertEquals(sourcing_line.getPortalType(),'Applied Rule') - transformation_source_list = sourcing_line.objectValues() - self.assertEquals(len(transformation_source_list),1) - transformation_source = transformation_source_list[0] - self.assertEquals(transformation_source.getId(),'transformation_source') - LOG('transformation_source.getVariationCategoryList()',0,transformation_source.getVariationCategoryList()) - self.failIfDifferentSet(transformation_source.getVariationCategoryList(),good_variation_list) - LOG('transformation_source.showDict()',0,transformation_source.showDict()) - resource_delivery_cell = transformation_source.getDeliveryValue() - resource_root_delivery = resource_delivery_cell.getRootDeliveryValue() - LOG('resource_root_delivery.getPath()',0,resource_root_delivery.getPath()) - self.assertNotEquals(resource_root_delivery,root_delivery) - else: - self.assertEquals(len(rule_list),0) - - # Check all packing list - cancelled_list = [] - for packing_list in related_list: - if sequence.get('modified_packing_list_resource') == 1: - if portal_workflow.getInfoFor(packing_list,'simulation_state') == 'cancelled': - # Here we have a canceled packing list after the fusion - cancelled_list.append(packing_list) - continue - self.assertEquals(portal_workflow.getInfoFor(packing_list,'simulation_state'),'confirmed') - LOG('looking at packing_list:',0,packing_list.getPhysicalPath()) - # Check if there is a line on the packing_list - # And if this line get all informations - line_list = packing_list.objectValues() - if packing_list in packing_list_list: - self.assertEquals(len(line_list),1) - line = line_list[0] - resource = sequence.get('resource') - self.assertEquals(line.getResourceValue(),resource) - else: - tissu_list = sequence.get('good_tissu_list') - all_tissu_list = sequence.get('tissu_list') - line_resource_list = map(lambda x: x.getResourceValue(),line_list) - LOG('CheckActivateRequirementList, tissu_list:',0,tissu_list) - LOG('CheckActivateRequirementList, line_resource_list:',0,line_resource_list) - self.assertEquals(len(line_list),len(tissu_list)) - if sequence.get('modified_packing_list_resource') == 1: - self.failIfDifferentSet(line_resource_list,all_tissu_list) - #for tissu in tissu_list: - # LOG('CheckActivateRequirementList, good_tissu_list',0,tissu_list) - # LOG('CheckActivateRequirementList, line_resource_list',0,line_resource_list) - # self.assertEquals(True,tissu in line_resource_list) - - else: - self.failIfDifferentSet(line_resource_list,tissu_list) - - for line in line_list: - if sequence.get('variated_order') is None: - self.assertEquals(line.getTotalQuantity(),self.quantity) - self.assertEquals(len(line.objectValues()),0) - else: - cell_list = line.objectValues() - if line.getResourceValue()==sequence.get('resource'): - self.assertEquals(len(line.objectValues()),4) - else: - # This is the packing list for the raw material - self.assertEquals(len(line.objectValues()),2) - - # check variation_base_category_list - if line.getResourceValue()==sequence.get('resource'): - self.failIfDifferentSet(line.getVariationBaseCategoryList(),self.variation_base_category_list1) - self.assertEquals(len(cell_list),4) - color_and_size_list = sequence.get('color_and_size_list') - membership_criterion_category_list = map(lambda x: tuple(x.getMembershipCriterionCategoryList()),cell_list) - LOG('stepCheckActivateRequirementList, color_and_size_list',0,color_and_size_list) - LOG('stepCheckActivateRequirementList, membership_criterion_category_list',0,membership_criterion_category_list) - self.failIfDifferentSet(color_and_size_list,membership_criterion_category_list) - for cell in cell_list: - LOG('stepCheckActivateRequirementList, cell.getCategoryList',0,cell.getCategoryList()) - self.assertEquals(cell.getTargetQuantity(),self.quantity) - self.assertEquals(cell.getSourceValue(),sequence.get('source_value')) - self.assertEquals(cell.getSourceSectionValue(),sequence.get('source_section_value')) - self.assertEquals(cell.getSourceDecisionValue(),sequence.get('source_decision_value')) - self.assertEquals(cell.getSourceAdministrationValue(),sequence.get('source_administration_value')) - self.assertEquals(cell.getSourcePaymentValue(),sequence.get('source_payment_value')) - self.assertEquals(cell.getDestinationValue(),sequence.get('destination_value')) - self.assertEquals(cell.getDestinationSectionValue(),sequence.get('destination_section_value')) - self.assertEquals(cell.getDestinationDecisionValue(),sequence.get('destination_decision_value')) - self.assertEquals(cell.getDestinationAdministrationValue(),sequence.get('destination_administration_value')) - self.assertEquals(cell.getDestinationPaymentValue(),sequence.get('destination_payment_value')) - else: - self.assertEquals(True,line.getResourceValue() in sequence.get('tissu_list')) - if not (sequence.get('modified_packing_list_resource') == 1): - self.assertEquals(line.getResourceValue(),sequence.get('tissu_list')[0]) - if sequence.get('modified_packing_list_resource') == 1: - self.assertEquals(len(cancelled_list),1) - - - def stepCheckSplittedAndDefferedPackingList(self, sequence=None, sequence_list=None, **kw): - packing_list_module = self.getSalesPackingListModule() - sales_order = sequence.get('sales_order') - packing_list_list = packing_list_module.objectValues() - - packing_list = None - related_list = [] - for o in packing_list_list: - if o.getCausalityValue()==sales_order: - related_list.append(o) - self.assertEquals(len(related_list),2) - def sort_by_id(x,y): - return cmp(int(x.getId()),int(y.getId())) - # Like this we will have the related_list sorted - # by the order where the packing list where created - related_list.sort(sort_by_id) - packing_list1 = related_list[0] # The First one - line = packing_list1.objectValues()[0] - for cell in line.objectValues(): - self.assertEquals(cell.getTargetQuantity(),self.quantity-1) - packing_list2 = related_list[1] # The First one - line = packing_list2.objectValues()[0] - for cell in line.objectValues(): - self.assertEquals(cell.getTargetQuantity(),1) - - def stepModifyPackingListDestination(self, sequence=None, sequence_list=None, **kw): - packing_list = sequence.get('packing_list') - portal_categories = self.getCategoryTool() - stock_category = portal_categories.resolveCategory(self.production_destination_site2) - LOG('stepModifyPackingListDestination, stock_category',0,stock_category.getPhysicalPath()) - LOG('stepModifyPackingListDestination, packing_list.getDestinationValue()',0,packing_list.getDestinationValue().getPhysicalPath()) - packing_list.setTargetDestinationValue(stock_category) - sequence.edit(destination_value=stock_category) - sequence.edit(modified_packing_list_path=1) - - #def stepLazyModifyPackingListResource(self, sequence=None, sequence_list=None, lazy=0,**kw): - # self.stepModifyPackingListResource(sequence=sequence,sequence_list=sequence_list,lazy=1,**kw) - - def stepModifyPackingListResource(self, sequence=None, sequence_list=None, lazy=0,**kw): - packing_list_list = sequence.get('mp_packing_list_list') - packing_list = packing_list_list[0] - tissu1 = sequence.get('tissu_first') - # We should construct another tissu - tissu_module = self.getTissuModule() - tissu = tissu_module.newContent(portal_type='Tissu') - tissu.setQuantityUnit('Longueur/Metre') - tissu_variante1 = tissu.newContent(portal_type='Variante Tissu',id=self.variante_id1) - category_tissu_variante1 = 'coloris/tissu/%s/%s' % (tissu.getId(),tissu_variante1.getId()) - tissu_variante2 = tissu.newContent(portal_type='Variante Tissu',id=self.variante_id2) - category_tissu_variante2 = 'coloris/tissu/%s/%s' % (tissu.getId(),tissu_variante2.getId()) - seq_kw = {'tissu%s' % tissu.getId():tissu, - 'tissu%s_variante1' % tissu.getId():tissu_variante1, - 'tissu%s_variante2' % tissu.getId():tissu_variante2, - 'category_tissu%s_variante1' % tissu.getId():category_tissu_variante1, - 'category_tissu%s_variante2' % tissu.getId():category_tissu_variante2} - sequence.edit(**seq_kw) - sequence.edit(**seq_kw) - tissu_list = sequence.get('tissu_list',[]) - tissu_list.extend([tissu]) - sequence.edit(tissu_list=tissu_list) - for line in packing_list.objectValues(): - if line.getResourceValue()==tissu1: - line.setResourceValue(tissu) - if lazy!=1: # This means that we will change everything, including cells - def rename_list(value,from_string,to_string): - new_list = [] - for item in value: - item = item.replace(from_string,to_string) - new_list.append(item) - return new_list - from_string = 'tissu/' + tissu1.getId() - to_string = 'tissu/' + tissu.getId() - new_category_list = rename_list(line.getCategoryList(),from_string,to_string) - line.setCategoryList(new_category_list) - #new_variation_category_list = rename_list(line.getVariationCategoryList(),from_string,to_string) - #line.setVariationCategoryList(new_variation_category_list) - def rename_dict(mydict,from_string,to_string): - newdict = PersistentMapping() - for key in mydict.keys(): - new_value = mydict[key] - if getattr(mydict[key],'keys',None) is not None: - new_value = rename_dict(mydict[key],from_string,to_string) - if type(key) is type('a'): - if key.find(from_string)>=0: - new_key = key.replace(from_string,to_string) - newdict[new_key] = PersistentMapping() - newdict[new_key] = new_value - else: - newdict[key] = PersistentMapping() - newdict[key] = new_value - else: - newdict[key] = PersistentMapping() - newdict[key] = new_value - return newdict - - line.index = rename_dict(line.index,from_string,to_string) - - #for id in line.objectIds(): - # line._delObject(id) - for cell in line.objectValues(): - LOG('cell.getPath()',0,cell.getPath()) - LOG('cell.getMembershipCriterionCategoryList',0,cell.getMembershipCriterionCategoryList()) - new_list = rename_list(cell.getMembershipCriterionCategoryList(),from_string,to_string) - cell.setMembershipCriterionCategoryList(new_list) - line.edit() # This simulate the user change, like this we will call propagateFromSimulation - sequence.edit(modified_packing_list_resource=1) - packing_list.recursiveImmediateReindexObject() - - def stepAddLinesToSalesPackingList(self, sequence=None, sequence_list=None, **kw): - packing_list = sequence.get('packing_list') - packing_list_line = packing_list.newContent(portal_type='Sales Packing List Line') - component_module = self.getComponentModule() - component = component_module._getOb(self.component_id) - packing_list_line.setResourceValue(component) - packing_list_line.setTargetQuantity(self.quantity) - sequence.edit(new_packing_list_line=packing_list_line) - - def stepSetLessQuantityToPackingList(self, sequence=None, sequence_list=None, **kw): - #packing_list = sequence.get('packing_list') - #packing_list_line = packing_list._getOb('1') - #packing_list_line.setTargetQuantity(self.low_quantity) # The user can change only the target - #packing_list.edit() # so that we call workflow methods - packing_list = sequence.get('packing_list') - # set quantities - line = packing_list.objectValues()[0] - LOG('stepSplitAndDeferPackingList line.getPortalType:',0,line.getPortalType()) - new_quantity = self.quantity - 1 - if sequence.get('variated_order') is not None: - cell_list = line.objectValues() - for cell in cell_list: - cell.setTargetQuantity(new_quantity) - else: - line.setTargetQuantity(new_quantity) - line.edit() # So that we calls workflow methods - - def stepCheckLessQuantityInSimulation(self, sequence=None, sequence_list=None, **kw): - simulation_object=sequence.get('simulation_object') - line_list = simulation_object.objectValues() - self.assertEquals(len(line_list),1) - line = line_list[0] - #component_module = self.getComponentModule() - #component = component_module._getOb(self.component_id) - self.assertEquals(line.getQuantity(),self.quantity-1) - - def stepTic(self,**kw): - self.tic() - - def testOrder(self, quiet=0,run=1): - sequence_list = SequenceList() - # Simple sequence with only some tic when it is required, - # We create a sales order, confirm and then make sure the corresponding - # packing list is made - # ... OK - sequence_string = 'AddSalesOrder PlanSalesOrder OrderSalesOrder ConfirmSalesOrder' \ - + ' Tic Tic Tic Tic CheckConfirmOrder' \ - + ' Tic Tic CheckActivateRequirementList' - sequence_list.addSequenceString(sequence_string) - - # Simple sequence (same as the previous one) with only some tic when it is required and with no plan, - # ... OK - sequence_string = 'AddSalesOrder Tic ConfirmSalesOrder Tic CheckConfirmOrder ' \ - + 'Tic CheckActivateRequirementList' - sequence_list.addSequenceString(sequence_string) - - # Sequence where we set less quantity in the packing list - # And we want to be sure that we will have less quantity in the simulation after we did accept - # OK - sequence_string = 'AddSalesOrder PlanSalesOrder OrderSalesOrder' \ - + ' ConfirmSalesOrder Tic Tic Tic Tic CheckConfirmOrder' \ - + ' Tic CheckActivateRequirementList SetLessQuantityToPackingList' \ - + ' Tic Tic CheckPackingListDiverged AcceptPackingList Tic Tic Tic' \ - + ' CheckLessQuantityInSimulation' - sequence_list.addSequenceString(sequence_string) - - # Simple sequence including variated resource with only some tic when it is required, - # We create a sales order, confirm and then make sure the corresponding - # packing list is made - # ... OK - sequence_string = 'AddVariatedSalesOrder PlanSalesOrder OrderSalesOrder' \ - + ' ConfirmSalesOrder Tic Tic Tic Tic CheckConfirmOrder' \ - + ' Tic Tic CheckActivateRequirementList' - sequence_list.addSequenceString(sequence_string) - - # Sequence where we confirm an order, the corresponding packing list is automatically - # created, we then check if the packing list is converged. - # ... OK - sequence_string = 'AddSalesOrder Tic Tic ConfirmSalesOrder Tic Tic CheckConfirmOrder Tic' \ - + ' Tic Tic Tic Tic CheckActivateRequirementList Tic CheckPackingListConverged' - sequence_list.addSequenceString(sequence_string) - - # Sequence where we confirm an order, the corresponding packing list is automatically - # created, then we add new lines to the packing list by hand, we accept, we then check - # if the packing list is converged. - # ... FAILS - sequence_string = 'AddSalesOrder Tic Tic ConfirmSalesOrder Tic Tic CheckConfirmOrder Tic' \ - + ' Tic Tic Tic Tic CheckActivateRequirementList Tic CheckPackingListConverged' \ - + ' AddLinesToSalesPackingList Tic Tic Tic Tic Tic CheckPackingListDiverged' - #sequence_list.addSequenceString(sequence_string) - - # Sequence where we confirm an order, the corresponding packing list is automatically - # created, then we rename the color of the variated resource, everything should take - # into account the new name - # ... OK - sequence_string = 'AddVariatedSalesOrder PlanSalesOrder OrderSalesOrder' \ - + ' ConfirmSalesOrder Tic Tic Tic Tic CheckConfirmOrder' \ - + ' Tic Tic CheckActivateRequirementList' \ - + ' Tic Tic ModifyVariationId Tic Tic CheckConfirmOrder' \ - + ' Tic Tic CheckActivateRequirementList' - sequence_list.addSequenceString(sequence_string) - - # Sequence where we create an order, then the color is renamed, then we confirm - # and we look if everyhing is going fine on the simulation and that the - # packing list is created correctly - # ... OK - sequence_string = 'AddVariatedSalesOrder Tic Tic ModifyVariationId Tic Tic Tic' \ - + ' ConfirmSalesOrder Tic Tic CheckConfirmOrder Tic' \ - + ' Tic Tic Tic Tic CheckActivateRequirementList Tic' - sequence_list.addSequenceString(sequence_string) - - # Sequence where we confirm an order, the corresponding packing list is automatically - # created, then we wants to only send one part of the packing list and finally - # we split and defer the packing list - # ... Fails but was OK - sequence_string = 'AddVariatedSalesOrder PlanSalesOrder OrderSalesOrder' \ - + ' ConfirmSalesOrder Tic Tic Tic Tic CheckConfirmOrder' \ - + ' CheckActivateRequirementList Tic Tic Tic' \ - + ' UserGetReadyPackingList Tic Tic UserSetReadyPackingList Tic Tic' \ - + ' UserStartPackingList Tic Tic Tic Tic' \ - + ' AcceptDeliveryPackingList Tic CheckPackingListConverged Tic' \ - + ' SetLessQuantityToPackingList Tic CheckPackingListDiverged Tic' \ - + ' SplitAndDeferPackingList Tic Tic Tic' \ - + ' CheckSplittedAndDefferedPackingList' - sequence_list.addSequenceString(sequence_string) - - # Sequence where we build a Production Order, we confirm this production order, then - # we see if there is an the corresponding packing list is built - # ... OK - sequence_string = 'AddProductionOrder Tic PlanProductionOrder Tic OrderProductionOrder Tic Tic' \ - + ' ConfirmProductionOrder Tic Tic Tic CheckConfirmOrder Tic Tic' \ - + ' CheckActivateRequirementList Tic Tic' - sequence_list.addSequenceString(sequence_string) - - - # Sequence where we build a Production Order, we confirm this production order, then - # we have many packing list, we change the destination of one of the packing_list, - # we must be sure that this change is taken into account into the simulation - # ... ??? may be ok - sequence_string = 'AddProductionOrder Tic PlanProductionOrder Tic OrderProductionOrder Tic Tic' \ - + ' ConfirmProductionOrder Tic Tic Tic CheckConfirmOrder Tic Tic' \ - + ' CheckActivateRequirementList Tic Tic ModifyPackingListDestination Tic Tic' \ - + ' Tic Tic Tic RedirectPackingList Tic Tic Tic CheckConfirmOrder Tic CheckActivateRequirementList' - #sequence_list.addSequenceString(sequence_string) - - # Sequence where we build a Production Order, we plan this production order, then - # we have many packing list, we change the resource of one of them, - # we must be sure that this change is taken into account into the simulation, - # ie a new line with the previous resource should be automatically created - # ... OK - sequence_string = 'AddProductionOrder Tic PlanProductionOrder Tic OrderProductionOrder Tic Tic' \ - + ' ConfirmProductionOrder Tic Tic Tic CheckConfirmOrder Tic Tic' \ - + ' CheckActivateRequirementList Tic Tic ModifyPackingListResource Tic Tic' \ - + ' Tic Tic Tic Tic Tic CheckConfirmOrder Tic CheckActivateRequirementList' - sequence_list.addSequenceString(sequence_string) - - # Now add a non defined sequence -# sequence = Sequence() -# sequence.addStep('AddSalesOrder') -# sequence.addStep('Tic',required=0,max_replay=3) -# sequence.addStep('PlanSalesOrder',required=0) -# sequence.addStep('Tic',required=0,max_replay=3) -# sequence.addStep('OrderSalesOrder',required=0) -# sequence.addStep('Tic',required=0,max_replay=3) -# sequence.addStep('ConfirmSalesOrder') -# sequence.addStep('Tic',required=0,max_replay=3) -# sequence.addStep('ModifySalesOrder',required=0) -# sequence.addStep('Tic',required=0,max_replay=3) -# sequence.addStep('CheckConfirmOrder') -# sequence.addStep('ActivateRequirementList') -# sequence.addStep('Tic',required=0,max_replay=5) -# sequence_list.addSequence(sequence) - # Finally play all sequences - sequence_list.play(self) - - - -if __name__ == '__main__': - framework() -else: - import unittest - def test_suite(): - suite = unittest.TestSuite() - suite.addTest(unittest.makeSuite(TestOrder)) - return suite - -- 2.30.9