summaryrefslogtreecommitdiff
path: root/indoteknik_custom/models/sale_order_multi_uangmuka_penjualan.py
blob: 96c2f6762ca39896fabcba8549d728312f0acf2d (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
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 PurchaseOrderMultiUangmukaPenjualan(models.TransientModel):
    _name = 'sale.order.multi_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 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_uangmukapenjualanselected(self):
        so_ids = self._context['so_ids']
        orders = self.env['sale.order'].browse(so_ids)
        po_is_uangmuka = self.env['sale.order'].search([
            ('id', 'in', [x.id for x in orders])
        ])
    
        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 penjualan')

        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 PENJUALAN {order_names} {partner_name}'
        param_header = {
                'ref': ref_label,
                'date': current_time,
                'journal_id': 11,
                # 'sale_id': order.id,
            }

        account_move = self.env['account.move'].create([param_header])
        debit_entries = []
        pay_amt = 0
        

        for order in orders:
            _logger.info('Success Create Uang Muka P %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_credit = {
                'move_id': account_move.id,
                'account_id': 668, # penerimaan belum alokasi
                'partner_id': partner_id,
                'currency_id': 12,
                'debit': 0,
                'credit': order.amount_total,
                'name': f'UANG MUKA PENJUALAN {order.name} {partner}',
            }
            param_ongkir_credit = {
                'move_id': account_move.id,
                'account_id': 550, # pendapatan ongkos kirim
                'partner_id': partner_id,
                'currency_id': 12,
                'debit': 0,
                'credit': self.ongkir_amt,
                'name': f'UANG MUKA PENJUALAN {order.name} {partner}',
                }
            param_selisih_credit = {
                'move_id': account_move.id,
                'account_id': 561, # selisih pembayaran
                'partner_id': partner_id,
                'currency_id': 12,
                'debit': 0,
                'credit': self.selisih_amt,
                'name': f'UANG MUKA PENJUALAN {order.name} {partner}',
            }

            debit_entries.append(param_credit)
            pay_amt += order.amount_total

            if is_have_ongkir:
                debit_entries.append(param_ongkir_credit)
                pay_amt += self.ongkir_amt

            if is_have_selisih:
                debit_entries.append(param_selisih_credit)
                pay_amt += self.selisih_amt

        param_debit = {
                'move_id': account_move.id,
                'account_id': self.account_id.id, # intransit
                'partner_id': partner_id,
                'currency_id': 12,
                'debit': pay_amt,
                'credit': 0,
                'name': ref_label,
            }

        debit_entries.append(param_debit)

        # 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_uangmukapenjualanselected(purchase, is_create_uangmuka)