summaryrefslogtreecommitdiff
path: root/addons
diff options
context:
space:
mode:
authorsvs-odoo <svs@odoo.com>2019-10-18 14:08:57 +0000
committersvs-odoo <svs@odoo.com>2019-10-28 10:46:06 +0000
commit596b246f93f62498fc700bec8826f08d384e8282 (patch)
treeef8efba2d0e4444ae1253a58e1b23949cf4a4cea /addons
parentc5fbb9cc23edd4989dfdeddc343115c006e24a3d (diff)
[IMP] stock: add signature field on picking
On a delivery type picking, adds a button to able the partner to sign the delivery on receipt. task-1878607 closes odoo/odoo#39183 Signed-off-by: Simon Lejeune (sle) <sle@openerp.com> Co-authored-by: sle-odoo <sle@odoo.com>
Diffstat (limited to 'addons')
-rw-r--r--addons/stock/models/res_config_settings.py1
-rw-r--r--addons/stock/models/stock_picking.py19
-rw-r--r--addons/stock/report/report_deliveryslip.xml12
-rw-r--r--addons/stock/security/stock_security.xml5
-rw-r--r--addons/stock/views/res_config_settings_views.xml11
-rw-r--r--addons/stock/views/stock_picking_views.xml7
6 files changed, 55 insertions, 0 deletions
diff --git a/addons/stock/models/res_config_settings.py b/addons/stock/models/res_config_settings.py
index a6c4c9047e6..15d2b4fb2c8 100644
--- a/addons/stock/models/res_config_settings.py
+++ b/addons/stock/models/res_config_settings.py
@@ -26,6 +26,7 @@ class ResConfigSettings(models.TransientModel):
implied_group='stock.group_adv_location',
help="Add and customize route operations to process product moves in your warehouse(s): e.g. unload > quality control > stock for incoming products, pick > pack > ship for outgoing products. \n You can also set putaway strategies on warehouse locations in order to send incoming products into specific child locations straight away (e.g. specific bins, racks).")
group_warning_stock = fields.Boolean("Warnings for Stock", implied_group='stock.group_warning_stock')
+ group_stock_sign_delivery = fields.Boolean("Signature", implied_group='stock.group_stock_sign_delivery')
module_stock_picking_batch = fields.Boolean("Batch Pickings")
module_stock_barcode = fields.Boolean("Barcode Scanner")
stock_move_email_validation = fields.Boolean(related='company_id.stock_move_email_validation', readonly=False)
diff --git a/addons/stock/models/stock_picking.py b/addons/stock/models/stock_picking.py
index e6f9fec8fd1..28c68bfe01b 100644
--- a/addons/stock/models/stock_picking.py
+++ b/addons/stock/models/stock_picking.py
@@ -356,6 +356,7 @@ class Picking(models.Model):
check_company=True,
help="When validating the transfer, the products will be assigned to this owner.")
printed = fields.Boolean('Printed')
+ signature = fields.Image('Signature', help='Signature', copy=False, attachment=True)
is_locked = fields.Boolean(default=True, help='When the picking is not done this allows changing the '
'initial demand. When the picking is done this allows '
'changing the done quantities.')
@@ -576,6 +577,9 @@ class Picking(models.Model):
if vals.get('picking_type_id') and self.state != 'draft':
raise UserError(_("Changing the operation type of this record is forbidden at this point."))
res = super(Picking, self).write(vals)
+ if vals.get('signature'):
+ for picking in self:
+ picking._attach_sign()
# Change locations of moves if those of the picking change
after_vals = {}
if vals.get('location_id'):
@@ -1219,3 +1223,18 @@ class Picking(models.Model):
action['context'] = self.env.context
action['domain'] = [('picking_id', 'in', self.ids)]
return action
+
+ def _attach_sign(self):
+ """ Render the delivery report in pdf and attach it to the picking in `self`. """
+ self.ensure_one()
+ report = self.env.ref('stock.action_report_delivery').render_qweb_pdf(self.id)
+ filename = "%s_signed_delivery_slip" % self.name
+ if self.partner_id:
+ message = _('Order signed by %s') % (self.partner_id.name)
+ else:
+ message = _('Order signed')
+ self.message_post(
+ attachments=[('%s.pdf' % filename, report[0])],
+ body=message,
+ )
+ return True
diff --git a/addons/stock/report/report_deliveryslip.xml b/addons/stock/report/report_deliveryslip.xml
index d5b803dfde1..1981724e8c2 100644
--- a/addons/stock/report/report_deliveryslip.xml
+++ b/addons/stock/report/report_deliveryslip.xml
@@ -98,6 +98,18 @@
All items couldn't be shipped, the remaining ones will be shipped as soon as they become available.
</span>
</p>
+
+ <div t-if="o.signature" class="mt32 ml64 mr4" name="signature">
+ <div class="offset-8">
+ <strong>Signature</strong>
+ </div>
+ <div class="offset-8">
+ <img t-att-src="image_data_uri(o.signature)" style="max-height: 4cm; max-width: 8cm;"/>
+ </div>
+ <div class="offset-8 text-center">
+ <p t-field="o.partner_id.name"/>
+ </div>
+ </div>
</div>
</t>
</t>
diff --git a/addons/stock/security/stock_security.xml b/addons/stock/security/stock_security.xml
index f4ea1c0ae29..7b2c39f580c 100644
--- a/addons/stock/security/stock_security.xml
+++ b/addons/stock/security/stock_security.xml
@@ -58,6 +58,11 @@
<field name="name">A warning can be set on a partner (Stock)</field>
<field name="category_id" ref="base.module_category_hidden"/>
</record>
+
+ <record id="group_stock_sign_delivery" model="res.groups">
+ <field name="name">Require a signature on your delivery orders</field>
+ <field name="category_id" ref="base.module_category_hidden"/>
+ </record>
</data>
<data noupdate="1">
<record id="base.default_user" model="res.users">
diff --git a/addons/stock/views/res_config_settings_views.xml b/addons/stock/views/res_config_settings_views.xml
index d3c9f605fff..572d8ace382 100644
--- a/addons/stock/views/res_config_settings_views.xml
+++ b/addons/stock/views/res_config_settings_views.xml
@@ -93,6 +93,17 @@
</div>
</div>
</div>
+ <div class="col-12 col-lg-6 o_setting_box">
+ <div class="o_setting_left_pane">
+ <field name="group_stock_sign_delivery"/>
+ </div>
+ <div class="o_setting_right_pane">
+ <label for="group_stock_sign_delivery"/>
+ <div class="text-muted">
+ Require a signature on your delivery orders
+ </div>
+ </div>
+ </div>
<div class="col-12 col-lg-6 o_setting_box" id="delivery" title="Shipping connectors allow to compute accurate shipping costs, print shipping labels and request carrier picking at your warehouse to ship to the customer. Apply shipping connector from delivery methods.">
<div class="o_setting_left_pane">
<field name="module_delivery"/>
diff --git a/addons/stock/views/stock_picking_views.xml b/addons/stock/views/stock_picking_views.xml
index 73d5713ce5d..18a6d46bfaf 100644
--- a/addons/stock/views/stock_picking_views.xml
+++ b/addons/stock/views/stock_picking_views.xml
@@ -194,6 +194,7 @@
<field name="location_id" options="{'no_create': True}" string="From" groups="stock.group_stock_multi_locations" optional="show"/>
<field name="location_dest_id" options="{'no_create': True}" string="To" groups="stock.group_stock_multi_locations" optional="show"/>
<field name="partner_id" optional="show"/>
+ <field name="signature" string="Signed" optional="hide" widget="boolean" groups="stock.group_stock_sign_delivery"/>
<field name="user_id" optional="hide"/>
<field name="date" invisible="1"/>
<field name="scheduled_date" optional="show"/>
@@ -227,6 +228,12 @@
<button name="action_assign" attrs="{'invisible': [('show_check_availability', '=', False)]}" string="Check Availability" type="object" class="oe_highlight" groups="base.group_user"/>
<button name="button_validate" attrs="{'invisible': ['|', ('state', 'in', ('waiting','confirmed')), ('show_validate', '=', False)]}" string="Validate" type="object" class="oe_highlight" groups="stock.group_stock_user"/>
<button name="button_validate" attrs="{'invisible': ['|', ('state', 'not in', ('waiting', 'confirmed')), ('show_validate', '=', False)]}" string="Validate" type="object" groups="stock.group_stock_user" class="o_btn_validate"/>
+ <widget name="signature" string="Sign" highlight="1"
+ attrs="{'invisible': ['|', '|', '|', ('id', '=', False), ('picking_type_code', '!=', 'outgoing'), ('state', '!=', 'done'), ('is_locked', '=', False)]}"
+ full_name="partner_id" groups="stock.group_stock_sign_delivery"/>
+ <widget name="signature" string="Sign"
+ attrs="{'invisible': ['|', '|', '|', ('id', '=', False), ('picking_type_code', '!=', 'outgoing'), ('state', '=', 'done'), ('is_locked', '=', False)]}"
+ full_name="partner_id" groups="stock.group_stock_sign_delivery"/>
<button name="do_print_picking" string="Print" groups="stock.group_stock_user" type="object" attrs="{'invisible': ['|', ('state', 'not in', ('assigned', 'partially_available')), ('is_locked', '=', False)]}"/>
<button name="%(action_report_delivery)d" string="Print" attrs="{'invisible': ['|', ('state', '!=', 'done'), ('is_locked', '=', False)]}" type="action" groups="base.group_user"/>
<button name="%(act_stock_return_picking)d" string="Return" attrs="{'invisible': ['|', ('state', '!=', 'done'), ('is_locked', '=', False)]}" type="action" groups="base.group_user"/>