diff options
| -rw-r--r-- | fixco_custom/models/reordering_rule.py | 2 | ||||
| -rw-r--r-- | fixco_custom/models/upload_payments.py | 106 |
2 files changed, 64 insertions, 44 deletions
diff --git a/fixco_custom/models/reordering_rule.py b/fixco_custom/models/reordering_rule.py index 7f945b6..9f37da6 100644 --- a/fixco_custom/models/reordering_rule.py +++ b/fixco_custom/models/reordering_rule.py @@ -121,6 +121,8 @@ class ReorderingRule(models.Model): + vmsbm.incoming_qty - vmsbm.outgoing_qty ) > vmsbm.buffer_stock THEN 'READY STOCK' + + ELSE 'READY STOCK' END AS stock_status FROM view_buffer_stock_below_min vmsbm diff --git a/fixco_custom/models/upload_payments.py b/fixco_custom/models/upload_payments.py index 7761ce6..f66a2ab 100644 --- a/fixco_custom/models/upload_payments.py +++ b/fixco_custom/models/upload_payments.py @@ -15,6 +15,7 @@ class UploadPayments(models.Model): user_id = fields.Many2one('res.users', string='Created By', copy=False, default=lambda self: self.env.user.id) excel_file = fields.Binary('Excel File', attachment=True) filename = fields.Char('File Name') + state = fields.Selection([('draft', 'Draft'), ('running', 'Running'), ('done', 'Done')], default='draft') @api.model def create(self, vals): @@ -65,50 +66,41 @@ class UploadPayments(models.Model): } def action_create_payments(self): - """Membuat payment untuk semua lines yang belum memiliki payment""" - self.ensure_one() - created_payments = [] - - for line in self.payments_lines.filtered(lambda l: not l.payment_id): - invoice = self.env['account.move'].search([ - ('invoice_marketplace', '=', line.no_invoice), - ('state', '=', 'posted'), - ('payment_state', '!=', 'paid'), - ]) - - for move in invoice: - move._register_payment_automatically(line.date_invoice) + self.state = 'running' def queue_job(self, limit=100): - self.date_upload = fields.Datetime.now() + payments = self.env['upload.payments'].search([ ('state', '=', 'running') ], limit=1, orderby='id asc') + + for payment in payments: + payment.date_upload = fields.Datetime.now() - lines = self.payments_lines.filtered( - lambda l: not l.payment_id and not l.is_queued - )[:limit] + lines = payment.payments_lines.filtered( + lambda l: not l.payment_id and not l.is_queued + )[:limit] - existing_jobs = self.env['queue.job'].search([ - ('model_name', '=', 'upload.payments.line'), - ('method_name', '=', 'action_create_payments'), - ('res_id', 'in', lines.ids), - ('state', '!=', 'error'), - ]) + existing_jobs = self.env['queue.job'].search([ + ('model_name', '=', 'upload.payments.line'), + ('method_name', '=', 'action_create_payments'), + ('res_id', 'in', lines.ids), + ('state', '!=', 'error'), + ]) - existing_res_ids = set(existing_jobs.mapped('res_id')) + existing_res_ids = set(existing_jobs.mapped('res_id')) - for line in lines: - if line.id in existing_res_ids: - continue + for line in lines: + if line.id in existing_res_ids: + continue - self.env['queue.job'].create({ - 'name': f'Upload Payments {line.no_bu}', - 'model_name': 'upload.payments.line', - 'method_name': 'action_create_payments', - 'res_id': line.id, - }) - - line.is_queued = True - self.env.cr.commit() + self.env['queue.job'].create({ + 'name': f'Upload Payments {line.no_bu}', + 'model_name': 'upload.payments.line', + 'method_name': 'action_create_payments', + 'res_id': line.id, + }) + + line.is_queued = True + self.env.cr.commit() class UploadPaymentsLine(models.Model): @@ -126,11 +118,37 @@ class UploadPaymentsLine(models.Model): def action_create_payments(self): self.ensure_one() - invoice = self.env['account.move'].search([ - ('invoice_marketplace', '=', self.no_invoice), - ('state', '=', 'posted'), - ('payment_state', '!=', 'paid'), - ]) - - for move in invoice: - move._register_payment_automatically(self.date_invoice)
\ No newline at end of file + try: + invoice = self.env['account.move'].search([ + ('invoice_marketplace', '=', self.no_invoice), + ('state', '=', 'posted'), + ('payment_state', '!=', 'paid'), + ], limit=1) + + if not invoice: + raise ValidationError('Invoice tidak ditemukan / sudah lunas') + + payment = invoice._register_payment_automatically(self.date_invoice) + + self.payment_id = payment.id + self.message_error = 'DONE' + + except Exception as e: + self.message_error = str(e) + + finally: + self._check_parent_done() + + def _check_parent_done(self): + upload = self.upload_payments_id + if not upload: + return + + unfinished = upload.payments_lines.filtered( + lambda l: not l.payment_id and not l.message_error + ) + + if not unfinished: + upload.state = 'done' + + |
