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
|
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=lambda self: self._default_account_id(),
)
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')
def _default_account_id(self):
partner_name = self.env.context.get('default_partner_name', '')
domain = [
('name', 'not ilike', 'in transit'),
('name', 'ilike', partner_name)
]
account = self.env['account.account'].search(domain, limit=1)
return account.id if account else 389
@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,
'uangmuka': True,
}
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
}
|