summaryrefslogtreecommitdiff
path: root/indoteknik_custom/views
diff options
context:
space:
mode:
authorIT Fixcomart <it@fixcomart.co.id>2025-09-17 11:27:47 +0000
committerIT Fixcomart <it@fixcomart.co.id>2025-09-17 11:27:47 +0000
commit1fdeef8073eb35b407bb0b3cdb26bf635b3b1629 (patch)
tree9c423f561f8929bdeee06ed707d2e08da9c3f246 /indoteknik_custom/views
parentef9daab07049de822b7137b4a9a5d3f1fba53992 (diff)
parent886c28f6ebf20dcca5252341a8f6b61cd4d89d71 (diff)
Merged in form-sp (pull request #423)
Form sp
Diffstat (limited to 'indoteknik_custom/views')
-rw-r--r--indoteknik_custom/views/ir_sequence.xml9
-rw-r--r--indoteknik_custom/views/letter_receivable.xml190
-rw-r--r--indoteknik_custom/views/letter_receivable_mail_template.xml77
-rw-r--r--indoteknik_custom/views/unpaid_invoice_view.xml96
4 files changed, 372 insertions, 0 deletions
diff --git a/indoteknik_custom/views/ir_sequence.xml b/indoteknik_custom/views/ir_sequence.xml
index 94c2cd07..4b8fec53 100644
--- a/indoteknik_custom/views/ir_sequence.xml
+++ b/indoteknik_custom/views/ir_sequence.xml
@@ -228,5 +228,14 @@
<field name="number_increment">1</field>
<field name="active">True</field>
</record>
+
+ <record id="seq_surat_piutang" model="ir.sequence">
+ <field name="name">Surat Piutang</field>
+ <field name="code">surat.piutang</field>
+ <field name="prefix"></field> <!-- format manual di model -->
+ <field name="padding">3</field>
+ <field name="number_next">1</field>
+ <field name="number_increment">1</field>
+ </record>
</data>
</odoo> \ No newline at end of file
diff --git a/indoteknik_custom/views/letter_receivable.xml b/indoteknik_custom/views/letter_receivable.xml
new file mode 100644
index 00000000..98ea7768
--- /dev/null
+++ b/indoteknik_custom/views/letter_receivable.xml
@@ -0,0 +1,190 @@
+<odoo>
+ <!-- Tree View -->
+ <record id="view_surat_piutang_tree" model="ir.ui.view">
+ <field name="name">surat.piutang.tree</field>
+ <field name="model">surat.piutang</field>
+ <field name="arch" type="xml">
+ <tree string="Surat Piutang">
+ <field name="name"/>
+ <field name="partner_id"/>
+ <field name="perihal"/>
+ <field name="state" widget="badge"
+ decoration-danger="state == 'draft'"
+ decoration-warning="state in ('waiting_approval_sales', 'waiting_approval_pimpinan')"
+ decoration-success="state == 'sent'"/>
+ <field name="send_date"/>
+ <!-- <field name="line_ids" widget="one2many_list"/> -->
+ </tree>
+ </field>
+ </record>
+
+ <!-- Form View -->
+ <record id="view_surat_piutang_form" model="ir.ui.view">
+ <field name="name">surat.piutang.form</field>
+ <field name="model">surat.piutang</field>
+ <field name="arch" type="xml">
+ <form string="Surat Piutang">
+ <header>
+ <field name="state" widget="statusbar" statusbar_visible="draft,waiting_approval_sales,waiting_approval_pimpinan,sent"/>
+ <button name="action_approve"
+ type="object"
+ string="Approve"
+ class="btn-primary"
+ attrs="{'invisible':[('state', '=', 'sent')]}"/>
+ <button name="action_create_next_letter"
+ string="Buat Surat Lanjutan"
+ type="object"
+ class="btn-primary"
+ attrs="{'invisible': ['|', ('state', '!=', 'sent'), ('perihal', '=', 'sp3')]}"/>
+ <!-- <button name="action_send_letter" type="object" string="Email Send" class="btn-primary"/> -->
+ </header>
+ <div class="alert alert-info"
+ role="alert"
+ style="height: 40px; margin-bottom:0px;"
+ attrs="{'invisible':[('state', '!=', 'draft')]}">
+ Selamat Datang di form Pengajuan Surat Piutang, Pastikan data sudah benar sebelum mengajukan approval.
+ </div>
+ <div class="alert alert-info"
+ role="alert"
+ style="height: 40px; margin-bottom:0px;"
+ attrs="{'invisible': ['|', ('perihal', '!=', 'penagihan'), ('state', '!=', 'waiting_approval_pimpinan')]}">
+ <strong>Info!</strong> Surat resmi penagihan telah diajukan &amp; surat otomatis terkirim bila telah di approve.
+ </div>
+ <div class="alert alert-info"
+ role="alert"
+ style="height: 40px; margin-bottom:0px;"
+ attrs="{'invisible':[('state', '!=', 'waiting_approval_sales')]}">
+ <strong>Info!</strong> Surat peringatan piutang ini sedang menunggu persetujuan dari <b>Sales Manager</b>.
+ Silakan hubungi Sales Manager terkait untuk melakukan approval agar proses dapat dilanjutkan ke tahap berikutnya.
+ </div>
+ <div class="alert alert-info"
+ role="alert"
+ style="margin-bottom:0px;"
+ attrs="{'invisible': ['|', ('perihal', '=', 'penagihan'), ('state', '!=', 'waiting_approval_pimpinan')]}">
+ <strong>Info!</strong> Surat peringatan piutang ini sedang menunggu persetujuan dari <b>Pimpinan</b>.
+ Silakan hubungi Pimpinan terkait untuk melakukan approval agar surat dapat terkirim otomatis ke customer.
+ </div>
+ <div class="alert alert-success"
+ role="alert"
+ style="height: 40px; margin-bottom:0px;"
+ attrs="{'invisible': ['|', ('perihal', '!=', 'sp3'), ('state', 'not in', ['draft', 'sent'])]}">
+ Surat Piutang berhasil terkirim dan silahkan klik tombol 'Buat Surat Lanjutan' untuk membuat surat piutang lanjutan.
+ </div>
+ <sheet>
+ <div class="oe_title">
+ <h1>
+ <field name="name" readonly="1"/>
+ </h1>
+ </div>
+ <group colspan="2">
+ <group>
+ <field name="tujuan_nama" attrs="{'readonly':[('state','=','sent')]}"/>
+ <field name="tujuan_email" attrs="{'readonly':[('state','=','sent')]}"/>
+ <field name="perihal" attrs="{'readonly':[('state','=','sent')]}"/>
+ <field name="partner_id" options="{'no_create': True}" attrs="{'readonly':[('state','=','sent')]}"/>
+ </group>
+ <group>
+ <field name="payment_difficulty"/>
+ <field name="sales_person_id"/>
+ <field name="send_date" readonly="1"/>
+ </group>
+ </group>
+ <!-- <group>
+ <button name="action_refresh_lines"
+ string="Refresh Invoices"
+ type="object"
+ class="btn-primary"
+ help="Refresh Invoices agar data tetap update"/>
+ </group> -->
+ <notebook>
+ <page string="Invoice Lines">
+ <div class="alert alert-info"
+ role="alert"
+ style="height: 40px; margin-bottom:0px;">
+ <strong>Info!</strong> Hanya invoice yang dipilih (tercentang) akan disertakan dalam dokumen surat piutang.
+ </div>
+ <!-- Flex container -->
+ <div style="display:flex; justify-content:space-between; align-items:center;">
+ <div>
+ <div>
+ <strong>Grand Total Invoice Terpilih:<br/>Rp.
+ <field name="grand_total"/> (
+ <field name="grand_total_text"/>
+ )
+ </strong>
+ </div>
+ <div>
+ <strong>Periode Invoices Terpilih:
+ <field name="periode_invoices_terpilih"/>
+ </strong>
+ </div>
+ </div>
+ <div>
+ <button name="action_refresh_lines"
+ string="Refresh Invoices"
+ type="object"
+ class="btn-primary"
+ style="margin-left:10px;"
+ help="Refresh Invoices agar data tetap update"/>
+ </div>
+ </div>
+ <field name="line_ids" attrs="{'readonly': [('state', '=', 'sent')]}">
+ <tree editable="bottom" create="false" delete="false">
+ <field name="selected"/>
+ <field name="invoice_id" readonly="1" optional="hide" force_save="1"/>
+ <field name="invoice_number" readonly="1" force_save="1"/>
+ <field name="ref" readonly="1" force_save="1"/>
+ <field name="invoice_date" readonly="1" force_save="1"/>
+ <field name="invoice_date_due" readonly="1" force_save="1"/>
+ <field name="invoice_day_to_due" readonly="1" force_save="1"/>
+ <field name="new_invoice_day_to_due" readonly="1" force_save="1"/>
+ <field name="amount_residual" readonly="1" force_save="1" sum="Grand Total"/>
+ <field name="currency_id" readonly="1" optional="hide" force_save="1"/>
+ <field name="payment_term_id" readonly="1" force_save="1"/>
+ <field name="date_kirim_tukar_faktur" readonly="1" optional="hide" force_save="1"/>
+ <field name="date_terima_tukar_faktur" readonly="1" optional="hide" force_save="1"/>
+ <field name="invoice_user_id" readonly="1" optional="hide" force_save="1"/>
+ <field name="sale_id" readonly="1" optional="hide" force_save="1"/>
+ </tree>
+ </field>
+ </page>
+ </notebook>
+ <div style="font-size:13px; color:#444; line-height:1.5;">
+ Surat piutang akan diterbitkan berdasarkan lama keterlambatan pembayaran.<br/>
+ Pilih invoice yang sesuai dengan kriteria berikut:
+ <ul style="margin:4px 0 0 18px;">
+ <li>Keterlambatan ≥ 45 hari → <em>Surat Resmi Penagihan (tanpa ttd digital &amp; cap stempel pimpinan)</em></li>
+ <li>Keterlambatan ≥ 60 hari → <em>Surat Peringatan Piutang ke-1 </em></li>
+ <li>Keterlambatan ≥ 70 hari → <em>Surat Peringatan Piutang ke-2 </em></li>
+ <li>Keterlambatan ≥ 80 hari → <em>Surat Peringatan Piutang ke-3 </em></li>
+ </ul>
+ </div>
+ </sheet>
+ <div class="oe_chatter">
+ <field name="message_follower_ids" widget="mail_followers"/>
+ <field name="message_ids" widget="mail_thread"/>
+ </div>
+ </form>
+ </field>
+ </record>
+
+ <!-- Menu -->
+ <record id="menu_surat_piutang_root" model="ir.ui.menu">
+ <field name="name">Surat Piutang</field>
+ <field name="parent_id" ref="account.menu_finance"/>
+ <field name="sequence" eval="10"/>
+ </record>
+
+ <record id="action_surat_piutang" model="ir.actions.act_window">
+ <field name="name">Surat Piutang</field>
+ <field name="res_model">surat.piutang</field>
+ <field name="view_mode">tree,form</field>
+ <field name="view_id" ref="view_surat_piutang_tree"/>
+ </record>
+
+ <menuitem id="menu_surat_piutang"
+ name="Surat Piutang"
+ parent="account.menu_finance_receivables"
+ action="action_surat_piutang"
+ sequence="1"/>
+</odoo>
diff --git a/indoteknik_custom/views/letter_receivable_mail_template.xml b/indoteknik_custom/views/letter_receivable_mail_template.xml
new file mode 100644
index 00000000..fa0fbc86
--- /dev/null
+++ b/indoteknik_custom/views/letter_receivable_mail_template.xml
@@ -0,0 +1,77 @@
+<?xml version="1.0" encoding="utf-8"?>
+<odoo>
+ <data noupdate="0">
+ <record id="letter_receivable_mail_template" model="mail.template">
+ <field name="name">Surat Piutang Invoices</field>
+ <field name="model_id" ref="indoteknik_custom.model_surat_piutang"/>
+ <field name="subject"></field>
+ <field name="email_from">finance@indoteknik.co.id</field>
+ <field name="email_to"></field>
+ <field name="body_html" type="html">
+ <div style="font-family:Arial, sans-serif; font-size:13px; color:#333;">
+ <div><b>Dengan hormat,</b></div>
+ <br/>
+ <div>Kepada Yth.</div>
+ <div><b>Manajemen ${object.partner_id.name}</b></div>
+ <br/>
+ <div>
+ Melalui email ini, kami ingin mengingatkan kembali terkait kewajiban pembayaran
+ ${object.partner_id.name} atas transaksi dengan rincian sebagai berikut:
+ </div>
+ <br/>
+
+ <table cellpadding="6" cellspacing="0" width="100%"
+ style="border-collapse:collapse; font-size:12px; border:1px solid #ddd;">
+ <thead>
+ <tr style="background-color:#f2f2f2; text-align:left;">
+ <th style="border:1px solid #ddd;">Invoice Number</th>
+ <th style="border:1px solid #ddd;">Customer</th>
+ <th style="border:1px solid #ddd;">Invoice Date</th>
+ <th style="border:1px solid #ddd;">Due Date</th>
+ <th style="border:1px solid #ddd;">Days To Due</th>
+ <th style="border:1px solid #ddd;">Reference</th>
+ <th style="border:1px solid #ddd;">Amount Due Signed</th>
+ <th style="border:1px solid #ddd;">Payment Terms</th>
+ </tr>
+ </thead>
+ <tbody>
+ <!-- baris invoice akan diinject dari Python -->
+ </tbody>
+ </table>
+
+ <p>
+ Hingga saat ini, kami belum menerima pembayaran atas tagihan tersebut.
+ Mohon konfirmasi dan tindak lanjut dari pihak saudara paling lambat pada
+ tanggal <b>${object.seven_days_after_sent_date}</b> (7 hari setelah email ini dikirimkan).
+ </p>
+
+ <p>
+ Sebagai informasi, kami lampirkan <b>${object.perihal}</b> untuk menjadi perhatian.
+ Jika tidak ada tanggapan atau penyelesaian dalam batas waktu tersebut, kami akan
+ melanjutkan dengan pengiriman surat peringatan berikutnya dan mengambil langkah-langkah
+ penyelesaian sesuai ketentuan yang berlaku.
+ </p>
+
+ <p>
+ Demikian kami sampaikan. Atas perhatian dan kerja samanya, kami ucapkan terima kasih.
+ </p>
+
+ <br/><br/>
+ <p>
+ <b>
+ Best Regards,<br/><br/>
+ Widya R.<br/>
+ Dept. Finance<br/>
+ PT. INDOTEKNIK DOTCOM GEMILANG<br/>
+ <img src="https://erp.indoteknik.com/api/image/ir.attachment/datas/2135765"
+ alt="Indoteknik" style="max-width:18%; height:auto;"/><br/>
+ <a href="https://wa.me/6285716970374" target="_blank">+62-857-1697-0374</a> |
+ <a href="mailto:finance@indoteknik.co.id">finance@indoteknik.co.id</a>
+ </b>
+ </p>
+ </div>
+ </field>
+ <field name="auto_delete" eval="True"/>
+ </record>
+ </data>
+</odoo>
diff --git a/indoteknik_custom/views/unpaid_invoice_view.xml b/indoteknik_custom/views/unpaid_invoice_view.xml
new file mode 100644
index 00000000..e56bbee7
--- /dev/null
+++ b/indoteknik_custom/views/unpaid_invoice_view.xml
@@ -0,0 +1,96 @@
+<odoo>
+ <!-- Tree view -->
+ <record id="view_unpaid_invoice_tree" model="ir.ui.view">
+ <field name="name">unpaid.invoice.view.tree</field>
+ <field name="model">unpaid.invoice.view</field>
+ <field name="arch" type="xml">
+ <tree string="Unpaid Invoices Monitoring" create="false" delete="false" edit="false">
+ <field name="partner_id"/>
+ <field name="invoice_number"/>
+ <field name="ref"/>
+ <field name="invoice_date"/>
+ <field name="date_kirim_tukar_faktur"/>
+ <field name="date_terima_tukar_faktur"/>
+ <field name="payment_term_id"/>
+ <field name="invoice_date_due" widget="badge" decoration-danger="invoice_day_to_due &lt; 0"/>
+ <field name="invoice_day_to_due" readonly="1"/>
+ <field name="new_invoice_day_to_due" readonly="1"/>
+ <field name="amount_total"/>
+ <field name="amount_residual"/>
+ <field name="payment_state" widget="badge"
+ decoration-danger="payment_state == 'not_paid'"
+ decoration-warning="payment_state == 'partial'"/>
+ <field name="invoice_user_id"/>
+ <field name="payment_difficulty" widget="badge"
+ decoration-info="payment_difficulty == 'normal'"
+ decoration-warning="payment_difficulty in ('agak_sulit', 'sulit')"
+ decoration-danger="payment_difficulty == 'bermasalah'"/>
+ </tree>
+ </field>
+ </record>
+
+ <!-- Form view -->
+ <record id="view_unpaid_invoice_form" model="ir.ui.view">
+ <field name="name">unpaid.invoice.view.form</field>
+ <field name="model">unpaid.invoice.view</field>
+ <field name="arch" type="xml">
+ <form string="Unpaid Invoice Detail" create="false" edit="false" delete="false">
+ <sheet>
+ <group>
+ <group>
+ <field name="partner_id"/>
+ <field name="invoice_id"/>
+ <field name="ref"/>
+ <field name="invoice_date"/>
+ <field name="invoice_date_due" widget="badge" decoration-danger="invoice_day_to_due &lt; 0"/>
+ <field name="date_kirim_tukar_faktur"/>
+ <field name="date_terima_tukar_faktur"/>
+ <field name="payment_term_id"/>
+ </group>
+ <group>
+ <field name="sale_id"/>
+ <field name="invoice_user_id"/>
+ <field name="invoice_day_to_due"/>
+ <field name="new_invoice_day_to_due"/>
+ <field name="payment_state" widget="badge"
+ decoration-danger="payment_state == 'not_paid'"
+ decoration-warning="payment_state == 'partial'"/>
+ <field name="amount_total"/>
+ <field name="amount_residual"/>
+ <button name="action_create_surat_piutang"
+ type="object"
+ string="Create Surat Piutang"
+ class="oe_highlight"/>
+ </group>
+ </group>
+ </sheet>
+ </form>
+ </field>
+ </record>
+
+ <record id="view_unpaid_invoice_search" model="ir.ui.view">
+ <field name="name">unpaid.invoice.view.search</field>
+ <field name="model">unpaid.invoice.view</field>
+ <field name="arch" type="xml">
+ <search string="Search Unpaid Invoices">
+ <field name="partner_id"/>
+ <field name="invoice_number"/>
+ </search>
+ </field>
+ </record>
+
+ <!-- Action -->
+ <record id="action_unpaid_invoice_view" model="ir.actions.act_window">
+ <field name="name">Unpaid Invoices Monitoring</field>
+ <field name="res_model">unpaid.invoice.view</field>
+ <field name="view_mode">tree,form</field>
+ <field name="view_id" ref="view_unpaid_invoice_tree"/>
+ <field name="search_view_id" ref="view_unpaid_invoice_search"/>
+ </record>
+
+ <!-- Menu -->
+ <menuitem id="menu_unpaid_invoice_root"
+ name="Unpaid Invoices Monitoring"
+ parent="account.menu_finance_receivables"
+ action="action_unpaid_invoice_view"/>
+</odoo>