mirror of
https://github.com/OCA/contract.git
synced 2025-02-13 17:57:24 +02:00
[ADD] contract_digitized_signature (#102)
* [ADD] contract_digitized_signature * Correct README and add signature_name * Change to char field * Improve tests to acchieve full coverage
This commit is contained in:
66
contract_digitized_signature/README.rst
Normal file
66
contract_digitized_signature/README.rst
Normal file
@@ -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.
|
||||||
4
contract_digitized_signature/__init__.py
Normal file
4
contract_digitized_signature/__init__.py
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
|
||||||
|
|
||||||
|
from . import models
|
||||||
23
contract_digitized_signature/__openerp__.py
Normal file
23
contract_digitized_signature/__openerp__.py
Normal file
@@ -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,
|
||||||
|
}
|
||||||
36
contract_digitized_signature/i18n/es.po
Normal file
36
contract_digitized_signature/i18n/es.po
Normal file
@@ -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"
|
||||||
4
contract_digitized_signature/models/__init__.py
Normal file
4
contract_digitized_signature/models/__init__.py
Normal file
@@ -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)
|
||||||
19
contract_digitized_signature/report/report_contract.xml
Normal file
19
contract_digitized_signature/report/report_contract.xml
Normal file
@@ -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>
|
||||||
BIN
contract_digitized_signature/static/description/icon.png
Normal file
BIN
contract_digitized_signature/static/description/icon.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 5.6 KiB |
4
contract_digitized_signature/tests/__init__.py
Normal file
4
contract_digitized_signature/tests/__init__.py
Normal file
@@ -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
|
||||||
23
contract_digitized_signature/tests/test_contract_tracking.py
Normal file
23
contract_digitized_signature/tests/test_contract_tracking.py
Normal file
@@ -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)
|
||||||
21
contract_digitized_signature/views/contract_views.xml
Normal file
21
contract_digitized_signature/views/contract_views.xml
Normal file
@@ -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>
|
||||||
Reference in New Issue
Block a user