summaryrefslogtreecommitdiff
path: root/indoteknik_custom/models/purchase_order_multi_uangmuka.py
blob: 0570efd94cc486897b47551d05276416017a443a (plain)
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)