Skip to content
Snippets Groups Projects
Commit b19f4ae0 authored by Nicolas Martinelli's avatar Nicolas Martinelli
Browse files

[DEL] sale_contract: move to Enterprise

parent b468ebc6
No related branches found
No related tags found
No related merge requests found
Showing
with 0 additions and 13349 deletions
......@@ -867,11 +867,6 @@ file_filter = addons/sale/i18n/<lang>.po
source_file = addons/sale/i18n/sale.pot
source_lang = en
[odoo-9.sale_contract]
file_filter = addons/sale_contract/i18n/<lang>.po
source_file = addons/sale_contract/i18n/sale_contract.pot
source_lang = en
[odoo-9.sale_crm]
file_filter = addons/sale_crm/i18n/<lang>.po
source_file = addons/sale_crm/i18n/sale_crm.pot
......@@ -1226,4 +1221,3 @@ source_lang = en
file_filter = addons/website_version/i18n/<lang>.po
source_file = addons/website_version/i18n/website_version.pot
source_lang = en
# -*- coding: utf-8 -*-
# Part of Odoo. See LICENSE file for full copyright and licensing details.
import models
import report
import tests
# -*- coding: utf-8 -*-
# Part of Odoo. See LICENSE file for full copyright and licensing details.
{
'name': 'Contracts Management',
'version': '1.1',
'category': 'Sales Management',
'description': """
This module is for modifying account analytic view to show important data to project manager of services companies.
===================================================================================================================
Adds menu to show relevant information to each manager.You can also view the report of account analytic summary user-wise as well as month-wise.
""",
'author': 'Camptocamp / Odoo',
'website': 'https://www.odoo.com/page/billing',
'depends': ['hr_timesheet_invoice', 'sale', 'payment'], #although sale is technically not required to install this module, all menuitems are located under 'Sales' application
'data': [
'security/account_analytic_analysis_security.xml',
'security/ir.model.access.csv',
'views/sale_contract_view.xml',
'data/sale_contract_cron.xml',
'data/sale_contract_data.xml',
'views/res_config_view.xml',
'views/account_analytic_analysis.xml',
'views/product_template_view.xml',
'report/sale_contract_report_view.xml',
],
'demo': ['demo/sale_contract_demo.xml'],
'installable': True,
'auto_install': False,
}
<?xml version="1.0" encoding='UTF-8'?>
<openerp>
<data>
<record id="account_analytic_cron_email_template" model="mail.template">
<field name="name">Contract expiration reminder</field>
<field name="email_from">${(object.email or '')|safe}</field>
<field name="subject">Contract expiration reminder ${user.company_id.name}</field>
<field name="email_to">${object.email|safe}</field>
<field name="lang">${object.lang}</field>
<field name="model_id" ref="base.model_res_users"/>
<field name="auto_delete" eval="True"/>
<field name="body_html"><![CDATA[
Hello ${object.name},
% macro account_table(values):
<table cellspacing="1" border="1" cellpadding="4">
<tr>
<th>Customer</th>
<th>Contract</th>
<th>Dates</th>
<th>Prepaid Units</th>
<th>Contact</th>
</tr>
% for partner, accounts in values:
% for account in accounts:
<tr>
<td>${partner.name}</td>
<td><a href="${ctx["base_url"]}/#action=${ctx["action_id"]}&id=${account.id}&view_type=form">${account.name}</a></td>
<td>${account.date_start} to ${account.date and account.date or '???'}</td>
<td>
% if account.quantity_max != 0.0:
${account.remaining_hours}/${account.quantity_max} units
% endif
</td>
<td>${account.partner_id.phone or ''}, ${account.partner_id.email or ''}</td>
</tr>
% endfor
% endfor
</table>
% endmacro
% if "new" in ctx["data"]:
<h2>The following contracts just expired: </h2>
${account_table(ctx["data"]["new"].iteritems())}
% endif
% if "old" in ctx["data"]:
<h2>The following expired contracts are still not processed: </h2>
${account_table(ctx["data"]["old"].iteritems())}
% endif
% if "future" in ctx["data"]:
<h2>The following contracts will expire in less than one month: </h2>
${account_table(ctx["data"]["future"].iteritems())}
% endif
<p>
You can check all contracts to be renewed using the menu:
</p>
<ul>
<li>Sales / Invoicing / Contracts to Renew</li>
</ul>
<p>
Thanks,
</p>
<pre>
--
Odoo Automatic Email
</pre>
]]></field>
</record>
<!--
-->
<record model="ir.cron" id="account_analytic_cron">
<field name="name">Contract expiration reminder</field>
<field name="interval_number">1</field>
<field name="interval_type">weeks</field>
<field name="numbercall">-1</field>
<field name="doall" eval="False"/>
<field name="model" eval="'account.analytic.account'"/>
<field name="function" eval="'cron_account_analytic_account'"/>
<field name="args" eval="'()'" />
</record>
<record model="ir.cron" id="account_analytic_cron_for_invoice">
<field name="name">Generate Recurring Invoices and Payments for Subscription Contracts</field>
<field name="interval_number">1</field>
<field name="interval_type">days</field>
<field name="numbercall">-1</field>
<field name="model" eval="'account.analytic.account'"/>
<field name="function" eval="'_cron_recurring_create_invoice'"/>
<field name="args" eval="'()'"/>
</record>
</data>
</openerp>
<odoo>
<!-- Recurrent payment emails -->
<record id="email_payment_close" model="mail.template">
<field name="name">email_payment_close</field>
<field name="email_from">${(object.manager_id.email or object.company_id.email or 'noreply@localhost')|safe}</field>
<field name="subject">Termination of subscription ${object.code}</field>
<field name="email_to">${ctx['email_to'] or ''}</field>
<field name="model_id" ref="analytic.model_account_analytic_account"/>
<field name="body_html">
<![CDATA[
<div style="font-family: 'Lucida Grande', Ubuntu, Arial, Verdana, sans-serif; font-size: 12px; color: rgb(34, 34, 34); background-color: rgb(255, 255, 255); ">
<p>Hello ${object.partner_id.name},</p>
<p>
% if ctx.get('payment_method') and ctx.get('total_amount'):
Our final attempt to process a payment for your subscription using your payment method
${ctx['payment_method']}
for ${ctx['total_amount']} ${ctx.get('currency')} failed.
% if ctx.get('error'):
Your bank or credit institution gave the following details about the issue: <pre>${ctx['error']}</pre>.
%endif
% else:
Our final attempt to process a payment for your subscription failed because we have no payment method recorded for you.
% endif
</p>
<p>
As your payment should have been made <strong>15 days ago</strong>, your subscription has been terminated.
</p>
<br/>
<p>Should you wish to resolve this issue, do not hesitate to contact us.</p>
<p>Thank you for choosing ${object.company_id.name or 'us'}!</p>
<br/>
<br/>
<div style="width: 375px; margin: 0px; padding: 0px; background-color: #8E0000; border-top-left-radius: 5px 5px; border-top-right-radius: 5px 5px; background-repeat: repeat no-repeat;">
<h3 style="margin: 0px; padding: 2px 14px; font-size: 12px; color: #DDD;">
<strong style="text-transform:uppercase;">${object.company_id.name}</strong></h3>
</div>
<div style="width: 347px; margin: 0px; padding: 5px 14px; line-height: 16px; background-color: #F2F2F2;">
<span style="color: #222; margin-bottom: 5px; display: block; ">
% if object.company_id.street:
${object.company_id.street}<br/>
% endif
% if object.company_id.street2:
${object.company_id.street2}<br/>
% endif
% if object.company_id.city or object.company_id.zip:
${object.company_id.zip} ${object.company_id.city}<br/>
% endif
% if object.company_id.country_id:
${object.company_id.state_id and ('%s, ' % object.company_id.state_id.name) or ''} ${object.company_id.country_id.name or ''}<br/>
% endif
</span>
% if object.company_id.phone:
<div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">
Phone:&nbsp; ${object.company_id.phone}
</div>
% endif
% if object.company_id.website:
<div>
Web :&nbsp;<a href="${object.company_id.website}">${object.company_id.website}</a>
</div>
% endif
<p></p>
</div>
</div>
]]>
</field>
</record>
<record id="email_payment_reminder" model="mail.template">
<field name="name">email_payment_reminder</field>
<field name="email_from">${(object.manager_id.email or object.company_id.email or 'noreply@localhost')|safe}</field>
<field name="subject">Payment reminder for subscription ${object.code}</field>
<field name="email_to">${ctx['email_to'] or ''}</field>
<field name="model_id" ref="analytic.model_account_analytic_account"/>
<field name="body_html">
<![CDATA[
<div style="font-family: 'Lucida Grande', Ubuntu, Arial, Verdana, sans-serif; font-size: 12px; color: rgb(34, 34, 34); background-color: rgb(255, 255, 255); ">
<p>Hello ${object.partner_id.name},</p>
<p>
% if ctx.get('payment_method') and ctx.get('total_amount'):
We were unable to process a payment for your subscription using your payment method
${ctx['payment_method']}
for ${ctx['total_amount']} ${ctx.get('currency')}.
% if ctx.get('error'):
Your bank or credit institution gave the following details about the issue: <pre>${ctx['error']}</pre>.
%endif
% else:
We were unable to process a payment for your subscription because we have no payment method recorded for you.
% endif
</p>
<p>
Your subscription ${ctx.get('code')} is still valid but will be <b>suspended</b>
on ${ctx.get('date_close')} unless the payment succeeds in the mean time (we will retry once every day).
Please double-check that you have sufficient funds.
</p>
<br/>
<p>If you have any question, do not hesitate to contact us.</p>
<p>Thank you for choosing ${object.company_id.name or 'us'}!</p>
<br/>
<br/>
<div style="width: 375px; margin: 0px; padding: 0px; background-color: #8E0000; border-top-left-radius: 5px 5px; border-top-right-radius: 5px 5px; background-repeat: repeat no-repeat;">
<h3 style="margin: 0px; padding: 2px 14px; font-size: 12px; color: #DDD;">
<strong style="text-transform:uppercase;">${object.company_id.name}</strong></h3>
</div>
<div style="width: 347px; margin: 0px; padding: 5px 14px; line-height: 16px; background-color: #F2F2F2;">
<span style="color: #222; margin-bottom: 5px; display: block; ">
% if object.company_id.street:
${object.company_id.street}<br/>
% endif
% if object.company_id.street2:
${object.company_id.street2}<br/>
% endif
% if object.company_id.city or object.company_id.zip:
${object.company_id.zip} ${object.company_id.city}<br/>
% endif
% if object.company_id.country_id:
${object.company_id.state_id and ('%s, ' % object.company_id.state_id.name) or ''} ${object.company_id.country_id.name or ''}<br/>
% endif
</span>
% if object.company_id.phone:
<div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">
Phone:&nbsp; ${object.company_id.phone}
</div>
% endif
% if object.company_id.website:
<div>
Web :&nbsp;<a href="${object.company_id.website}">${object.company_id.website}</a>
</div>
% endif
<p></p>
</div>
</div>
]]>
</field>
</record>
<record id="email_payment_success" model="mail.template">
<field name="name">email_payment_success</field>
<field name="email_from">${(object.user_id.email or object.company_id.email or 'noreply@localhost')|safe}</field>
<field name="subject">Invoice for subscription ${ctx.get('code')}</field>
<field name="email_to">${ctx['email_to'] or ''}</field>
<field name="model_id" ref="account.model_account_invoice"/>
<field name="report_template" ref="account.account_invoices" />
<field name="report_name">Invoice_${ctx.get('code')}_${ctx.get('previous_date')}</field>
<field name="body_html">
<![CDATA[
<div style="font-family: 'Lucida Grande', Ubuntu, Arial, Verdana, sans-serif; font-size: 12px; color: rgb(34, 34, 34); background-color: rgb(255, 255, 255); ">
<p>Hello ${object.partner_id.name},</p>
<p>
Your subscription (${ctx.get('code')}) has just been renewed
%if ctx.get('total_amount') and ctx.get('payment_method'):
via a payment of ${ctx['total_amount']} ${ctx['currency']} charged on ${ctx['payment_method']}
.
%endif
</p>
<p>You will find your invoice attached.</p>
%if ctx.get('next_date'):
<p>
Your next invoice will be on ${ctx.get('next_date')}.
</p>
%endif
<br/>
<p>If you have any question, do not hesitate to contact us.</p>
<p>Thank you for choosing ${object.company_id.name or 'us'}!</p>
<br/>
<br/>
<div style="width: 375px; margin: 0px; padding: 0px; background-color: #8E0000; border-top-left-radius: 5px 5px; border-top-right-radius: 5px 5px; background-repeat: repeat no-repeat;">
<h3 style="margin: 0px; padding: 2px 14px; font-size: 12px; color: #DDD;">
<strong style="text-transform:uppercase;">${object.company_id.name}</strong></h3>
</div>
<div style="width: 347px; margin: 0px; padding: 5px 14px; line-height: 16px; background-color: #F2F2F2;">
<span style="color: #222; margin-bottom: 5px; display: block; ">
% if object.company_id.street:
${object.company_id.street}<br/>
% endif
% if object.company_id.street2:
${object.company_id.street2}<br/>
% endif
% if object.company_id.city or object.company_id.zip:
${object.company_id.zip} ${object.company_id.city}<br/>
% endif
% if object.company_id.country_id:
${object.company_id.state_id and ('%s, ' % object.company_id.state_id.name) or ''} ${object.company_id.country_id.name or ''}<br/>
% endif
</span>
% if object.company_id.phone:
<div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">
Phone:&nbsp; ${object.company_id.phone}
</div>
% endif
% if object.company_id.website:
<div>
Web :&nbsp;<a href="${object.company_id.website}">${object.company_id.website}</a>
</div>
% endif
<p></p>
</div>
</div>
]]>
</field>
</record>
<!-- Standard Closing Reason -->
<record id="close_reason_1" model="account.analytic.close.reason">
<field name="name">Contract is too expensive</field>
</record>
<record id="close_reason_2" model="account.analytic.close.reason">
<field name="name">Contract does not meet my requirements</field>
</record>
<record id="close_reason_3" model="account.analytic.close.reason">
<field name="name">I don't use it</field>
</record>
<record id="close_reason_4" model="account.analytic.close.reason">
<field name="name">Other</field>
</record>
</odoo>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<openerp>
<data noupdate="1">
<record id="analytic.analytic_consultancy" model="account.analytic.account">
<field name="partner_id" ref="base.res_partner_3"/>
<field name="invoice_on_timesheets">True</field>
<field name="hours_qtt_est">1200</field>
<field name="fix_price_invoices">True</field>
<field name="to_invoice" ref="hr_timesheet_invoice.timesheet_invoice_factor1"/>
<field name="pricelist_id" ref="product.list0"/>
<field name="amount_max">100000</field>
<field name="contract_type">regular</field>
</record>
<record id="sale.sale_order_4" model="sale.order">
<field name="project_id" ref="analytic.analytic_consultancy"/>
</record>
<record id="analytic.analytic_super_product_trainings" model="account.analytic.account">
<field name="partner_id" ref="base.res_partner_18"/>
<field name="invoice_on_timesheets">True</field>
<field name="hours_qtt_est">500</field>
<field name="fix_price_invoices">True</field>
<field name="pricelist_id" ref="product.list0"/>
<field name="amount_max">50000</field>
<field name="to_invoice" ref="hr_timesheet_invoice.timesheet_invoice_factor1"/>
<field name="contract_type">regular</field>
</record>
<record id="sale.sale_order_6" model="sale.order">
<field name="project_id" ref="analytic.analytic_super_product_trainings"/>
<field name="partner_id" ref="base.res_partner_1"/>
</record>
<record id="analytic.analytic_support_internal" model="account.analytic.account">
<field name="partner_id" ref="base.res_partner_1"/>
<field name="invoice_on_timesheets">True</field>
<field name="hours_qtt_est">100</field>
<field name="pricelist_id" ref="product.list0"/>
<field name="to_invoice" ref="hr_timesheet_invoice.timesheet_invoice_factor1"/>
<field name="contract_type">regular</field>
</record>
</data>
</openerp>
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment