From 086f8a1b145136fb294101a100fc29ec4d676876 Mon Sep 17 00:00:00 2001 From: resteve Date: Wed, 23 Sep 2015 18:53:24 +0200 Subject: [PATCH] Wizard Export Articoli + XML template py loop --- __init__.py | 6 +- product.py | 69 ++++++++++++-------- product.xml | 29 ++++++++ systemlogics.py | 40 ++++++------ systemlogics.xml | 9 ++- template/IMP_ARTICOLI.xml | 2 +- template/IMP_ORDINI_IN.xml | 2 +- template/IMP_ORDINI_OUT.xml | 2 +- tryton.cfg | 1 + view/systemlogics_modula_articoli_result.xml | 6 ++ 10 files changed, 111 insertions(+), 55 deletions(-) create mode 100644 product.xml create mode 100644 view/systemlogics_modula_articoli_result.xml diff --git a/__init__.py b/__init__.py index 2fea5c6..e8beaf1 100644 --- a/__init__.py +++ b/__init__.py @@ -12,7 +12,11 @@ def register(): SystemLogicsModula, Location, Product, - ProductCode, ShipmentOut, ShipmentInternal, + SystemlogicsModulaArticoli, + SystemlogicsModulaArticoliResult, module='systemlogics_modula', type_='model') + Pool.register( + SystemlogicsModulaArticoli, + module='systemlogics_modula', type_='wizard') diff --git a/product.py b/product.py index e68c8f6..99d65b4 100644 --- a/product.py +++ b/product.py @@ -2,8 +2,11 @@ #The COPYRIGHT file at the top level of this repository contains #the full copyright notices and license terms. from trytond.pool import Pool, PoolMeta +from trytond.model import ModelView, fields +from trytond.wizard import Wizard, StateTransition, StateView, Button +from trytond.transaction import Transaction -__all__ = ['Product', 'ProductCode'] +__all__ = ['Product', 'SystemlogicsModulaArticoli', 'SystemlogicsModulaArticoliResult'] __metaclass__ = PoolMeta @@ -18,7 +21,7 @@ class Product: systemlogics_products = [] for product in products: - if product.code and not product.codes: + if product.code: systemlogics_products.append(product) if systemlogics_products: SystemLogicsModula.imp_articoli(systemlogics_products) @@ -33,43 +36,51 @@ class Product: systemlogics_products = [] actions = iter(args) for products, values in zip(actions, actions): - if values.get('code') and not values.get('codes'): + # generate xml if code or codes changed + if values.get('code') or values.get('codes'): systemlogics_products = products if systemlogics_products: SystemLogicsModula.imp_articoli(systemlogics_products) -class ProductCode: - __name__ = 'product.code' +class SystemlogicsModulaArticoliResult(ModelView): + 'Systemlogics Modula Articoli Result' + __name__ = 'systemlogics.modula.articoli.result' + info = fields.Text('Info', readonly=True) + + +class SystemlogicsModulaArticoli(Wizard): + 'Systemlogics Modula Articoli' + __name__ = 'systemlogics.modula.articoli' + start_state = 'export' + + export = StateTransition() + result = StateView('systemlogics.modula.articoli.result', + 'systemlogics_modula.systemlogics_modula_articoli_result', [ + Button('Close', 'end', 'tryton-close'), + ]) @classmethod - def create(cls, vlist): + def __setup__(cls): + super(SystemlogicsModulaArticoli, cls).__setup__() + cls._error_messages.update({ + 'export_info': 'Export %s product/s (IMP ARTICOLI)', + }) + + def transition_export(self): pool = Pool() - SystemLogicsModula = pool.get('systemlogics.modula') Product = pool.get('product.product') - - codes = super(ProductCode, cls).create(vlist) - - vlist = [v.copy() for v in vlist] - systemlogics_products = set() - for values in vlist: - systemlogics_products.add(values.get('product')) - if systemlogics_products: - products = Product.browse(list(systemlogics_products)) - SystemLogicsModula.imp_articoli(products) - return codes - - @classmethod - def write(cls, *args): - pool = Pool() SystemLogicsModula = pool.get('systemlogics.modula') - Product = pool.get('product.product') - super(ProductCode, cls).write(*args) + products = Product.browse(Transaction().context['active_ids']) + SystemLogicsModula.imp_articoli(products) + self.result.info = self.raise_user_error('export_info', + (len(products)), raise_exception=False) + return 'result' - codes = sum(args[::2], []) - systemlogics_products = set(c.product for c in codes) - if systemlogics_products: - products = Product.browse(list(systemlogics_products)) - SystemLogicsModula.imp_articoli(products) + def default_result(self, fields): + info_ = self.result.info + return { + 'info': info_, + } diff --git a/product.xml b/product.xml new file mode 100644 index 0000000..5d876fe --- /dev/null +++ b/product.xml @@ -0,0 +1,29 @@ + + + + + + + systemlogics.modula.articoli.result + form + systemlogics_modula_articoli_result + + + + Export Products Modula + systemlogics.modula.articoli + product.product + + + form_action + product.product,-1 + + + + + + + + diff --git a/systemlogics.py b/systemlogics.py index e9dcd7c..2958ee0 100644 --- a/systemlogics.py +++ b/systemlogics.py @@ -123,18 +123,17 @@ class SystemLogicsModula(ModelSQL, ModelView): dbname = Transaction().cursor.dbname - for shipment in shipments: - xml = tmpl.generate( - shipment=shipment, type_=type_, datetime=datetime).render() + xml = tmpl.generate( + shipments=shipments, type_=type_, datetime=datetime).render() - with tempfile.NamedTemporaryFile( - dir=systemlogic.path, - prefix='%s-%s-' % (dbname, shipment.code), - suffix='.xml', delete=False) as temp: - temp.write(xml) - logging.getLogger('systemlogics-modula').info( - 'Generated XML %s' % (temp.name)) - temp.close() + with tempfile.NamedTemporaryFile( + dir=systemlogic.path, + prefix='%s-' % (dbname), + suffix='.xml', delete=False) as temp: + temp.write(xml) + logging.getLogger('systemlogics-modula').info( + 'Generated XML %s' % (temp.name)) + temp.close() @classmethod def imp_articoli(self, products): @@ -189,14 +188,13 @@ class SystemLogicsModula(ModelSQL, ModelView): dbname = Transaction().cursor.dbname - for product in products: - xml = tmpl.generate(product=product).render() + xml = tmpl.generate(products=products).render() - with tempfile.NamedTemporaryFile( - dir=systemlogic.path, - prefix='%s-%s-' % (dbname, product.code or product.id), - suffix='.xml', delete=False) as temp: - temp.write(xml) - logging.getLogger('systemlogics-modula').info( - 'Generated XML %s' % (temp.name)) - temp.close() + with tempfile.NamedTemporaryFile( + dir=systemlogic.path, + prefix='%s-' % (dbname), + suffix='.xml', delete=False) as temp: + temp.write(xml.encode('utf-8')) + logging.getLogger('systemlogics-modula').info( + 'Generated XML %s' % (temp.name)) + temp.close() diff --git a/systemlogics.xml b/systemlogics.xml index 2fd7c40..6df8b4c 100644 --- a/systemlogics.xml +++ b/systemlogics.xml @@ -5,12 +5,19 @@ The COPYRIGHT file at the top level of this repository contains the full copyrig - SystemLogics Administration + SystemLogics Modula Administration + + SystemLogics Modula + + + + + - + ${product.code} ${product.rec_name[:100]} ${product.default_uom.symbol} diff --git a/template/IMP_ORDINI_IN.xml b/template/IMP_ORDINI_IN.xml index b116022..002a2f1 100644 --- a/template/IMP_ORDINI_IN.xml +++ b/template/IMP_ORDINI_IN.xml @@ -1,6 +1,6 @@ - + ${shipment.code} ${shipment.reference and shipment.reference[:50]} ${type_} diff --git a/template/IMP_ORDINI_OUT.xml b/template/IMP_ORDINI_OUT.xml index 0302a65..4302007 100644 --- a/template/IMP_ORDINI_OUT.xml +++ b/template/IMP_ORDINI_OUT.xml @@ -1,6 +1,6 @@ - + ${shipment.code} ${shipment.reference and shipment.reference[:50]} ${type_} diff --git a/tryton.cfg b/tryton.cfg index 4a4dd19..8b261a1 100644 --- a/tryton.cfg +++ b/tryton.cfg @@ -10,3 +10,4 @@ xml: systemlogics.xml systemlogics_data.xml location.xml + product.xml diff --git a/view/systemlogics_modula_articoli_result.xml b/view/systemlogics_modula_articoli_result.xml new file mode 100644 index 0000000..935a6ad --- /dev/null +++ b/view/systemlogics_modula_articoli_result.xml @@ -0,0 +1,6 @@ + + +
+ +