summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAzka Nathan <darizkyfaz@gmail.com>2025-06-16 14:37:23 +0700
committerAzka Nathan <darizkyfaz@gmail.com>2025-06-16 14:37:23 +0700
commit4a65f46a5b7fd1bc48bc04cbf456119332fff0fe (patch)
tree97219770248095c25a673d44dd8d0053d792a0f2
parent55936047e729cadcd462a57c7838f77f7c57ee1a (diff)
uangmuka penjualan and cr schema shipment group
-rwxr-xr-xfixco_custom/__manifest__.py1
-rwxr-xr-xfixco_custom/models/__init__.py1
-rwxr-xr-xfixco_custom/models/sale.py11
-rw-r--r--fixco_custom/models/shipment_group.py52
-rw-r--r--fixco_custom/models/uangmuka_penjualan.py118
-rwxr-xr-xfixco_custom/security/ir.model.access.csv3
-rw-r--r--fixco_custom/views/account_move.xml3
-rwxr-xr-xfixco_custom/views/detail_order.xml2
-rwxr-xr-xfixco_custom/views/sale_order.xml5
-rw-r--r--fixco_custom/views/shipment_group.xml2
-rw-r--r--fixco_custom/views/uangmuka_penjualan.xml33
11 files changed, 229 insertions, 2 deletions
diff --git a/fixco_custom/__manifest__.py b/fixco_custom/__manifest__.py
index 83d085a..ffcbb6a 100755
--- a/fixco_custom/__manifest__.py
+++ b/fixco_custom/__manifest__.py
@@ -27,6 +27,7 @@
'views/stock_picking_shipment_group.xml',
'views/stock_picking_print_picking_list.xml',
'views/print_picking_list.xml',
+ 'views/uangmuka_penjualan.xml',
],
'demo': [],
'css': [],
diff --git a/fixco_custom/models/__init__.py b/fixco_custom/models/__init__.py
index 9eba2c6..6ef28e0 100755
--- a/fixco_custom/models/__init__.py
+++ b/fixco_custom/models/__init__.py
@@ -13,3 +13,4 @@ from . import shipment_group
from . import stock_picking_shipment_group
from . import print_picking_list
from . import stock_picking_print_picking_list
+from . import uangmuka_penjualan
diff --git a/fixco_custom/models/sale.py b/fixco_custom/models/sale.py
index bc7a734..fc46f3d 100755
--- a/fixco_custom/models/sale.py
+++ b/fixco_custom/models/sale.py
@@ -72,3 +72,14 @@ class SaleOrder(models.Model):
}
}
+ def open_form_uangmuka_penjualan(self):
+ return {
+ 'name': _('Create uang muka penjualan'),
+ 'type': 'ir.actions.act_window',
+ 'res_model': 'uangmuka.penjualan',
+ 'view_mode': 'form',
+ 'target': 'new',
+ 'context': {
+ 'so_ids': self.ids,
+ }
+ }
diff --git a/fixco_custom/models/shipment_group.py b/fixco_custom/models/shipment_group.py
index 71d7981..5f6c315 100644
--- a/fixco_custom/models/shipment_group.py
+++ b/fixco_custom/models/shipment_group.py
@@ -13,6 +13,58 @@ class ShipmentGroup(models.Model):
number = fields.Char(string='Document No', index=True, copy=False, readonly=True, tracking=True)
shipment_line = fields.One2many('shipment.group.line', 'shipment_id', string='Shipment Group Lines', auto_join=True)
+ scan_invoice = fields.Char(string="Scan Invoice Marketplace")
+
+ @api.onchange('scan_invoice')
+ def _onchange_scan_invoice(self):
+ if self.scan_invoice:
+ result = self.add_lines_from_scan(self.scan_invoice)
+ self.scan_invoice = False # Reset field setelah scan
+ return result
+
+ def add_lines_from_scan(self, scan_value):
+ self.ensure_one()
+ picking = self.env['stock.picking'].search([
+ ('invoice_mp', '=', scan_value)
+ ], limit=1)
+
+ if not picking:
+ return {
+ 'warning': {
+ 'title': 'Not Found',
+ 'message': f'No picking found with invoice: {scan_value}'
+ }
+ }
+
+ # Cek duplikat
+ existing_lines = self.shipment_line.filtered(lambda l: l.picking_id == picking)
+ if existing_lines:
+ return {
+ 'warning': {
+ 'title': 'Duplicate',
+ 'message': 'This picking has already been added to the shipment group'
+ }
+ }
+
+ # Buat line untuk setiap move
+ created_lines = []
+ for move in picking.move_ids_without_package:
+ line = self.env['shipment.group.line'].create({
+ 'shipment_id': self.id,
+ 'product_id': move.product_id.id,
+ 'carrier': picking.carrier,
+ 'invoice_marketplace': picking.invoice_mp,
+ 'picking_id': picking.id,
+ })
+ created_lines.append(line.id)
+
+ return {
+ 'effect': {
+ 'fadeout': 'slow',
+ 'message': f'Added {len(created_lines)} products from {picking.name}',
+ 'type': 'rainbow_man',
+ }
+ }
@api.model
def create(self, vals):
diff --git a/fixco_custom/models/uangmuka_penjualan.py b/fixco_custom/models/uangmuka_penjualan.py
new file mode 100644
index 0000000..9673bf1
--- /dev/null
+++ b/fixco_custom/models/uangmuka_penjualan.py
@@ -0,0 +1,118 @@
+from odoo import fields, models, _, api
+from odoo.exceptions import UserError
+from datetime import datetime
+from odoo.http import request
+
+import logging, math
+
+_logger = logging.getLogger(__name__)
+
+
+class UangmukaPenjualan(models.TransientModel):
+ _name = 'uangmuka.penjualan'
+ _description = 'digunakan untuk membuat Uang Muka Penjualan'
+
+ pay_amt = fields.Float(string='Uang Muka', help='berapa nilai yang terbentuk untuk COA Uang Muka Penjualan')
+ account_id = fields.Many2one('account.account', string='Bank Intransit', default=389, help='pilih COA intransit bank')
+ ongkir_amt = fields.Float(string='Ongkir', help='masukan nilai yang akan menjadi Pendapatan Ongkos Kirim')
+ selisih_amt = fields.Float(string='Selisih', help='masukan nilai yang akan menjadi Selisih Pembayaran')
+ total_amt = fields.Float(string='Total', help='Total yang akan masuk di journal entries')
+
+ @api.onchange('pay_amt', 'ongkir_amt', 'selisih_amt')
+ def _compute_total_amt(self):
+ for o in self:
+ o.total_amt = o.pay_amt + o.ongkir_amt + o.selisih_amt
+
+ def create_uangmukapenjualan(self):
+ if self.pay_amt <= 0:
+ raise UserError('Payment Amount harus diisi')
+ if not self.account_id:
+ raise UserError('Bank Intransit harus diisi')
+
+ is_have_ongkir = is_have_selisih = False
+
+ if self.ongkir_amt > 0:
+ is_have_ongkir = True
+ if not math.isclose(self.selisih_amt, 0):
+ is_have_selisih = True
+ # elif self.selisih_amt > 0:
+ # is_have_selisih = True
+
+ orders = self.env['sale.order'].browse(self._context.get('active_ids',[]))
+ current_time = datetime.now()
+
+ for order in orders:
+ partner_name = order.partner_id.name
+ if order.partner_id.parent_id:
+ partner_name = order.partner_id.parent_id.name
+ ref_label = 'UANG MUKA PENJUALAN '+order.name+' '+partner_name
+ param_header = {
+ 'ref': ref_label,
+ 'date': current_time,
+ 'journal_id': 24,
+ 'sale_id': order.id,
+ }
+
+ account_move = request.env['account.move'].create([param_header])
+ account_move.sale_id = order.id
+ _logger.info('Success Create Uang Muka Penjualan %s' % account_move.name)
+ if order.partner_id.parent_id:
+ partner_id = order.partner_id.parent_id.id
+ else:
+ partner_id = order.partner_id.id
+
+ param_debit = {
+ 'move_id': account_move.id,
+ 'account_id': self.account_id.id, # intransit
+ 'partner_id': partner_id,
+ 'currency_id': 12,
+ 'debit': self.pay_amt + self.ongkir_amt + self.selisih_amt,
+ 'credit': 0,
+ 'name': ref_label,
+ }
+ # sisa di credit untuk uang muka penjualan, diluar ongkir dan selisih
+ param_credit = {
+ 'move_id': account_move.id,
+ 'account_id': 578, # penerimaan belum alokasi
+ 'partner_id': partner_id,
+ 'currency_id': 12,
+ 'debit': 0,
+ 'credit': self.pay_amt,
+ 'name': ref_label,
+ }
+ param_ongkir_credit = {
+ 'move_id': account_move.id,
+ 'account_id': 488, # pendapatan ongkos kirim
+ 'partner_id': partner_id,
+ 'currency_id': 12,
+ 'debit': 0,
+ 'credit': self.ongkir_amt,
+ 'name': ref_label,
+ }
+ param_selisih_credit = {
+ 'move_id': account_move.id,
+ 'account_id': 767, # selisih pembayaran
+ 'partner_id': partner_id,
+ 'currency_id': 12,
+ 'debit': 0,
+ 'credit': self.selisih_amt,
+ 'name': ref_label,
+ }
+
+ if is_have_ongkir and is_have_selisih:
+ request.env['account.move.line'].create([param_debit, param_credit, param_ongkir_credit, param_selisih_credit])
+ elif is_have_ongkir:
+ request.env['account.move.line'].create([param_debit, param_credit, param_ongkir_credit])
+ elif is_have_selisih:
+ request.env['account.move.line'].create([param_debit, param_credit, param_selisih_credit])
+ else:
+ request.env['account.move.line'].create([param_debit, param_credit])
+ return {
+ 'name': _('Journal Entries'),
+ 'view_mode': 'form',
+ 'res_model': 'account.move',
+ 'target': 'current',
+ 'view_id': False,
+ 'type': 'ir.actions.act_window',
+ 'res_id': account_move.id
+ }
diff --git a/fixco_custom/security/ir.model.access.csv b/fixco_custom/security/ir.model.access.csv
index ef91758..422d603 100755
--- a/fixco_custom/security/ir.model.access.csv
+++ b/fixco_custom/security/ir.model.access.csv
@@ -16,4 +16,5 @@ access_stock_picking_shipment_group,access.stock.picking.shipment_group,model_st
access_bundling_line,access.bundling.line,model_bundling_line,,1,1,1,1
access_print_picking_list,access.shipment.group,model_print_picking_list,,1,1,1,1
access_print_picking_list_line,access.shipment.group.line,model_print_picking_list_line,,1,1,1,1
-access_stock_picking_print_picking_list,access.stock.picking.print_picking_list,model_stock_picking_print_picking_list,,1,1,1,1 \ No newline at end of file
+access_stock_picking_print_picking_list,access.stock.picking.print_picking_list,model_stock_picking_print_picking_list,,1,1,1,1
+access_uangmuka_penjualan,access.uangmuka.penjualan,model_uangmuka_penjualan,,1,1,1,1 \ No newline at end of file
diff --git a/fixco_custom/views/account_move.xml b/fixco_custom/views/account_move.xml
index 97414e6..1157212 100644
--- a/fixco_custom/views/account_move.xml
+++ b/fixco_custom/views/account_move.xml
@@ -6,6 +6,9 @@
<field name="model">account.move</field>
<field name="inherit_id" ref="account.view_move_form"/>
<field name="arch" type="xml">
+ <!-- <field name="ref" position="after">
+ <field name="sale_id" readonly="1" attrs="{'invisible': [('move_type', '!=', 'entry')]}"/>
+ </field> -->
<field name="payment_reference" position="after">
<field name="invoice_marketplace" readonly="1"/>
<field name="transaction_type" readonly="1"/>
diff --git a/fixco_custom/views/detail_order.xml b/fixco_custom/views/detail_order.xml
index 60a335c..3132874 100755
--- a/fixco_custom/views/detail_order.xml
+++ b/fixco_custom/views/detail_order.xml
@@ -24,7 +24,7 @@
<button name="execute_queue"
string="Create Detail Order"
type="object"
- attrs="{'readonly': [('detail_order', '!=', False)]}"
+ attrs="{'invisible': [('detail_order', '!=', False)]}"
/>
<button name="execute_queue_detail"
string="Create SO"
diff --git a/fixco_custom/views/sale_order.xml b/fixco_custom/views/sale_order.xml
index 2b2b000..2fd452e 100755
--- a/fixco_custom/views/sale_order.xml
+++ b/fixco_custom/views/sale_order.xml
@@ -6,6 +6,11 @@
<field name="model">sale.order</field>
<field name="inherit_id" ref="sale.view_order_form"/>
<field name="arch" type="xml">
+ <button id="action_confirm" position="after">
+ <button name="open_form_uangmuka_penjualan"
+ string="UangMuka"
+ type="object" attrs="{'invisible': [('state', '!=', 'sale')]}"/>
+ </button>
<field name="tag_ids" position="after">
<field name="carrier"/>
</field>
diff --git a/fixco_custom/views/shipment_group.xml b/fixco_custom/views/shipment_group.xml
index 4239bea..ed3f4c9 100644
--- a/fixco_custom/views/shipment_group.xml
+++ b/fixco_custom/views/shipment_group.xml
@@ -32,6 +32,8 @@
<group>
<group>
<field name="number" readonly="1"/>
+ <field name="scan_invoice" widget="scan_barcode"
+ placeholder="Scan Invoice Marketplace"/>
</group>
</group>
<notebook>
diff --git a/fixco_custom/views/uangmuka_penjualan.xml b/fixco_custom/views/uangmuka_penjualan.xml
new file mode 100644
index 0000000..447d89b
--- /dev/null
+++ b/fixco_custom/views/uangmuka_penjualan.xml
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="utf-8"?>
+<odoo>
+ <record id="view_uangmuka_penjualan" model="ir.ui.view">
+ <field name="name">Uangmuka Penjualan</field>
+ <field name="model">uangmuka.penjualan</field>
+ <field name="arch" type="xml">
+ <form string="Invoice Sales Order">
+ <p class="oe_grey">
+ Pembuatan semi otomatis Uang Muka Penjualan, mohon dicek kembali
+ </p>
+ <group>
+ <field name="pay_amt"/>
+ <field name="ongkir_amt"/>
+ <field name="selisih_amt"/>
+ <field name="account_id" domain="[('name', 'ilike', 'in transit')]"/>
+ <field name="total_amt" readonly="1"/>
+ </group>
+ <footer>
+ <button name="create_uangmukapenjualan" id="create_uangmukapenjualan" string="Create" type="object" required="1"/>
+ </footer>
+ </form>
+ </field>
+ </record>
+
+ <record id="action_view_uangmuka_penjualan" model="ir.actions.act_window">
+ <field name="name">Create Uang Muka Penjualan</field>
+ <field name="type">ir.actions.act_window</field>
+ <field name="res_model">uangmuka.penjualan</field>
+ <field name="view_mode">form</field>
+ <field name="target">new</field>
+ </record>
+
+</odoo>