From d7d204b65b7f570f806a1fdbbbb48dd73a5377af Mon Sep 17 00:00:00 2001 From: Christophe Chauvet Date: Tue, 12 Aug 2008 18:32:16 +0200 Subject: [PATCH 001/143] Exit properly when port is already used bzr revid: christophe.chauvet@syleam.fr-20080812163216-h9mcf053tl1101wx --- bin/netsvc.py | 21 +++++++++++++++------ 1 file changed, 15 insertions(+), 6 deletions(-) diff --git a/bin/netsvc.py b/bin/netsvc.py index e05d4ece6b9..10345c05b5f 100644 --- a/bin/netsvc.py +++ b/bin/netsvc.py @@ -266,9 +266,13 @@ class SimpleThreadedXMLRPCServer(SocketServer.ThreadingMixIn, SimpleXMLRPCServer.SimpleXMLRPCServer): def server_bind(self): - self.socket.setsockopt(socket.SOL_SOCKET, - socket.SO_REUSEADDR, 1) - SimpleXMLRPCServer.SimpleXMLRPCServer.server_bind(self) + try: + self.socket.setsockopt(socket.SOL_SOCKET, + socket.SO_REUSEADDR, 1) + SimpleXMLRPCServer.SimpleXMLRPCServer.server_bind(self) + except: + sys.stderr.write("ERROR: address already in use\n") + sys.exit(1) class HttpDaemon(threading.Thread): @@ -287,9 +291,14 @@ class HttpDaemon(threading.Thread): SecureXMLRPCServer.SecureXMLRPCServer): def server_bind(self): - self.socket.setsockopt(socket.SOL_SOCKET, - socket.SO_REUSEADDR, 1) - SecureXMLRPCServer.SecureXMLRPCServer.server_bind(self) + try: + self.socket.setsockopt(socket.SOL_SOCKET, + socket.SO_REUSEADDR, 1) + SecureXMLRPCServer.SecureXMLRPCServer.server_bind(self) + except: + sys.stderr.write("ERROR: address already in use\n") + sys.exit(1) + self.server = SecureThreadedXMLRPCServer((interface, port), SecureXMLRPCRequestHandler, 0) From 7fff0810f7fa9513caf986664441bd53aa1fa42c Mon Sep 17 00:00:00 2001 From: Christophe Chauvet Date: Wed, 13 Aug 2008 01:02:28 +0200 Subject: [PATCH 002/143] [server] * trap xpath and lxml import error and exit properly bzr revid: christophe.chauvet@syleam.fr-20080812230228-evi0q3la4hgyfq3v --- bin/osv/orm.py | 9 ++++++++- bin/tools/convert.py | 8 +++++++- 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/bin/osv/orm.py b/bin/osv/orm.py index 0178c2d078a..6b478a3af9b 100644 --- a/bin/osv/orm.py +++ b/bin/osv/orm.py @@ -48,7 +48,6 @@ import time import types -from xml import dom, xpath import string import netsvc import re @@ -58,6 +57,14 @@ import pickle import fields import tools +import sys +try: + from xml import dom, xpath +except ImportError: + sys.stderr.write("ERROR: Import xpath module\n") + sys.stderr.write("ERROR: Try to install the old python-xml package\n") + sys.exit(2) + from tools.config import config regex_order = re.compile('^([a-zA-Z0-9_]+( desc)?( asc)?,?)+$', re.I) diff --git a/bin/tools/convert.py b/bin/tools/convert.py index 427467b909d..12b73f63a9a 100644 --- a/bin/tools/convert.py +++ b/bin/tools/convert.py @@ -41,7 +41,13 @@ import netsvc from config import config import logging -from lxml import etree +import sys +try: + from lxml import etree +except: + sys.stderr.write("ERROR: pythonic binding for the libxml2 and libxslt libraries is missing\n") + sys.stderr.write("ERROR: Try to install python-lxml package\n") + sys.exit(2) import pickle From 6228e0641bd81f45349dbeca3ab6583b080e5b87 Mon Sep 17 00:00:00 2001 From: Priyesh Date: Wed, 8 Oct 2008 19:56:04 +0530 Subject: [PATCH 003/143] define actions in process bzr revid: solanki.priyesh@gmail.com-20081008142604-up8dif1m6ghngwqh --- addons/account/process/invoice_process.xml | 13 ++++- addons/account/process/statement_process.xml | 11 ++++ .../process/hr_timesheet_project_process.xml | 2 +- .../process/hr_timesheet_sheet_process.xml | 33 +++++++++++ addons/mrp/process/procurement_process.xml | 11 ++++ addons/project/process/task_process.xml | 39 +++++++++++++ addons/purchase/process/purchase_process.xml | 56 ++++++++++++++++++- addons/purchase/purchase.py | 2 +- 8 files changed, 163 insertions(+), 4 deletions(-) diff --git a/addons/account/process/invoice_process.xml b/addons/account/process/invoice_process.xml index 5fb1c522be1..66c5b6aef55 100644 --- a/addons/account/process/invoice_process.xml +++ b/addons/account/process/invoice_process.xml @@ -104,7 +104,7 @@ @@ -169,6 +169,17 @@ + + + + + + + + + diff --git a/addons/account/process/statement_process.xml b/addons/account/process/statement_process.xml index 57cfe332531..09caa7f72f2 100644 --- a/addons/account/process/statement_process.xml +++ b/addons/account/process/statement_process.xml @@ -130,6 +130,17 @@ + + + + + + + + + \ No newline at end of file diff --git a/addons/hr_timesheet_project/process/hr_timesheet_project_process.xml b/addons/hr_timesheet_project/process/hr_timesheet_project_process.xml index d514b14bf17..0cc7032602d 100644 --- a/addons/hr_timesheet_project/process/hr_timesheet_project_process.xml +++ b/addons/hr_timesheet_project/process/hr_timesheet_project_process.xml @@ -58,7 +58,7 @@ - + diff --git a/addons/hr_timesheet_sheet/process/hr_timesheet_sheet_process.xml b/addons/hr_timesheet_sheet/process/hr_timesheet_sheet_process.xml index 24374c2a810..3b818bd82ec 100644 --- a/addons/hr_timesheet_sheet/process/hr_timesheet_sheet_process.xml +++ b/addons/hr_timesheet_sheet/process/hr_timesheet_sheet_process.xml @@ -222,5 +222,38 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/addons/mrp/process/procurement_process.xml b/addons/mrp/process/procurement_process.xml index 583de318410..a6125811143 100644 --- a/addons/mrp/process/procurement_process.xml +++ b/addons/mrp/process/procurement_process.xml @@ -298,5 +298,16 @@ + + + + + + + + + \ No newline at end of file diff --git a/addons/project/process/task_process.xml b/addons/project/process/task_process.xml index 6be52bd3490..03b8281072d 100644 --- a/addons/project/process/task_process.xml +++ b/addons/project/process/task_process.xml @@ -112,5 +112,44 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/addons/purchase/process/purchase_process.xml b/addons/purchase/process/purchase_process.xml index d100c4a772c..96da7cbb8cd 100644 --- a/addons/purchase/process/purchase_process.xml +++ b/addons/purchase/process/purchase_process.xml @@ -105,7 +105,7 @@ - + @@ -150,6 +150,60 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + . + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/addons/purchase/purchase.py b/addons/purchase/purchase.py index 84074b0a0ae..440bc3859d3 100644 --- a/addons/purchase/purchase.py +++ b/addons/purchase/purchase.py @@ -231,7 +231,7 @@ class purchase_order(osv.osv): part,property_pref=['property_product_pricelist_purchase']).get('property_product_pricelist_purchase',False) return {'value':{'partner_address_id': addr['default'], 'pricelist_id': pricelist}} - def wkf_approve_order(self, cr, uid, ids): + def wkf_approve_order(self, cr, uid, ids, context={}): self.write(cr, uid, ids, {'state': 'approved', 'date_approve': time.strftime('%Y-%m-%d')}) return True From fe5356f7d57698d897e0a4d0cb2012aa123d3d97 Mon Sep 17 00:00:00 2001 From: Priyesh Date: Fri, 10 Oct 2008 15:55:04 +0530 Subject: [PATCH 004/143] define actions in process bzr revid: solanki.priyesh@gmail.com-20081010102504-m47thbbqdv4kyrlw --- addons/account/process/invoice_process.xml | 4 +- addons/account/process/statement_process.xml | 2 +- .../process/hr_timesheet_sheet_process.xml | 8 +- addons/mrp/process/procurement_process.xml | 87 ++++++++- addons/product/process/product_process.xml | 2 +- addons/project/process/task_process.xml | 10 +- .../process/project_mrp_process.xml | 25 +++ addons/purchase/process/purchase_process.xml | 25 +-- addons/sale/process/sale_process.xml | 179 +++++++++--------- 9 files changed, 214 insertions(+), 128 deletions(-) diff --git a/addons/account/process/invoice_process.xml b/addons/account/process/invoice_process.xml index 66c5b6aef55..aeb2b786137 100644 --- a/addons/account/process/invoice_process.xml +++ b/addons/account/process/invoice_process.xml @@ -13,7 +13,7 @@ @@ -177,7 +177,7 @@ - + diff --git a/addons/account/process/statement_process.xml b/addons/account/process/statement_process.xml index 09caa7f72f2..3a153fab546 100644 --- a/addons/account/process/statement_process.xml +++ b/addons/account/process/statement_process.xml @@ -138,7 +138,7 @@ - + diff --git a/addons/hr_timesheet_sheet/process/hr_timesheet_sheet_process.xml b/addons/hr_timesheet_sheet/process/hr_timesheet_sheet_process.xml index 3b818bd82ec..8033c06ee3f 100644 --- a/addons/hr_timesheet_sheet/process/hr_timesheet_sheet_process.xml +++ b/addons/hr_timesheet_sheet/process/hr_timesheet_sheet_process.xml @@ -229,28 +229,28 @@ - + - + - + - + diff --git a/addons/mrp/process/procurement_process.xml b/addons/mrp/process/procurement_process.xml index a6125811143..136ae9a86ea 100644 --- a/addons/mrp/process/procurement_process.xml +++ b/addons/mrp/process/procurement_process.xml @@ -13,7 +13,7 @@ @@ -169,7 +169,7 @@ @@ -298,6 +298,24 @@ + + + + + + + + + + + + + + + + @@ -305,9 +323,72 @@ - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/addons/product/process/product_process.xml b/addons/product/process/product_process.xml index 9b675a11a84..d7e985eca7d 100644 --- a/addons/product/process/product_process.xml +++ b/addons/product/process/product_process.xml @@ -13,7 +13,7 @@ diff --git a/addons/project/process/task_process.xml b/addons/project/process/task_process.xml index 03b8281072d..9ba6a39b9dc 100644 --- a/addons/project/process/task_process.xml +++ b/addons/project/process/task_process.xml @@ -119,35 +119,35 @@ - + - + - + - + - + diff --git a/addons/project_mrp/process/project_mrp_process.xml b/addons/project_mrp/process/project_mrp_process.xml index 0c856b7a96d..2dd89b84add 100644 --- a/addons/project_mrp/process/project_mrp_process.xml +++ b/addons/project_mrp/process/project_mrp_process.xml @@ -80,5 +80,30 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/addons/purchase/process/purchase_process.xml b/addons/purchase/process/purchase_process.xml index 96da7cbb8cd..56b3b8d1180 100644 --- a/addons/purchase/process/purchase_process.xml +++ b/addons/purchase/process/purchase_process.xml @@ -158,52 +158,37 @@ - + - + - + - + . - + - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/addons/sale/process/sale_process.xml b/addons/sale/process/sale_process.xml index e6b7c1a3c52..829fcc61bf7 100644 --- a/addons/sale/process/sale_process.xml +++ b/addons/sale/process/sale_process.xml @@ -118,6 +118,18 @@ + + + + + + + + + + + + @@ -125,22 +137,9 @@ + - - - - - - - - - - - - - - @@ -148,28 +147,7 @@ - - - - - - - - - - - - - - - - - - - - - - + @@ -178,52 +156,15 @@ - - - - - - - - - - - - - - - - - - - - - + + - - - - - - - - - - - - - - - - - - @@ -249,25 +190,79 @@ - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - + + + + + From 92ab49dee4ba559f55131caa5c924a9904d183f8 Mon Sep 17 00:00:00 2001 From: Priyesh Date: Fri, 10 Oct 2008 18:13:41 +0530 Subject: [PATCH 005/143] define roles in process wherever necessary bzr revid: solanki.priyesh@gmail.com-20081010124341-g0ddcgjepuhp5131 --- addons/account/process/invoice_process.xml | 9 +++++++++ addons/account/process/statement_process.xml | 4 ++-- .../process/hr_timesheet_sheet_process.xml | 9 +++++++++ addons/mrp/process/procurement_process.xml | 13 ++++++++++++- .../project_mrp/process/project_mrp_process.xml | 1 + addons/purchase/process/purchase_process.xml | 16 +++++++++++++++- 6 files changed, 48 insertions(+), 4 deletions(-) diff --git a/addons/account/process/invoice_process.xml b/addons/account/process/invoice_process.xml index aeb2b786137..37575e9b653 100644 --- a/addons/account/process/invoice_process.xml +++ b/addons/account/process/invoice_process.xml @@ -106,6 +106,14 @@ + + + + + + + + @@ -123,6 +131,7 @@ + diff --git a/addons/account/process/statement_process.xml b/addons/account/process/statement_process.xml index 3a153fab546..df5a544a293 100644 --- a/addons/account/process/statement_process.xml +++ b/addons/account/process/statement_process.xml @@ -85,8 +85,8 @@ - - + + diff --git a/addons/hr_timesheet_sheet/process/hr_timesheet_sheet_process.xml b/addons/hr_timesheet_sheet/process/hr_timesheet_sheet_process.xml index 8033c06ee3f..f21378fee04 100644 --- a/addons/hr_timesheet_sheet/process/hr_timesheet_sheet_process.xml +++ b/addons/hr_timesheet_sheet/process/hr_timesheet_sheet_process.xml @@ -140,6 +140,14 @@ + + + + + + + + @@ -166,6 +174,7 @@ + diff --git a/addons/mrp/process/procurement_process.xml b/addons/mrp/process/procurement_process.xml index 136ae9a86ea..38fdbeecaea 100644 --- a/addons/mrp/process/procurement_process.xml +++ b/addons/mrp/process/procurement_process.xml @@ -170,7 +170,15 @@ + --> + + + + + + + + @@ -215,6 +223,7 @@ + @@ -251,6 +260,7 @@ + @@ -260,6 +270,7 @@ + diff --git a/addons/project_mrp/process/project_mrp_process.xml b/addons/project_mrp/process/project_mrp_process.xml index 2dd89b84add..b9c07b7bf6d 100644 --- a/addons/project_mrp/process/project_mrp_process.xml +++ b/addons/project_mrp/process/project_mrp_process.xml @@ -78,6 +78,7 @@ + - + + + + + + + + + + + + + @@ -104,6 +116,7 @@ + @@ -122,6 +135,7 @@ + From b0a5381dd8ea499bd522fbc4e202bfd133b5bbb5 Mon Sep 17 00:00:00 2001 From: Naresh Choksy Date: Mon, 13 Oct 2008 18:38:08 +0530 Subject: [PATCH 006/143] 1 : put a button [set to draft] when purchase order is cancelled in draft state. 2: removed readonly in confirmed state for order line. 3: kept validation on cancel purchase order validation for pickings and invoices bzr revid: nch@tinyerp.com-20081013130808-3ya3nhjuufuxcf7q --- addons/purchase/purchase.py | 40 +++++++++++++++++++++++++-- addons/purchase/purchase_view.xml | 4 +-- addons/purchase/purchase_workflow.xml | 11 ++++---- 3 files changed, 44 insertions(+), 11 deletions(-) diff --git a/addons/purchase/purchase.py b/addons/purchase/purchase.py index 84074b0a0ae..5fac8eaff20 100644 --- a/addons/purchase/purchase.py +++ b/addons/purchase/purchase.py @@ -154,7 +154,7 @@ class purchase_order(osv.osv): _columns = { 'name': fields.char('Order Reference', size=64, required=True, select=True), - 'origin': fields.char('Origin', size=64, + 'origin': fields.char('Origin', size=64, help="Reference of the document that generated this purchase order request." ), 'partner_ref': fields.char('Partner Ref.', size=64), @@ -173,7 +173,7 @@ class purchase_order(osv.osv): 'pricelist_id':fields.many2one('product.pricelist', 'Pricelist', required=True, states={'confirmed':[('readonly',True)], 'approved':[('readonly',True)]}, help="The pricelist sets the currency used for this purchase order. It also computes the supplier price for the selected products/quantities."), 'state': fields.selection([('draft', 'Request for Quotation'), ('wait', 'Waiting'), ('confirmed', 'Confirmed'), ('approved', 'Approved'),('except_picking', 'Shipping Exception'), ('except_invoice', 'Invoice Exception'), ('done', 'Done'), ('cancel', 'Cancelled')], 'Order Status', readonly=True, help="The state of the purchase order or the quotation request. A quotation is a purchase order in a 'Draft' state. Then the order has to be confirmed by the user, the state switch to 'Confirmed'. Then the supplier must confirm the order to change the state to 'Approved'. When the purchase order is paid and received, the state becomes 'Done'. If a cancel action occurs in the invoice or in the reception of goods, the state becomes in exception.", select=True), - 'order_line': fields.one2many('purchase.order.line', 'order_id', 'Order Lines', states={'confirmed':[('readonly',True)], 'approved':[('readonly',True)]}), + 'order_line': fields.one2many('purchase.order.line', 'order_id', 'Order Lines', states={'approved':[('readonly',True)]}), 'validator' : fields.many2one('res.users', 'Validated by', readonly=True), 'notes': fields.text('Notes'), 'invoice_id': fields.many2one('account.invoice', 'Invoice', readonly=True), @@ -274,6 +274,15 @@ class purchase_order(osv.osv): 'account_analytic_id': ol.account_analytic_id.id, }) + def action_cancel_draft(self, cr, uid, ids, *args): + if not len(ids): + return False + self.write(cr, uid, ids, {'state':'draft','shipped':0}) + wf_service = netsvc.LocalService("workflow") + for p_id in ids: + wf_service.trg_create(uid, 'purchase.order', p_id, cr) + return True + def action_invoice_create(self, cr, uid, ids, *args): res = False for o in self.browse(cr, uid, ids): @@ -327,6 +336,31 @@ class purchase_order(osv.osv): return True return False + def action_cancel(self, cr, uid, ids, context={}): + ok = True + purchase_order_line_obj = self.pool.get('purchase.order.line') + for purchase in self.browse(cr, uid, ids): + for pick in purchase.picking_ids: + if pick.state not in ('draft','cancel'): + raise osv.except_osv( + _('Could not cancel purchase order !'), + _('You must first cancel all packings attached to this purchase order.')) + for r in self.read(cr,uid,ids,['picking_ids']): + for pick in r['picking_ids']: + wf_service = netsvc.LocalService("workflow") + wf_service.trg_validate(uid, 'stock.picking', pick, 'button_cancel', cr) + for inv in purchase.invoice_ids: + if inv.state not in ('draft','cancel'): + raise osv.except_osv( + _('Could not cancel this purchase order !'), + _('You must first cancel all invoices attached to this purchase order.')) + for r in self.read(cr,uid,ids,['invoice_ids']): + for inv in r['invoice_ids']: + wf_service = netsvc.LocalService("workflow") + wf_service.trg_validate(uid, 'account.invoice', inv, 'invoice_cancel', cr) + self.write(cr,uid,ids,{'state':'cancel'}) + return True + def action_picking_create(self,cr, uid, ids, *args): picking_id = False for order in self.browse(cr, uid, ids): @@ -446,7 +480,7 @@ class purchase_order_line(osv.osv): res = {'value': {'price_unit': price, 'name':prod_name, 'taxes_id':prod['supplier_taxes_id'], 'date_planned': dt,'notes':prod['description_purchase'], 'product_uom': uom}} domain = {} - + taxes = self.pool.get('account.tax').browse(cr, uid,prod['supplier_taxes_id']) taxep = None if partner_id: diff --git a/addons/purchase/purchase_view.xml b/addons/purchase/purchase_view.xml index 48a24bee967..1504bd88db9 100644 --- a/addons/purchase/purchase_view.xml +++ b/addons/purchase/purchase_view.xml @@ -63,8 +63,8 @@