Commit 9f5dce62 by aa.gusti

penambahan print di sspd bphtb

1 parent 7f7e9479
...@@ -25,6 +25,8 @@ Memudahkan dalam mengelola tagihan kepada wajib pajak atau wajib retribusi ...@@ -25,6 +25,8 @@ Memudahkan dalam mengelola tagihan kepada wajib pajak atau wajib retribusi
'views/sales.xml', 'views/sales.xml',
'views/menus.xml', 'views/menus.xml',
'demo/bphtb.sales.csv', 'demo/bphtb.sales.csv',
'report/sspd_format_template.xml',
], ],
'demo': [ 'demo': [
'demo/bphtb.sales.csv' 'demo/bphtb.sales.csv'
......
...@@ -21,7 +21,7 @@ class BphtbSales(models.Model): ...@@ -21,7 +21,7 @@ class BphtbSales(models.Model):
ppat_id = fields.Many2one('res.partner', ppat_id = fields.Many2one('res.partner',
default=lambda self: self.env.user.partner_id.id default=lambda self: self.env.user.partner_id.id
if not self.ppat_id else False) if not self.ppat_id else False)
wp_id = fields.Many2one('res.partner') wp_id = fields.Many2one('res.partner', required=True)
wp_name = fields.Char(related='wp_id.name', string="Wajib Pajak", store=True) wp_name = fields.Char(related='wp_id.name', string="Wajib Pajak", store=True)
wp_identity_number = fields.Char(related='wp_id.identity_number', wp_identity_number = fields.Char(related='wp_id.identity_number',
string="No Identitas", store=True) string="No Identitas", store=True)
...@@ -40,7 +40,7 @@ class BphtbSales(models.Model): ...@@ -40,7 +40,7 @@ class BphtbSales(models.Model):
wp_email = fields.Char(compute='_compute_wp', string="WP Email", store=False) wp_email = fields.Char(compute='_compute_wp', string="WP Email", store=False)
wp_website = fields.Char(compute='_compute_wp', string="WP Web Site", store=False) wp_website = fields.Char(compute='_compute_wp', string="WP Web Site", store=False)
seller_id = fields.Many2one('res.partner') seller_id = fields.Many2one('res.partner', required=True)
seller_name = fields.Char(related='wp_id.name', string="Wajib Pajak", store=True) seller_name = fields.Char(related='wp_id.name', string="Wajib Pajak", store=True)
seller_identity_number = fields.Char(related='wp_id.identity_number', seller_identity_number = fields.Char(related='wp_id.identity_number',
string="No Identitas", store=True) string="No Identitas", store=True)
...@@ -59,7 +59,11 @@ class BphtbSales(models.Model): ...@@ -59,7 +59,11 @@ class BphtbSales(models.Model):
seller_email = fields.Char(compute='_compute_seller', string="Penjual Email", store=False) seller_email = fields.Char(compute='_compute_seller', string="Penjual Email", store=False)
seller_website = fields.Char(compute='_compute_seller', string="Penjual Web Site", store=False) seller_website = fields.Char(compute='_compute_seller', string="Penjual Web Site", store=False)
state = fields.Char(default='draft') # 0 draft - 1 posted - 2 batal state = fields.Selection([('draft', 'Draft'),
('confirmed', 'Confirmed'),
('canceled', 'Canceled'),
], default='draft')
nop = fields.Char(size=18) nop = fields.Char(size=18)
tax_year = fields.Integer() tax_year = fields.Integer()
# kd_propinsi = Column(String(2), nullable=False) # kd_propinsi = Column(String(2), nullable=False)
...@@ -90,6 +94,7 @@ class BphtbSales(models.Model): ...@@ -90,6 +94,7 @@ class BphtbSales(models.Model):
disc = fields.Float(related='jenis_id.disc', store=True, readonly=True) disc = fields.Float(related='jenis_id.disc', store=True, readonly=True)
npop = fields.Float() npop = fields.Float()
basic_calc = fields.Float(compute="_compute_basic_calc") basic_calc = fields.Float(compute="_compute_basic_calc")
npopkp = fields.Float()
basic = fields.Float() basic = fields.Float()
fine = fields.Float() fine = fields.Float()
amount = fields.Float() amount = fields.Float()
...@@ -117,10 +122,15 @@ class BphtbSales(models.Model): ...@@ -117,10 +122,15 @@ class BphtbSales(models.Model):
verification_date = fields.Date() verification_date = fields.Date()
verification_no = fields.Char() verification_no = fields.Char()
verification_uid = fields.Integer() verification_uid = fields.Integer()
printed = fields.Boolean(default=False)
company_id = fields.Many2one('res.company', company_id = fields.Many2one('res.company',
default=lambda self: self.env.company.id default=lambda self: self.env.company.id
if not self.company_id else False) if not self.company_id else False)
def _my_check_method(self, cr, uid, ids, context=None):
# Your code goes here
return True or False
# _sql_constraints = [ # _sql_constraints = [
# ('company_code_uniq', 'unique (company_id, code)', 'Kode harus unik') # ('company_code_uniq', 'unique (company_id, code)', 'Kode harus unik')
# ] # ]
...@@ -146,7 +156,7 @@ class BphtbSales(models.Model): ...@@ -146,7 +156,7 @@ class BphtbSales(models.Model):
for key, value in self._get_wp_field_names()) for key, value in self._get_wp_field_names())
else: else:
field = dict((key, False) field = dict((key, False)
for key, value in self._get_wp_address_field_names()) for key, value in self._get_wp_field_names())
return field return field
def _compute_wp(self): def _compute_wp(self):
...@@ -183,39 +193,86 @@ class BphtbSales(models.Model): ...@@ -183,39 +193,86 @@ class BphtbSales(models.Model):
for key, value in self._get_seller_field_names()) for key, value in self._get_seller_field_names())
else: else:
field = dict((key, False) field = dict((key, False)
for key, value in self._get_seller_address_field_names()) for key, value in self._get_seller_field_names())
return field return field
def _compute_seller(self): def _compute_seller(self):
if self.seller_id: for rec in self:
for bphtb_sales in self.filtered(lambda bphtb_sales: bphtb_sales.seller_id): if rec.seller_id:
address_data = bphtb_sales.seller_id.sudo().address_get(adr_pref=['wp']) for bphtb_sales in rec.filtered(lambda bphtb_sales: bphtb_sales.seller_id):
if address_data['wp']: address_data = bphtb_sales.seller_id.sudo().address_get(adr_pref=['wp'])
partner = bphtb_sales.seller_id.browse(address_data['wp']).sudo() if address_data['wp']:
bphtb_sales.update(bphtb_sales._get_seller_update(partner)) partner = bphtb_sales.seller_id.browse(address_data['wp']).sudo()
else: bphtb_sales.update(bphtb_sales._get_seller_update(partner))
bphtb_sales.update(bphtb_sales._get_seller_update(False)) else:
else: bphtb_sales.update(bphtb_sales._get_seller_update(False))
self.update(self._get_seller_update(False)) else:
rec.update(rec._get_seller_update(False))
@api.depends('njop', 'npop', 'min_omzet') @api.depends('njop', 'npop', 'min_omzet')
def _compute_basic_calc(self): def _compute_basic_calc(self):
if self.npop < self.njop and self.jenis_id.under_value: for rec in self:
self.basic_calc = self.npop if rec.npop < rec.njop and rec.jenis_id.under_value:
else: rec.basic_calc = rec.npop
self.basic_calc = self.npop if self.npop > self.njop else self.njop else:
rec.basic_calc = rec.npop if rec.npop > rec.njop else rec.njop
@api.depends('disc', 'payment', 'basic_calc') @api.depends('disc', 'payment', 'basic_calc')
def _compute_owed(self): def _compute_owed(self):
self.basic = (self.basic_calc - self.min_omzet)* self.rate / 100 for rec in self:
self.amount = self.basic + self.fine rec.npopkp = rec.basic_calc - rec.min_omzet
self.disc_amount = self.disc / 100 * self.amount rec.npopkp = 0 if rec.npopkp < 0 else rec.npopkp
self.owed = self.amount - self.disc_amount - self.payment rec.basic = rec.npopkp * rec.rate / 100
rec.amount = rec.basic + rec.fine
rec.disc_amount = rec.disc / 100 * rec.amount
rec.owed = rec.amount - rec.disc_amount - rec.payment
@api.depends('njop_bumi_bersama', 'njop_bng_bersama', 'njop_bumi', 'njop_bng') @api.depends('njop_bumi_bersama', 'njop_bng_bersama', 'njop_bumi', 'njop_bng')
def _compute_njop(self): def _compute_njop(self):
self.njop = self.njop_bng + self.njop_bumi + self.njop_bumi_bersama + \ for rec in self:
self.njop_bng_bersama rec.njop = rec.njop_bng + rec.njop_bumi + rec.njop_bumi_bersama + \
rec.njop_bng_bersama
# @api.depends('njop') # @api.depends('njop')
# def njop_change(self): # def njop_change(self):
def action_confirm(self):
self.state = 'confirmed'
def action_cancel(self):
self.state = 'canceled'
def action_draft(self):
self.state = 'draft'
def action_print(self):
if not self.printed:
self.printed = True
data = {
# 'from_date': self.wp_name,
# 'to_date': self.wp_street
}
# docids = self.env['sale.order'].search([]).ids
return self.env.ref('bphtb_kab.action_report_bphtb_sspd').report_action(self) # None, data=data
def name_get(self):
result = []
for record in self:
result.append((record.id, "{} ({})".format(record.wp_name, record.nop)))
return result
def _validate_wp_seller(self):
if self.wp_id == self.seller_id:
raise ValueError("Pembeli dan penjual harus berbeda")
# def create(self, vals, context=None):
# # Your code goes here
# res = super().create(vals, context=context) # 'uid', 'ids', and 'vals'
# self._validate_wp_seller()
# return res
#
# def write(self, vals, context=None):
# # Your code goes here
# res = super().write(vals, context=None)
# # Your code goes here
# self._validate_wp_seller()
# return res
from odoo import api, models
class SspdReport(models.AbstractModel):
_name = 'report.report_bphtb_sspd'
#
@api.model
def _get_report_values(self, docids, data=None):
docs = self.env['bphtb.sales'].browse(docids)
return {
'doc_ids': docids,
'doc_model': 'bphtb.sales',
'docs': docs,
'data': data,
# 'get_something': self.get_something,
}
#
# def get_something(self):
# return 5
<?xml version="1.0" encoding="utf-8" ?>
<odoo>
<data>
<template id="report_bphtb_sspd">
<t t-call="web.html_container">
<t t-foreach="docs" t-as="o">
<t t-call="web.external_layout">
<div class="page">
<h2>SSPD BPHTB</h2>
<p>Nama WP:
<span t-field="o.wp_name"/>
</p>
<p>Alamat:
<span t-field="o.wp_street"/><br/>
<span t-field="o.wp_street2"/><br/>
<span t-field="o.wp_village_id"/><br/>
<span t-field="o.wp_sub_district_id"/><br/>
<span t-field="o.wp_district_id"/><br/>
<span t-field="o.wp_state_id"/>
</p>
</div>
</t>
</t>
</t>
</template>
</data>
</odoo>
\ No newline at end of file \ No newline at end of file
<odoo> <odoo>
<data> <data>
<record id="action_report_bphtb_sspd" model="ir.actions.report">
<field name="name">Format SSPD</field>
<field name="model">bphtb.sales</field>
<field name="report_type">qweb-pdf</field>
<field name="report_name">bphtb_kab.report_bphtb_sspd</field>
<field name="report_file">bphtb_kab.report_bphtb_sspd</field>
<field name="binding_model_id" ref="model_bphtb_sales"/>
<field name="binding_type">report</field>
</record>
<record id="action_report_bphtb_sspd_preview" model="ir.actions.report">
<field name="name">Format SSPD</field>
<field name="model">bphtb.sales</field>
<field name="report_type">qweb-html</field>
<field name="report_name">bphtb_kab.report_bphtb_sspd</field>
<field name="report_file">bphtb_kab.report_bphtb_sspd</field>
<field name="binding_model_id" ref="model_bphtb_sales"/>
<field name="binding_type">report</field>
</record>
<record id="bphtb_sspd_tree" model="ir.ui.view"> <record id="bphtb_sspd_tree" model="ir.ui.view">
<field name="name">bphtb.sspd.tree</field> <field name="name">bphtb.sspd.tree</field>
<field name="model">bphtb.sales</field> <field name="model">bphtb.sales</field>
...@@ -11,6 +31,7 @@ ...@@ -11,6 +31,7 @@
<field name="wp_id" string="Wajib Pajak"/> <field name="wp_id" string="Wajib Pajak"/>
<field name="owed" string="Terutang"/> <field name="owed" string="Terutang"/>
<field name="state" string="Status"/> <field name="state" string="Status"/>
<field name="printed"/>
</tree> </tree>
</field> </field>
</record> </record>
...@@ -18,37 +39,64 @@ ...@@ -18,37 +39,64 @@
<field name="name">bphtb.sspd.form</field> <field name="name">bphtb.sspd.form</field>
<field name="model">bphtb.sales</field> <field name="model">bphtb.sales</field>
<field name="arch" type="xml"> <field name="arch" type="xml">
<form string="Jenis Perolehan" sample="1"> <form string="SSPD" attrs="{'readonly':[('state','!=','draft')]}">
<header>
<button name="action_confirm" string="Confirm" class="oe_highlight"
type="object" groups="bphtb_kab.group_bphtb_ppat"
attrs="{'invisible': [('state', '!=', 'draft')]}"/>
<button name="action_print" string="Print" class="oe_highlight"
type="object" groups="bphtb_kab.group_bphtb_ppat"
attrs="{'invisible': [('state', '!=', 'confirmed')]}"/>
<button name="action_draft" string="Draft" class="oe_highlight"
type="object" groups="bphtb_kab.group_bphtb_ppat"
attrs="{'invisible': ['|',('state', '=', 'draft'), ('printed', '=', True)]}"/>
<button name="action_cancel" string="Cancel" class="oe_highlight"
type="object" groups="bphtb_kab.group_bphtb_ppat"
attrs="{'invisible': ['|',('state', '=', 'draft'), ('printed', '=', True)]}"/>
<button name="%(action_report_bphtb_sspd_preview)d" string="Preview" type="action"/>
<field name="state" widget="statusbar" statusbar_visible="draft,posted"/>
<field name="printed" invisible="1"/>
</header>
<sheet> <sheet>
<label for="nop" string="NOP"/> <widget name="web_ribbon" title="Draft"
attrs="{'invisible': [('state', '!=', 'draft')]}"/>
<widget name="web_ribbon" title="Confirmed"
attrs="{'invisible': [('state', '!=', 'confirmed')]}"/>
<h1> <h1>
<field name="nop"/> <field name="company_id" readonly="1"/>
</h1> </h1>
<group> <group>
<field name="tax_year"/>
<field name="request_date"/>
<field name="typ" readonly="1"/> <field name="typ" readonly="1"/>
<field name="ppat_id"/> <field name="ppat_id" readonly="1"/>
<field name="state"/> <field name="request_date"/>
<field name="company_id"/>
</group> </group>
<notebook col_span="4"> <notebook col_span="4">
<page name="op" string="Objek Pajak"> <page name="op" string="Objek Pajak">
<group> <group>
<group> <field name="nop" string="NOP"/>
<field name="luas_bumi"/> <field name="tax_year" string="Tahun"/>
<field name="luas_bng"/> </group>
<field name="njop_bumi"/> <group>
<field name="njop_bng"/> <sheet>
</group> <group>
<group> <group>
<field name="luas_bumi_bersama"/> <field name="luas_bumi"/>
<field name="luas_bng_bersama"/> <field name="luas_bng"/>
<field name="njop_bumi_bersama"/> <field name="njop_bumi"/>
<field name="njop_bng_bersama"/> <field name="njop_bng"/>
<field name="certicate_no"/>
<field name="certicate_no"/> </group>
</group> <group>
<field name="luas_bumi_bersama"/>
<field name="luas_bng_bersama"/>
<field name="njop_bumi_bersama"/>
<field name="njop_bng_bersama"/>
<field name="njop" string="NJOP"/>
</group>
</group>
</sheet>
</group> </group>
</page> </page>
<page name="wp" string="Wajib Pajak"> <page name="wp" string="Wajib Pajak">
...@@ -122,6 +170,7 @@ ...@@ -122,6 +170,7 @@
<field name="npop"/> <field name="npop"/>
<field name="basic_calc" readonly="1"/> <field name="basic_calc" readonly="1"/>
<field name="min_omzet"/> <field name="min_omzet"/>
<field name="npopkp"/>
<field name="rate"/> <field name="rate"/>
<field name="basic" readonly="1"/> <field name="basic" readonly="1"/>
<field name="fine" readonly="1"/> <field name="fine" readonly="1"/>
......
...@@ -13,6 +13,15 @@ class Company(models.Model): ...@@ -13,6 +13,15 @@ class Company(models.Model):
'res.company', compute='_compute_address', inverse='_inverse_company', 'res.company', compute='_compute_address', inverse='_inverse_company',
string="Company" string="Company"
) )
typ = fields.Selection([
('kab', 'Kabupaten'),
('kabtif', 'Kabupaten Administratif'),
('kota', 'Kota'),
('kotif', 'Kota Administratif'),
('prov', 'Provinsi'),
('provtif', 'Provinsi Administratif'),
],
string='Jenis', required=False)
district_id = fields.Many2one( district_id = fields.Many2one(
'res.district', compute='_compute_address', inverse='_inverse_district', 'res.district', compute='_compute_address', inverse='_inverse_district',
......
...@@ -7,6 +7,11 @@ ...@@ -7,6 +7,11 @@
<field name="inherit_id" ref="base.view_company_form"/> <field name="inherit_id" ref="base.view_company_form"/>
<field name="priority">4</field> <field name="priority">4</field>
<field name="arch" type="xml"> <field name="arch" type="xml">
<xpath expr="//field[@name='name']" position="before">
<h3>
<field name="typ"/>
</h3>
</xpath>
<xpath expr="//field[@name='city']" position="attributes"> <xpath expr="//field[@name='city']" position="attributes">
<attribute name="invisible">1</attribute> <attribute name="invisible">1</attribute>
</xpath> </xpath>
......
Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!