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
'views/sales.xml',
'views/menus.xml',
'demo/bphtb.sales.csv',
'report/sspd_format_template.xml',
],
'demo': [
'demo/bphtb.sales.csv'
......
......@@ -21,7 +21,7 @@ class BphtbSales(models.Model):
ppat_id = fields.Many2one('res.partner',
default=lambda self: self.env.user.partner_id.id
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_identity_number = fields.Char(related='wp_id.identity_number',
string="No Identitas", store=True)
......@@ -40,7 +40,7 @@ class BphtbSales(models.Model):
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)
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_identity_number = fields.Char(related='wp_id.identity_number',
string="No Identitas", store=True)
......@@ -59,7 +59,11 @@ class BphtbSales(models.Model):
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)
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)
tax_year = fields.Integer()
# kd_propinsi = Column(String(2), nullable=False)
......@@ -90,6 +94,7 @@ class BphtbSales(models.Model):
disc = fields.Float(related='jenis_id.disc', store=True, readonly=True)
npop = fields.Float()
basic_calc = fields.Float(compute="_compute_basic_calc")
npopkp = fields.Float()
basic = fields.Float()
fine = fields.Float()
amount = fields.Float()
......@@ -117,10 +122,15 @@ class BphtbSales(models.Model):
verification_date = fields.Date()
verification_no = fields.Char()
verification_uid = fields.Integer()
printed = fields.Boolean(default=False)
company_id = fields.Many2one('res.company',
default=lambda self: self.env.company.id
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 = [
# ('company_code_uniq', 'unique (company_id, code)', 'Kode harus unik')
# ]
......@@ -146,7 +156,7 @@ class BphtbSales(models.Model):
for key, value in self._get_wp_field_names())
else:
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
def _compute_wp(self):
......@@ -183,39 +193,86 @@ class BphtbSales(models.Model):
for key, value in self._get_seller_field_names())
else:
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
def _compute_seller(self):
if self.seller_id:
for bphtb_sales in self.filtered(lambda bphtb_sales: bphtb_sales.seller_id):
address_data = bphtb_sales.seller_id.sudo().address_get(adr_pref=['wp'])
if address_data['wp']:
partner = bphtb_sales.seller_id.browse(address_data['wp']).sudo()
bphtb_sales.update(bphtb_sales._get_seller_update(partner))
else:
bphtb_sales.update(bphtb_sales._get_seller_update(False))
else:
self.update(self._get_seller_update(False))
for rec in self:
if rec.seller_id:
for bphtb_sales in rec.filtered(lambda bphtb_sales: bphtb_sales.seller_id):
address_data = bphtb_sales.seller_id.sudo().address_get(adr_pref=['wp'])
if address_data['wp']:
partner = bphtb_sales.seller_id.browse(address_data['wp']).sudo()
bphtb_sales.update(bphtb_sales._get_seller_update(partner))
else:
bphtb_sales.update(bphtb_sales._get_seller_update(False))
else:
rec.update(rec._get_seller_update(False))
@api.depends('njop', 'npop', 'min_omzet')
def _compute_basic_calc(self):
if self.npop < self.njop and self.jenis_id.under_value:
self.basic_calc = self.npop
else:
self.basic_calc = self.npop if self.npop > self.njop else self.njop
for rec in self:
if rec.npop < rec.njop and rec.jenis_id.under_value:
rec.basic_calc = rec.npop
else:
rec.basic_calc = rec.npop if rec.npop > rec.njop else rec.njop
@api.depends('disc', 'payment', 'basic_calc')
def _compute_owed(self):
self.basic = (self.basic_calc - self.min_omzet)* self.rate / 100
self.amount = self.basic + self.fine
self.disc_amount = self.disc / 100 * self.amount
self.owed = self.amount - self.disc_amount - self.payment
for rec in self:
rec.npopkp = rec.basic_calc - rec.min_omzet
rec.npopkp = 0 if rec.npopkp < 0 else rec.npopkp
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')
def _compute_njop(self):
self.njop = self.njop_bng + self.njop_bumi + self.njop_bumi_bersama + \
self.njop_bng_bersama
for rec in self:
rec.njop = rec.njop_bng + rec.njop_bumi + rec.njop_bumi_bersama + \
rec.njop_bng_bersama
# @api.depends('njop')
# 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
<odoo>
<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">
<field name="name">bphtb.sspd.tree</field>
<field name="model">bphtb.sales</field>
......@@ -11,6 +31,7 @@
<field name="wp_id" string="Wajib Pajak"/>
<field name="owed" string="Terutang"/>
<field name="state" string="Status"/>
<field name="printed"/>
</tree>
</field>
</record>
......@@ -18,37 +39,64 @@
<field name="name">bphtb.sspd.form</field>
<field name="model">bphtb.sales</field>
<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>
<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>
<field name="nop"/>
<field name="company_id" readonly="1"/>
</h1>
<group>
<field name="tax_year"/>
<field name="request_date"/>
<field name="typ" readonly="1"/>
<field name="ppat_id"/>
<field name="state"/>
<field name="company_id"/>
<field name="ppat_id" readonly="1"/>
<field name="request_date"/>
</group>
<notebook col_span="4">
<page name="op" string="Objek Pajak">
<group>
<group>
<field name="luas_bumi"/>
<field name="luas_bng"/>
<field name="njop_bumi"/>
<field name="njop_bng"/>
</group>
<group>
<field name="luas_bumi_bersama"/>
<field name="luas_bng_bersama"/>
<field name="njop_bumi_bersama"/>
<field name="njop_bng_bersama"/>
<field name="nop" string="NOP"/>
<field name="tax_year" string="Tahun"/>
</group>
<group>
<sheet>
<group>
<group>
<field name="luas_bumi"/>
<field name="luas_bng"/>
<field name="njop_bumi"/>
<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>
</page>
<page name="wp" string="Wajib Pajak">
......@@ -122,6 +170,7 @@
<field name="npop"/>
<field name="basic_calc" readonly="1"/>
<field name="min_omzet"/>
<field name="npopkp"/>
<field name="rate"/>
<field name="basic" readonly="1"/>
<field name="fine" readonly="1"/>
......
......@@ -13,6 +13,15 @@ class Company(models.Model):
'res.company', compute='_compute_address', inverse='_inverse_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(
'res.district', compute='_compute_address', inverse='_inverse_district',
......
......@@ -7,6 +7,11 @@
<field name="inherit_id" ref="base.view_company_form"/>
<field name="priority">4</field>
<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">
<attribute name="invisible">1</attribute>
</xpath>
......
Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!