Browse Source
[ADD] contract_digitized_signature (#102)
[ADD] contract_digitized_signature (#102)
* [ADD] contract_digitized_signature * Correct README and add signature_name * Change to char field * Improve tests to acchieve full coveragepull/317/head
cubells
7 years ago
11 changed files with 230 additions and 0 deletions
-
66contract_digitized_signature/README.rst
-
4contract_digitized_signature/__init__.py
-
23contract_digitized_signature/__openerp__.py
-
36contract_digitized_signature/i18n/es.po
-
4contract_digitized_signature/models/__init__.py
-
30contract_digitized_signature/models/account_analytic_account.py
-
19contract_digitized_signature/report/report_contract.xml
-
BINcontract_digitized_signature/static/description/icon.png
-
4contract_digitized_signature/tests/__init__.py
-
23contract_digitized_signature/tests/test_contract_tracking.py
-
21contract_digitized_signature/views/contract_views.xml
@ -0,0 +1,66 @@ |
|||
.. image:: https://img.shields.io/badge/licence-AGPL--3-blue.svg |
|||
:target: http://www.gnu.org/licenses/agpl-3.0-standalone.html |
|||
:alt: License: AGPL-3 |
|||
|
|||
============================ |
|||
Contract Digitized Signature |
|||
============================ |
|||
|
|||
This module adds a signature field to contract report. |
|||
|
|||
Installation |
|||
============ |
|||
|
|||
This module depends on : |
|||
|
|||
* web_widget_digitized_signature |
|||
|
|||
This module is part of the OCA/web suite. |
|||
|
|||
Usage |
|||
===== |
|||
|
|||
#. Go to **Sales > Sales > Contracts** and edit or create a contract. |
|||
#. You will see a box ready to write a signature by your customer. |
|||
#. Save Contract. |
|||
#. Every time you modify signature, a message is saved in chatter to log any |
|||
changes on it. |
|||
#. You can clear signature in any moment by clicking on the **Clear** link |
|||
located on the top right side of signature box. |
|||
#. If you print the Contract, signature was added to contact report. |
|||
|
|||
|
|||
.. image:: https://odoo-community.org/website/image/ir.attachment/5784_f2813bd/datas |
|||
:alt: Try me on Runbot |
|||
:target: https://runbot.odoo-community.org/runbot/110/9.0 |
|||
|
|||
Bug Tracker |
|||
=========== |
|||
|
|||
Bugs are tracked on `GitHub Issues |
|||
<https://github.com/OCA/contract/issues>`_. In case of trouble, please |
|||
check there if your issue has already been reported. If you spotted it first, |
|||
help us smash it by providing detailed and welcomed feedback. |
|||
|
|||
Credits |
|||
======= |
|||
|
|||
Contributors |
|||
------------ |
|||
|
|||
* Vicent Cubells <vicent.cubells@tecnativa.com> |
|||
|
|||
Maintainer |
|||
---------- |
|||
|
|||
.. image:: https://odoo-community.org/logo.png |
|||
:alt: Odoo Community Association |
|||
:target: https://odoo-community.org |
|||
|
|||
This module is maintained by the OCA. |
|||
|
|||
OCA, or the Odoo Community Association, is a nonprofit organization whose |
|||
mission is to support the collaborative development of Odoo features and |
|||
promote its widespread use. |
|||
|
|||
To contribute to this module, please visit https://odoo-community.org. |
@ -0,0 +1,4 @@ |
|||
# -*- coding: utf-8 -*- |
|||
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). |
|||
|
|||
from . import models |
@ -0,0 +1,23 @@ |
|||
# -*- coding: utf-8 -*- |
|||
# Copyright 2017 Tecnativa - Vicent Cubells |
|||
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). |
|||
|
|||
{ |
|||
"name": "Contract Digitized Signature", |
|||
"version": "9.0.1.0.0", |
|||
"author": "Tecnativa, " |
|||
"Odoo Community Association (OCA)", |
|||
"website": "https://www.tecnativa.com", |
|||
"category": "Contract Management", |
|||
"license": "AGPL-3", |
|||
"depends": [ |
|||
"contract", |
|||
"sale", |
|||
"web_widget_digitized_signature", |
|||
], |
|||
"data": [ |
|||
"report/report_contract.xml", |
|||
"views/contract_views.xml", |
|||
], |
|||
"installable": True, |
|||
} |
@ -0,0 +1,36 @@ |
|||
# Translation of Odoo Server. |
|||
# This file contains the translation of the following modules: |
|||
# * contract_digitized_signature |
|||
# |
|||
msgid "" |
|||
msgstr "" |
|||
"Project-Id-Version: Odoo Server 9.0c\n" |
|||
"Report-Msgid-Bugs-To: \n" |
|||
"POT-Creation-Date: 2017-10-16 08:32+0000\n" |
|||
"PO-Revision-Date: 2017-10-16 08:32+0000\n" |
|||
"Last-Translator: <>\n" |
|||
"Language-Team: \n" |
|||
"MIME-Version: 1.0\n" |
|||
"Content-Type: text/plain; charset=UTF-8\n" |
|||
"Content-Transfer-Encoding: \n" |
|||
"Plural-Forms: \n" |
|||
|
|||
#. module: contract_digitized_signature |
|||
#: model:ir.ui.view,arch_db:contract_digitized_signature.report_contract_document |
|||
msgid "<strong>Customer acceptance:</strong>" |
|||
msgstr "<strong>Aceptación de cliente:</strong>" |
|||
|
|||
#. module: contract_digitized_signature |
|||
#: model:ir.model,name:contract_digitized_signature.model_account_analytic_account |
|||
msgid "Analytic Account" |
|||
msgstr "Contrato" |
|||
|
|||
#. module: contract_digitized_signature |
|||
#: model:ir.model.fields,field_description:contract_digitized_signature.field_account_analytic_account_customer_signature |
|||
msgid "Customer acceptance" |
|||
msgstr "Aceptación de cliente" |
|||
|
|||
#. module: contract_digitized_signature |
|||
#: model:ir.model.fields,field_description:contract_digitized_signature.field_account_analytic_account_signature_name |
|||
msgid "Signed by" |
|||
msgstr "Firmado por" |
@ -0,0 +1,4 @@ |
|||
# -*- coding: utf-8 -*- |
|||
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). |
|||
|
|||
from . import account_analytic_account |
@ -0,0 +1,30 @@ |
|||
# -*- coding: utf-8 -*- |
|||
# Copyright 2017 Tecnativa - Vicent Cubells |
|||
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). |
|||
|
|||
from openerp import api, fields, models |
|||
|
|||
|
|||
class AccountAnalyticAccount(models.Model): |
|||
_name = 'account.analytic.account' |
|||
_inherit = ['account.analytic.account', 'mail.thread'] |
|||
|
|||
customer_signature = fields.Binary( |
|||
string='Customer acceptance', |
|||
) |
|||
signature_name = fields.Char( |
|||
string='Signed by', |
|||
) |
|||
|
|||
@api.model |
|||
def create(self, values): |
|||
contract = super(AccountAnalyticAccount, self).create(values) |
|||
if contract.customer_signature: |
|||
values = {'customer_signature': contract.customer_signature} |
|||
contract._track_signature(values, 'customer_signature') |
|||
return contract |
|||
|
|||
@api.multi |
|||
def write(self, values): |
|||
self._track_signature(values, 'customer_signature') |
|||
return super(AccountAnalyticAccount, self).write(values) |
@ -0,0 +1,19 @@ |
|||
<?xml version="1.0" ?> |
|||
<odoo> |
|||
|
|||
<template id="report_contract_document" inherit_id="contract.report_contract_document"> |
|||
<xpath expr="//div[@id='invoice_info']" position="after"> |
|||
<div class="row"> |
|||
<div id="signature"> |
|||
<p> |
|||
<strong>Customer acceptance:</strong> |
|||
<span t-if="o.customer_signature"> |
|||
<img class="image" t-att-src="'data:image/png;base64,%s' % o.customer_signature" style="border:auto;"/> |
|||
</span> |
|||
</p> |
|||
</div> |
|||
</div> |
|||
</xpath> |
|||
</template> |
|||
|
|||
</odoo> |
After Width: 128 | Height: 128 | Size: 5.6 KiB |
@ -0,0 +1,4 @@ |
|||
# -*- coding: utf-8 -*- |
|||
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). |
|||
|
|||
from . import test_contract_tracking |
@ -0,0 +1,23 @@ |
|||
# -*- coding: utf-8 -*- |
|||
# Copyright 2017 Tecnativa - Vicent Cubells |
|||
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). |
|||
|
|||
from openerp.tests import common |
|||
|
|||
|
|||
class TestContractSignatureTracking(common.SavepointCase): |
|||
@classmethod |
|||
def setUpClass(cls): |
|||
super(TestContractSignatureTracking, cls).setUpClass() |
|||
# Simple 1x1 transparent base64 encoded GIF |
|||
cls.image = 'R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==' |
|||
|
|||
def test_contract_signature_tracking(self): |
|||
self.contract = self.env['account.analytic.account'].create({ |
|||
'name': 'Test Contract', |
|||
'customer_signature': self.image, |
|||
}) |
|||
message = self.env['mail.message'].search([ |
|||
('res_id', '=', self.contract.id) |
|||
], order='id desc', limit=1) |
|||
self.assertIn('Signature has been created.', message.body) |
@ -0,0 +1,21 @@ |
|||
<?xml version="1.0" ?> |
|||
<odoo> |
|||
|
|||
<record id="account_analytic_account_recurring_form_form" model="ir.ui.view"> |
|||
<field name="name">account.analytic.account.invoice.recurring.form.inherit</field> |
|||
<field name="model">account.analytic.account</field> |
|||
<field name="inherit_id" ref="contract.account_analytic_account_recurring_form_form"/> |
|||
<field name="arch" type="xml"> |
|||
<field name="partner_id" position="after"> |
|||
<field name="user_id"/> |
|||
<field name="signature_name"/> |
|||
</field> |
|||
<xpath expr="//group[@name='group_legend']" position="after"> |
|||
<div class="oe_clear"/> |
|||
<label for="customer_signature" class="oe_edit_only"/> |
|||
<field name="customer_signature" widget="signature"/> |
|||
</xpath> |
|||
</field> |
|||
</record> |
|||
|
|||
</odoo> |
Write
Preview
Loading…
Cancel
Save
Reference in new issue