diff --git a/models/customer_purchase_order_importer.py b/models/customer_purchase_order_importer.py index bbe624a8e697e3c404b9043a077f1071008257e6..b1836b573562367e35c0af2e45daa0c7dc8d90e9 100644 --- a/models/customer_purchase_order_importer.py +++ b/models/customer_purchase_order_importer.py @@ -33,6 +33,8 @@ class CustomerPurchaseOrderImporter(models.Model): PreSaleOrder = self.env['pre.sale.order'] msg = '' + not_imported_msg = '' + imported = [] not_imported = [] pre_sale_orders = [] @@ -56,15 +58,15 @@ class CustomerPurchaseOrderImporter(models.Model): import_path += 'tmp\\' - files = self._standarize_file_names(import_path, ftp) - for _file in files: - if not _file: + file_names = self._standarize_file_names(import_path, ftp) + for file_name in file_names: + if not file_name: continue - po_vals = {} + order_vals = {} file = BytesIO() - ftp.retrbinary('RETR ' + _file, file.write) + ftp.retrbinary('RETR ' + file_name, file.write) msg_list = [] try: @@ -77,11 +79,11 @@ class CustomerPurchaseOrderImporter(models.Model): file_vals = self.get_full_file_data(lines) if isinstance(file_vals, list): - rejected_file = '' + rejected_file = file_name partner_name = file_vals.pop(-1).replace(' ', '_') - if partner_name not in _file: - rejected_file = _file.replace('ORD_', 'ORD_%s_' % partner_name) + if partner_name not in rejected_file: + rejected_file = rejected_file.replace('ORD_', 'ORD_%s_' % partner_name) msg_list.insert(0, _('FILE: %s\n') % rejected_file) msg_list.extend(file_vals) @@ -90,7 +92,7 @@ class CustomerPurchaseOrderImporter(models.Model): if rejected_file in ftp.nlst(rejected_path): ftp.delete(rejected_path + rejected_file) - ftp.rename(import_path + _file, rejected_path + rejected_file) + ftp.rename(import_path + file_name, rejected_path + rejected_file) continue else: @@ -105,14 +107,14 @@ class CustomerPurchaseOrderImporter(models.Model): config_type = c.config_type try: - po_vals.update( + order_vals.update( getattr(self, 'get_config_{}_vals'.format(config_type))(file_vals) ) except AttributeError: _type = CustomerPurchaseOrderConfig._fields['config_type'].selection config_type_name = dict(_type).get(config_type) - msg_list.insert(0, _('FILE: {}\n').format(_file)) + msg_list.insert(0, _('FILE: {}\n').format(file_name)) msg_list.append( _( '~ No method has been defined for %s. Please contact the developer ' @@ -122,21 +124,27 @@ class CustomerPurchaseOrderImporter(models.Model): ) not_imported.append(''.join(msg_list)) + continue + except Exception as e: + msg_list.insert(0, _('FILE: {}\n').format(file_name)) + msg_list.append(_('~ Error: %s\n') % str(e)) + not_imported.append(''.join(msg_list)) + continue - imported.append(_file) + imported.append(file_name) - po_vals.update(self._update_file_vals(file_vals)) - pre_sale_orders.append(self._refactor_product_vals_before_import(po_vals)) + order_vals.update(self._update_file_vals(file_vals)) + pre_sale_orders.append(self._refactor_product_vals_before_import(order_vals)) - if _file in ftp.nlst(processed_path): - ftp.delete(processed_path + _file) + if file_name in ftp.nlst(processed_path): + ftp.delete(processed_path + file_name) - ftp.rename(import_path + _file, processed_path + _file) + ftp.rename(import_path + file_name, processed_path + file_name) except Exception as e: _logger.error(e) - not_imported.append(_('~ Error importing file %s.\n') % _file) + not_imported.append(_('~ Error importing file %s.\n') % file_name) continue @@ -145,15 +153,14 @@ class CustomerPurchaseOrderImporter(models.Model): if len(not_imported) > 0: not_imported_msg = ''.join(sorted(not_imported)) - - self._create_error_file(ftp, import_path, not_imported_msg) - msg += ( _('The following files have errors that need to be corrected before importing them:\n\n') ) + not_imported_msg PreSaleOrder.create(pre_sale_orders) + self._create_error_file(ftp, import_path, not_imported_msg) + _logger.info(_('Purchase order files import finished!')) if manual_import: @@ -1054,27 +1061,30 @@ class CustomerPurchaseOrderImporter(models.Model): datas = bytes(msg, 'utf-8') today = str(datetime.today().date()) + file_name = '_not_imported_%s.txt' % today.replace('-', '') - name = _('[{}] Rejected Purchase Order Files').format(today) - attachment_id = IrAttachment.search([('name', '=', name)]) + attachment_id = IrAttachment.search([('datas_fname', '=', file_name)], order='id desc', limit=1) if attachment_id: datas += b64decode(attachment_id.datas) + attachment_id.write({'datas': b64encode(datas)}) + + if datas: + ftp.cwd(path) + + file = BytesIO(datas) + ftp.storbinary('STOR ' + file_name, file) + + if not attachment_id: + IrAttachment.create( + { + 'datas_fname': file_name, + 'datas': b64encode(datas), + 'name': _('[%s] Rejected Purchase Order Files') % today, + 'type': 'binary', + } + ) - attachment_id.write({'datas': b64encode(datas), 'name': name}) - - file_name = '_not_imported_{}.txt'.format(today.replace('-', '')) - - ftp.cwd(path) - - file = BytesIO(datas) - ftp.storbinary('STOR ' + file_name, file) - - if not attachment_id: - IrAttachment.create( - {'datas_fname': file_name, 'datas': b64encode(datas), 'name': name, 'type': 'binary'} - ) - - file.close() + file.close() def _create_tmp_files(self, ftp, files, path='/tmp/'): if files: