diff --git a/beesdoo_pos/__init__.py b/beesdoo_pos/__init__.py
new file mode 100644
index 0000000..0f7cb6b
--- /dev/null
+++ b/beesdoo_pos/__init__.py
@@ -0,0 +1,2 @@
+# -*- coding: utf-8 -*-
+import models
\ No newline at end of file
diff --git a/beesdoo_pos/__openerp__.py b/beesdoo_pos/__openerp__.py
new file mode 100644
index 0000000..965ae88
--- /dev/null
+++ b/beesdoo_pos/__openerp__.py
@@ -0,0 +1,35 @@
+# -*- coding: utf-8 -*-
+{
+ 'name': "Beescoop Point of sale",
+
+ 'summary': """
+ Module that extends the pos for the beescoop
+ """,
+
+ 'description': """
+ Long description of module's purpose
+ """,
+
+ 'author': "Beescoop - Cellule IT",
+ 'website': "https://github.com/beescoop/Obeesdoo",
+
+ # Categories can be used to filter modules in modules listing
+ # Check https://github.com/odoo/odoo/blob/master/openerp/addons/base/module/module_data.xml
+ # for the full list
+ 'category': 'Point Of Sale',
+ 'version': '9.0.1.1.0',
+
+ # any module necessary for this one to work correctly
+ 'depends': ['beesdoo_base', 'beesdoo_product'],
+
+ # always loaded
+ 'data': [
+ 'security/ir.model.access.csv',
+ 'views/beesdoo_pos.xml',
+ 'data/email.xml',
+ 'data/cron.xml',
+ ],
+ 'qweb': ['static/src/xml/templates.xml'],
+ # only loaded in demonstration mode
+}
+
diff --git a/beesdoo_pos/data/cron.xml b/beesdoo_pos/data/cron.xml
new file mode 100644
index 0000000..9ba9ae7
--- /dev/null
+++ b/beesdoo_pos/data/cron.xml
@@ -0,0 +1,14 @@
+
+
+
+ send ticket
+ 1
+ minutes
+ -1
+
+ pos.order
+ _send_order_cron
+ ()
+
+
+
\ No newline at end of file
diff --git a/beesdoo_pos/data/email.xml b/beesdoo_pos/data/email.xml
new file mode 100644
index 0000000..6b4dc80
--- /dev/null
+++ b/beesdoo_pos/data/email.xml
@@ -0,0 +1,22 @@
+
+
+
+
+
+
+ Envoyer Reçu
+ ${(object.user_id.email and '%s <%s>' % (object.user_id.name, object.user_id.email) or '')|safe}
+ ${object.pos_reference}
+ ${object.partner_id.id}
+
+
+
+ Ticket ${object.pos_reference}
+ ${object.partner_id.lang}
+
+
+
+
+
\ No newline at end of file
diff --git a/beesdoo_pos/i18n/fr_BE.po b/beesdoo_pos/i18n/fr_BE.po
new file mode 100644
index 0000000..60b659a
--- /dev/null
+++ b/beesdoo_pos/i18n/fr_BE.po
@@ -0,0 +1,151 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * beesdoo_pos
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 9.0c\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2016-11-13 15:23+0000\n"
+"PO-Revision-Date: 2016-11-13 15:23+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: beesdoo_pos
+#: model:mail.template,body_html:beesdoo_pos.email_send_ticket
+msgid "\n"
+"Votre Ticket ${object.pos_reference}\n"
+" "
+msgstr "
\n"
+"\n"
+"
\n"
+"\n"
+"
Bonjour,
Vous trouverez ci-joint votre ticket de caisse en version électronique.
Pour rappel, à partir d'octobre, le Labo market est ouvert les lundis, mardis, mercredis de 17h30 à 20h et les samedis de 10h30 à 16h.
Pour vous inscrire à des permanences BEES, rendez-vous sur http://shift.bees-coop.be/ .
Au plaisir de vous revoir au Labo market.
BEES coop,
![](\"/web/image/9457\")
"
+
+#. module: beesdoo_pos
+#: model:mail.template,subject:beesdoo_pos.email_send_ticket
+msgid "${object.pos_reference}"
+msgstr "${object.pos_reference}"
+
+#. module: beesdoo_pos
+#: model:ir.model,name:beesdoo_pos.model_account_bank_statement_cashbox
+msgid "Account Bank Statement Cashbox Details"
+msgstr "Détails"
+
+#. module: beesdoo_pos
+#. openerp-web
+#: code:addons/beesdoo_pos/static/src/xml/templates.xml:17
+#: code:addons/beesdoo_pos/static/src/xml/templates.xml:35
+#, python-format
+msgid "Balance:"
+msgstr "Balance:"
+
+#. module: beesdoo_pos
+#: model:ir.ui.view,arch_db:beesdoo_pos.beescoop_pos_inherit
+msgid "Bill Value"
+msgstr "Bill Value"
+
+#. module: beesdoo_pos
+#: model:ir.model.fields,field_description:beesdoo_pos.field_pos_config_bill_value
+msgid "Bill value"
+msgstr "Bill value"
+
+#. module: beesdoo_pos
+#: code:addons/beesdoo_pos/models/beesdoo_pos.py:38
+#, python-format
+msgid "Cannot send the ticket, no email address found on the client"
+msgstr "Cannot send the ticket, no email address found on the client"
+
+#. module: beesdoo_pos
+#: model:ir.model.fields,field_description:beesdoo_pos.field_bill_value_create_uid
+msgid "Created by"
+msgstr "Créé par"
+
+#. module: beesdoo_pos
+#: model:ir.model.fields,field_description:beesdoo_pos.field_bill_value_create_date
+msgid "Created on"
+msgstr "Créé le"
+
+#. module: beesdoo_pos
+#: model:ir.model.fields,field_description:beesdoo_pos.field_bill_value_display_name
+msgid "Display Name"
+msgstr "Nom affiché"
+
+#. module: beesdoo_pos
+#: code:addons/beesdoo_pos/models/beesdoo_pos.py:36
+#, python-format
+msgid "Error: no order found"
+msgstr "Error: no order found"
+
+#. module: beesdoo_pos
+#: model:ir.model.fields,field_description:beesdoo_pos.field_bill_value_id
+msgid "ID"
+msgstr "ID"
+
+#. module: beesdoo_pos
+#: model:ir.model.fields,field_description:beesdoo_pos.field_bill_value___last_update
+msgid "Last Modified on"
+msgstr "Dernière modification le"
+
+#. module: beesdoo_pos
+#: model:ir.model.fields,field_description:beesdoo_pos.field_bill_value_write_uid
+msgid "Last Updated by"
+msgstr "Mis à jour par"
+
+#. module: beesdoo_pos
+#: model:ir.model.fields,field_description:beesdoo_pos.field_bill_value_write_date
+msgid "Last Updated on"
+msgstr "Mis à jour le"
+
+#. module: beesdoo_pos
+#: model:ir.model.fields,field_description:beesdoo_pos.field_bill_value_name
+msgid "Name"
+msgstr "Nom"
+
+#. module: beesdoo_pos
+#: model:ir.model,name:beesdoo_pos.model_res_partner
+msgid "Partner"
+msgstr "Partenaire"
+
+#. module: beesdoo_pos
+#: model:ir.model,name:beesdoo_pos.model_pos_order
+msgid "Point of Sale"
+msgstr "Point de vente"
+
+#. module: beesdoo_pos
+#: model:ir.model.fields,field_description:beesdoo_pos.field_bill_value_pos
+msgid "Pos"
+msgstr "Pos"
+
+#. module: beesdoo_pos
+#. openerp-web
+#: code:addons/beesdoo_pos/static/src/xml/templates.xml:6
+#, python-format
+msgid "Send Receipt By Mail"
+msgstr "Send Receipt By Mail"
+
+#. module: beesdoo_pos
+#: model:mail.template,report_name:beesdoo_pos.email_send_ticket
+msgid "Ticket ${object.pos_reference}"
+msgstr "Ticket ${object.pos_reference}"
+
+#. module: beesdoo_pos
+#: code:addons/beesdoo_pos/models/beesdoo_pos.py:41
+#, python-format
+msgid "Ticket sent"
+msgstr "Ticket sent"
+
+#. module: beesdoo_pos
+#: model:ir.model,name:beesdoo_pos.model_bill_value
+msgid "bill_value"
+msgstr "bill_value"
+
+#. module: beesdoo_pos
+#: model:ir.model,name:beesdoo_pos.model_pos_config
+msgid "pos.config"
+msgstr "pos.config"
+
diff --git a/beesdoo_pos/models/__init__.py b/beesdoo_pos/models/__init__.py
new file mode 100644
index 0000000..e5c2cf4
--- /dev/null
+++ b/beesdoo_pos/models/__init__.py
@@ -0,0 +1 @@
+import beesdoo_pos
\ No newline at end of file
diff --git a/beesdoo_pos/models/beesdoo_pos.py b/beesdoo_pos/models/beesdoo_pos.py
new file mode 100644
index 0000000..b02f3c7
--- /dev/null
+++ b/beesdoo_pos/models/beesdoo_pos.py
@@ -0,0 +1,98 @@
+# -*- coding: utf-8 -*-
+from openerp import models, fields, api, _
+import logging
+
+_logger = logging.getLogger(__name__)
+
+class BeesPOS(models.Model):
+ _inherit = 'pos.config'
+
+ bill_value = fields.One2many('bill_value', 'pos', copy=True)
+
+class BillValue(models.Model):
+ _name = 'bill_value'
+ _order = 'name asc'
+
+ name = fields.Float(string='Name')
+ pos = fields.Many2one('pos.config')
+
+class BeesAccountBankStatement(models.Model):
+ _inherit = 'account.bank.statement.cashbox'
+
+ def _get_default_line(self):
+ if not self.env.context.get('active_id'):
+ return []
+
+ pos_session_rec = self.env['pos.session'].browse(self.env.context['active_id'])
+ return [(0, 0, {'coin_value' : bill_value_rec.name, 'subtotal':0.0}) for bill_value_rec in pos_session_rec.config_id.bill_value]
+
+ cashbox_lines_ids = fields.One2many(default=_get_default_line)
+
+class BeescoopPosOrder(models.Model):
+
+ _inherit = 'pos.order'
+
+ print_status = fields.Selection([('no_print', 'Do not Print'),
+ ('to_print', 'To print'),
+ ('printed', 'Printed')],
+ default="no_print", string="Print Status")
+
+ @api.model
+ def send_order(self, receipt_name):
+ order = self.search([('pos_reference', '=', receipt_name)])
+ if not order:
+ return _('Error: no order found')
+ if not order.partner_id.email:
+ return _('Cannot send the ticket, no email address found on the client')
+ order.print_status = 'to_print'
+
+ return _("Ticket will be sent")
+
+ @api.model
+ def _send_order_cron(self):
+ mail_template = self.env.ref("beesdoo_pos.email_send_ticket")
+ _logger.info("Start to send ticket")
+ for order in self.search([('print_status', '=', 'to_print')]):
+ if not order.partner_id.email:
+ continue
+
+ mail_template.send_mail(order.id, force_send=True)
+ order.print_status = 'printed'
+ #Make sure we commit the change to not send ticket twice
+ self.env.cr.commit()
+
+
+class BeescoopPosPartner(models.Model):
+ _inherit = 'res.partner'
+
+ def _get_eater(self):
+ eaters = [False, False, False]
+ for i, eater in enumerate(self.child_eater_ids):
+ eaters[i] = eater.name
+ return tuple(eaters)
+
+ @api.multi
+ def get_eater(self):
+ eater1, eater2, eater3 = self._get_eater()
+ return eater1, eater2, eater3
+
+from openerp.addons.point_of_sale.report import pos_receipt
+
+class order_tva_included(pos_receipt.order):
+
+ def __init__(self, cr, uid, name, context):
+ super(order_tva_included, self).__init__(cr, uid, name, context=context)
+ self.env = api.Environment(cr, uid, context)
+
+ def netamount(self, order_line_id):
+ order_line = self.env['pos.order.line'].browse(order_line_id)
+ if order_line.order_id.config_id.iface_tax_included:
+ return order_line.price_subtotal_incl
+ else:
+ return order_line.price_subtotal
+
+
+class report_order_receipt(models.AbstractModel):
+ _inherit = 'report.point_of_sale.report_receipt'
+ _template = 'point_of_sale.report_receipt'
+ _wrapped_report_class = order_tva_included
\ No newline at end of file
diff --git a/beesdoo_pos/security/ir.model.access.csv b/beesdoo_pos/security/ir.model.access.csv
new file mode 100644
index 0000000..9d85762
--- /dev/null
+++ b/beesdoo_pos/security/ir.model.access.csv
@@ -0,0 +1,5 @@
+"id","name","model_id/id","group_id/id","perm_read","perm_write","perm_create","perm_unlink"
+"bill_value_read_all","Read All","beesdoo_pos.model_bill_value","","True","False","False","False"
+"bill_value_accountant_all","All Comptable","beesdoo_pos.model_bill_value","account.group_account_user","True","True","True","True"
+"bill_value_pos_manager_all","All POS manager","beesdoo_pos.model_bill_value","point_of_sale.group_pos_manager","True","True","True","True"
+"account_bank_statement_cashbox POS user","account.bank.statement.cashbox POS User","account.model_account_bank_statement_cashbox","point_of_sale.group_pos_user","True","True","True","False"
diff --git a/beesdoo_pos/static/src/css/beesdoo.css b/beesdoo_pos/static/src/css/beesdoo.css
new file mode 100644
index 0000000..66180cd
--- /dev/null
+++ b/beesdoo_pos/static/src/css/beesdoo.css
@@ -0,0 +1,34 @@
+.message-send {
+ margin: 16px;
+ text-align: center;
+}
+
+.customer-information {
+ margin: 16px 24px 16px 24px;
+ font-weight: bold;
+ font-size: 16px;
+}
+
+.customer-name {
+ font-size: 18px;
+}
+
+.pos .actionpad .button.set-customer {
+ height: 108px;
+}
+
+.pos .actionpad .button .fa-user {
+ left: 5px;
+ top: 38px;
+}
+
+
+.customer-information-pay {
+ font-weight: normal;
+ font-size: 12px;
+ text-align: left;
+}
+
+.pos .actionpad .button.pay {
+ height: 108px;
+}
\ No newline at end of file
diff --git a/beesdoo_pos/static/src/js/beesdoo.js b/beesdoo_pos/static/src/js/beesdoo.js
new file mode 100644
index 0000000..e28bbdb
--- /dev/null
+++ b/beesdoo_pos/static/src/js/beesdoo.js
@@ -0,0 +1,95 @@
+odoo.define('beescoop.pos', function (require) {
+ "use strict";
+ var module = require("point_of_sale.screens");
+ var Model = require('web.DataModel');
+ var set_customer_info = function(el_class, value, prefix) {
+ var el = this.$(el_class);
+ el.empty();
+ if (prefix && value) {
+ value = prefix + value
+ }
+ if (value) {
+ el.append(value);
+ }
+ }
+
+ module.ReceiptScreenWidget = module.ReceiptScreenWidget.include({
+ send : function() {
+ var self = this;
+ var loaded = new $.Deferred();
+ var order = this.pos.get_order().name;
+ var records = new Model('pos.order').call('send_order', [order], {}, { shadow: false, timeout: 10000});
+ records.then(function(result){
+ var el = self.$('.message-send')
+ el.empty();
+ el.append('' + result + '
');
+ },function(err){
+ loaded.reject(err);
+ });
+ },
+ renderElement: function() {
+ var self = this;
+ this._super();
+ this.$('.button.send').click(function(){
+ if (!self._locked) {
+ self.send();
+ }
+ });
+ },
+ show: function(){
+ this._super();
+ var self = this;
+ this.$('.message-send').empty();
+ },
+ })
+
+ module.ActionpadWidget = module.ActionpadWidget.include({
+ renderElement : function() {
+ var self = this;
+ var loaded = new $.Deferred();
+ this._super();
+ if (!this.pos.get_client()) {
+ return
+
+ }
+ var customer_id = this.pos.get_client().id;
+ var res = new Model('res.partner').call('get_eater',
+ [ customer_id ], undefined, { shadow: true, timeout: 1000});
+ res.then(function(result) {
+ set_customer_info.call(self, '.customer-delegate1', result[0], 'Eater 1: ');
+ set_customer_info.call(self, '.customer-delegate2', result[1], 'Eater 2: ');
+ set_customer_info.call(self, '.customer-delegate3', result[2], 'Eater 3: ');
+ }, function(err) {
+ loaded.reject(err);
+ });
+ },
+ });
+
+ module.PaymentScreenWidget.include({
+ render_customer_info : function() {
+ var self = this;
+ var loaded = new $.Deferred();
+ if (!this.pos.get_client()) {
+ return
+ }
+ var customer_id = this.pos.get_client().id;
+ var res = new Model('res.partner').call('get_eater', [ customer_id ], undefined, { shadow: true, timeout: 1000});
+ res.then(function(result) {
+ set_customer_info.call(self, '.customer-name', self.pos.get_client().name);
+ set_customer_info.call(self, '.customer-delegate1', result[0], 'Eater 1: ');
+ set_customer_info.call(self, '.customer-delegate2', result[1], 'Eater 2: ');
+ set_customer_info.call(self, '.customer-delegate3', result[2], 'Eater 3: ');
+ }, function(err) {
+ loaded.reject(err);
+ });
+ },
+ renderElement : function() {
+ this._super();
+ this.render_customer_info();
+ },
+ customer_changed : function() {
+ this._super();
+ this.render_customer_info();
+ },
+ });
+});
diff --git a/beesdoo_pos/static/src/xml/templates.xml b/beesdoo_pos/static/src/xml/templates.xml
new file mode 100644
index 0000000..ab30a42
--- /dev/null
+++ b/beesdoo_pos/static/src/xml/templates.xml
@@ -0,0 +1,80 @@
+
+
+
+
+
+
+ Send Receipt By Mail
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ |
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/beesdoo_pos/views/beesdoo_pos.xml b/beesdoo_pos/views/beesdoo_pos.xml
new file mode 100644
index 0000000..d7868ff
--- /dev/null
+++ b/beesdoo_pos/views/beesdoo_pos.xml
@@ -0,0 +1,38 @@
+
+
+
+ bees.pos.config.form.view
+ pos.config
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ account.bnk_stmt_cashbox.form
+ account.bank.statement.cashbox
+
+
+
+ 1
+
+
+
+
+
+
+
+
+
+
+
+