1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
|
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 PurchaseOrderMultiUangmuka(models.TransientModel):
_name = 'purchase.order.multi_uangmuka'
_description = 'digunakan untuk membuat Uang Muka Pembelian'
pay_amt = fields.Float(string='Uang Muka', help='berapa nilai yang terbentuk untuk COA Uang Muka Pembelian')
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_uangmukapembelianselected(self):
po_ids = self._context['po_ids']
orders = self.env['purchase.order'].browse(po_ids)
po_is_uangmuka = self.env['purchase.order'].search([
('id', 'in', [x.id for x in orders]),
('is_create_uangmuka', '=', True)
])
for rec in orders:
if rec.is_create_uangmuka:
action = self.env['ir.actions.act_window']._for_xml_id('indoteknik_custom.action_purchase_order_multi_uangmuka2')
action['context'] = {
'order_ids': [data.id for data in po_is_uangmuka]
}
return action
if not self.account_id:
raise UserError('Bank Intransit harus diisi')
if not self.env.user.has_group('account.group_account_manager'):
raise UserError('Hanya Finance yang dapat membuat Uang Muka Pembelian')
current_time = datetime.now()
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
partner_name = orders[0].partner_id.name
if orders[0].partner_id.parent_id:
partner_name = orders[0].partner_id.parent_id.name
order_names = ', '.join([data.name for data in orders]) # Menggabungkan nama order menjadi satu string
ref_label = f'UANG MUKA PEMBELIAN {order_names} {partner_name}'
param_header = {
'ref': ref_label,
'date': current_time,
'journal_id': 11
}
account_move = self.env['account.move'].create([param_header])
debit_entries = []
pay_amt = 0
for order in orders:
_logger.info('Success Create Uang Muka Pembelian %s' % account_move.name)
partner_id = order.partner_id.parent_id.id if order.partner_id.parent_id else order.partner_id.id
partner = order.partner_id.parent_id.name if order.partner_id.parent_id else order.partner_id.name
param_debit = {
'move_id': account_move.id,
'account_id': 669, # uang muka persediaan barang dagang
'partner_id': partner_id,
'currency_id': 12,
'debit': order.amount_total,
'credit': 0,
'name': f'UANG MUKA PEMBELIAN {order.name} {partner}',
}
param_debit_ongkir = {
'move_id': account_move.id,
'account_id': 536, # biaya ongkos kirim
'partner_id': partner_id,
'currency_id': 12,
'debit': self.ongkir_amt,
'credit': 0,
'name': f'UANG MUKA PEMBELIAN {order.name} {partner}',
}
param_debit_selisih = {
'move_id': account_move.id,
'account_id': 561, # selisih pembayaran
'partner_id': partner_id,
'currency_id': 12,
'debit': self.selisih_amt,
'credit': 0,
'name': f'UANG MUKA PEMBELIAN {order.name} {partner}',
}
debit_entries.append(param_debit)
pay_amt += order.amount_total
if is_have_ongkir:
debit_entries.append(param_debit_ongkir)
pay_amt += self.ongkir_amt
if is_have_selisih:
debit_entries.append(param_debit_selisih)
pay_amt += self.selisih_amt
order.is_create_uangmuka = True
order.move_id = account_move.id
param_credit = {
'move_id': account_move.id,
'account_id': self.account_id.id, # bank in transit
'partner_id': partner_id,
'currency_id': 12,
'debit': 0,
'credit': pay_amt,
'name': ref_label,
}
debit_entries.append(param_credit)
# Create all account.move.line entries at once
self.env['account.move.line'].create(debit_entries)
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
}
# def save_multi_create_uang_muka(self):
# account_move = self.create_uangmukapembelianselected(purchase, is_create_uangmuka)
|