[MERGE] forward port branch saas-11.3 up to 2de573440e

This commit is contained in:
Christophe Simonis
2018-09-17 19:40:47 +02:00
43 changed files with 539 additions and 276 deletions
+3 -3
View File
@@ -174,14 +174,14 @@ class BarcodeRule(models.Model):
barcode_nomenclature_id = fields.Many2one('barcode.nomenclature', string='Barcode Nomenclature')
sequence = fields.Integer(string='Sequence', help='Used to order rules such that rules with a smaller sequence match first')
encoding = fields.Selection([
('any', _('Any')),
('any', 'Any'),
('ean13', 'EAN-13'),
('ean8', 'EAN-8'),
('upca', 'UPC-A'),
], string='Encoding', required=True, default='any', help='This rule will apply only if the barcode is encoded with the specified encoding')
type = fields.Selection([
('alias', _('Alias')),
('product', _('Unit Product'))
('alias', 'Alias'),
('product', 'Unit Product')
], string='Type', required=True, default='product')
pattern = fields.Char(string='Barcode Pattern', size=32, help="The barcode matching pattern", required=True, default='.*')
alias = fields.Char(string='Alias', size=32, default='0', help='The matched pattern will alias to this barcode', required=True)
+51 -43
View File
@@ -371,52 +371,60 @@ class Lead(models.Model):
for lead in self:
stage_id = lead._stage_find(domain=[('probability', '=', 100.0), ('on_change', '=', True)])
lead.write({'stage_id': stage_id.id, 'probability': 100})
if lead.user_id and lead.team_id and lead.planned_revenue:
query = """
SELECT
SUM(CASE WHEN user_id = %(user_id)s THEN 1 ELSE 0 END) as total_won,
MAX(CASE WHEN date_closed >= CURRENT_DATE - INTERVAL '30 days' AND user_id = %(user_id)s THEN planned_revenue ELSE 0 END) as max_user_30,
MAX(CASE WHEN date_closed >= CURRENT_DATE - INTERVAL '7 days' AND user_id = %(user_id)s THEN planned_revenue ELSE 0 END) as max_user_7,
MAX(CASE WHEN date_closed >= CURRENT_DATE - INTERVAL '30 days' AND team_id = %(team_id)s THEN planned_revenue ELSE 0 END) as max_team_30,
MAX(CASE WHEN date_closed >= CURRENT_DATE - INTERVAL '7 days' AND team_id = %(team_id)s THEN planned_revenue ELSE 0 END) as max_team_7
FROM crm_lead
WHERE
type = 'opportunity'
AND
active = True
AND
probability = 100
AND
DATE_TRUNC('year', date_closed) = DATE_TRUNC('year', CURRENT_DATE)
AND
(user_id = %(user_id)s OR team_id = %(team_id)s)
"""
lead.env.cr.execute(query, {'user_id': lead.user_id.id,
'team_id': lead.team_id.id})
query_result = self.env.cr.dictfetchone()
message = False
if query_result['total_won'] == 1:
message = _('Go, go, go! Congrats for your first deal.')
elif query_result['max_team_30'] == lead.planned_revenue:
message = _('Boom! Team record for the past 30 days.')
elif query_result['max_team_7'] == lead.planned_revenue:
message = _('Yeah! Deal of the last 7 days for the team.')
elif query_result['max_user_30'] == lead.planned_revenue:
message = _('You just beat your personal record for the past 30 days.')
elif query_result['max_user_7'] == lead.planned_revenue:
message = _('You just beat your personal record for the past 7 days.')
return True
if message:
return {
'effect': {
'fadeout': 'slow',
'message': message,
'img_url': '/web/image/%s/%s/image' % (lead.team_id.user_id._name, lead.team_id.user_id.id) if lead.team_id.user_id.image else '/web/static/src/img/smile.svg',
'type': 'rainbow_man',
}
@api.multi
def action_set_won_rainbowman(self):
self.ensure_one()
self.action_set_won()
if self.user_id and self.team_id and self.planned_revenue:
query = """
SELECT
SUM(CASE WHEN user_id = %(user_id)s THEN 1 ELSE 0 END) as total_won,
MAX(CASE WHEN date_closed >= CURRENT_DATE - INTERVAL '30 days' AND user_id = %(user_id)s THEN planned_revenue ELSE 0 END) as max_user_30,
MAX(CASE WHEN date_closed >= CURRENT_DATE - INTERVAL '7 days' AND user_id = %(user_id)s THEN planned_revenue ELSE 0 END) as max_user_7,
MAX(CASE WHEN date_closed >= CURRENT_DATE - INTERVAL '30 days' AND team_id = %(team_id)s THEN planned_revenue ELSE 0 END) as max_team_30,
MAX(CASE WHEN date_closed >= CURRENT_DATE - INTERVAL '7 days' AND team_id = %(team_id)s THEN planned_revenue ELSE 0 END) as max_team_7
FROM crm_lead
WHERE
type = 'opportunity'
AND
active = True
AND
probability = 100
AND
DATE_TRUNC('year', date_closed) = DATE_TRUNC('year', CURRENT_DATE)
AND
(user_id = %(user_id)s OR team_id = %(team_id)s)
"""
self.env.cr.execute(query, {'user_id': self.user_id.id,
'team_id': self.team_id.id})
query_result = self.env.cr.dictfetchone()
message = False
if query_result['total_won'] == 1:
message = _('Go, go, go! Congrats for your first deal.')
elif query_result['max_team_30'] == self.planned_revenue:
message = _('Boom! Team record for the past 30 days.')
elif query_result['max_team_7'] == self.planned_revenue:
message = _('Yeah! Deal of the last 7 days for the team.')
elif query_result['max_user_30'] == self.planned_revenue:
message = _('You just beat your personal record for the past 30 days.')
elif query_result['max_user_7'] == self.planned_revenue:
message = _('You just beat your personal record for the past 7 days.')
if message:
return {
'effect': {
'fadeout': 'slow',
'message': message,
'img_url': '/web/image/%s/%s/image' % (self.team_id.user_id._name, self.team_id.user_id.id) if self.team_id.user_id.image else '/web/static/src/img/smile.svg',
'type': 'rainbow_man',
}
return True
}
return True
@api.multi
def action_schedule_meeting(self):
+1 -1
View File
@@ -433,7 +433,7 @@
<field name="arch" type="xml">
<form string="Opportunities" class="o_opportunity_form">
<header>
<button name="action_set_won" string="Mark Won"
<button name="action_set_won_rainbowman" string="Mark Won"
type="object" class="oe_highlight"
attrs="{'invisible': ['|', ('active','=',False), ('probability', '=', 100)]}"/>
<button name="%(crm.crm_lead_lost_action)d" string="Mark Lost"
@@ -17,10 +17,11 @@ class ResConfigSettings(models.TransientModel):
config.google_drive_uri = google_drive_uri
def set_values(self):
super(ResConfigSettings, self).set_values()
params = self.env['ir.config_parameter'].sudo()
authorization_code_before = params.get_param('google_drive_authorization_code')
super(ResConfigSettings, self).set_values()
authorization_code = self.google_drive_authorization_code
refresh_token = False
if authorization_code and authorization_code != params.get_param('google_drive_authorization_code'):
if authorization_code and authorization_code != authorization_code_before:
refresh_token = self.env['google.service'].generate_refresh_token('drive', authorization_code)
params.set_param('google_drive_refresh_token', refresh_token)
+1 -1
View File
@@ -177,7 +177,7 @@ class XmlDeclaration(models.TransientModel):
if inv_line.invoice_id.intrastat_country_id:
excnt = inv_line.invoice_id.intrastat_country_id.code
else:
excnt = inv_line.invoice_id.partner_id.country_id.code
excnt = inv_line.invoice_id.partner_shipping_id.country_id.code or inv_line.invoice_id.partner_id.country_id.code
#Check region
#If purchase, comes from purchase order, linked to a location,
@@ -6,7 +6,7 @@
<field name="code">100</field>
<field name="reconcile" eval="False"/>
<field name="name">Dotación fundacional</field>
<field name="user_type_id" ref="account.data_account_type_current_assets"/>
<field name="user_type_id" ref="account.data_account_type_equity"/>
<field name="chart_template_id" ref="account_chart_template_assoc"/>
<field name="group_id" ref="l10n_es.account_group_100" />
</record>
@@ -14,7 +14,7 @@
<field name="code">1030</field>
<field name="reconcile" eval="False"/>
<field name="name">Fundadores, parte no desembolsada en fundaciones</field>
<field name="user_type_id" ref="account.data_account_type_current_assets"/>
<field name="user_type_id" ref="account.data_account_type_equity"/>
<field name="chart_template_id" ref="account_chart_template_assoc"/>
<field name="group_id" ref="l10n_es.account_group_103" />
</record>
@@ -22,7 +22,7 @@
<field name="code">1034</field>
<field name="reconcile" eval="False"/>
<field name="name">Asociados, parte no desembolsada en asociaciones</field>
<field name="user_type_id" ref="account.data_account_type_current_assets"/>
<field name="user_type_id" ref="account.data_account_type_equity"/>
<field name="chart_template_id" ref="account_chart_template_assoc"/>
<field name="group_id" ref="l10n_es.account_group_103" />
</record>
@@ -30,7 +30,7 @@
<field name="code">1040</field>
<field name="reconcile" eval="False"/>
<field name="name">Fundadores, por aportaciones no dinerarias pendientes, en fundaciones</field>
<field name="user_type_id" ref="account.data_account_type_current_assets"/>
<field name="user_type_id" ref="account.data_account_type_equity"/>
<field name="chart_template_id" ref="account_chart_template_assoc"/>
<field name="group_id" ref="l10n_es.account_group_104" />
</record>
@@ -38,7 +38,7 @@
<field name="code">1044</field>
<field name="reconcile" eval="False"/>
<field name="name">Asociados, por aportaciones no dinerarias pendientes, en asociaciones</field>
<field name="user_type_id" ref="account.data_account_type_current_assets"/>
<field name="user_type_id" ref="account.data_account_type_equity"/>
<field name="chart_template_id" ref="account_chart_template_assoc"/>
<field name="group_id" ref="l10n_es.account_group_104" />
</record>
@@ -46,7 +46,7 @@
<field name="code">120</field>
<field name="reconcile" eval="False"/>
<field name="name">Remanente</field>
<field name="user_type_id" ref="account.data_account_type_current_assets"/>
<field name="user_type_id" ref="account.data_account_type_equity"/>
<field name="chart_template_id" ref="account_chart_template_assoc"/>
<field name="group_id" ref="l10n_es.account_group_120" />
</record>
@@ -54,7 +54,7 @@
<field name="code">121</field>
<field name="reconcile" eval="False"/>
<field name="name">Resultados negativos de ejercicios anteriores</field>
<field name="user_type_id" ref="account.data_account_type_current_assets"/>
<field name="user_type_id" ref="account.data_account_type_equity"/>
<field name="chart_template_id" ref="account_chart_template_assoc"/>
<field name="group_id" ref="l10n_es.account_group_121" />
</record>
@@ -70,7 +70,7 @@
<field name="code">1300</field>
<field name="reconcile" eval="False"/>
<field name="name">Subvenciones del Estado</field>
<field name="user_type_id" ref="account.data_account_type_current_assets"/>
<field name="user_type_id" ref="account.data_account_type_equity"/>
<field name="chart_template_id" ref="account_chart_template_assoc"/>
<field name="group_id" ref="l10n_es.account_group_130" />
</record>
@@ -78,7 +78,7 @@
<field name="code">1301</field>
<field name="reconcile" eval="False"/>
<field name="name">Subvenciones de otras Administraciones Públicas</field>
<field name="user_type_id" ref="account.data_account_type_current_assets"/>
<field name="user_type_id" ref="account.data_account_type_equity"/>
<field name="chart_template_id" ref="account_chart_template_assoc"/>
<field name="group_id" ref="l10n_es.account_group_130" />
</record>
@@ -86,7 +86,7 @@
<field name="code">1320</field>
<field name="reconcile" eval="False"/>
<field name="name">Otras subvenciones</field>
<field name="user_type_id" ref="account.data_account_type_current_assets"/>
<field name="user_type_id" ref="account.data_account_type_equity"/>
<field name="chart_template_id" ref="account_chart_template_assoc"/>
<field name="group_id" ref="l10n_es.account_group_132" />
</record>
@@ -94,7 +94,7 @@
<field name="code">1321</field>
<field name="reconcile" eval="False"/>
<field name="name">Otras donaciones y legados</field>
<field name="user_type_id" ref="account.data_account_type_current_assets"/>
<field name="user_type_id" ref="account.data_account_type_equity"/>
<field name="chart_template_id" ref="account_chart_template_assoc"/>
<field name="group_id" ref="l10n_es.account_group_132" />
</record>
@@ -5,7 +5,7 @@
<field name="code">101</field>
<field name="reconcile" eval="False"/>
<field name="name">Fondo social</field>
<field name="user_type_id" ref="account.data_account_type_current_assets"/>
<field name="user_type_id" ref="account.data_account_type_equity"/>
<field name="chart_template_id" ref="account_chart_template_common"/>
<field name="group_id" ref="l10n_es.account_group_101" />
</record>
@@ -13,7 +13,7 @@
<field name="code">102</field>
<field name="reconcile" eval="False"/>
<field name="name">Capital</field>
<field name="user_type_id" ref="account.data_account_type_current_assets"/>
<field name="user_type_id" ref="account.data_account_type_equity"/>
<field name="chart_template_id" ref="account_chart_template_common"/>
<field name="group_id" ref="l10n_es.account_group_102" />
</record>
@@ -21,7 +21,7 @@
<field name="code">108</field>
<field name="reconcile" eval="False"/>
<field name="name">Acciones o participaciones propias en situaciones especiales</field>
<field name="user_type_id" ref="account.data_account_type_current_assets"/>
<field name="user_type_id" ref="account.data_account_type_equity"/>
<field name="chart_template_id" ref="account_chart_template_common"/>
<field name="group_id" ref="l10n_es.account_group_108" />
</record>
@@ -29,7 +29,7 @@
<field name="code">109</field>
<field name="reconcile" eval="False"/>
<field name="name">Acciones o participaciones propias para reducción de capital</field>
<field name="user_type_id" ref="account.data_account_type_current_assets"/>
<field name="user_type_id" ref="account.data_account_type_equity"/>
<field name="chart_template_id" ref="account_chart_template_common"/>
<field name="group_id" ref="l10n_es.account_group_109" />
</record>
@@ -37,7 +37,7 @@
<field name="code">110</field>
<field name="reconcile" eval="False"/>
<field name="name">Prima de emisión o asunción</field>
<field name="user_type_id" ref="account.data_account_type_current_assets"/>
<field name="user_type_id" ref="account.data_account_type_equity"/>
<field name="chart_template_id" ref="account_chart_template_common"/>
<field name="group_id" ref="l10n_es.account_group_110" />
</record>
@@ -45,7 +45,7 @@
<field name="code">112</field>
<field name="reconcile" eval="False"/>
<field name="name">Reserva legal</field>
<field name="user_type_id" ref="account.data_account_type_current_assets"/>
<field name="user_type_id" ref="account.data_account_type_equity"/>
<field name="chart_template_id" ref="account_chart_template_common"/>
<field name="group_id" ref="l10n_es.account_group_112" />
</record>
@@ -53,7 +53,7 @@
<field name="code">113</field>
<field name="reconcile" eval="False"/>
<field name="name">Reservas voluntarias</field>
<field name="user_type_id" ref="account.data_account_type_current_assets"/>
<field name="user_type_id" ref="account.data_account_type_equity"/>
<field name="chart_template_id" ref="account_chart_template_common"/>
<field name="group_id" ref="l10n_es.account_group_113" />
</record>
@@ -61,7 +61,7 @@
<field name="code">1140</field>
<field name="reconcile" eval="False"/>
<field name="name">Reservas para acciones o participaciones de la sociedad dominante</field>
<field name="user_type_id" ref="account.data_account_type_current_assets"/>
<field name="user_type_id" ref="account.data_account_type_equity"/>
<field name="chart_template_id" ref="account_chart_template_common"/>
<field name="group_id" ref="l10n_es.account_group_114" />
</record>
@@ -69,7 +69,7 @@
<field name="code">1141</field>
<field name="reconcile" eval="False"/>
<field name="name">Reservas estatutarias</field>
<field name="user_type_id" ref="account.data_account_type_current_assets"/>
<field name="user_type_id" ref="account.data_account_type_equity"/>
<field name="chart_template_id" ref="account_chart_template_common"/>
<field name="group_id" ref="l10n_es.account_group_114" />
</record>
@@ -77,7 +77,7 @@
<field name="code">1142</field>
<field name="reconcile" eval="False"/>
<field name="name">Reserva por capital amortizado</field>
<field name="user_type_id" ref="account.data_account_type_current_assets"/>
<field name="user_type_id" ref="account.data_account_type_equity"/>
<field name="chart_template_id" ref="account_chart_template_common"/>
<field name="group_id" ref="l10n_es.account_group_114" />
</record>
@@ -85,7 +85,7 @@
<field name="code">1144</field>
<field name="reconcile" eval="False"/>
<field name="name">Reservas por acciones propias aceptadas en garantía</field>
<field name="user_type_id" ref="account.data_account_type_current_assets"/>
<field name="user_type_id" ref="account.data_account_type_equity"/>
<field name="chart_template_id" ref="account_chart_template_common"/>
<field name="group_id" ref="l10n_es.account_group_114" />
</record>
@@ -93,7 +93,7 @@
<field name="code">118</field>
<field name="reconcile" eval="False"/>
<field name="name">Aportaciones de socios o propietarios</field>
<field name="user_type_id" ref="account.data_account_type_current_assets"/>
<field name="user_type_id" ref="account.data_account_type_equity"/>
<field name="chart_template_id" ref="account_chart_template_common"/>
<field name="group_id" ref="l10n_es.account_group_118" />
</record>
@@ -101,7 +101,7 @@
<field name="code">119</field>
<field name="reconcile" eval="False"/>
<field name="name">Diferencias por ajuste del capital a euros</field>
<field name="user_type_id" ref="account.data_account_type_current_assets"/>
<field name="user_type_id" ref="account.data_account_type_equity"/>
<field name="chart_template_id" ref="account_chart_template_common"/>
<field name="group_id" ref="l10n_es.account_group_119" />
</record>
@@ -109,7 +109,7 @@
<field name="code">131</field>
<field name="reconcile" eval="False"/>
<field name="name">Donaciones y legados de capital</field>
<field name="user_type_id" ref="account.data_account_type_current_assets"/>
<field name="user_type_id" ref="account.data_account_type_equity"/>
<field name="chart_template_id" ref="account_chart_template_common"/>
<field name="group_id" ref="l10n_es.account_group_131" />
</record>
@@ -117,7 +117,7 @@
<field name="code">1370</field>
<field name="reconcile" eval="False"/>
<field name="name">Ingresos fiscales por diferencias permanentes a distribuir en varios ejercicios</field>
<field name="user_type_id" ref="account.data_account_type_current_assets"/>
<field name="user_type_id" ref="account.data_account_type_equity"/>
<field name="chart_template_id" ref="account_chart_template_common"/>
<field name="group_id" ref="l10n_es.account_group_137" />
</record>
@@ -125,7 +125,7 @@
<field name="code">1371</field>
<field name="reconcile" eval="False"/>
<field name="name">Ingresos fiscales por deducciones y bonificaciones a distribuir en varios ejercicios</field>
<field name="user_type_id" ref="account.data_account_type_current_assets"/>
<field name="user_type_id" ref="account.data_account_type_equity"/>
<field name="chart_template_id" ref="account_chart_template_common"/>
<field name="group_id" ref="l10n_es.account_group_137" />
</record>
@@ -133,7 +133,7 @@
<field name="code">141</field>
<field name="reconcile" eval="True"/>
<field name="name">Provisión para impuestos</field>
<field name="user_type_id" ref="account.data_account_type_current_assets"/>
<field name="user_type_id" ref="account.data_account_type_non_current_liabilities"/>
<field name="chart_template_id" ref="account_chart_template_common"/>
<field name="group_id" ref="l10n_es.account_group_141" />
</record>
@@ -141,7 +141,7 @@
<field name="code">142</field>
<field name="reconcile" eval="True"/>
<field name="name">Provisión para otras responsabilidades</field>
<field name="user_type_id" ref="account.data_account_type_current_assets"/>
<field name="user_type_id" ref="account.data_account_type_non_current_liabilities"/>
<field name="chart_template_id" ref="account_chart_template_common"/>
<field name="group_id" ref="l10n_es.account_group_142" />
</record>
@@ -149,7 +149,7 @@
<field name="code">143</field>
<field name="reconcile" eval="True"/>
<field name="name">Provisión por desmantelamiento, retiro o rehabilitación del inmovilizado</field>
<field name="user_type_id" ref="account.data_account_type_current_assets"/>
<field name="user_type_id" ref="account.data_account_type_non_current_liabilities"/>
<field name="chart_template_id" ref="account_chart_template_common"/>
<field name="group_id" ref="l10n_es.account_group_143" />
</record>
@@ -157,7 +157,7 @@
<field name="code">145</field>
<field name="reconcile" eval="True"/>
<field name="name">Provisión para actuaciones medioambientales</field>
<field name="user_type_id" ref="account.data_account_type_current_assets"/>
<field name="user_type_id" ref="account.data_account_type_non_current_liabilities"/>
<field name="chart_template_id" ref="account_chart_template_common"/>
<field name="group_id" ref="l10n_es.account_group_145" />
</record>
@@ -165,7 +165,7 @@
<field name="code">150</field>
<field name="reconcile" eval="False"/>
<field name="name">Acciones o participaciones consideradas como pasivos financieros</field>
<field name="user_type_id" ref="account.data_account_type_current_assets"/>
<field name="user_type_id" ref="account.data_account_type_non_current_liabilities"/>
<field name="chart_template_id" ref="account_chart_template_common"/>
<field name="group_id" ref="l10n_es.account_group_150" />
</record>
@@ -173,7 +173,7 @@
<field name="code">1533</field>
<field name="reconcile" eval="False"/>
<field name="name">Desembolsos no exigidos, empresas del grupo</field>
<field name="user_type_id" ref="account.data_account_type_current_assets"/>
<field name="user_type_id" ref="account.data_account_type_non_current_liabilities"/>
<field name="chart_template_id" ref="account_chart_template_common"/>
<field name="group_id" ref="l10n_es.account_group_153" />
</record>
@@ -181,7 +181,7 @@
<field name="code">1534</field>
<field name="reconcile" eval="False"/>
<field name="name">Desembolsos no exigidos, empresas asociadas</field>
<field name="user_type_id" ref="account.data_account_type_current_assets"/>
<field name="user_type_id" ref="account.data_account_type_non_current_liabilities"/>
<field name="chart_template_id" ref="account_chart_template_common"/>
<field name="group_id" ref="l10n_es.account_group_153" />
</record>
@@ -189,7 +189,7 @@
<field name="code">1535</field>
<field name="reconcile" eval="False"/>
<field name="name">Desembolsos no exigidos, otras partes vinculadas</field>
<field name="user_type_id" ref="account.data_account_type_current_assets"/>
<field name="user_type_id" ref="account.data_account_type_non_current_liabilities"/>
<field name="chart_template_id" ref="account_chart_template_common"/>
<field name="group_id" ref="l10n_es.account_group_153" />
</record>
@@ -197,7 +197,7 @@
<field name="code">1536</field>
<field name="reconcile" eval="False"/>
<field name="name">Otros desembolsos no exigidos</field>
<field name="user_type_id" ref="account.data_account_type_current_assets"/>
<field name="user_type_id" ref="account.data_account_type_non_current_liabilities"/>
<field name="chart_template_id" ref="account_chart_template_common"/>
<field name="group_id" ref="l10n_es.account_group_153" />
</record>
@@ -205,7 +205,7 @@
<field name="code">1543</field>
<field name="reconcile" eval="False"/>
<field name="name">Aportaciones no dinerarias pendientes, empresas del grupo</field>
<field name="user_type_id" ref="account.data_account_type_current_assets"/>
<field name="user_type_id" ref="account.data_account_type_non_current_liabilities"/>
<field name="chart_template_id" ref="account_chart_template_common"/>
<field name="group_id" ref="l10n_es.account_group_154" />
</record>
@@ -213,7 +213,7 @@
<field name="code">1544</field>
<field name="reconcile" eval="False"/>
<field name="name">Aportaciones no dinerarias pendientes, empresas asociadas</field>
<field name="user_type_id" ref="account.data_account_type_current_assets"/>
<field name="user_type_id" ref="account.data_account_type_non_current_liabilities"/>
<field name="chart_template_id" ref="account_chart_template_common"/>
<field name="group_id" ref="l10n_es.account_group_154" />
</record>
@@ -221,7 +221,7 @@
<field name="code">1545</field>
<field name="reconcile" eval="False"/>
<field name="name">Aportaciones no dinerarias pendientes, otras partes vinculadas</field>
<field name="user_type_id" ref="account.data_account_type_current_assets"/>
<field name="user_type_id" ref="account.data_account_type_non_current_liabilities"/>
<field name="chart_template_id" ref="account_chart_template_common"/>
<field name="group_id" ref="l10n_es.account_group_154" />
</record>
@@ -229,7 +229,7 @@
<field name="code">1546</field>
<field name="reconcile" eval="False"/>
<field name="name">Otras aportaciones no dinerarias pendientes</field>
<field name="user_type_id" ref="account.data_account_type_current_assets"/>
<field name="user_type_id" ref="account.data_account_type_non_current_liabilities"/>
<field name="chart_template_id" ref="account_chart_template_common"/>
<field name="group_id" ref="l10n_es.account_group_154" />
</record>
@@ -237,7 +237,7 @@
<field name="code">1603</field>
<field name="reconcile" eval="False"/>
<field name="name">Deudas con entidades de crédito vinculadas, empresas del grupo</field>
<field name="user_type_id" ref="account.data_account_type_current_assets"/>
<field name="user_type_id" ref="account.data_account_type_non_current_liabilities"/>
<field name="chart_template_id" ref="account_chart_template_common"/>
<field name="group_id" ref="l10n_es.account_group_160" />
</record>
@@ -245,7 +245,7 @@
<field name="code">1604</field>
<field name="reconcile" eval="False"/>
<field name="name">Deudas con entidades de crédito vinculadas, empresas asociadas</field>
<field name="user_type_id" ref="account.data_account_type_current_assets"/>
<field name="user_type_id" ref="account.data_account_type_non_current_liabilities"/>
<field name="chart_template_id" ref="account_chart_template_common"/>
<field name="group_id" ref="l10n_es.account_group_160" />
</record>
@@ -253,7 +253,7 @@
<field name="code">1605</field>
<field name="reconcile" eval="False"/>
<field name="name">Deudas con otras entidades de crédito vinculadas</field>
<field name="user_type_id" ref="account.data_account_type_current_assets"/>
<field name="user_type_id" ref="account.data_account_type_non_current_liabilities"/>
<field name="chart_template_id" ref="account_chart_template_common"/>
<field name="group_id" ref="l10n_es.account_group_160" />
</record>
@@ -261,7 +261,7 @@
<field name="code">1613</field>
<field name="reconcile" eval="False"/>
<field name="name">Proveedores de inmovilizado, empresas del grupo</field>
<field name="user_type_id" ref="account.data_account_type_current_assets"/>
<field name="user_type_id" ref="account.data_account_type_non_current_liabilities"/>
<field name="chart_template_id" ref="account_chart_template_common"/>
<field name="group_id" ref="l10n_es.account_group_161" />
</record>
@@ -269,7 +269,7 @@
<field name="code">1614</field>
<field name="reconcile" eval="False"/>
<field name="name">Proveedores de inmovilizado, empresas asociadas</field>
<field name="user_type_id" ref="account.data_account_type_current_assets"/>
<field name="user_type_id" ref="account.data_account_type_non_current_liabilities"/>
<field name="chart_template_id" ref="account_chart_template_common"/>
<field name="group_id" ref="l10n_es.account_group_161" />
</record>
@@ -277,7 +277,7 @@
<field name="code">1615</field>
<field name="reconcile" eval="False"/>
<field name="name">Proveedores de inmovilizado, otras partes vinculadas</field>
<field name="user_type_id" ref="account.data_account_type_current_assets"/>
<field name="user_type_id" ref="account.data_account_type_non_current_liabilities"/>
<field name="chart_template_id" ref="account_chart_template_common"/>
<field name="group_id" ref="l10n_es.account_group_161" />
</record>
@@ -285,7 +285,7 @@
<field name="code">1623</field>
<field name="reconcile" eval="False"/>
<field name="name">Acreedores por arrendamiento financiero, empresas de grupo</field>
<field name="user_type_id" ref="account.data_account_type_current_assets"/>
<field name="user_type_id" ref="account.data_account_type_non_current_liabilities"/>
<field name="chart_template_id" ref="account_chart_template_common"/>
<field name="group_id" ref="l10n_es.account_group_162" />
</record>
@@ -293,7 +293,7 @@
<field name="code">1624</field>
<field name="reconcile" eval="False"/>
<field name="name">Acreedores por arrendamiento financiero, empresas asociadas</field>
<field name="user_type_id" ref="account.data_account_type_current_assets"/>
<field name="user_type_id" ref="account.data_account_type_non_current_liabilities"/>
<field name="chart_template_id" ref="account_chart_template_common"/>
<field name="group_id" ref="l10n_es.account_group_162" />
</record>
@@ -301,7 +301,7 @@
<field name="code">1625</field>
<field name="reconcile" eval="False"/>
<field name="name">Acreedores por arrendamiento financiero, otras partes vinculadas</field>
<field name="user_type_id" ref="account.data_account_type_current_assets"/>
<field name="user_type_id" ref="account.data_account_type_non_current_liabilities"/>
<field name="chart_template_id" ref="account_chart_template_common"/>
<field name="group_id" ref="l10n_es.account_group_162" />
</record>
@@ -309,7 +309,7 @@
<field name="code">1633</field>
<field name="reconcile" eval="False"/>
<field name="name">Otras deudas, empresas del grupo</field>
<field name="user_type_id" ref="account.data_account_type_current_assets"/>
<field name="user_type_id" ref="account.data_account_type_non_current_liabilities"/>
<field name="chart_template_id" ref="account_chart_template_common"/>
<field name="group_id" ref="l10n_es.account_group_163" />
</record>
@@ -317,7 +317,7 @@
<field name="code">1634</field>
<field name="reconcile" eval="False"/>
<field name="name">Otras deudas, empresas asociadas</field>
<field name="user_type_id" ref="account.data_account_type_current_assets"/>
<field name="user_type_id" ref="account.data_account_type_non_current_liabilities"/>
<field name="chart_template_id" ref="account_chart_template_common"/>
<field name="group_id" ref="l10n_es.account_group_163" />
</record>
@@ -325,7 +325,7 @@
<field name="code">1635</field>
<field name="reconcile" eval="False"/>
<field name="name">Otras deudas, con otras partes vinculadas</field>
<field name="user_type_id" ref="account.data_account_type_current_assets"/>
<field name="user_type_id" ref="account.data_account_type_non_current_liabilities"/>
<field name="chart_template_id" ref="account_chart_template_common"/>
<field name="group_id" ref="l10n_es.account_group_163" />
</record>
@@ -333,7 +333,7 @@
<field name="code">170</field>
<field name="reconcile" eval="False"/>
<field name="name">Deudas con entidades de crédito</field>
<field name="user_type_id" ref="account.data_account_type_current_assets"/>
<field name="user_type_id" ref="account.data_account_type_non_current_liabilities"/>
<field name="chart_template_id" ref="account_chart_template_common"/>
<field name="group_id" ref="l10n_es.account_group_170" />
</record>
@@ -341,7 +341,7 @@
<field name="code">171</field>
<field name="reconcile" eval="False"/>
<field name="name">Deudas</field>
<field name="user_type_id" ref="account.data_account_type_current_assets"/>
<field name="user_type_id" ref="account.data_account_type_non_current_liabilities"/>
<field name="chart_template_id" ref="account_chart_template_common"/>
<field name="group_id" ref="l10n_es.account_group_171" />
</record>
@@ -349,7 +349,7 @@
<field name="code">172</field>
<field name="reconcile" eval="False"/>
<field name="name">Deudas transformables en subvenciones, donaciones y legados</field>
<field name="user_type_id" ref="account.data_account_type_current_assets"/>
<field name="user_type_id" ref="account.data_account_type_non_current_liabilities"/>
<field name="chart_template_id" ref="account_chart_template_common"/>
<field name="group_id" ref="l10n_es.account_group_172" />
</record>
@@ -357,7 +357,7 @@
<field name="code">173</field>
<field name="reconcile" eval="False"/>
<field name="name">Proveedores de inmovilizado</field>
<field name="user_type_id" ref="account.data_account_type_current_assets"/>
<field name="user_type_id" ref="account.data_account_type_non_current_liabilities"/>
<field name="chart_template_id" ref="account_chart_template_common"/>
<field name="group_id" ref="l10n_es.account_group_173" />
</record>
@@ -365,7 +365,7 @@
<field name="code">174</field>
<field name="reconcile" eval="False"/>
<field name="name">Acreedores por arrendamiento financiero</field>
<field name="user_type_id" ref="account.data_account_type_current_assets"/>
<field name="user_type_id" ref="account.data_account_type_non_current_liabilities"/>
<field name="chart_template_id" ref="account_chart_template_common"/>
<field name="group_id" ref="l10n_es.account_group_174" />
</record>
@@ -373,7 +373,7 @@
<field name="code">175</field>
<field name="reconcile" eval="False"/>
<field name="name">Efectos a pagar</field>
<field name="user_type_id" ref="account.data_account_type_current_assets"/>
<field name="user_type_id" ref="account.data_account_type_non_current_liabilities"/>
<field name="chart_template_id" ref="account_chart_template_common"/>
<field name="group_id" ref="l10n_es.account_group_175" />
</record>
@@ -381,7 +381,7 @@
<field name="code">176</field>
<field name="reconcile" eval="False"/>
<field name="name">Pasivos por derivados financieros</field>
<field name="user_type_id" ref="account.data_account_type_current_assets"/>
<field name="user_type_id" ref="account.data_account_type_non_current_liabilities"/>
<field name="chart_template_id" ref="account_chart_template_common"/>
<field name="group_id" ref="l10n_es.account_group_176" />
</record>
@@ -389,7 +389,7 @@
<field name="code">177</field>
<field name="reconcile" eval="False"/>
<field name="name">Obligaciones y bonos</field>
<field name="user_type_id" ref="account.data_account_type_current_assets"/>
<field name="user_type_id" ref="account.data_account_type_non_current_liabilities"/>
<field name="chart_template_id" ref="account_chart_template_common"/>
<field name="group_id" ref="l10n_es.account_group_177" />
</record>
@@ -397,7 +397,7 @@
<field name="code">179</field>
<field name="reconcile" eval="False"/>
<field name="name">Deudas representadas en otros valores negociables</field>
<field name="user_type_id" ref="account.data_account_type_current_assets"/>
<field name="user_type_id" ref="account.data_account_type_non_current_liabilities"/>
<field name="chart_template_id" ref="account_chart_template_common"/>
<field name="group_id" ref="l10n_es.account_group_179" />
</record>
@@ -405,7 +405,7 @@
<field name="code">180</field>
<field name="reconcile" eval="False"/>
<field name="name">Fianzas recibidas</field>
<field name="user_type_id" ref="account.data_account_type_current_assets"/>
<field name="user_type_id" ref="account.data_account_type_non_current_liabilities"/>
<field name="chart_template_id" ref="account_chart_template_common"/>
<field name="group_id" ref="l10n_es.account_group_180" />
</record>
@@ -413,7 +413,7 @@
<field name="code">181</field>
<field name="reconcile" eval="False"/>
<field name="name">Anticipos recibidos por ventas o prestaciones de servicios</field>
<field name="user_type_id" ref="account.data_account_type_current_assets"/>
<field name="user_type_id" ref="account.data_account_type_non_current_liabilities"/>
<field name="chart_template_id" ref="account_chart_template_common"/>
<field name="group_id" ref="l10n_es.account_group_181" />
</record>
@@ -421,7 +421,7 @@
<field name="code">185</field>
<field name="reconcile" eval="False"/>
<field name="name">Depósitos recibidos</field>
<field name="user_type_id" ref="account.data_account_type_current_assets"/>
<field name="user_type_id" ref="account.data_account_type_non_current_liabilities"/>
<field name="chart_template_id" ref="account_chart_template_common"/>
<field name="group_id" ref="l10n_es.account_group_185" />
</record>
@@ -429,7 +429,7 @@
<field name="code">190</field>
<field name="reconcile" eval="False"/>
<field name="name">Acciones o participaciones emitidas</field>
<field name="user_type_id" ref="account.data_account_type_current_assets"/>
<field name="user_type_id" ref="account.data_account_type_non_current_liabilities"/>
<field name="chart_template_id" ref="account_chart_template_common"/>
<field name="group_id" ref="l10n_es.account_group_190" />
</record>
@@ -437,7 +437,7 @@
<field name="code">192</field>
<field name="reconcile" eval="False"/>
<field name="name">Suscriptores de acciones</field>
<field name="user_type_id" ref="account.data_account_type_current_assets"/>
<field name="user_type_id" ref="account.data_account_type_non_current_liabilities"/>
<field name="chart_template_id" ref="account_chart_template_common"/>
<field name="group_id" ref="l10n_es.account_group_192" />
</record>
@@ -445,7 +445,7 @@
<field name="code">194</field>
<field name="reconcile" eval="False"/>
<field name="name">Capital emitido pendiente de inscripción</field>
<field name="user_type_id" ref="account.data_account_type_current_assets"/>
<field name="user_type_id" ref="account.data_account_type_non_current_liabilities"/>
<field name="chart_template_id" ref="account_chart_template_common"/>
<field name="group_id" ref="l10n_es.account_group_194" />
</record>
@@ -453,7 +453,7 @@
<field name="code">195</field>
<field name="reconcile" eval="False"/>
<field name="name">Acciones o participaciones emitidas consideradas como pasivos financieros</field>
<field name="user_type_id" ref="account.data_account_type_current_assets"/>
<field name="user_type_id" ref="account.data_account_type_non_current_liabilities"/>
<field name="chart_template_id" ref="account_chart_template_common"/>
<field name="group_id" ref="l10n_es.account_group_195" />
</record>
@@ -461,7 +461,7 @@
<field name="code">197</field>
<field name="reconcile" eval="False"/>
<field name="name">Suscriptores de acciones consideradas como pasivos financieros</field>
<field name="user_type_id" ref="account.data_account_type_current_assets"/>
<field name="user_type_id" ref="account.data_account_type_non_current_liabilities"/>
<field name="chart_template_id" ref="account_chart_template_common"/>
<field name="group_id" ref="l10n_es.account_group_197" />
</record>
@@ -469,7 +469,7 @@
<field name="code">199</field>
<field name="reconcile" eval="False"/>
<field name="name">Acciones o participaciones emitidas consideradas como pasivos financieros pendientes de inscripción</field>
<field name="user_type_id" ref="account.data_account_type_current_assets"/>
<field name="user_type_id" ref="account.data_account_type_non_current_liabilities"/>
<field name="chart_template_id" ref="account_chart_template_common"/>
<field name="group_id" ref="l10n_es.account_group_199" />
</record>
@@ -1411,9 +1411,9 @@
</record>
<record id="account_common_401" model="account.account.template">
<field name="code">401</field>
<field name="reconcile" eval="False"/>
<field name="reconcile" eval="True"/>
<field name="name">Proveedores, efectos comerciales a pagar</field>
<field name="user_type_id" ref="account.data_account_type_current_liabilities"/>
<field name="user_type_id" ref="account.data_account_type_payable"/>
<field name="chart_template_id" ref="account_chart_template_common"/>
<field name="group_id" ref="l10n_es.account_group_401" />
</record>
@@ -1459,33 +1459,33 @@
</record>
<record id="account_common_404" model="account.account.template">
<field name="code">404</field>
<field name="reconcile" eval="False"/>
<field name="reconcile" eval="True"/>
<field name="name">Proveedores, empresas asociadas</field>
<field name="user_type_id" ref="account.data_account_type_current_liabilities"/>
<field name="user_type_id" ref="account.data_account_type_payable"/>
<field name="chart_template_id" ref="account_chart_template_common"/>
<field name="group_id" ref="l10n_es.account_group_404" />
</record>
<record id="account_common_405" model="account.account.template">
<field name="code">405</field>
<field name="reconcile" eval="False"/>
<field name="reconcile" eval="True"/>
<field name="name">Proveedores, otras partes vinculadas</field>
<field name="user_type_id" ref="account.data_account_type_current_liabilities"/>
<field name="user_type_id" ref="account.data_account_type_payable"/>
<field name="chart_template_id" ref="account_chart_template_common"/>
<field name="group_id" ref="l10n_es.account_group_405" />
</record>
<record id="account_common_406" model="account.account.template">
<field name="code">406</field>
<field name="reconcile" eval="False"/>
<field name="reconcile" eval="True"/>
<field name="name">Envases y embalajes a devolver a proveedores</field>
<field name="user_type_id" ref="account.data_account_type_current_liabilities"/>
<field name="user_type_id" ref="account.data_account_type_payable"/>
<field name="chart_template_id" ref="account_chart_template_common"/>
<field name="group_id" ref="l10n_es.account_group_406" />
</record>
<record id="account_common_407" model="account.account.template">
<field name="code">407</field>
<field name="reconcile" eval="False"/>
<field name="reconcile" eval="True"/>
<field name="name">Anticipos a proveedores</field>
<field name="user_type_id" ref="account.data_account_type_current_liabilities"/>
<field name="user_type_id" ref="account.data_account_type_payable"/>
<field name="chart_template_id" ref="account_chart_template_common"/>
<field name="group_id" ref="l10n_es.account_group_407" />
</record>
@@ -1587,9 +1587,9 @@
</record>
<record id="account_common_432" model="account.account.template">
<field name="code">432</field>
<field name="reconcile" eval="False"/>
<field name="reconcile" eval="True"/>
<field name="name">Clientes, operaciones de factoring</field>
<field name="user_type_id" ref="account.data_account_type_current_assets"/>
<field name="user_type_id" ref="account.data_account_type_receivable"/>
<field name="chart_template_id" ref="account_chart_template_common"/>
<field name="group_id" ref="l10n_es.account_group_432" />
</record>
@@ -1651,41 +1651,41 @@
</record>
<record id="account_common_434" model="account.account.template">
<field name="code">434</field>
<field name="reconcile" eval="False"/>
<field name="reconcile" eval="True"/>
<field name="name">Clientes, empresas asociadas</field>
<field name="user_type_id" ref="account.data_account_type_current_assets"/>
<field name="user_type_id" ref="account.data_account_type_receivable"/>
<field name="chart_template_id" ref="account_chart_template_common"/>
<field name="group_id" ref="l10n_es.account_group_434" />
</record>
<record id="account_common_435" model="account.account.template">
<field name="code">435</field>
<field name="reconcile" eval="False"/>
<field name="reconcile" eval="True"/>
<field name="name">Clientes, otras partes vinculadas</field>
<field name="user_type_id" ref="account.data_account_type_current_assets"/>
<field name="user_type_id" ref="account.data_account_type_receivable"/>
<field name="chart_template_id" ref="account_chart_template_common"/>
<field name="group_id" ref="l10n_es.account_group_435" />
</record>
<record id="account_common_436" model="account.account.template">
<field name="code">436</field>
<field name="reconcile" eval="False"/>
<field name="reconcile" eval="True"/>
<field name="name">Clientes de dudoso cobro</field>
<field name="user_type_id" ref="account.data_account_type_current_assets"/>
<field name="user_type_id" ref="account.data_account_type_receivable"/>
<field name="chart_template_id" ref="account_chart_template_common"/>
<field name="group_id" ref="l10n_es.account_group_436" />
</record>
<record id="account_common_437" model="account.account.template">
<field name="code">437</field>
<field name="reconcile" eval="False"/>
<field name="reconcile" eval="True"/>
<field name="name">Envases y embalajes a devolver por clientes</field>
<field name="user_type_id" ref="account.data_account_type_current_assets"/>
<field name="user_type_id" ref="account.data_account_type_receivable"/>
<field name="chart_template_id" ref="account_chart_template_common"/>
<field name="group_id" ref="l10n_es.account_group_437" />
</record>
<record id="account_common_438" model="account.account.template">
<field name="code">438</field>
<field name="reconcile" eval="False"/>
<field name="reconcile" eval="True"/>
<field name="name">Anticipos de clientes</field>
<field name="user_type_id" ref="account.data_account_type_current_assets"/>
<field name="user_type_id" ref="account.data_account_type_receivable"/>
<field name="chart_template_id" ref="account_chart_template_common"/>
<field name="group_id" ref="l10n_es.account_group_438" />
</record>
@@ -6,7 +6,7 @@
<field name="code">100</field>
<field name="reconcile" eval="False"/>
<field name="name">Capital social</field>
<field name="user_type_id" ref="account.data_account_type_current_assets"/>
<field name="user_type_id" ref="account.data_account_type_equity"/>
<field name="chart_template_id" ref="account_chart_template_full"/>
<field name="group_id" ref="l10n_es.account_group_100" />
</record>
@@ -14,7 +14,7 @@
<field name="code">1030</field>
<field name="reconcile" eval="False"/>
<field name="name">Socios por desembolsos no exigidos, capital social</field>
<field name="user_type_id" ref="account.data_account_type_current_assets"/>
<field name="user_type_id" ref="account.data_account_type_equity"/>
<field name="chart_template_id" ref="account_chart_template_full"/>
<field name="group_id" ref="l10n_es.account_group_103" />
</record>
@@ -22,7 +22,7 @@
<field name="code">1034</field>
<field name="reconcile" eval="False"/>
<field name="name">Socios por desembolsos no exigidos, capital pendiente de inscripción</field>
<field name="user_type_id" ref="account.data_account_type_current_assets"/>
<field name="user_type_id" ref="account.data_account_type_equity"/>
<field name="chart_template_id" ref="account_chart_template_full"/>
<field name="group_id" ref="l10n_es.account_group_103" />
</record>
@@ -30,7 +30,7 @@
<field name="code">1040</field>
<field name="reconcile" eval="False"/>
<field name="name">Socios por aportaciones no dinerarias pendientes, capital social</field>
<field name="user_type_id" ref="account.data_account_type_current_assets"/>
<field name="user_type_id" ref="account.data_account_type_equity"/>
<field name="chart_template_id" ref="account_chart_template_full"/>
<field name="group_id" ref="l10n_es.account_group_104" />
</record>
@@ -38,7 +38,7 @@
<field name="code">1044</field>
<field name="reconcile" eval="False"/>
<field name="name">Socios por aportaciones no dinerarias pendientes, capital pendiente de inscripción</field>
<field name="user_type_id" ref="account.data_account_type_current_assets"/>
<field name="user_type_id" ref="account.data_account_type_equity"/>
<field name="chart_template_id" ref="account_chart_template_full"/>
<field name="group_id" ref="l10n_es.account_group_104" />
</record>
@@ -46,7 +46,7 @@
<field name="code">1110</field>
<field name="reconcile" eval="False"/>
<field name="name">Patrimonio neto por emision de instrumentos financieros compuestos</field>
<field name="user_type_id" ref="account.data_account_type_current_assets"/>
<field name="user_type_id" ref="account.data_account_type_equity"/>
<field name="chart_template_id" ref="account_chart_template_full"/>
<field name="group_id" ref="l10n_es.account_group_111" />
</record>
@@ -54,7 +54,7 @@
<field name="code">111100</field>
<field name="reconcile" eval="False"/>
<field name="name">Resto de instrumentos de patrimonio neto</field>
<field name="user_type_id" ref="account.data_account_type_current_assets"/>
<field name="user_type_id" ref="account.data_account_type_equity"/>
<field name="chart_template_id" ref="account_chart_template_full"/>
<field name="group_id" ref="l10n_es.account_group_111" />
</record>
@@ -62,7 +62,7 @@
<field name="code">1143</field>
<field name="reconcile" eval="False"/>
<field name="name">Reserva por fondo de comercio</field>
<field name="user_type_id" ref="account.data_account_type_current_assets"/>
<field name="user_type_id" ref="account.data_account_type_equity"/>
<field name="chart_template_id" ref="account_chart_template_full"/>
<field name="group_id" ref="l10n_es.account_group_114" />
</record>
@@ -70,7 +70,7 @@
<field name="code">115</field>
<field name="reconcile" eval="False"/>
<field name="name">Reservas por pérdidas y ganancias actuariales y otros ajustes</field>
<field name="user_type_id" ref="account.data_account_type_current_assets"/>
<field name="user_type_id" ref="account.data_account_type_equity"/>
<field name="chart_template_id" ref="account_chart_template_full"/>
<field name="group_id" ref="l10n_es.account_group_115" />
</record>
@@ -78,7 +78,7 @@
<field name="code">120</field>
<field name="reconcile" eval="False"/>
<field name="name">Remanente</field>
<field name="user_type_id" ref="account.data_account_type_current_assets"/>
<field name="user_type_id" ref="account.data_account_type_equity"/>
<field name="chart_template_id" ref="account_chart_template_full"/>
<field name="group_id" ref="l10n_es.account_group_120" />
</record>
@@ -86,7 +86,7 @@
<field name="code">121</field>
<field name="reconcile" eval="False"/>
<field name="name">Resultados negativos de ejercicios anteriores</field>
<field name="user_type_id" ref="account.data_account_type_current_assets"/>
<field name="user_type_id" ref="account.data_account_type_equity"/>
<field name="chart_template_id" ref="account_chart_template_full"/>
<field name="group_id" ref="l10n_es.account_group_121" />
</record>
@@ -102,7 +102,7 @@
<field name="code">130</field>
<field name="reconcile" eval="False"/>
<field name="name">Subvenciones oficiales de capital</field>
<field name="user_type_id" ref="account.data_account_type_current_assets"/>
<field name="user_type_id" ref="account.data_account_type_equity"/>
<field name="chart_template_id" ref="account_chart_template_full"/>
<field name="group_id" ref="l10n_es.account_group_130" />
</record>
@@ -110,7 +110,7 @@
<field name="code">132</field>
<field name="reconcile" eval="False"/>
<field name="name">Otras subvenciones, donaciones y legados</field>
<field name="user_type_id" ref="account.data_account_type_current_assets"/>
<field name="user_type_id" ref="account.data_account_type_equity"/>
<field name="chart_template_id" ref="account_chart_template_full"/>
<field name="group_id" ref="l10n_es.account_group_132" />
</record>
@@ -118,7 +118,7 @@
<field name="code">133</field>
<field name="reconcile" eval="False"/>
<field name="name">Ajustes por valoración en activos financieros disponibles para la venta</field>
<field name="user_type_id" ref="account.data_account_type_current_assets"/>
<field name="user_type_id" ref="account.data_account_type_equity"/>
<field name="chart_template_id" ref="account_chart_template_full"/>
<field name="group_id" ref="l10n_es.account_group_133" />
</record>
@@ -126,7 +126,7 @@
<field name="code">1340</field>
<field name="reconcile" eval="False"/>
<field name="name">Cobertura de flujos de efectivo</field>
<field name="user_type_id" ref="account.data_account_type_current_assets"/>
<field name="user_type_id" ref="account.data_account_type_equity"/>
<field name="chart_template_id" ref="account_chart_template_full"/>
<field name="group_id" ref="l10n_es.account_group_134" />
</record>
@@ -134,7 +134,7 @@
<field name="code">1341</field>
<field name="reconcile" eval="False"/>
<field name="name">Cobertura de una inversión neta en un negocio en el extranjero</field>
<field name="user_type_id" ref="account.data_account_type_current_assets"/>
<field name="user_type_id" ref="account.data_account_type_equity"/>
<field name="chart_template_id" ref="account_chart_template_full"/>
<field name="group_id" ref="l10n_es.account_group_134" />
</record>
@@ -142,7 +142,7 @@
<field name="code">135</field>
<field name="reconcile" eval="False"/>
<field name="name">Diferencias de conversión</field>
<field name="user_type_id" ref="account.data_account_type_current_assets"/>
<field name="user_type_id" ref="account.data_account_type_equity"/>
<field name="chart_template_id" ref="account_chart_template_full"/>
<field name="group_id" ref="l10n_es.account_group_135" />
</record>
@@ -150,7 +150,7 @@
<field name="code">136</field>
<field name="reconcile" eval="False"/>
<field name="name">Ajustes por valoración de activos no corrientes y grupos enajenables de elementos, mantenidos para la venta</field>
<field name="user_type_id" ref="account.data_account_type_current_assets"/>
<field name="user_type_id" ref="account.data_account_type_equity"/>
<field name="chart_template_id" ref="account_chart_template_full"/>
<field name="group_id" ref="l10n_es.account_group_136" />
</record>
@@ -158,7 +158,7 @@
<field name="code">140</field>
<field name="reconcile" eval="True"/>
<field name="name">Provisión por retribuciones del personal</field>
<field name="user_type_id" ref="account.data_account_type_current_assets"/>
<field name="user_type_id" ref="account.data_account_type_non_current_liabilities"/>
<field name="chart_template_id" ref="account_chart_template_full"/>
<field name="group_id" ref="l10n_es.account_group_140" />
</record>
@@ -166,7 +166,7 @@
<field name="code">146</field>
<field name="reconcile" eval="True"/>
<field name="name">Provisión para reestructuraciones</field>
<field name="user_type_id" ref="account.data_account_type_current_assets"/>
<field name="user_type_id" ref="account.data_account_type_non_current_liabilities"/>
<field name="chart_template_id" ref="account_chart_template_full"/>
<field name="group_id" ref="l10n_es.account_group_146" />
</record>
@@ -174,7 +174,7 @@
<field name="code">147</field>
<field name="reconcile" eval="True"/>
<field name="name">Provisión por transacciones con pagos basados en instrumentos de patrimonio</field>
<field name="user_type_id" ref="account.data_account_type_current_assets"/>
<field name="user_type_id" ref="account.data_account_type_non_current_liabilities"/>
<field name="chart_template_id" ref="account_chart_template_full"/>
<field name="group_id" ref="l10n_es.account_group_147" />
</record>
@@ -182,7 +182,7 @@
<field name="code">1765</field>
<field name="reconcile" eval="True"/>
<field name="name">Pasivos por derivados financieros, carter de negociación</field>
<field name="user_type_id" ref="account.data_account_type_current_assets"/>
<field name="user_type_id" ref="account.data_account_type_non_current_liabilities"/>
<field name="chart_template_id" ref="account_chart_template_full"/>
<field name="group_id" ref="l10n_es.account_group_176" />
</record>
@@ -190,7 +190,7 @@
<field name="code">1768</field>
<field name="reconcile" eval="True"/>
<field name="name">Pasivos por derivados financieros, instrumentos de cobertura</field>
<field name="user_type_id" ref="account.data_account_type_current_assets"/>
<field name="user_type_id" ref="account.data_account_type_non_current_liabilities"/>
<field name="chart_template_id" ref="account_chart_template_full"/>
<field name="group_id" ref="l10n_es.account_group_176" />
</record>
@@ -198,7 +198,7 @@
<field name="code">178</field>
<field name="reconcile" eval="False"/>
<field name="name">Obligaciones y bonos convertibles</field>
<field name="user_type_id" ref="account.data_account_type_current_assets"/>
<field name="user_type_id" ref="account.data_account_type_non_current_liabilities"/>
<field name="chart_template_id" ref="account_chart_template_full"/>
<field name="group_id" ref="l10n_es.account_group_178" />
</record>
@@ -206,7 +206,7 @@
<field name="code">189</field>
<field name="reconcile" eval="False"/>
<field name="name">Garantías financieras</field>
<field name="user_type_id" ref="account.data_account_type_current_assets"/>
<field name="user_type_id" ref="account.data_account_type_non_current_liabilities"/>
<field name="chart_template_id" ref="account_chart_template_full"/>
<field name="group_id" ref="l10n_es.account_group_189" />
</record>
@@ -6,7 +6,7 @@
<field name="code">100</field>
<field name="reconcile" eval="False"/>
<field name="name">Capital social</field>
<field name="user_type_id" ref="account.data_account_type_current_assets"/>
<field name="user_type_id" ref="account.data_account_type_equity"/>
<field name="chart_template_id" ref="account_chart_template_pymes"/>
<field name="group_id" ref="l10n_es.account_group_100" />
</record>
@@ -14,7 +14,7 @@
<field name="code">1030</field>
<field name="reconcile" eval="False"/>
<field name="name">Socios por desembolsos no exigidos, capital social</field>
<field name="user_type_id" ref="account.data_account_type_current_assets"/>
<field name="user_type_id" ref="account.data_account_type_equity"/>
<field name="chart_template_id" ref="account_chart_template_pymes"/>
<field name="group_id" ref="l10n_es.account_group_103" />
</record>
@@ -22,7 +22,7 @@
<field name="code">1034</field>
<field name="reconcile" eval="False"/>
<field name="name">Socios por desembolsos no exigidos, capital pendiente de inscripción</field>
<field name="user_type_id" ref="account.data_account_type_current_assets"/>
<field name="user_type_id" ref="account.data_account_type_equity"/>
<field name="chart_template_id" ref="account_chart_template_pymes"/>
<field name="group_id" ref="l10n_es.account_group_103" />
</record>
@@ -30,7 +30,7 @@
<field name="code">1040</field>
<field name="reconcile" eval="False"/>
<field name="name">Socios por aportaciones no dinerarias pendientes, capital social</field>
<field name="user_type_id" ref="account.data_account_type_current_assets"/>
<field name="user_type_id" ref="account.data_account_type_equity"/>
<field name="chart_template_id" ref="account_chart_template_pymes"/>
<field name="group_id" ref="l10n_es.account_group_104" />
</record>
@@ -38,7 +38,7 @@
<field name="code">1044</field>
<field name="reconcile" eval="False"/>
<field name="name">Socios por aportaciones no dinerarias pendientes, capital pendiente de inscripción</field>
<field name="user_type_id" ref="account.data_account_type_current_assets"/>
<field name="user_type_id" ref="account.data_account_type_equity"/>
<field name="chart_template_id" ref="account_chart_template_pymes"/>
<field name="group_id" ref="l10n_es.account_group_104" />
</record>
@@ -46,7 +46,7 @@
<field name="code">120</field>
<field name="reconcile" eval="False"/>
<field name="name">Remanente</field>
<field name="user_type_id" ref="account.data_account_type_current_assets"/>
<field name="user_type_id" ref="account.data_account_type_equity"/>
<field name="chart_template_id" ref="account_chart_template_pymes"/>
<field name="group_id" ref="l10n_es.account_group_120" />
</record>
@@ -54,7 +54,7 @@
<field name="code">121</field>
<field name="reconcile" eval="False"/>
<field name="name">Resultados negativos de ejercicios anteriores</field>
<field name="user_type_id" ref="account.data_account_type_current_assets"/>
<field name="user_type_id" ref="account.data_account_type_equity"/>
<field name="chart_template_id" ref="account_chart_template_pymes"/>
<field name="group_id" ref="l10n_es.account_group_121" />
</record>
@@ -70,7 +70,7 @@
<field name="code">130</field>
<field name="reconcile" eval="False"/>
<field name="name">Subvenciones oficiales de capital</field>
<field name="user_type_id" ref="account.data_account_type_current_assets"/>
<field name="user_type_id" ref="account.data_account_type_equity"/>
<field name="chart_template_id" ref="account_chart_template_pymes"/>
<field name="group_id" ref="l10n_es.account_group_130" />
</record>
@@ -78,7 +78,7 @@
<field name="code">132</field>
<field name="reconcile" eval="False"/>
<field name="name">Otras subvenciones, donaciones y legados</field>
<field name="user_type_id" ref="account.data_account_type_current_assets"/>
<field name="user_type_id" ref="account.data_account_type_equity"/>
<field name="chart_template_id" ref="account_chart_template_pymes"/>
<field name="group_id" ref="l10n_es.account_group_132" />
</record>
@@ -136,7 +136,7 @@ class HrPayslipRun(models.Model):
'company_id': company.id,
'name': run.name,
'date': run.date_end,
'bank_id': company.partner_id.bank_ids and company.partner_id.bank_ids[0].id or False
'bank_id': company.partner_id.bank_ids and company.partner_id.bank_ids[0].bank_id.id or False
})
for slip in run.slip_ids:
# TODO is it necessary to interleave the calls ?
+1 -1
View File
@@ -55,5 +55,5 @@ class AccountAccountTag(models.Model):
_inherit = 'account.account.tag'
nature = fields.Selection([
('D', _('Debitable Account')), ('A', _('Creditable Account'))],
('D', 'Debitable Account'), ('A', 'Creditable Account')],
help='Used in Mexican report of electronic accounting (account nature).')
+3 -2
View File
@@ -669,10 +669,11 @@ class MassMailing(models.Model):
"""
else:
query +="""
AND s.mass_mailing_id = %%(mailing_id)s;
AND s.mass_mailing_id = %%(mailing_id)s
AND s.model = %%(target_model)s;
"""
query = query % {'target': target._table, 'mail_field': mail_field}
params = {'mailing_id': self.id, 'mailing_campaign_id': self.mass_mailing_campaign_id.id}
params = {'mailing_id': self.id, 'mailing_campaign_id': self.mass_mailing_campaign_id.id, 'target_model': self.mailing_model_real}
self._cr.execute(query, params)
seen_list = set(m[0] for m in self._cr.fetchall())
_logger.info(
+5 -5
View File
@@ -9,9 +9,9 @@ class BarcodeRule(models.Model):
_inherit = 'barcode.rule'
type = fields.Selection(selection_add=[
('weight', _('Weighted Product')),
('price', _('Priced Product')),
('discount', _('Discounted Product')),
('client', _('Client')),
('cashier', _('Cashier'))
('weight', 'Weighted Product'),
('price', 'Priced Product'),
('discount', 'Discounted Product'),
('client', 'Client'),
('cashier', 'Cashier')
])
+6
View File
@@ -463,6 +463,12 @@ class PosOrder(models.Model):
# for debugging and support purposes
_logger.exception('Reconciliation did not work for order %s', order.name)
def _filtered_for_reconciliation(self):
filter_states = ['invoiced', 'done']
if self.env['ir.config_parameter'].get_param('point_of_sale.order_reconcile_mode', 'all') == 'partner_only':
return self.filtered(lambda order: order.state in filter_states and order.partner_id)
return self.filtered(lambda order: order.state in filter_states)
def _default_session(self):
return self.env['pos.session'].search([('state', '=', 'opened'), ('user_id', '=', self.env.uid)], limit=1)
+1 -1
View File
@@ -38,7 +38,7 @@ class PosSession(models.Model):
paid=order.amount_paid,
))
order.action_pos_order_done()
orders_to_reconcile = session.order_ids.filtered(lambda order: order.state in ['invoiced', 'done'] and order.partner_id)
orders_to_reconcile = session.order_ids._filtered_for_reconciliation()
orders_to_reconcile.sudo()._reconcile_payments()
config_id = fields.Many2one(
@@ -399,6 +399,9 @@ var NumpadWidget = PosBaseWidget.extend({
this.$el.find('.mode-button[data-mode="price"]')
.toggleClass('disabled-mode', !has_price_control_rights)
.prop('disabled', !has_price_control_rights);
if (!has_price_control_rights && this.state.get('mode')=='price'){
this.state.changeMode('quantity');
}
},
clickDeleteLastChar: function() {
return this.state.deleteLastChar();
@@ -160,7 +160,7 @@
<field name="barcode_scanner"/>
</div>
<div class="o_setting_right_pane">
<label for="barcode_nomenclature_id" string="Barcode Scanner"/>
<label for="barcode_scanner" string="Barcode Scanner"/>
<div class="text-muted">
Set barcodes to scan products, customer cards, etc.
</div>
@@ -178,7 +178,7 @@
<field name="tax_regime_selection"/>
</div>
<div class="o_setting_right_pane">
<label for="fiscal_position_ids" string="Fiscal Position per Order"/>
<label for="tax_regime_selection" string="Fiscal Position per Order"/>
<div class="text-muted">
Choose among several tax regimes when processing an order
</div>
@@ -197,7 +197,7 @@
<field name="tax_regime"/>
</div>
<div class="o_setting_right_pane">
<label for="default_fiscal_position_id" string="Fiscal Position"/>
<label for="tax_regime" string="Fiscal Position"/>
<div class="text-muted">
Use a default specific tax regime
</div>
+1 -1
View File
@@ -13,7 +13,7 @@ class BarcodeRule(models.Model):
_inherit = 'barcode.rule'
type = fields.Selection(selection_add=[
('credit', _('Credit Card'))
('credit', 'Credit Card')
])
+31 -22
View File
@@ -305,33 +305,42 @@ class Pricelist(models.Model):
:param company_id: if passed, used for looking up properties,
instead of current user's company
"""
res = self._get_partner_pricelist_multi([partner_id], company_id)
return res[partner_id].id
def _get_partner_pricelist_multi(self, partner_ids, company_id=None):
""" Retrieve the applicable pricelist for given partners in a given company.
:param company_id: if passed, used for looking up properties,
instead of current user's company
:return: a dict {partner_id: pricelist}
"""
Partner = self.env['res.partner']
Property = self.env['ir.property'].with_context(force_company=company_id or self.env.user.company_id.id)
Pricelist = self.env['product.pricelist']
p = Partner.browse(partner_id)
pl = Property.get('property_product_pricelist', Partner._name, '%s,%s' % (Partner._name, p.id))
if pl:
pl = pl[0].id
# retrieve values of property
result = Property.get_multi('property_product_pricelist', Partner._name, partner_ids)
if not pl:
if p.country_id.code:
pls = self.env['product.pricelist'].search([('country_group_ids.country_ids.code', '=', p.country_id.code)], limit=1)
pl = pls and pls[0].id
remaining_partner_ids = [pid for pid, val in result.items() if not val]
if remaining_partner_ids:
# get fallback pricelist when no pricelist for a given country
pl_fallback = (
Pricelist.search([('country_group_ids', '=', False)], limit=1) or
Property.get('property_product_pricelist', 'res.partner') or
Pricelist.search([], limit=1)
)
# group partners by country, and find a pricelist for each country
domain = [('id', 'in', remaining_partner_ids)]
groups = Partner.read_group(domain, ['country_id'], ['country_id'])
for group in groups:
country_id = group['country_id'] and group['country_id'][0]
pl = Pricelist.search([('country_group_ids.country_ids', '=', country_id)], limit=1)
pl = pl or pl_fallback
for pid in Partner.search(group['__domain']).ids:
result[pid] = pl
if not pl:
# search pl where no country
pls = self.env['product.pricelist'].search([('country_group_ids', '=', False)], limit=1)
pl = pls and pls[0].id
if not pl:
prop = Property.get('property_product_pricelist', 'res.partner')
pl = prop and prop[0].id
if not pl:
pls = self.env['product.pricelist'].search([], limit=1)
pl = pls and pls[0].id
return pl
return result
class ResCountryGroup(models.Model):
+2 -2
View File
@@ -47,8 +47,8 @@ class ProductTemplate(models.Model):
help="A description of the Product that you want to communicate to your customers. "
"This description will be copied to every Sales Order, Delivery Order and Customer Invoice/Credit Note")
type = fields.Selection([
('consu', _('Consumable')),
('service', _('Service'))], string='Product Type', default='consu', required=True,
('consu', 'Consumable'),
('service', 'Service')], string='Product Type', default='consu', required=True,
help='A stockable product is a product for which you manage stock. The "Inventory" app has to be installed.\n'
'A consumable product, on the other hand, is a product for which stock is not managed.\n'
'A service is a non-material product you provide.\n'
+4 -3
View File
@@ -8,17 +8,18 @@ class Partner(models.Model):
_name = 'res.partner'
_inherit = 'res.partner'
# NOT A REAL PROPERTY !!!!
property_product_pricelist = fields.Many2one(
'product.pricelist', 'Sale Pricelist', compute='_compute_product_pricelist',
inverse="_inverse_product_pricelist", company_dependent=False, # NOT A REAL PROPERTY
inverse="_inverse_product_pricelist", company_dependent=False,
help="This pricelist will be used, instead of the default one, for sales to the current partner")
@api.multi
@api.depends('country_id')
def _compute_product_pricelist(self):
res = self.env['product.pricelist']._get_partner_pricelist_multi(self.ids)
for p in self:
if not isinstance(p.id, models.NewId): # if not onchange
p.property_product_pricelist = self.env['product.pricelist']._get_partner_pricelist(p.id)
p.property_product_pricelist = res.get(p.id)
@api.one
def _inverse_product_pricelist(self):
+3 -3
View File
@@ -203,9 +203,9 @@ class Project(models.Model):
help="Internal email associated with this project. Incoming emails are automatically synchronized "
"with Tasks (or optionally Issues if the Issue Tracker module is installed).")
privacy_visibility = fields.Selection([
('followers', _('On invitation only')),
('employees', _('Visible by all employees')),
('portal', _('Visible by following customers')),
('followers', 'On invitation only'),
('employees', 'Visible by all employees'),
('portal', 'Visible by following customers'),
],
string='Privacy', required=True,
default='employees',
@@ -66,7 +66,7 @@ class ReportIntrastat(models.Model):
left join report_intrastat_code intrastat on pt.intrastat_id = intrastat.id
left join (res_partner inv_address
left join res_country inv_country on (inv_country.id = inv_address.country_id))
on (inv_address.id = inv.partner_id)
on (inv_address.id = coalesce(inv.partner_shipping_id, inv.partner_id))
where
inv.state in ('open','paid')
and inv_line.product_id is not null
+5
View File
@@ -67,6 +67,11 @@
<menuitem id="prod_config_main" name="Products" parent="menu_sale_config" sequence="5"/>
<menuitem id="menu_attribute_action" action="product.attribute_action" parent="prod_config_main" sequence="1" groups="base.group_no_one" active="False"/>
<menuitem action="product.variants_action" id="menu_variants_action" parent="sale.prod_config_main" sequence="2" groups="base.group_no_one" active="False"/>
<menuitem id="menu_product_category_config_sale"
action="product.product_category_action_form"
parent="sale.prod_config_main"
sequence="1"
groups="base.group_no_one"/>
<menuitem id="menu_products" action="product.product_normal_action_sell" parent="product_menu_catalog" groups="product.group_product_variant" sequence="2" active="False"/>
<menuitem id="next_id_16" name="Units of Measure" parent="sale.prod_config_main" sequence="6" groups="uom.group_uom" active="False"/>
<menuitem action="uom.product_uom_form_action" id="menu_product_uom_form_action" parent="sale.prod_config_main" sequence="7" groups="uom.group_uom" active="False"/>
+1 -1
View File
@@ -6,7 +6,7 @@
<field name="model">crm.lead</field>
<field name="inherit_id" ref="crm.crm_case_form_view_oppor"/>
<field name="arch" type="xml">
<xpath expr="//button[@name='action_set_won']" position="before">
<xpath expr="//button[@name='action_set_won_rainbowman']" position="before">
<button string="New Quotation" name="%(sale_action_quotations_new)d" type="action" class="oe_highlight"
context="{'search_default_partner_id': partner_id,
'default_partner_id': partner_id,
+4 -4
View File
@@ -8,8 +8,8 @@ class BarcodeRule(models.Model):
_inherit = 'barcode.rule'
type = fields.Selection(selection_add=[
('weight', _('Weighted Product')),
('location', _('Location')),
('lot', _('Lot')),
('package', _('Package'))
('weight', 'Weighted Product'),
('location', 'Location'),
('lot', 'Lot'),
('package', 'Package')
])
+17 -6
View File
@@ -212,6 +212,14 @@ class StockMove(models.Model):
"""
return self.location_id.usage == 'supplier' and self.location_dest_id.usage == 'customer'
def _is_dropshipped_returned(self):
""" Check if the move should be considered as a returned dropshipping move so that the cost
method will be able to apply the correct logic.
:return: True if the move is a returned dropshipping one else False
"""
return self.location_id.usage == 'customer' and self.location_dest_id.usage == 'supplier'
@api.model
def _run_fifo(self, move, quantity=None):
""" Value `move` according to the FIFO rule, meaning we consume the
@@ -323,7 +331,7 @@ class StockMove(models.Model):
'value': value if quantity is None else self.value + value,
'price_unit': value / valued_quantity,
})
elif self._is_dropshipped():
elif self._is_dropshipped() or self._is_dropshipped_returned():
curr_rounding = self.company_id.currency_id.rounding
if self.product_id.cost_method in ['fifo']:
price_unit = self._get_price_unit()
@@ -335,8 +343,8 @@ class StockMove(models.Model):
# In move have a positive value, out move have a negative value, let's arbitrary say
# dropship are positive.
self.write({
'value': value,
'price_unit': price_unit,
'value': value if self._is_dropshipped() else -value,
'price_unit': price_unit if self._is_dropshipped() else -price_unit,
})
def _action_done(self):
@@ -359,7 +367,7 @@ class StockMove(models.Model):
if company_src and company_dst and company_src.id != company_dst.id:
raise UserError(_("The move lines are not in a consistent states: they are doing an intercompany in a single step while they should go through the intercompany transit location."))
move._run_valuation()
for move in res.filtered(lambda m: m.product_id.valuation == 'real_time' and (m._is_in() or m._is_out() or m._is_dropshipped())):
for move in res.filtered(lambda m: m.product_id.valuation == 'real_time' and (m._is_in() or m._is_out() or m._is_dropshipped() or m._is_dropshipped_returned())):
move._account_entry_move()
return res
@@ -657,10 +665,13 @@ class StockMove(models.Model):
else:
self.with_context(force_company=company_from.id)._create_account_move_line(acc_valuation, acc_dest, journal_id)
if self.company_id.anglo_saxon_accounting and self._is_dropshipped():
if self.company_id.anglo_saxon_accounting:
# Creates an account entry from stock_input to stock_output on a dropship move. https://github.com/odoo/odoo/issues/12687
journal_id, acc_src, acc_dest, acc_valuation = self._get_accounting_data_for_valuation()
self.with_context(force_company=self.company_id.id)._create_account_move_line(acc_src, acc_dest, journal_id)
if self._is_dropshipped():
self.with_context(force_company=self.company_id.id)._create_account_move_line(acc_src, acc_dest, journal_id)
elif self._is_dropshipped_returned():
self.with_context(force_company=self.company_id.id)._create_account_move_line(acc_dest, acc_src, journal_id)
if self.company_id.anglo_saxon_accounting:
#eventually reconcile together the invoice and valuation accounting entries on the stock interim accounts
@@ -37,7 +37,7 @@ class TestStockValuation(AccountingTestCase):
# sell one unit of this product
customer1 = self.env['res.partner'].create({'name': 'customer1'})
sale_order1 = self.env['sale.order'].create({
self.sale_order1 = self.env['sale.order'].create({
'partner_id': customer1.id,
'partner_invoice_id': customer1.id,
'partner_shipping_id': customer1.id,
@@ -51,38 +51,38 @@ class TestStockValuation(AccountingTestCase):
'pricelist_id': self.env.ref('product.list0').id,
'picking_policy': 'direct',
})
sale_order1.action_confirm()
self.sale_order1.action_confirm()
# confirm the purchase order
purchase_order1 = self.env['purchase.order'].search([('group_id', '=', sale_order1.procurement_group_id.id)])
purchase_order1.button_confirm()
self.purchase_order1 = self.env['purchase.order'].search([('group_id', '=', self.sale_order1.procurement_group_id.id)])
self.purchase_order1.button_confirm()
# validate the dropshipping picking
self.assertEqual(len(sale_order1.picking_ids), 1)
self.assertEqual(sale_order1.picking_ids.move_lines._is_dropshipped(), True)
wizard = sale_order1.picking_ids.button_validate()
self.assertEqual(len(self.sale_order1.picking_ids), 1)
self.assertEqual(self.sale_order1.picking_ids.move_lines._is_dropshipped(), True)
wizard = self.sale_order1.picking_ids.button_validate()
immediate_transfer = self.env[wizard['res_model']].browse(wizard['res_id'])
immediate_transfer.process()
self.assertEqual(sale_order1.picking_ids.state, 'done')
self.assertEqual(self.sale_order1.picking_ids.state, 'done')
# create the vendor bill
vendor_bill1 = self.env['account.invoice'].create({
self.vendor_bill1 = self.env['account.invoice'].create({
'partner_id': vendor1.id,
'purchase_id': purchase_order1.id,
'purchase_id': self.purchase_order1.id,
'account_id': vendor1.property_account_payable_id.id,
'type': 'in_invoice',
})
vendor_bill1.purchase_order_change()
vendor_bill1.action_invoice_open()
self.vendor_bill1.purchase_order_change()
self.vendor_bill1.action_invoice_open()
# create the customer invoice
customer_invoice1_id = sale_order1.action_invoice_create()
customer_invoice1 = self.env['account.invoice'].browse(customer_invoice1_id)
customer_invoice1.action_invoice_open()
self.customer_invoice1_id = self.sale_order1.action_invoice_create()
self.customer_invoice1 = self.env['account.invoice'].browse(self.customer_invoice1_id)
self.customer_invoice1.action_invoice_open()
all_amls = vendor_bill1.move_id.line_ids + customer_invoice1.move_id.line_ids
if sale_order1.picking_ids.move_lines.account_move_ids:
all_amls |= sale_order1.picking_ids.move_lines.account_move_ids.line_ids
all_amls = self.vendor_bill1.move_id.line_ids + self.customer_invoice1.move_id.line_ids
if self.sale_order1.picking_ids.move_lines.account_move_ids:
all_amls |= self.sale_order1.picking_ids.move_lines.account_move_ids.line_ids
return all_amls
def _check_results(self, expected_aml, expected_aml_count, all_amls):
@@ -268,3 +268,33 @@ class TestStockValuation(AccountingTestCase):
self._check_results(expected_aml, 8, all_amls)
def test_dropship_standard_perpetual_anglosaxon_ordered_return(self):
self.env.user.company_id.anglo_saxon_accounting = True
self.product1.product_tmpl_id.cost_method = 'standard'
self.product1.product_tmpl_id.standard_price = 10
self.product1.product_tmpl_id.valuation = 'real_time'
self.product1.product_tmpl_id.invoice_policy = 'order'
all_amls = self._dropship_product1()
# return what we've done
stock_return_picking = self.env['stock.return.picking']\
.with_context(active_ids=self.sale_order1.picking_ids.ids, active_id=self.sale_order1.picking_ids.ids[0])\
.create({})
stock_return_picking_action = stock_return_picking.create_returns()
return_pick = self.env['stock.picking'].browse(stock_return_picking_action['res_id'])
return_pick.move_lines[0].move_line_ids[0].qty_done = 1.0
return_pick.action_done()
self.assertEqual(return_pick.move_lines._is_dropshipped_returned(), True)
all_amls_return = self.vendor_bill1.move_id.line_ids + self.customer_invoice1.move_id.line_ids
if self.sale_order1.picking_ids.mapped('move_lines.account_move_ids'):
all_amls_return |= self.sale_order1.picking_ids.mapped('move_lines.account_move_ids.line_ids')
# Two extra AML should have been created for the return
expected_aml = {
self.acc_stock_in: (10.0, 0.0),
self.acc_stock_out: (0.0, 10.0),
}
self._check_results(expected_aml, 2, all_amls_return - all_amls)
@@ -0,0 +1,23 @@
odoo.define('root.widget', function (require) {
"use strict";
var ServiceProviderMixin = require('web.ServiceProviderMixin');
var Widget = require('web.Widget');
/**
* This is the root widget in the frontend bundle when website is not installed.
*
* This widget is important, because the tour manager needs a root widget in
* order to work. The root widget must be a service provider with the ajax
* service, so that the tour manager can let the server know when tours have
* been consumed.
*/
var PublicRootWidget = Widget.extend(ServiceProviderMixin, {
init: function () {
this._super.apply(this, arguments);
ServiceProviderMixin.init.call(this);
}
});
return new PublicRootWidget();
});
@@ -2139,7 +2139,7 @@ var JournalDashboardGraph = AbstractField.extend({
return this._super.apply(this, arguments);
},
destroy: function () {
if ('nv' in window) {
if ('nv' in window && nv.utils && nv.utils.offWindowResize) {
// if the widget is destroyed before the lazy loaded libs (nv) are
// actually loaded (i.e. after the widget has actually started),
// nv is undefined, but the handler isn't bound yet anyway
@@ -193,7 +193,6 @@ var ListRenderer = BasicRenderer.extend({
reject = columnInvisibleFields[c.attrs.name];
}
if (!reject && c.attrs.widget === 'handle') {
self.hasHandle = true;
self.handleField = c.attrs.name;
}
return reject;
@@ -657,6 +656,8 @@ var ListRenderer = BasicRenderer.extend({
this._computeAggregates();
$table.toggleClass('o_list_view_grouped', is_grouped);
$table.toggleClass('o_list_view_ungrouped', !is_grouped);
this.hasHandle = this.state.orderedBy.length === 0 ||
this.state.orderedBy[0].name === this.handleField;
if (is_grouped) {
$table
.append(this._renderHeader(true))
@@ -34,7 +34,7 @@
background-size: cover;
background-position: bottom center;
background-repeat: no-repeat;
min-height: 900px;
min-height: 620px;
thead tr th, h2 {
color: $o-brand-primary;
}
@@ -2005,6 +2005,45 @@ QUnit.module('basic_fields', {
assert.verifySteps(['destroy']);
});
QUnit.test('graph dashboard widget can be destroyed when nv is partially loaded', function (assert) {
// this test ensures that the JournalDashboardGraph widget doesn't crash
// when being destroyed before nv has been completely loaded
assert.expect(2);
testUtils.patch(basicFields.JournalDashboardGraph, {
destroy: function () {
assert.step('destroy');
// nv is fully loaded only when nvd3.js has been loaded
// which happens sequentially after nv.d3.js
// we simulate this race condition with:
var offWindowResize = window.nv.utils.offWindowResize;
window.nv.utils.offWindowResize = undefined;
this._super.apply(this, arguments);
window.nv.utils.offWindowResize = offWindowResize;
},
});
var kanban = createView({
View: KanbanView,
model: 'partner',
data: this.data,
arch: '<kanban class="o_kanban_test">' +
'<field name="graph_type"/>' +
'<templates><t t-name="kanban-box">' +
'<div>' +
'<field name="graph_data" t-att-graph_type="record.graph_type.raw_value" widget="dashboard_graph"/>' +
'</div>' +
'</t>' +
'</templates></kanban>',
domain: [['id', 'in', [1]]],
});
kanban.destroy();
testUtils.unpatch(basicFields.JournalDashboardGraph);
assert.verifySteps(['destroy']);
});
QUnit.module('AceEditor');
QUnit.test('ace widget on text fields works', function (assert) {
@@ -3235,6 +3235,76 @@ QUnit.module('Views', {
list.destroy();
});
QUnit.test('editable list, handle widget locks and unlocks on sort', function (assert) {
assert.expect(6);
// we need another sortable field to lock/unlock the handle
this.data.foo.fields.amount.sortable = true;
// resequence makes sense on a sequence field, not on arbitrary fields
this.data.foo.records[0].int_field = 0;
this.data.foo.records[1].int_field = 1;
this.data.foo.records[2].int_field = 2;
this.data.foo.records[3].int_field = 3;
var list = createView({
View: ListView,
model: 'foo',
data: this.data,
arch: '<tree editable="top" default_order="int_field">' +
'<field name="int_field" widget="handle"/>' +
'<field name="amount" widget="float"/>' +
'</tree>',
});
assert.strictEqual(list.$('tbody').text(), '1200.00500.00300.000.00',
"default should be sorted by int_field");
// Drag and drop the fourth line in second position
testUtils.dragAndDrop(
list.$('.ui-sortable-handle').eq(3),
list.$('tbody tr').first(),
{position: 'bottom'}
);
// Handle should be unlocked at this point
assert.strictEqual(list.$('tbody').text(), '1200.000.00500.00300.00',
"drag and drop should have succeeded, as the handle is unlocked");
// Sorting by a field different for int_field should lock the handle
list.$('.o_column_sortable').eq(1).click();
assert.strictEqual(list.$('tbody').text(), '0.00300.00500.001200.00',
"should have been sorted by amount");
// Drag and drop the fourth line in second position (not)
testUtils.dragAndDrop(
list.$('.ui-sortable-handle').eq(3),
list.$('tbody tr').first(),
{position: 'bottom'}
);
assert.strictEqual(list.$('tbody').text(), '0.00300.00500.001200.00',
"drag and drop should have failed as the handle is locked");
// Sorting by int_field should unlock the handle
list.$('.o_column_sortable').eq(0).click();
assert.strictEqual(list.$('tbody').text(), '1200.000.00500.00300.00',
"records should be ordered as per the previous resequence");
// Drag and drop the fourth line in second position
testUtils.dragAndDrop(
list.$('.ui-sortable-handle').eq(3),
list.$('tbody tr').first(),
{position: 'bottom'}
);
assert.strictEqual(list.$('tbody').text(), '1200.00300.000.00500.00',
"drag and drop should have worked as the handle is unlocked");
list.destroy();
});
QUnit.test('editable list with handle widget with slow network', function (assert) {
assert.expect(15);
+1
View File
@@ -291,6 +291,7 @@
<link rel="stylesheet" type="text/scss" href="/web/static/src/scss/import_bootstrap.scss"/>
<script type="text/javascript" src="/web/static/src/js/services/session.js"></script>
<script type="text/javascript" src="/web/static/src/js/chrome/public_root_widget.js"></script>
</template>
<template id="web.layout" name="Web layout">&lt;!DOCTYPE html&gt;
@@ -73,8 +73,6 @@ class ResConfigSettings(models.TransientModel):
config.language_count = len(self.language_ids)
def set_values(self):
if not self.user_has_groups('website.group_website_designer'):
raise AccessDenied()
super(ResConfigSettings, self).set_values()
@api.multi
+2 -1
View File
@@ -95,7 +95,8 @@ var SuggestionList = Widget.extend({
var self = this;
self.$el.empty();
// TODO Improve algorithm + Ajust based on custom user keywords
var regex = new RegExp(self.root, 'gi');
var regex_string = this.root + '\\+?';
var regex = new RegExp(regex_string, 'gi');
keywords = _.map(_.uniq(keywords), function (word) {
return word.replace(regex, '').trim();
});
+3 -1
View File
@@ -24,6 +24,9 @@
<link rel="stylesheet" type="text/scss" href="/website/static/src/scss/website.ui.scss"/>
<link rel="stylesheet" type="text/scss" href="/website/static/src/scss/website.zoomodoo.scss"/>
</xpath>
<xpath expr="//script[@src='/web/static/src/js/chrome/public_root_widget.js']" position="replace">
<script type="text/javascript" src="/website/static/src/js/content/website_root.js"/>
</xpath>
<xpath expr="//script[last()]" position="after">
<script type="text/javascript" src="/website/static/src/js/utils.js"/>
<script type="text/javascript" src="/website/static/src/js/website.js"/>
@@ -32,7 +35,6 @@
<script type="text/javascript" src="/website/static/src/js/content/lazy_template_call.js"/>
<script type="text/javascript" src="/website/static/src/js/content/menu.js"/>
<script type="text/javascript" src="/website/static/src/js/content/snippets.animation.js"/>
<script type="text/javascript" src="/website/static/src/js/content/website_root.js"/>
<script type="text/javascript" src="/website/static/src/js/content/zoomodoo.js"/>
<script type="text/javascript" src="/website/static/src/js/menu/navbar.js"/>
+9
View File
@@ -0,0 +1,9 @@
India, 2018-08-31
I hereby agree to the terms of the Odoo Individual Contributor License Agreement v1.0.
I declare that I am authorized and able to make this agreement and sign this declaration.
Signed,
Turkesh Patel turkesh4friends@gmail.com https://github.com/tpa-odoo
+25 -5
View File
@@ -159,11 +159,31 @@ class Property(models.Model):
# note: order by 'company_id asc' will return non-null values first
props = self.search(domain, order='company_id asc')
result = {}
for prop in props:
# for a given res_id, take the first property only
id = refs.pop(prop.res_id, None)
if id is not None:
result[id] = prop.get_by_record()
field = self.env[model]._fields[name]
if field.type == 'many2one':
# optimization for many2one fields
Comodel = self.env[field.comodel_name]
co_ids = set()
for prop in props:
# for a given res_id, take the first property only
id = refs.pop(prop.res_id, None)
if id is not None:
val = prop.value_reference
if val:
val = int(val.split(',')[1])
co_ids.add(val)
result[id] = val
# check for existence in batch, and update result accordingly
existing = {rec.id: rec for rec in Comodel.browse(co_ids).exists()}
result = {id: existing.get(val, Comodel) for id, val in result.items()}
else:
for prop in props:
# for a given res_id, take the first property only
id = refs.pop(prop.res_id, None)
if id is not None:
result[id] = prop.get_by_record()
# set the default value to the ids that are not in result
default_value = result.pop(False, False)
+10 -8
View File
@@ -551,14 +551,6 @@ class ResConfigSettings(models.TransientModel, ResConfigModuleInstallationMixin)
"""
Set values for the fields other that `default`, `group` and `module`
"""
pass
@api.multi
def execute(self):
self.ensure_one()
if not self.env.user._is_superuser() and not self.env.user.has_group('base.group_system'):
raise AccessError(_("Only administrators can change the settings"))
self = self.with_context(active_test=False)
classified = self._get_classified_fields()
@@ -608,6 +600,16 @@ class ResConfigSettings(models.TransientModel, ResConfigModuleInstallationMixin)
for method in dir(self):
if method.startswith('set_') and method is not 'set_values':
_logger.warning(_('Methods that start with `set_` are deprecated. Override `set_values` instead (Method %s)') % method)
@api.multi
def execute(self):
self.ensure_one()
if not self.env.user._is_superuser() and not self.env.user.has_group('base.group_system'):
raise AccessError(_("Only administrators can change the settings"))
self = self.with_context(active_test=False)
classified = self._get_classified_fields()
self.set_values()
# module fields: install/uninstall the selected modules
+1
View File
@@ -388,6 +388,7 @@ class CompanyDependent(models.Model):
_name = 'test_new_api.company'
foo = fields.Char(company_dependent=True)
tag_id = fields.Many2one('test_new_api.multi.tag', company_dependent=True)
class CompanyDependentAttribute(models.Model):
@@ -647,6 +647,7 @@ class TestFields(common.TransactionCase):
company0 = self.env.ref('base.main_company')
company1 = self.env['res.company'].create({'name': 'A', 'parent_id': company0.id})
company2 = self.env['res.company'].create({'name': 'B', 'parent_id': company1.id})
# create one user per company
user0 = self.env['res.users'].create({'name': 'Foo', 'login': 'foo',
'company_id': company0.id, 'company_ids': []})
@@ -654,24 +655,44 @@ class TestFields(common.TransactionCase):
'company_id': company1.id, 'company_ids': []})
user2 = self.env['res.users'].create({'name': 'Baz', 'login': 'baz',
'company_id': company2.id, 'company_ids': []})
# create a default value for the company-dependent field
field = self.env['ir.model.fields'].search([('model', '=', 'test_new_api.company'),
('name', '=', 'foo')])
self.env['ir.property'].create({'name': 'foo', 'fields_id': field.id,
# create values for many2one field
tag0 = self.env['test_new_api.multi.tag'].create({'name': 'Qux'})
tag1 = self.env['test_new_api.multi.tag'].create({'name': 'Quux'})
tag2 = self.env['test_new_api.multi.tag'].create({'name': 'Quuz'})
# create default values for the company-dependent fields
field_foo = self.env['ir.model.fields']._get('test_new_api.company', 'foo')
self.env['ir.property'].create({'name': 'foo', 'fields_id': field_foo.id,
'value': 'default', 'type': 'char'})
field_tag_id = self.env['ir.model.fields']._get('test_new_api.company', 'tag_id')
self.env['ir.property'].create({'name': 'foo', 'fields_id': field_tag_id.id,
'value': tag0, 'type': 'many2one'})
# create/modify a record, and check the value for each user
record = self.env['test_new_api.company'].create({'foo': 'main'})
record = self.env['test_new_api.company'].create({'foo': 'main', 'tag_id': tag1})
record.invalidate_cache()
self.assertEqual(record.sudo(user0).foo, 'main')
self.assertEqual(record.sudo(user1).foo, 'default')
self.assertEqual(record.sudo(user2).foo, 'default')
self.assertEqual(record.sudo(user0).tag_id, tag1)
self.assertEqual(record.sudo(user1).tag_id, tag0)
self.assertEqual(record.sudo(user2).tag_id, tag0)
record.sudo(user1).foo = 'alpha'
record.sudo(user1).write({'foo': 'alpha', 'tag_id': tag2.id})
record.invalidate_cache()
self.assertEqual(record.sudo(user0).foo, 'main')
self.assertEqual(record.sudo(user1).foo, 'alpha')
self.assertEqual(record.sudo(user2).foo, 'default')
self.assertEqual(record.sudo(user0).tag_id, tag1)
self.assertEqual(record.sudo(user1).tag_id, tag2)
self.assertEqual(record.sudo(user2).tag_id, tag0)
# unlink value of a many2one (tag2), and check again
tag2.unlink()
self.assertEqual(record.sudo(user0).tag_id, tag1)
self.assertEqual(record.sudo(user1).tag_id, tag0.browse())
self.assertEqual(record.sudo(user2).tag_id, tag0)
# create company record and attribute
company_record = self.env['test_new_api.company'].create({'foo': 'ABC'})