Merge branch 'develop' of https://gitlab.datenpol.at/odoo/tz-austria into develop

develop
Andreas Osim 2018-04-05 15:29:32 +02:00
commit dee7324408
23 changed files with 517 additions and 208 deletions

View File

@ -16,11 +16,17 @@ timezone = Europe/Vienna
#dbfilter_test = ['.*',]
show_debug = 1
workers = 0
workers = 4
server_wide_modules = web,base_sparse_field,queue_job
portal_url = https://dev-portal.tzaustria.info/
portal_secret = hH43413$74O0
limit_memory_hard = 2684354560
limit_memory_soft = 2147483648
limit_request = 8192
limit_time_cpu = 60
limit_time_real = 120
[queue_job]
channels = root:4

View File

@ -5,7 +5,7 @@ from urllib.parse import urlparse
host = 'localhost'
port = 8080
db = 'tz-austria_1'
user = 'admin'
user = 'tz-admin'
pw = 'x'
odoo = odoorpc.ODOO(host, port=port)
@ -13,9 +13,10 @@ odoo.login(db, user, pw)
values = {
"name": "Company2",
"street": "Elterleinplatz 11",
"name2": "Unternehmen 2",
"street": "Matzleinsdorferplatz 5",
"street2": "Teststrasse 30",
"zip": 1170,
"zip": 1050,
"city": "Wien",
"country_id": "AT",
"fax": "+43 55567051",
@ -26,17 +27,18 @@ values = {
"email": "company@test.at",
"opt_out": True,
"ref": "A144S4",
"partner_sector_id": "Test",
"partner_sector_id": "ENDKUNDE",
"comment": "comment",
"vat": False,
"lang": "de",
"line_ids": ["12345", "12346"],
"line_ids": ["0000"],
"property_payment_term_id": "15 Tage",
"property_product_pricelist": "EUR",
"date_vat_check": "2017-08-04",
"active": True,
"retail_partner_id": "A144S3",
"retail_partner_id": "004354",
"retailer": False,
"carrier_id": "LKW"
}
res_partner_obj = odoo.env['res.partner']

View File

@ -6,4 +6,9 @@
<field name="type">service</field>
</record>
<record id="product_transport" model="product.template">
<field name="name">Transport</field>
<field name="type">service</field>
</record>
</odoo>

View File

@ -103,3 +103,21 @@ class AccountInvoice(models.Model):
self.ensure_one()
self.sent = True
return self.env.ref('account.account_invoices_without_payment').report_action(self)
@api.model
def _formatLang(self, value, currency=True):
lang = self.partner_id.lang
lang_objs = self.env['res.lang'].search([('code', '=', lang)])
if not lang_objs:
lang_objs = self.env['res.lang'].search([], limit=1)
lang_obj = lang_objs[0]
res = lang_obj.format('%.' + str(2) + 'f', value, grouping=True, monetary=True)
currency_obj = self.currency_id
if currency_obj and currency_obj.symbol and currency:
if currency_obj.position == 'after':
res = '%s %s' % (res, currency_obj.symbol)
elif currency_obj and currency_obj.position == 'before':
res = '%s %s' % (currency_obj.symbol, res)
return res

View File

@ -115,8 +115,6 @@ class Partner(models.Model):
"""
vals = self.with_context(sst_14=True).remove_not_specified_fields(vals)
vals = self.correct_values(vals)
if not vals.get('active', False):
vals['active'] = False
return self.create(vals).id
@api.model
@ -233,6 +231,15 @@ class Partner(models.Model):
else:
raise ValidationError(_("Unternehmen mit Odoo-ID \'%s\' existiert nicht") % vals['company_odoo_id'])
if vals.get('carrier_id', False):
carrier_id = self.env['delivery.carrier'].search([('name', '=', vals['carrier_id'])])
if carrier_id:
vals['property_delivery_carrier_id'] = carrier_id.id
del vals['carrier_id']
else:
raise ValidationError(
_("Die Auslieferungsmethode mit dem Namen \'%s\' existiert nicht") % vals['carrier_id'])
return vals
@api.model
@ -245,7 +252,8 @@ class Partner(models.Model):
elif self.env.context.get('sst_11', False):
common_list.extend(['name', 'ref', 'partner_sector_id', 'comment', 'vat', 'property_payment_term_id',
'property_pricelist_id', 'date_vat_check', 'active', 'property_product_pricelist',
'retail_partner_id', 'retailer', 'info_uid'])
'retail_partner_id', 'retailer', 'info_uid', 'name2', 'carrier_id'])
return common_list
elif self.env.context.get('sst_14', False):
common_list.extend(['firstname', 'lastname', 'midname', 'company_odoo_id', 'portal_id'])
return common_list
@ -296,6 +304,41 @@ class Partner(models.Model):
vals[field] = False
return super(Partner, self).write(vals)
@api.multi
def name_get(self):
res = []
for partner in self:
name = partner.name or ''
if partner.name2:
name += " " + partner.name2
if partner.company_name or partner.parent_id:
if not name and partner.type in ['invoice', 'delivery', 'other']:
name = dict(self.fields_get(['type'])['type']['selection'])[partner.type]
if not partner.is_company:
name = "%s, %s" % (partner.commercial_company_name or partner.parent_id.name, name)
if self._context.get('show_address_only'):
name = partner._display_address(without_company=True)
if self._context.get('show_address'):
name = name + "\n" + partner._display_address(without_company=True)
name = name.replace('\n\n', '\n')
name = name.replace('\n\n', '\n')
if self._context.get('show_email') and partner.email:
name = "%s <%s>" % (name, partner.email)
if self._context.get('html_format'):
name = name.replace('\n', '<br/>')
res.append((partner.id, name))
return res
@api.depends('company_name', 'parent_id.is_company', 'commercial_partner_id.name')
def _compute_commercial_company_name(self):
res = super(Partner, self)._compute_commercial_company_name()
for partner in self:
p = partner.commercial_partner_id
if p.is_company and p.name2:
partner.commercial_company_name += " " + p.name2
return res
class PartnerSector(models.Model):
_name = 'res.partner.sector'

View File

@ -50,7 +50,14 @@ class SaleOrder(models.Model):
positions = fields.Integer(string='Positionen', compute='_compute_positions')
num_items = fields.Integer(string='Anzahl der Artikel', compute='_compute_num_items')
weight_total = fields.Float(string='Gesamtgewicht', compute='_compute_weight_total')
confirmation_nr = fields.Char('Freigabe-Nr.')
confirmation_nr = fields.Char('Freigabenummer')
@api.multi
@api.onchange('partner_invoice_id')
def _onchange_partner_invoice_id(self):
for record in self:
if record.partner_invoice_id.retailer:
record.payment_term_id = record.partner_invoice_id.property_payment_term_id
@api.multi
def _compute_weight_total(self):
@ -147,7 +154,8 @@ class SaleOrder(models.Model):
if not partner.parent_id:
raise ValidationError(
_('Zu dem Kontakt mit der portal-ID %s existiert kein Unternehmen') % vals['portal_id'])
vals['partner_id'] = partner.parent_id.id
partner = partner.parent_id
vals['partner_id'] = partner.id
if not partner:
raise ValidationError(
_("Der Kunde mit der Portal-ID \'%s\' kann nicht zugeordnet werden") % vals['portal_id'])
@ -175,14 +183,17 @@ class SaleOrder(models.Model):
order_line_vals = vals.get('order_lines', False)
vals = self.remove_not_specified_fields(vals)
vals = self.correct_values(vals)
payment_term = partner.property_payment_term_id
if partner.retail_partner_id:
payment_term = partner.retail_partner_id.property_payment_term_id
vals.update({
'partner_id': partner.id,
'fiscal_position_id': partner.property_account_position_id.id,
'user_id': partner.user_id.id,
'payment_term_id': partner.property_payment_term_id.id,
'payment_term_id': payment_term.id,
'partner_shipping_id': delivery_partner.id,
'partner_invoice_id': partner.id,
'incoterm': partner.sale_incoterm_id.id
'incoterm': partner.sale_incoterm_id.id,
'carrier_id': partner.property_delivery_carrier_id.id
})
order_id = self.create(vals)
if attachment_vals:
@ -341,6 +352,24 @@ class SaleOrder(models.Model):
self.name = new_name
return super(SaleOrder, self).action_confirm()
@api.model
def _formatLang(self, value, currency=True):
lang = self.partner_id.lang
lang_objs = self.env['res.lang'].search([('code', '=', lang)])
if not lang_objs:
lang_objs = self.env['res.lang'].search([], limit=1)
lang_obj = lang_objs[0]
res = lang_obj.format('%.' + str(2) + 'f', value, grouping=True, monetary=True)
currency_obj = self.currency_id
if currency_obj and currency_obj.symbol and currency:
if currency_obj.position == 'after':
res = '%s %s' % (res, currency_obj.symbol)
elif currency_obj and currency_obj.position == 'before':
res = '%s %s' % (currency_obj.symbol, res)
return res
class SaleOrderLine(models.Model):
_inherit = 'sale.order.line'
@ -424,27 +453,30 @@ class SaleOrderLine(models.Model):
'name': 'Händlerrabatt {}%'.format(discount),
'intrastat_id': False
})
del vals['discount']
invoice_lines |= self.env['account.invoice.line'].create(vals)
return invoice_lines
@api.multi
def calc_discount(self):
discount = 0.0
context_partner = dict(self.env.context, partner_id=self.order_id.partner_id.id, date=self.order_id.date_order)
context_partner = dict(self.env.context, partner_id=self.order_id.partner_invoice_id.id,
date=self.order_id.date_order)
pricelist_context = dict(context_partner, uom=self.product_uom.id)
price, rule_id = self.order_id.pricelist_id.with_context(pricelist_context).get_product_price_rule(
self.product_id, self.product_uom_qty or 1.0, self.order_id.partner_id)
pricelist_id = self.order_id.partner_invoice_id.property_product_pricelist
price, rule_id = pricelist_id.with_context(pricelist_context).get_product_price_rule(
self.product_id, self.product_uom_qty or 1.0, self.order_id.partner_invoice_id)
new_list_price, currency_id = self.with_context(context_partner)._get_real_price_currency(self.product_id,
rule_id,
self.product_uom_qty,
self.product_uom,
self.order_id.pricelist_id.id)
pricelist_id.id)
if new_list_price != 0:
if self.order_id.pricelist_id.currency_id.id != currency_id:
if pricelist_id.currency_id.id != currency_id:
# we need new_list_price in the same currency as price, which is in the SO's pricelist's currency
new_list_price = self.env['res.currency'].browse(currency_id).with_context(context_partner).compute(
new_list_price, self.order_id.pricelist_id.currency_id)
new_list_price, pricelist_id.currency_id)
discount = (new_list_price - price) / new_list_price * 100
return discount

Binary file not shown.

Before

Width:  |  Height:  |  Size: 17 KiB

After

Width:  |  Height:  |  Size: 13 KiB

View File

@ -12,9 +12,9 @@
class="btn-danger" attrs="{'invisible':[('portal_pending','=',False)]}"/>
</header>
</xpath>
<xpath expr="//h1" position="after">
<xpath expr="//field[@name='parent_id']/.." position="before">
<h3>
<field name="name2" attrs="{'invisible': [('is_company', '=', False)]}"/>
<field name="name2" placeholder="Unternehmen 2"/>
</h3>
</xpath>

View File

@ -6,9 +6,12 @@
<field name="model">sale.order</field>
<field name="inherit_id" ref="sale.view_order_form"/>
<field name="arch" type="xml">
<field name="client_order_ref" position="replace"/>
<field name="origin" position="replace"/>
<field name="payment_term_id" position="after">
<field name="assembled"/>
<field name="line_id"/>
<field name="client_order_ref"/>
<field name="origin"/>
<field name="confirmation_nr"/>
<field name="assembly_state"/>
</field>
<field name="note" position="after">
@ -27,20 +30,56 @@
</xpath>
<xpath expr="//field[@name='order_line']/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}'/>
<button name="action_show_lot" string="Lot" type="object" icon="fa-list"
attrs="{'invisible': [('lot_id', '=', False)]}" options='{"warn": true}'/>
<field name="from_designbox"/>
</xpath>
<xpath expr="//field[@name='order_line']/kanban//field[@name='product_id']" position="after">
<field name="lot_id"/>
<field name="from_designbox"/>
</xpath>
<group name="technical" position="replace">
<group string="Berichtswesen" name="technical">
<field name="origin"/>
</group>
<group name="technical" position="attributes">
<attribute name="groups"/>
<attribute name="string">Berichtswesen</attribute>
</group>
<field name="partner_shipping_id" position="after">
<field name="confirmation_nr"/>
<xpath expr="//group[@name='sales_person']/.." position="attributes">
<attribute name="col">3</attribute>
</xpath>
<xpath expr="//group[@name='sales_person']" position="after">
<group name="production" string="Produktion">
<field name="assembled"/>
<field name="line_id"/>
</group>
</xpath>
<xpath expr="//label[@for='carrier_id']" position="replace"/>
<xpath expr="//div[@name='carrier_selection']" position="replace"/>
<field name="picking_policy" position="after">
<label for="carrier_id"/>
<div name='carrier_selection'>
<div>
<field name="carrier_id" context="{'order_id': id}" class="oe_inline"
options="{'no_create': True, 'no_open': True}"
attrs="{'readonly':[('state','not in',('draft','sent'))]}"/>
<i class="fa fa-check text-success" aria-hidden="true"
attrs="{'invisible':['|','|',('carrier_id','=',False),('state','not in',('draft','sent')),('delivery_rating_success','=',False)]}"/>
</div>
<div>
<field name='delivery_price' widget='monetary' class="oe_inline"
options="{'currency_field': 'currency_id'}" nolabel="1"
attrs="{'invisible': [('carrier_id','=', False)]}" force_save="1"/>
<button name="get_delivery_price" string="Check price" type="object"
class="oe_inline fa fa-arrow-right oe_link"
attrs="{'invisible':['|',('carrier_id','=',False),('state','not in',('draft','sent'))]}"/>
<button name="set_delivery_line" string="Set price" type="object"
class="oe_inline fa fa-arrow-right oe_link"
attrs="{'invisible':['|','|',('carrier_id','=',False),('state','not in',('draft','sent')),('delivery_rating_success','=',False)]}"/>
<field name='delivery_rating_success' invisible="1" force_save="1"/>
</div>
<div class="alert alert-info" role="alert"
attrs="{'invisible': ['|',('carrier_id','=', False),('delivery_message','=',False)]}">
<field name='delivery_message' force_save="1"/>
</div>
</div>
</field>
</field>
</record>

View File

@ -62,10 +62,11 @@ class PortalAssignCompany(models.TransientModel):
partner = self.env['res.partner'].browse(self.env.context.get('active_ids', []))
if not partner:
raise ValidationError(_('Der Partner konnte nicht gefuden werden.'))
if not self.main_partner_id.portal_id:
self.main_partner_id.portal_id = partner.portal_id
self.send_to_portal(self.main_partner_id.portal_id, self.main_partner_id.id)
portal_id = partner.portal_id
partner.unlink()
if not self.main_partner_id.portal_id:
self.main_partner_id.portal_id = portal_id
self.send_to_portal(self.main_partner_id.portal_id, self.main_partner_id.id)
return self.env.ref('base.action_partner_form').read()[0]
return {'type': 'ir.actions.act_window_close'}

View File

@ -40,6 +40,7 @@
'account.payment.term.csv',
'account.payment.term.line.csv',
'res.line.csv',
'delivery.carrier.csv',
],
'installable': True,
'auto_install': False,

View File

@ -0,0 +1,2 @@
"id","name","delivery_type","product_id/id","fixed_price"
"carrier_lkw","LKW","fixed","dp_custom.product_transport","0.0"
1 id name delivery_type product_id/id fixed_price
2 carrier_lkw LKW fixed dp_custom.product_transport 0.0

View File

@ -1,166 +1,188 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<data>
<template id="report_assets_common" inherit_id="web.report_assets_common">
<xpath expr="." position="inside">
<link rel="stylesheet" type="text/less" href="/dp_reports/static/src/less/report_backend.less"/>
<link href="https://fonts.googleapis.com/css?family=Raleway:300,400,700" rel="stylesheet"/>
</xpath>
</template>
<template id="report_assets_common" inherit_id="web.report_assets_common">
<xpath expr="." position="inside">
<link rel="stylesheet" type="text/less" href="/dp_reports/static/src/less/report_backend.less"/>
<link href="https://fonts.googleapis.com/css?family=Raleway:300,400,700" rel="stylesheet"/>
</xpath>
</template>
<template id="external_layout" inherit_id="web.external_layout">
<xpath expr="." position="inside">
<t t-if="company.external_report_layout == 'custom'">
<t t-call="dp_reports.external_layout_custom">
<t t-raw="0"/>
</t>
<template id="external_layout" inherit_id="web.external_layout">
<xpath expr="." position="inside">
<t t-if="company.external_report_layout == 'custom'">
<t t-call="dp_reports.external_layout_custom">
<t t-raw="0"/>
</t>
</xpath>
</template>
</t>
</xpath>
</template>
<template id="external_layout_custom">
<t t-call="dp_reports.external_layout_header"/>
<template id="external_layout_custom">
<t t-call="dp_reports.external_layout_header"/>
<div class="article o_dp_report_layout">
<t t-raw="0"/>
</div>
<div class="article o_dp_report_layout">
<t t-raw="0"/>
</div>
<t t-call="dp_reports.external_layout_footer"/>
</template>
<t t-call="dp_reports.external_layout_footer"/>
</template>
<!-- Report Header Full -->
<template id="external_layout_header">
<div class="header">
<div class="row">
<div class="col-xs-10 header-label">
<p t-if="o._name == 'account.invoice'">
<span t-if="o.type == 'out_invoice' and (o.state == 'open' or o.state == 'paid')">
RECHNUNG
</span>
<span t-if="o.type == 'out_invoice' and o.state == 'draft'">RECHNUNGSENTWURF</span>
<span t-if="o.type == 'out_invoice' and o.state == 'cancel'">STORNIERTE RECHNUNG</span>
<span t-if="o.type == 'out_refund'">GUTSCHRIFT</span>
<span t-if="o.type == 'in_refund'">LIEFERANTENSTORNO</span>
<span t-if="o.type == 'in_invoice'">EINGANGSRECHNUNG</span>
<span t-field="o.number"/>
</p>
<p t-if="o._name == 'sale.order'">
<t t-if="not (env.context.get('proforma', False) or is_pro_forma)">
<span t-if="o.state not in ['draft','sent']">Auftragsbestätigung</span>
<span t-if="o.state in ['draft','sent']">Angebot</span>
</t>
<t t-if="env.context.get('proforma', False) or is_pro_forma">
<span>Proformarechnung</span>
</t>
<span t-field="o.quote_name"/>
</p>
</div>
<div class="col-xs-2 header-logo">
<img t-if="company.logo" t-att-src="'data:image/png;base64,%s' % company.logo.decode()"
style="max-height: 85px;"/>
</div>
<!-- Report Header Full -->
<template id="external_layout_header">
<div class="header">
<div class="row">
<div class="col-xs-8 header-label">
<p t-if="o._name == 'account.invoice'">
<span t-if="o.type == 'out_invoice' and (o.state == 'open' or o.state == 'paid')">
RECHNUNG
</span>
<span t-if="o.type == 'out_invoice' and o.state == 'draft'">RECHNUNGSENTWURF</span>
<span t-if="o.type == 'out_invoice' and o.state == 'cancel'">STORNIERTE RECHNUNG</span>
<span t-if="o.type == 'out_refund'">GUTSCHRIFT</span>
<span t-if="o.type == 'in_refund'">LIEFERANTENSTORNO</span>
<span t-if="o.type == 'in_invoice'">EINGANGSRECHNUNG</span>
<span t-field="o.number"/>
</p>
<p t-if="o._name == 'sale.order'">
<t t-if="not (env.context.get('proforma', False) or is_pro_forma)">
<span t-if="o.state not in ['draft','sent']">Auftragsbestätigung</span>
<span t-if="o.state in ['draft','sent']">Angebot</span>
</t>
<t t-if="env.context.get('proforma', False) or is_pro_forma">
<span>Proformarechnung</span>
</t>
<span t-field="o.quote_name"/>
</p>
</div>
<div class="row mt16">
<hr class="red-line-1"/>
<div class="col-xs-4 header-logo">
<img t-if="company.logo" t-att-src="'data:image/png;base64,%s' % company.logo.decode()"
style="max-height: 85px;"/>
</div>
</div>
</template>
<div class="row mt16">
<hr class="red-line-1"/>
</div>
</div>
</template>
<template id="external_layout_footer">
<div class="footer">
<div class="row">
<hr class="red-line-1"/>
</div>
<div class="row" style="padding-left:0;">
<div class="col-xs-12 text-center">
<strong>
<span t-esc="company.name"/>
&#183;
<span t-esc="company.street"/>
&#183;
<span t-esc="company.zip"/>
<span t-esc="company.city"/>
&#183;
<span t-esc="company.phone"/>
&#183;
<span t-esc="company.email"/>
&#183;
<span t-esc="company.website"/>
</strong>
</div>
</div>
<div class="row">
<div class="col-xs-12 text-center">
<strong>
IBAN:
<!-- <span t-if="company.bank_ids" t-esc="company.bank_ids[0].acc_number"/> -->
<span>AT463 250 100 002 009 306</span>
&#183;
BIC:
<!-- <span t-if="company.bank_ids" t-esc="company.bank_ids[0].bank_id.bic"/> -->
<span>RLN WAT WW MIB</span>
&#183;
<!-- <span t-if="company.bank_ids" t-esc="company.bank_ids[0].bank_id.name"/> -->
<span>Raiffeisenbank Spannberg</span>
&#183;
UID-Nr.:
<span t-esc="company.vat"/>
&#183;
EORI-Nr.
<span t-esc="company.eori_nr"/>
&#183;
Firmenbuch Nr.:
<span t-esc="company.company_registry"/>
</strong>
</div>
</div>
<div class="row">
<div class="col-xs-12 text-right">
<ul class="list-inline">
<li>Seite:</li>
<li>
<span class="page"/>
</li>
<li>/</li>
<li>
<span class="topage"/>
</li>
</ul>
</div>
<template id="external_layout_footer">
<div class="footer">
<div class="row">
<hr class="red-line-1"/>
</div>
<div class="row" style="padding-left:0;">
<div class="col-xs-12 text-center">
<strong>
<span t-esc="company.name"/>
&#183;
<span t-esc="company.street"/>
&#183;
<span t-esc="company.zip"/>
<span t-esc="company.city"/>
&#183;
<span t-esc="company.phone"/>
&#183;
<span t-esc="company.email"/>
&#183;
<span t-esc="company.website"/>
</strong>
</div>
</div>
</template>
<div class="row">
<div class="col-xs-12 text-center">
<strong>
IBAN:
<!-- <span t-if="company.bank_ids" t-esc="company.bank_ids[0].acc_number"/> -->
<span>AT463 250 100 002 009 306</span>
&#183;
BIC:
<!-- <span t-if="company.bank_ids" t-esc="company.bank_ids[0].bank_id.bic"/> -->
<span>RLN WAT WW MIB</span>
&#183;
<!-- <span t-if="company.bank_ids" t-esc="company.bank_ids[0].bank_id.name"/> -->
<span>Raiffeisenbank Spannberg</span>
&#183;
UID-Nr.:
<span t-esc="company.vat"/>
&#183;
EORI-Nr.
<span t-esc="company.eori_nr"/>
&#183;
Firmenbuch Nr.:
<span t-esc="company.company_registry"/>
</strong>
</div>
</div>
<div class="row">
<div class="col-xs-12 text-right">
<ul class="list-inline">
<li>Seite:</li>
<li>
<span class="page"/>
</li>
<li>/</li>
<li>
<span class="topage"/>
</li>
</ul>
</div>
</div>
</div>
</template>
<template id="company_data">
<t t-set="company" t-value="res_company"/>
<template id="company_data">
<t t-set="company" t-value="res_company"/>
<strong>
<span t-esc="company.partner_id.name"/>
</strong>
<div class="company-data">
<span t-esc="company.partner_id.street"/>
<br/>
<span t-esc="company.partner_id.zip"/>
<span t-esc="company.partner_id.city"/>
<br/>
<span t-esc="company.partner_id.country_id.name"/>
<br/>
<br/>
Phone:
<span t-esc="company.partner_id.phone"/>
<br/>
Fax: +43 2538/8628 - 400
<br/>
E-Mail:
<span t-esc="company.partner_id.email"/>
<br/>
</div>
<div>
<strong>
<span t-esc="company.partner_id.name"/>
<span t-esc="company.partner_id.website"/>
</strong>
<div class="company-data">
<span t-esc="company.partner_id.street"/><br/>
<span t-esc="company.partner_id.zip"/><span t-esc="company.partner_id.city"/><br/>
<span t-esc="company.partner_id.country_id.name"/><br/><br/>
Phone: <span t-esc="company.partner_id.phone"/><br/>
Fax: +43 2538/8628 - 400<br/>
E-Mail: <span t-esc="company.partner_id.email"/><br/>
</div>
<div>
<strong><span t-esc="company.partner_id.website"/></strong>
</div>
</template>
<template id="partner_data">
<strong>
Kundendaten
</strong>
<div class="partner-data">
<span t-esc="o.partner_id.name"/><br/>
<span t-esc="o.partner_id.street"/><br/>
<span t-esc="o.partner_id.zip"/> <span t-esc="o.partner_id.city"/><br/>
<span t-esc="o.partner_id.country_id.name"/><br/>
<span t-esc="o.partner_id.email"/><br/>
<span t-esc="o.partner_id.phone"/>
</div>
</template>
</data>
</div>
</template>
<template id="partner_data">
<strong>
Kundendaten
</strong>
<div class="partner-data">
<span t-esc="o.partner_id.name"/>
<br/>
<t t-if="o.partner_id.name2">
<span t-esc="o.partner_id.name2"/>
<br/>
</t>
<span t-esc="o.partner_id.street"/>
<br/>
<span t-esc="o.partner_id.zip"/>
<span t-esc="o.partner_id.city"/>
<br/>
<span t-esc="o.partner_id.country_id.name"/>
<br/>
<span t-esc="o.partner_id.email"/>
<br/>
<span t-esc="o.partner_id.phone"/>
</div>
</template>
</odoo>

View File

@ -88,9 +88,9 @@
<thead class="table-header">
<tr>
<th class="text-center">Pos.</th>
<th class="text-center">Anzahl</th>
<th class="text-tight">Anzahl</th>
<th class="text-right">Gewicht</th>
<th class="text-right"></th>
<th class="text-right"/>
<th class="text-left">Artikel</th>
<th class="text-right">EP</th>
<th class="text-right" t-if="discount_is_set">Rabatt</th>
@ -104,7 +104,12 @@
<tr t-if="layout_category['name'] != 'Uncategorized'">
<td colspan="6">
<strong>
<t t-esc="layout_category['name']"/> - <t t-esc="o.partner_id.ref"/><t t-if="layout_category['confirmation_nr']"> - <t t-esc="layout_category['confirmation_nr']"/></t>
<t t-esc="layout_category['name']"/>
-
<t t-esc="o.partner_id.name"/>
<t t-if="layout_category['confirmation_nr']">-
<t t-esc="layout_category['confirmation_nr']"/>
</t>
</strong>
</td>
<td class="text-right" t-if="discount_is_set"/>
@ -122,15 +127,14 @@
<span t-esc="pos_nr"/>
</td>
<td class="text-right">
<span t-field="invoice_line.quantity"/>
<span t-esc="o._formatLang(invoice_line.quantity, False).strip('0').strip(',')"/>
</td>
<td class="text-right">
<span t-field="invoice_line.weight"/>
kg
</td>
<td class="text-right">
</td>
<td rowspan="2" class="text-left">
<td class="text-right"/>
<td class="text-left">
<t t-if="invoice_line.product_id.default_code">
<strong>
<span t-field="invoice_line.product_id.default_code"/>
@ -144,25 +148,16 @@
</span>
<span t-field="invoice_line.name"/>
</td>
<td rowspan="2" class="text-right">
<td class="text-right">
<span t-field="invoice_line.price_unit"/>
</td>
<td rowspan="2" class="text-right" t-if="discount_is_set">
<td class="text-right" t-if="discount_is_set">
<span t-field="invoice_line.discount"/>
</td>
<td rowspan="2" class="text-right">
<td class="text-right">
<span t-field="invoice_line.price_subtotal"/>
</td>
</tr>
<tr>
<td colspan="4" style="border: 0;text-align: center;">
<!-- Fall 5078, Rechnung - keine Bilder mehr
<img t-if="invoice_line.product_id.image_medium"
t-att-src="'data:image/png;base64,%s' % invoice_line.product_id.image_medium.decode()"/>
-->
</td>
</tr>
</t>
</t>
</tbody>
@ -267,7 +262,7 @@
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">
<field name="name">Rechnung ohne Zolltarifnummer</field>

View File

@ -78,9 +78,9 @@
<thead class="table-header">
<tr>
<th class="text-center">Pos.</th>
<th class="text-center">Anzahl</th>
<th class="text-right">Anzahl</th>
<th class="text-right">Gewicht</th>
<th class="text-right"></th>
<th class="text-right"/>
<th class="text-left">Artikel</th>
<th class="text-right">EP</th>
<th class="text-right" t-if="discount_is_set">Rabatt</th>
@ -95,8 +95,8 @@
<td class="text-center">
<span t-esc="pos_nr"/>
</td>
<td class="text-left">
<span t-field="order_line.product_uom_qty"/>
<td class="text-right">
<span t-esc="o._formatLang(order_line.product_uom_qty, False).strip('0').strip(',')"/>
</td>
<td class="text-right">
<span t-field="order_line.weight"/> kg

View File

@ -0,0 +1,27 @@
Odoo Proprietary License v1.0
This software and associated files (the "Software") may only be used (executed,
modified, executed after modifications) if you have purchased a valid license
from the authors, typically via Odoo Apps, or if you have received a written
agreement from the authors of the Software (see the COPYRIGHT file).
You may develop Odoo modules that use the Software as a library (typically by
depending on it, importing it and using its resources), but without copying any
source code or material from the Software. You may distribute those modules
under the license of your choice, provided that this license is compatible with
the terms of the Odoo Proprietary License (For example: LGPL, MIT,
or proprietary licenses similar to this one).
It is forbidden to publish, distribute, sublicense, or sell copies of the Software
or modified copies of the Software.
The above copyright notice and this permission notice must be included
in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
DEALINGS IN THE SOFTWARE.

View File

View File

@ -0,0 +1,21 @@
# -*- coding: utf-8 -*-
# Copyright 2018-Today datenpol gmbh(<http://www.datenpol.at>)
# License OPL-1 or later (https://www.odoo.com/documentation/user/11.0/legal/licenses/licenses.html#licenses).
# noinspection PyStatementEffect
{
'name': 'Dp Style',
'version': '11.0.1.0.0',
'license': 'OPL-1',
'author': 'datenpol gmbh',
'website': 'https://www.datenpol.at',
'depends': [
'web',
],
'data': [
'views/assets.xml',
],
'installable': True,
'auto_install': False,
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

View File

@ -0,0 +1,85 @@
@odoo-brand-primary: #a72523;
@odoo-brand-optional: #a72523;
@navbar-default-color: #a72523;
@brand-primary: #a72523;
@navbar-default-bg: #ffffff;
@odoo-control-panel-background-color: #ffffff;
@odoo-control-panel-border-color: #a72523;
@table-bg-accent: #eee;
.navbar-default {
.navbar-collapse {
.fa {
color: @navbar-default-color;
}
}
}
.o_web_client {
>.o_main {
> .o_main_content {
> .o_content {
background-color: #eee;
}
}
}
}
.main-nav > .container-fluid .o_sub_menu > .o_sub_menu_content > .oe_secondary_menu > li.app-name > .oe_menu_text {
color: #a72523;
}
.o_control_panel {
border-bottom: 1px solid @odoo-control-panel-border-color;
}
.o_mail_chat {
.o_mail_chat_content {
background-color: #eee;
}
}
.o_dashboards {
.o_website_dashboard {
.o_dashboard_common {
.o_box {
background-color: #eee;
}
}
}
}
.o_list_view {
background-color: #eee;
thead {
background-color: #9e9e9e;
color: #fff;
}
}
.o_form_view {
.oe_button_box {
.oe_stat_button {
.o_button_icon {
color: @brand-primary;
}
}
}
}
.o_field_widget {
&.o_field_many2one .o_external_button {
color: @brand-primary;
}
}
/*
.o_required_modifier {
&.o_input, .o_input {
background-color: lighten(@brand-primary, 50%) !important;
}
}
*/

View File

@ -0,0 +1,10 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<template id="assets_backend" name="dp_style assets" inherit_id="web.assets_backend">
<xpath expr="." position="inside">
<link rel="stylesheet" type="text/less" href="/dp_style/static/src/less/variables.less"/>
</xpath>
</template>
</odoo>

View File

@ -67,8 +67,8 @@ odoo_config_geoip_database: /usr/share/GeoIP/GeoLiteCity.dat
odoo_config_http_enable: True # >= 11.0
odoo_config_http_interface: '' # >= 11.0
odoo_config_http_port: 8069 # >= 11.0
odoo_config_limit_memory_hard: 805306368
odoo_config_limit_memory_soft: 671088640
odoo_config_limit_memory_hard: 2684354560
odoo_config_limit_memory_soft: 2147483648
odoo_config_limit_time_cpu: 60
odoo_config_limit_time_real: 120
odoo_config_limit_time_real_cron: -1 # >= 10.0