summaryrefslogtreecommitdiff
path: root/indoteknik_custom/models
diff options
context:
space:
mode:
authorIT Fixcomart <it@fixcomart.co.id>2023-07-21 07:16:11 +0000
committerIT Fixcomart <it@fixcomart.co.id>2023-07-21 07:16:11 +0000
commite17fdd276c705d0c1f5a4cbe419a1e8f55f0a310 (patch)
tree475c7021b58396dd45237b323415088cb0033fe9 /indoteknik_custom/models
parentbf002b5e297db5f3021b63adf5b60cf00ff4cee8 (diff)
parentce1c11b9be9274cf281a00cc340969f094a698be (diff)
Merged in receipt-bill (pull request #61)
Receipt bill
Diffstat (limited to 'indoteknik_custom/models')
-rw-r--r--indoteknik_custom/models/bill_receipt.py174
1 files changed, 101 insertions, 73 deletions
diff --git a/indoteknik_custom/models/bill_receipt.py b/indoteknik_custom/models/bill_receipt.py
index 39d5f31b..5e03fdce 100644
--- a/indoteknik_custom/models/bill_receipt.py
+++ b/indoteknik_custom/models/bill_receipt.py
@@ -1,95 +1,123 @@
from odoo import models, api, fields
from odoo.exceptions import AccessError, UserError, ValidationError
-from datetime import timedelta, date
+from datetime import timedelta
import logging
_logger = logging.getLogger(__name__)
-class BillReceipt(models.Model):
- _name = "bill.receipt"
- _description = "Bill Receipt"
- _rec_name = 'number'
- number = fields.Char(string='Document No', index=True, copy=False, readonly=True, tracking=True)
- vendor_id = fields.Many2one('res.partner', string="Vendor", required=True)
- document_date = fields.Date(string="Document Date", required=True)
- description = fields.Text(string='Description')
- validated = fields.Boolean(string="Validated", readonly=True)
- bill_line = fields.One2many('bill.receipt.line', 'bill_id', string='Bill Receipt Lines')
+class BillReceipt(models.Model):
+ _name = 'bill.receipt'
+ _description = 'Bill Receipt'
+ _order = 'bill_date desc, id desc'
+
+ number = fields.Char(string='Document No', index=True, copy=False, readonly=True)
+ bill_date = fields.Date(string='Bill Date', required=True)
+ partner_id = fields.Many2one(
+ 'res.partner', string='Vendor',
+ required=True, change_default=True, index=True, tracking=1)
+ bill_line = fields.One2many('bill.receipt.line', 'bill_id', string='Bill Receipt Lines', auto_join=True)
+ # dunning_level = fields.Integer(string='Bill Level', default=30, help='30 hari sebelum jatuh tempo invoice')
+ date_kirim_tukar_faktur = fields.Date(string='Kirim Faktur')
+ resi_tukar_faktur = fields.Char(string='Resi Faktur')
+ date_terima_tukar_faktur = fields.Date(string='Terima Faktur')
+ shipper_faktur_id = fields.Many2one('delivery.carrier', string='Shipper Faktur')
+ is_validated = fields.Boolean(string='Validated')
+ notification = fields.Char(string='Notification')
+
+ def copy_date_faktur(self):
+ if not self.is_validated:
+ raise UserError('Harus di validate dulu')
+ for line in self.bill_line:
+ invoice = line.invoice_id
+ if not invoice.date_kirim_tukar_faktur and self.date_kirim_tukar_faktur:
+ invoice.date_kirim_tukar_faktur = self.date_kirim_tukar_faktur
+ tukar_date = self.date_kirim_tukar_faktur
+ term = invoice.invoice_payment_term_id
+ add_days = 0
+ for line in term.line_ids:
+ add_days += line.days
+ due_date = tukar_date + timedelta(days=add_days)
+ invoice.invoice_date_due = due_date
+ if not invoice.resi_tukar_faktur:
+ invoice.resi_tukar_faktur = self.resi_tukar_faktur
+ if not invoice.date_terima_tukar_faktur and self.date_terima_tukar_faktur:
+ invoice.date_terima_tukar_faktur = self.date_terima_tukar_faktur
+ tukar_date = self.date_terima_tukar_faktur
+ term = invoice.invoice_payment_term_id
+ add_days = 0
+ for line in term.line_ids:
+ add_days += line.days
+ due_date = tukar_date + timedelta(days=add_days)
+ invoice.invoice_date_due = due_date
+ if not invoice.shipper_faktur_id:
+ invoice.shipper_faktur_id = self.shipper_faktur_id
+ self.notification = 'Berhasil copy tanggal terima faktur ke setiap invoice %s' % self.date_terima_tukar_faktur
+
+ def validate_bill(self):
+ if not self.bill_line:
+ raise UserError('Bill Line masih kosong, generate dulu')
+ else:
+ self.is_validated = True
+ self.notification = 'Jangan lupa klik Copy Date jika sudah ada tanggal kirim / tanggal terima faktur'
+
+ def generate_bill_line(self):
+ if self.is_validated:
+ raise UserError('Sudah di validate, tidak bisa digenerate ulang')
+ if self.bill_line:
+ raise UserError('Harus hapus semua line jika ingin generate ulang')
+ if self.partner_id.parent_id:
+ raise UserError('Harus pilih parent company')
+
+ partners = []
+ partners += self.partner_id.child_ids
+ partners.append(self.partner_id)
+
+ for partner in partners:
+ query = [
+ ('move_type', '=', 'in_invoice'),
+ ('state', '=', 'posted'),
+ ('partner_id', '=', partner.id),
+ ('payment_state', '=', 'not_paid'),
+ ('date_kirim_tukar_faktur', '=', False),
+ ]
+ invoices = self.env['account.move'].search(query, order='invoice_date')
+ count = 0
+ for invoice in invoices:
+ self.env['bill.receipt.line'].create([{
+ 'bill_id': self.id,
+ 'partner_id': invoice.partner_id.id,
+ 'invoice_id': invoice.id,
+ 'date_invoice': invoice.invoice_date,
+ 'efaktur_id': invoice.efaktur_id.id,
+ 'reference': invoice.ref,
+ 'total_amt': invoice.amount_total,
+ 'open_amt': invoice.amount_residual_signed,
+ 'due_date': invoice.invoice_date_due
+ }])
+ count += 1
+ _logger.info("Bill Line generated %s" % count)
@api.model
def create(self, vals):
vals['number'] = self.env['ir.sequence'].next_by_code('bill.receipt') or '0'
result = super(BillReceipt, self).create(vals)
return result
-
- def validate_button(self):
- if not self.bill_line:
- raise UserError('Bill receipt line masih kosong')
-
- self.validated = True
- def cancel_button(self):
- if not self.bill_line:
- raise UserError('Bill receipt line masih kosong')
-
- if self.validated != True:
- raise UserError('Document ini belum di validate')
- self.validated = False
-
class BillReceiptLine(models.Model):
_name = 'bill.receipt.line'
_description = 'Bill Receipt Line'
_order = 'bill_id, id'
- bill_id = fields.Many2one('bill.receipt', string='Bill Receipt')
- sale_order_id = fields.Many2one('sale.order', string='Sale Order')
- po_id = fields.Many2one('purchase.order', string='PO')
- user_id = fields.Many2one('res.users', string='Purchase Rep')
- payment_term_id = fields.Many2one('account.payment.term', string='Payment Terms')
- vendor_id = fields.Many2one('res.partner', string='Vendor')
- date_approve = fields.Datetime(string='Confirmation Date')
- date_planned = fields.Datetime(string='Receipt Date')
- amount_untaxed = fields.Float(string='Untaxed Amount')
- amount_total = fields.Float(string='Total')
+ bill_id = fields.Many2one('bill.receipt', string='Bill Ref', required=True, ondelete='cascade', index=True, copy=False)
+ partner_id = fields.Many2one('res.partner', string='Customer')
+ invoice_id = fields.Many2one('account.move', string='Invoice')
+ date_invoice = fields.Date(string='Invoice Date')
+ # due_date = fields.Date(string='Due Date')
+ efaktur_id = fields.Many2one('vit.efaktur', string='Faktur Pajak')
reference = fields.Char(string='Reference')
- partner_ref = fields.Char(string='Vendor Reference')
-
- @api.onchange('po_id')
- def onchange_partner_ref(self):
- self.partner_ref = self.po_id.partner_ref
-
- @api.onchange('po_id')
- def onchange_vendor_id(self):
- self.vendor_id = self.po_id.partner_id
-
- @api.onchange('po_id')
- def onchange_date_approve(self):
- self.date_approve = self.po_id.date_approve
-
- @api.onchange('po_id')
- def onchange_date_planned(self):
- self.date_planned = self.po_id.date_planned
-
- @api.onchange('po_id')
- def onchange_amount_untaxed(self):
- self.amount_untaxed = self.po_id.amount_untaxed
-
- @api.onchange('po_id')
- def onchange_user_id(self):
- self.user_id = self.po_id.user_id
-
- @api.onchange('po_id')
- def onchange_sale_order_id(self):
- self.sale_order_id = self.po_id.sale_order_id
-
- @api.onchange('po_id')
- def onchange_payment_term_id(self):
- self.payment_term_id = self.po_id.payment_term_id
-
- @api.onchange('po_id')
- def onchange_amount_total(self):
- self.amount_total = self.po_id.amount_total
-
+ total_amt = fields.Float(string='Total Amount')
+ open_amt = fields.Float(string='Open Amount')
+ due_date = fields.Date(string='Due Date')