Fall 5404, 5403, 5401
parent
a46f55e381
commit
998b1cd90a
|
|
@ -18,13 +18,17 @@
|
||||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
#
|
#
|
||||||
##############################################################################
|
##############################################################################
|
||||||
from odoo import api, fields, models
|
from odoo import api, fields, models, _
|
||||||
|
from odoo.exceptions import UserError
|
||||||
|
|
||||||
|
|
||||||
class AccountInvoiceLine(models.Model):
|
class AccountInvoiceLine(models.Model):
|
||||||
_inherit = 'account.invoice.line'
|
_inherit = 'account.invoice.line'
|
||||||
|
|
||||||
intrastat_id = fields.Many2one(comodel_name='report.intrastat.code', string='Intrastat Code')
|
intrastat_id = fields.Many2one(comodel_name='report.intrastat.code', string='Intrastat Code',
|
||||||
|
compute="_compute_intrastat_id", inverse='_set_intrastat_id')
|
||||||
|
lot_id = fields.Many2one(comodel_name='stock.production.lot', string='Lot')
|
||||||
|
weight = fields.Float(string='Gewicht', compute='_compute_weight')
|
||||||
|
|
||||||
@api.model
|
@api.model
|
||||||
def create(self, vals):
|
def create(self, vals):
|
||||||
|
|
@ -32,6 +36,31 @@ class AccountInvoiceLine(models.Model):
|
||||||
vals.update(intrastat_id=self.env['product.template'].browse(vals['product_id']).intrastat_id.id)
|
vals.update(intrastat_id=self.env['product.template'].browse(vals['product_id']).intrastat_id.id)
|
||||||
return super(AccountInvoiceLine, self).create(vals)
|
return super(AccountInvoiceLine, self).create(vals)
|
||||||
|
|
||||||
|
@api.multi
|
||||||
|
def action_show_lot(self):
|
||||||
|
self.ensure_one()
|
||||||
|
action = self.env.ref('stock.action_production_lot_form').read()[0]
|
||||||
|
action['res_id'] = self.lot_id.id
|
||||||
|
action['view_mode'] = 'form'
|
||||||
|
action['views'] = [(False, 'form')]
|
||||||
|
|
||||||
|
return action
|
||||||
|
|
||||||
|
def _compute_weight(self):
|
||||||
|
for record in self:
|
||||||
|
record.weight = record.lot_id.weight or record.product_id.weight
|
||||||
|
|
||||||
|
def _compute_intrastat_id(self):
|
||||||
|
for record in self:
|
||||||
|
record.intrastat_id = record.lot_id.intrastat_id.id or record.product_id.intrastat_id.id
|
||||||
|
|
||||||
|
def _set_intrastat_id(self):
|
||||||
|
for record in self:
|
||||||
|
if record.lot_id:
|
||||||
|
record.lot_id.intrastat_id = record.intrastat_id.id
|
||||||
|
else:
|
||||||
|
raise UserError(_('Der Intrastrat Code kann nur gesetzt werden wenn ein Lot angegeben wurde.'))
|
||||||
|
|
||||||
|
|
||||||
class AccountPaymentTerm(models.Model):
|
class AccountPaymentTerm(models.Model):
|
||||||
_inherit = 'account.payment.term'
|
_inherit = 'account.payment.term'
|
||||||
|
|
@ -51,7 +80,7 @@ class AccountInvoice(models.Model):
|
||||||
for record in self:
|
for record in self:
|
||||||
_sum = 0
|
_sum = 0
|
||||||
for line in record.invoice_line_ids:
|
for line in record.invoice_line_ids:
|
||||||
_sum += line.product_id.weight * line.quantity
|
_sum += line.weight * line.quantity
|
||||||
record.weight_total = _sum
|
record.weight_total = _sum
|
||||||
|
|
||||||
@api.multi
|
@api.multi
|
||||||
|
|
|
||||||
|
|
@ -56,7 +56,7 @@ class SaleOrder(models.Model):
|
||||||
for record in self:
|
for record in self:
|
||||||
_sum = 0
|
_sum = 0
|
||||||
for line in record.order_line:
|
for line in record.order_line:
|
||||||
_sum += (line.lot_id.weight or line.product_id.weight) * line.product_uom_qty
|
_sum += line.weight * line.product_uom_qty
|
||||||
record.weight_total = _sum
|
record.weight_total = _sum
|
||||||
|
|
||||||
@api.multi
|
@api.multi
|
||||||
|
|
@ -242,7 +242,8 @@ class SaleOrder(models.Model):
|
||||||
@api.model
|
@api.model
|
||||||
def _get_specified_fields(self):
|
def _get_specified_fields(self):
|
||||||
return ['origin', 'client_order_ref', 'note', 'date_order', 'assembled', 'line_id', 'partner_id',
|
return ['origin', 'client_order_ref', 'note', 'date_order', 'assembled', 'line_id', 'partner_id',
|
||||||
'fiscal_position_id', 'user_id', 'payment_term_id', 'partner_delivery_id', 'partner_invoice_id', 'assembly_state']
|
'fiscal_position_id', 'user_id', 'payment_term_id', 'partner_delivery_id', 'partner_invoice_id',
|
||||||
|
'assembly_state']
|
||||||
|
|
||||||
@api.multi
|
@api.multi
|
||||||
def write(self, vals):
|
def write(self, vals):
|
||||||
|
|
@ -330,6 +331,9 @@ class SaleOrderLine(models.Model):
|
||||||
lot_id = fields.Many2one(comodel_name='stock.production.lot', string='Lot')
|
lot_id = fields.Many2one(comodel_name='stock.production.lot', string='Lot')
|
||||||
from_designbox = fields.Boolean(string='Import von Designbox', readonly=True)
|
from_designbox = fields.Boolean(string='Import von Designbox', readonly=True)
|
||||||
product_id = fields.Many2one(domain=[('sale_ok', '=', True), ('can_be_sold_unconfigured', '=', True)])
|
product_id = fields.Many2one(domain=[('sale_ok', '=', True), ('can_be_sold_unconfigured', '=', True)])
|
||||||
|
weight = fields.Float(string='Gewicht', compute='_compute_weight')
|
||||||
|
intrastat_id = fields.Many2one(comodel_name='report.intrastat.code', string='Intrastat Code',
|
||||||
|
compute="_compute_intrastat_id")
|
||||||
|
|
||||||
@api.multi
|
@api.multi
|
||||||
def write(self, vals):
|
def write(self, vals):
|
||||||
|
|
@ -349,3 +353,31 @@ class SaleOrderLine(models.Model):
|
||||||
raise ValidationError(
|
raise ValidationError(
|
||||||
_("Produkt \'%s\' kann nicht zugeordnet werden" % vals['product_id']))
|
_("Produkt \'%s\' kann nicht zugeordnet werden" % vals['product_id']))
|
||||||
return vals
|
return vals
|
||||||
|
|
||||||
|
@api.multi
|
||||||
|
def action_show_lot(self):
|
||||||
|
self.ensure_one()
|
||||||
|
action = self.env.ref('stock.action_production_lot_form').read()[0]
|
||||||
|
action['res_id'] = self.lot_id.id
|
||||||
|
action['view_mode'] = 'form'
|
||||||
|
action['views'] = [(False, 'form')]
|
||||||
|
|
||||||
|
return action
|
||||||
|
|
||||||
|
@api.multi
|
||||||
|
def _compute_weight(self):
|
||||||
|
for record in self:
|
||||||
|
record.weight = record.lot_id.weight or record.product_id.weight
|
||||||
|
|
||||||
|
@api.multi
|
||||||
|
def _compute_intrastat_id(self):
|
||||||
|
for record in self:
|
||||||
|
record.intrastat_id = record.lot_id.intrastat_id.id or record.product_id.intrastat_id.id
|
||||||
|
|
||||||
|
@api.multi
|
||||||
|
def _prepare_invoice_line(self, qty):
|
||||||
|
self.ensure_one()
|
||||||
|
res = super(SaleOrderLine, self)._prepare_invoice_line(qty)
|
||||||
|
|
||||||
|
res['lot_id'] = self.lot_id.id
|
||||||
|
return res
|
||||||
|
|
|
||||||
|
|
@ -27,6 +27,7 @@ class StockProductionLot(models.Model):
|
||||||
|
|
||||||
notes = fields.Text()
|
notes = fields.Text()
|
||||||
weight = fields.Float(string='Gewicht')
|
weight = fields.Float(string='Gewicht')
|
||||||
|
intrastat_id = fields.Many2one(comodel_name='report.intrastat.code', string='Intrastat Nummer (Code)')
|
||||||
image = fields.Binary("Produktbild", attachment=True,
|
image = fields.Binary("Produktbild", attachment=True,
|
||||||
help="Wenn vorhanden, wird dieses Bild in den Angeboten/Aufträgen angedruckt")
|
help="Wenn vorhanden, wird dieses Bild in den Angeboten/Aufträgen angedruckt")
|
||||||
image_medium = fields.Binary("Produktbild (resized)", attachment=True,
|
image_medium = fields.Binary("Produktbild (resized)", attachment=True,
|
||||||
|
|
|
||||||
|
|
@ -9,6 +9,15 @@
|
||||||
<xpath expr="//field[@name='invoice_line_ids']/tree//field[@name='name']" position="after">
|
<xpath expr="//field[@name='invoice_line_ids']/tree//field[@name='name']" position="after">
|
||||||
<field name="intrastat_id"/>
|
<field name="intrastat_id"/>
|
||||||
</xpath>
|
</xpath>
|
||||||
|
|
||||||
|
<xpath expr="//field[@name='invoice_line_ids']/tree//field[@name='product_id']" position="after">
|
||||||
|
<field name="lot_id" options="{'no_open': True}"/>
|
||||||
|
<button name="action_show_lot" string="Lot" type="object" icon="fa-list"
|
||||||
|
attrs="{'invisible': [('lot_id', '=', False)]}" options='{"warn": true}'/>
|
||||||
|
</xpath>
|
||||||
|
<xpath expr="//field[@name='invoice_line_ids']/kanban//field[@name='product_id']" position="after">
|
||||||
|
<field name="lot_id"/>
|
||||||
|
</xpath>
|
||||||
</field>
|
</field>
|
||||||
</record>
|
</record>
|
||||||
|
|
||||||
|
|
@ -24,5 +33,4 @@
|
||||||
</record>
|
</record>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
</odoo>
|
</odoo>
|
||||||
|
|
|
||||||
|
|
@ -26,7 +26,8 @@
|
||||||
<field name="from_designbox"/>
|
<field name="from_designbox"/>
|
||||||
</xpath>
|
</xpath>
|
||||||
<xpath expr="//field[@name='order_line']/tree//field[@name='product_id']" position="after">
|
<xpath expr="//field[@name='order_line']/tree//field[@name='product_id']" position="after">
|
||||||
<field name="lot_id"/>
|
<field name="lot_id" options="{'no_open': True}"/>
|
||||||
|
<button name="action_show_lot" string="Lot" type="object" icon="fa-list" attrs="{'invisible': [('lot_id', '=', False)]}" options='{"warn": true}'/>
|
||||||
<field name="from_designbox"/>
|
<field name="from_designbox"/>
|
||||||
</xpath>
|
</xpath>
|
||||||
<xpath expr="//field[@name='order_line']/kanban//field[@name='product_id']" position="after">
|
<xpath expr="//field[@name='order_line']/kanban//field[@name='product_id']" position="after">
|
||||||
|
|
|
||||||
|
|
@ -8,6 +8,7 @@
|
||||||
<field name="arch" type="xml">
|
<field name="arch" type="xml">
|
||||||
<field name="ref" position="after">
|
<field name="ref" position="after">
|
||||||
<field name="weight"/>
|
<field name="weight"/>
|
||||||
|
<field name="intrastat_id"/>
|
||||||
<field name="notes"/>
|
<field name="notes"/>
|
||||||
</field>
|
</field>
|
||||||
<div class="oe_title" position="before">
|
<div class="oe_title" position="before">
|
||||||
|
|
@ -16,4 +17,8 @@
|
||||||
</field>
|
</field>
|
||||||
</record>
|
</record>
|
||||||
|
|
||||||
|
<record id="stock.view_production_lot_form" model="ir.ui.view">
|
||||||
|
<field name="priority">0</field>
|
||||||
|
</record>
|
||||||
|
|
||||||
</odoo>
|
</odoo>
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,7 @@
|
||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
from odoo import api, models
|
from odoo import api, models, _
|
||||||
|
from odoo.exceptions import ValidationError
|
||||||
|
|
||||||
|
|
||||||
class AccountInvoice(models.AbstractModel):
|
class AccountInvoice(models.AbstractModel):
|
||||||
|
|
@ -21,3 +22,26 @@ class AccountInvoice(models.AbstractModel):
|
||||||
'formatLang': self._formatLang,
|
'formatLang': self._formatLang,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
class AccountInvoiceWithIntrastat(models.AbstractModel):
|
||||||
|
_name = 'report.dp_reports_account.report_invoice_with_intrastat'
|
||||||
|
_inherit = 'report.abstract_report'
|
||||||
|
_template = 'dp_reports_account.report_invoice_with_intrastat'
|
||||||
|
|
||||||
|
@api.model
|
||||||
|
def get_report_values(self, docids, data=None):
|
||||||
|
model = 'account.invoice'
|
||||||
|
docs = self.env[model].browse(docids)
|
||||||
|
for doc in docs:
|
||||||
|
for line in doc.invoice_line_ids:
|
||||||
|
if not line.intrastat_id:
|
||||||
|
raise ValidationError(_('Es muss bei allen Produkten/Lots eine Zolltarifnummer hinterlegt sein!'))
|
||||||
|
return {
|
||||||
|
'doc_ids': docids,
|
||||||
|
'doc_model': model,
|
||||||
|
'docs': docs,
|
||||||
|
'data': data,
|
||||||
|
'field_set_in_lines': self._field_set_in_lines,
|
||||||
|
'formatLang': self._formatLang,
|
||||||
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -125,7 +125,7 @@
|
||||||
<span t-field="invoice_line.quantity"/>
|
<span t-field="invoice_line.quantity"/>
|
||||||
</td>
|
</td>
|
||||||
<td class="text-right">
|
<td class="text-right">
|
||||||
<span t-field="invoice_line.product_id.weight"/>
|
<span t-field="invoice_line.weight"/>
|
||||||
kg
|
kg
|
||||||
</td>
|
</td>
|
||||||
<td class="text-right">
|
<td class="text-right">
|
||||||
|
|
@ -137,11 +137,11 @@
|
||||||
</strong>
|
</strong>
|
||||||
<br/>
|
<br/>
|
||||||
</t>
|
</t>
|
||||||
<span>
|
<span t-if="with_intrastat">
|
||||||
<strong>Zolltarif Nr.:</strong>
|
<strong>Zolltarif Nr.:</strong>
|
||||||
<span t-field="invoice_line.product_id.intrastat_id"/>
|
<span t-field="invoice_line.intrastat_id"/>
|
||||||
</span>
|
|
||||||
<br/>
|
<br/>
|
||||||
|
</span>
|
||||||
<span t-field="invoice_line.name"/>
|
<span t-field="invoice_line.name"/>
|
||||||
</td>
|
</td>
|
||||||
<td rowspan="2" class="text-right">
|
<td rowspan="2" class="text-right">
|
||||||
|
|
@ -238,6 +238,15 @@
|
||||||
</t>
|
</t>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
|
<template id="report_invoice_with_intrastat">
|
||||||
|
<t t-call="web.html_container">
|
||||||
|
<t t-set="with_intrastat" t-value="True"/>
|
||||||
|
<t t-foreach="docs" t-as="o">
|
||||||
|
<t t-call="dp_reports_account.report_invoice_document" t-lang="o.partner_id.lang"/>
|
||||||
|
</t>
|
||||||
|
</t>
|
||||||
|
</template>
|
||||||
|
|
||||||
<record id="account.account_invoices" model="ir.actions.report">
|
<record id="account.account_invoices" model="ir.actions.report">
|
||||||
<field name="paperformat_id" ref="dp_reports.paperformat_a4_european"/>
|
<field name="paperformat_id" ref="dp_reports.paperformat_a4_european"/>
|
||||||
<field name="binding_model_id" eval="False"/>
|
<field name="binding_model_id" eval="False"/>
|
||||||
|
|
@ -248,8 +257,20 @@
|
||||||
<field name="binding_model_id" eval="False"/>
|
<field name="binding_model_id" eval="False"/>
|
||||||
</record>
|
</record>
|
||||||
|
|
||||||
|
<report
|
||||||
|
id="account_invoices_with_intrastat"
|
||||||
|
model="account.invoice"
|
||||||
|
string="Rechnung mit Zolltarifnummer"
|
||||||
|
report_type="qweb-pdf"
|
||||||
|
name="dp_reports_account.report_invoice_with_intrastat"
|
||||||
|
file="dp_reports_account.report_invoice_with_intrastat"
|
||||||
|
attachment="(object.state in ('open','paid')) and ('INV'+(object.number or '').replace('/','')+'.pdf')"
|
||||||
|
print_report_name="(object._get_printed_report_name())"
|
||||||
|
paperformat="dp_reports.paperformat_a4_european"
|
||||||
|
/>
|
||||||
|
|
||||||
<record id="account.account_invoices_without_payment" model="ir.actions.report">
|
<record id="account.account_invoices_without_payment" model="ir.actions.report">
|
||||||
<field name="name">Rechnungen</field>
|
<field name="name">Rechnung ohne Zolltarifnummer</field>
|
||||||
<field name="paperformat_id" ref="dp_reports.paperformat_a4_european"/>
|
<field name="paperformat_id" ref="dp_reports.paperformat_a4_european"/>
|
||||||
</record>
|
</record>
|
||||||
</odoo>
|
</odoo>
|
||||||
|
|
|
||||||
|
|
@ -98,11 +98,8 @@
|
||||||
<td class="text-left">
|
<td class="text-left">
|
||||||
<span t-field="order_line.product_uom_qty"/>
|
<span t-field="order_line.product_uom_qty"/>
|
||||||
</td>
|
</td>
|
||||||
<td t-if="not order_line.lot_id.weight" class="text-right">
|
<td class="text-right">
|
||||||
<span t-field="order_line.product_id.weight"/> kg
|
<span t-field="order_line.weight"/> kg
|
||||||
</td>
|
|
||||||
<td t-if="order_line.lot_id.weight" class="text-right">
|
|
||||||
<span t-field="order_line.lot_id.weight"/> kg
|
|
||||||
</td>
|
</td>
|
||||||
<td class="text-right">
|
<td class="text-right">
|
||||||
</td>
|
</td>
|
||||||
|
|
@ -115,7 +112,7 @@
|
||||||
</t>
|
</t>
|
||||||
<span>
|
<span>
|
||||||
<strong>Zolltarif Nr.:</strong>
|
<strong>Zolltarif Nr.:</strong>
|
||||||
<span t-field="order_line.product_id.intrastat_id"/>
|
<span t-field="order_line.intrastat_id"/>
|
||||||
</span>
|
</span>
|
||||||
<br/>
|
<br/>
|
||||||
<span t-field="order_line.name"/>
|
<span t-field="order_line.name"/>
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue