diff --git a/fiscal_epos_print/__manifest__.py b/fiscal_epos_print/__manifest__.py index 4a855286aeff..c20a83375635 100644 --- a/fiscal_epos_print/__manifest__.py +++ b/fiscal_epos_print/__manifest__.py @@ -31,32 +31,30 @@ ], "assets": { "point_of_sale._assets_pos": [ - "fiscal_epos_print/static/lib/pikaday/pikaday.min.css", "fiscal_epos_print/static/src/css/pos.css", "fiscal_epos_print/static/lib/fiscalprint/fiscalprint.js", - "fiscal_epos_print/static/lib/pikaday/pikaday.min.js", # ma serve ancora? "fiscal_epos_print/static/src/js/epson_epos_print.js", "fiscal_epos_print/static/src/js/models.js", # # ChromeWidgets "fiscal_epos_print/static/src/js/ChromeWidgets/EpsonEPOSButton.js", "fiscal_epos_print/static/src/js/ChromeWidgets/EpsonFP81IIComponent.js", # "fiscal_epos_print/static/src/js/ChromeWidgets/SetLotteryCodeButton.js", - # "fiscal_epos_print/static/src/js/ChromeWidgets/SetRefundInfoButton.js", + "fiscal_epos_print/static/src/js/ChromeWidgets/SetRefundInfoButton.js", # # Popups # "fiscal_epos_print/static/src/js/Popups/LotteryCodePopup.js", - # "fiscal_epos_print/static/src/js/Popups/RefundInfoPopup.js", + "fiscal_epos_print/static/src/js/Popups/RefundInfoPopup.js", # # Screens "fiscal_epos_print/static/src/js/Screens/PaymentScreen/PaymentScreen.js", #"fiscal_epos_print/static/src/js/Screens/ReceiptScreen/ReceiptScreen.js", # # Popups # "fiscal_epos_print/static/src/xml/Popups/LotteryCodePopup.xml", - # "fiscal_epos_print/static/src/xml/Popups/RefundInfoPopup.xml", + "fiscal_epos_print/static/src/xml/Popups/RefundInfoPopup.xml", # # Others "fiscal_epos_print/static/src/xml/Chrome.xml", "fiscal_epos_print/static/src/xml/ChromeWidgets/EpsonEPOSButton.xml", "fiscal_epos_print/static/src/xml/ChromeWidgets/EpsonFP81IIComponent.xml", # "fiscal_epos_print/static/src/xml/ChromeWidgets/SetLotteryCodeButton.xml", - # "fiscal_epos_print/static/src/xml/ChromeWidgets/SetRefundInfoButton.xml", + "fiscal_epos_print/static/src/xml/ChromeWidgets/SetRefundInfoButton.xml", ], }, "installable": True, diff --git a/fiscal_epos_print/static/lib/pikaday/pikaday.min.css b/fiscal_epos_print/static/lib/pikaday/pikaday.min.css deleted file mode 100644 index 92f41e33c90b..000000000000 --- a/fiscal_epos_print/static/lib/pikaday/pikaday.min.css +++ /dev/null @@ -1,5 +0,0 @@ -@charset "UTF-8";/*! - * Pikaday - * Copyright © 2014 David Bushell | BSD & MIT license | https://dbushell.com/ - */.pika-single{z-index:9999;display:block;position:relative;color:#333;background:#fff;border:1px solid #ccc;border-bottom-color:#bbb;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif}.pika-single:after,.pika-single:before{content:" ";display:table}.pika-single:after{clear:both}.pika-single.is-hidden{display:none}.pika-single.is-bound{position:absolute;box-shadow:0 5px 15px -5px rgba(0,0,0,.5)}.pika-lendar{float:left;width:240px;margin:8px}.pika-title{position:relative;text-align:center}.pika-label{display:inline-block;position:relative;z-index:9999;overflow:hidden;margin:0;padding:5px 3px;font-size:14px;line-height:20px;font-weight:700;background-color:#fff}.pika-title select{cursor:pointer;position:absolute;z-index:9998;margin:0;left:0;top:5px;opacity:0}.pika-next,.pika-prev{display:block;cursor:pointer;position:relative;outline:0;border:0;padding:0;width:20px;height:30px;text-indent:20px;white-space:nowrap;overflow:hidden;background-color:transparent;background-position:center center;background-repeat:no-repeat;background-size:75% 75%;opacity:.5}.pika-next:hover,.pika-prev:hover{opacity:1}.is-rtl .pika-next,.pika-prev{float:left;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAeCAYAAAAsEj5rAAAAUklEQVR42u3VMQoAIBADQf8Pgj+OD9hG2CtONJB2ymQkKe0HbwAP0xucDiQWARITIDEBEnMgMQ8S8+AqBIl6kKgHiXqQqAeJepBo/z38J/U0uAHlaBkBl9I4GwAAAABJRU5ErkJggg==)}.is-rtl .pika-prev,.pika-next{float:right;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAeCAYAAAAsEj5rAAAAU0lEQVR42u3VOwoAMAgE0dwfAnNjU26bYkBCFGwfiL9VVWoO+BJ4Gf3gtsEKKoFBNTCoCAYVwaAiGNQGMUHMkjGbgjk2mIONuXo0nC8XnCf1JXgArVIZAQh5TKYAAAAASUVORK5CYII=)}.pika-next.is-disabled,.pika-prev.is-disabled{cursor:default;opacity:.2}.pika-select{display:inline-block}.pika-table{width:100%;border-collapse:collapse;border-spacing:0;border:0}.pika-table td,.pika-table th{width:14.285714285714286%;padding:0}.pika-table th{color:#999;font-size:12px;line-height:25px;font-weight:700;text-align:center}.pika-button{cursor:pointer;display:block;box-sizing:border-box;-moz-box-sizing:border-box;outline:0;border:0;margin:0;width:100%;padding:5px;color:#666;font-size:12px;line-height:15px;text-align:right;background:#f5f5f5}.pika-week{font-size:11px;color:#999}.is-today .pika-button{color:#3af;font-weight:700}.has-event .pika-button,.is-selected .pika-button{color:#fff;font-weight:700;background:#3af;box-shadow:inset 0 1px 3px #178fe5;border-radius:3px}.has-event .pika-button{background:#005da9;box-shadow:inset 0 1px 3px #0076c9}.is-disabled .pika-button,.is-inrange .pika-button{background:#d5e9f7}.is-startrange .pika-button{color:#fff;background:#6cb31d;box-shadow:none;border-radius:3px}.is-endrange .pika-button{color:#fff;background:#3af;box-shadow:none;border-radius:3px}.is-disabled .pika-button{pointer-events:none;cursor:default;color:#999;opacity:.3}.is-outside-current-month .pika-button{color:#999;opacity:.3}.is-selection-disabled{pointer-events:none;cursor:default}.pika-button:hover,.pika-row.pick-whole-week:hover .pika-button{color:#fff;background:#ff8000;box-shadow:none;border-radius:3px}.pika-table abbr{border-bottom:none;cursor:help} -/*# sourceMappingURL=pikaday.min.css.map */ \ No newline at end of file diff --git a/fiscal_epos_print/static/lib/pikaday/pikaday.min.js b/fiscal_epos_print/static/lib/pikaday/pikaday.min.js deleted file mode 100644 index 078c1b5d6238..000000000000 --- a/fiscal_epos_print/static/lib/pikaday/pikaday.min.js +++ /dev/null @@ -1 +0,0 @@ -!function(e,t){"use strict";var n;if("object"==typeof exports){try{n=require("moment")}catch(e){}module.exports=t(n)}else"function"==typeof define&&define.amd?define(function(e){try{n=e("moment")}catch(e){}return t(n)}):e.Pikaday=t(e.moment)}(this,function(n){"use strict";var s="function"==typeof n,o=!!window.addEventListener,c=window.document,h=window.setTimeout,r=function(e,t,n,a){o?e.addEventListener(t,n,!!a):e.attachEvent("on"+t,n)},t=function(e,t,n,a){o?e.removeEventListener(t,n,!!a):e.detachEvent("on"+t,n)},l=function(e,t){return-1!==(" "+e.className+" ").indexOf(" "+t+" ")},f=function(e,t){l(e,t)||(e.className=""===e.className?t:e.className+" "+t)},g=function(e,t){var n;e.className=(n=(" "+e.className+" ").replace(" "+t+" "," ")).trim?n.trim():n.replace(/^\s+|\s+$/g,"")},y=function(e){return/Array/.test(Object.prototype.toString.call(e))},F=function(e){return/Date/.test(Object.prototype.toString.call(e))&&!isNaN(e.getTime())},L=function(e,t){return[31,(n=e,n%4==0&&n%100!=0||n%400==0?29:28),31,30,31,30,31,31,30,31,30,31][t];var n},P=function(e){F(e)&&e.setHours(0,0,0,0)},B=function(e,t){return e.getTime()===t.getTime()},d=function(e,t,n){var a,i;for(a in t)(i=void 0!==e[a])&&"object"==typeof t[a]&&null!==t[a]&&void 0===t[a].nodeName?F(t[a])?n&&(e[a]=new Date(t[a].getTime())):y(t[a])?n&&(e[a]=t[a].slice(0)):e[a]=d({},t[a],n):!n&&i||(e[a]=t[a]);return e},i=function(e,t,n){var a;c.createEvent?((a=c.createEvent("HTMLEvents")).initEvent(t,!0,!1),a=d(a,n),e.dispatchEvent(a)):c.createEventObject&&(a=c.createEventObject(),a=d(a,n),e.fireEvent("on"+t,a))},a=function(e){return e.month<0&&(e.year-=Math.ceil(Math.abs(e.month)/12),e.month+=12),11';t.push("is-outside-current-month"),e.enableSelectionDaysInNextAndPreviousMonths||t.push("is-selection-disabled")}return e.isDisabled&&t.push("is-disabled"),e.isToday&&t.push("is-today"),e.isSelected&&(t.push("is-selected"),n="true"),e.hasEvent&&t.push("has-event"),e.isInRange&&t.push("is-inrange"),e.isStartRange&&t.push("is-startrange"),e.isEndRange&&t.push("is-endrange"),'"},p=function(e,t,n,a,i,s){var o,r,l,h,d,u=e._o,c=n===u.minYear,f=n===u.maxYear,g='
',m=!0,p=!0;for(l=[],o=0;o<12;o++)l.push('");for(h='
'+u.i18n.months[a]+'
",y(u.yearRange)?(o=u.yearRange[0],r=u.yearRange[1]+1):(o=n-u.yearRange,r=1+n+u.yearRange),l=[];o=u.minYear&&l.push('");return d='
'+n+u.yearSuffix+'
",u.showMonthAfterYear?g+=d+h:g+=h+d,c&&(0===a||u.minMonth>=a)&&(m=!1),f&&(11===a||u.maxMonth<=a)&&(p=!1),0===t&&(g+='"),t===e._o.numberOfMonths-1&&(g+='"),g+"
"},V=function(e,t,n){return''+function(e){var t,n=[];for(e.showWeekNumber&&n.push(""),t=0;t<7;t++)n.push('");return""+(e.isRTL?n.reverse():n).join("")+""}(e)+(""+t.join("")+"")+"
'+m(e,t,!0)+"
"},e=function(e){var a=this,i=a.config(e);a._onMouseDown=function(e){if(a._v){var t=(e=e||window.event).target||e.srcElement;if(t)if(l(t,"is-disabled")||(!l(t,"pika-button")||l(t,"is-empty")||l(t.parentNode,"is-disabled")?l(t,"pika-prev")?a.prevMonth():l(t,"pika-next")&&a.nextMonth():(a.setDate(new Date(t.getAttribute("data-pika-year"),t.getAttribute("data-pika-month"),t.getAttribute("data-pika-day"))),i.bound&&h(function(){a.hide(),i.blurFieldOnSelect&&i.field&&i.field.blur()},100))),l(t,"pika-select"))a._c=!0;else{if(!e.preventDefault)return e.returnValue=!1;e.preventDefault()}}},a._onChange=function(e){var t=(e=e||window.event).target||e.srcElement;t&&(l(t,"pika-select-month")?a.gotoMonth(t.value):l(t,"pika-select-year")&&a.gotoYear(t.value))},a._onKeyChange=function(e){if(e=e||window.event,a.isVisible())switch(e.keyCode){case 13:case 27:i.field&&i.field.blur();break;case 37:e.preventDefault(),a.adjustDate("subtract",1);break;case 38:a.adjustDate("subtract",7);break;case 39:a.adjustDate("add",1);break;case 40:a.adjustDate("add",7)}},a._onInputChange=function(e){var t;e.firedBy!==a&&(t=i.parse?i.parse(i.field.value,i.format):s?(t=n(i.field.value,i.format,i.formatStrict))&&t.isValid()?t.toDate():null:new Date(Date.parse(i.field.value)),F(t)&&a.setDate(t),a._v||a.show())},a._onInputFocus=function(){a.show()},a._onInputClick=function(){a.show()},a._onInputBlur=function(){var e=c.activeElement;do{if(l(e,"pika-single"))return}while(e=e.parentNode);a._c||(a._b=h(function(){a.hide()},50)),a._c=!1},a._onClick=function(e){var t=(e=e||window.event).target||e.srcElement,n=t;if(t){!o&&l(t,"pika-select")&&(t.onchange||(t.setAttribute("onchange","return;"),r(t,"change",a._onChange)));do{if(l(n,"pika-single")||n===i.trigger)return}while(n=n.parentNode);a._v&&t!==i.trigger&&n!==i.trigger&&a.hide()}},a.el=c.createElement("div"),a.el.className="pika-single"+(i.isRTL?" is-rtl":"")+(i.theme?" "+i.theme:""),r(a.el,"mousedown",a._onMouseDown,!0),r(a.el,"touchend",a._onMouseDown,!0),r(a.el,"change",a._onChange),i.keyboardInput&&r(c,"keydown",a._onKeyChange),i.field&&(i.container?i.container.appendChild(a.el):i.bound?c.body.appendChild(a.el):i.field.parentNode.insertBefore(a.el,i.field.nextSibling),r(i.field,"change",a._onInputChange),i.defaultDate||(s&&i.field.value?i.defaultDate=n(i.field.value,i.format).toDate():i.defaultDate=new Date(Date.parse(i.field.value)),i.setDefaultDate=!0));var t=i.defaultDate;F(t)?i.setDefaultDate?a.setDate(t,!0):a.gotoDate(t):a.gotoDate(new Date),i.bound?(this.hide(),a.el.className+=" is-bound",r(i.trigger,"click",a._onInputClick),r(i.trigger,"focus",a._onInputFocus),r(i.trigger,"blur",a._onInputBlur)):this.show()};return e.prototype={config:function(e){this._o||(this._o=d({},u,!0));var t=d(this._o,e,!0);t.isRTL=!!t.isRTL,t.field=t.field&&t.field.nodeName?t.field:null,t.theme="string"==typeof t.theme&&t.theme?t.theme:null,t.bound=!!(void 0!==t.bound?t.field&&t.bound:t.field),t.trigger=t.trigger&&t.trigger.nodeName?t.trigger:t.field,t.disableWeekends=!!t.disableWeekends,t.disableDayFn="function"==typeof t.disableDayFn?t.disableDayFn:null;var n=parseInt(t.numberOfMonths,10)||1;if(t.numberOfMonths=4=i&&(this._y=i,!isNaN(o)&&this._m>o&&(this._m=o)),t="pika-title-"+Math.random().toString(36).replace(/[^a-z]+/g,"").substr(0,2);for(var l=0;l'+p(this,l,this.calendars[l].year,this.calendars[l].month,this.calendars[0].year,t)+this.render(this.calendars[l].year,this.calendars[l].month,t)+"";this.el.innerHTML=r,n.bound&&"hidden"!==n.field.type&&h(function(){n.trigger.focus()},1),"function"==typeof this._o.onDraw&&this._o.onDraw(this),n.bound&&n.field.setAttribute("aria-label",n.ariaLabel)}},adjustPosition:function(){var e,t,n,a,i,s,o,r,l,h,d,u;if(!this._o.container){if(this.el.style.position="absolute",t=e=this._o.trigger,n=this.el.offsetWidth,a=this.el.offsetHeight,i=window.innerWidth||c.documentElement.clientWidth,s=window.innerHeight||c.documentElement.clientHeight,o=window.pageYOffset||c.body.scrollTop||c.documentElement.scrollTop,u=d=!0,"function"==typeof e.getBoundingClientRect)r=(h=e.getBoundingClientRect()).left+window.pageXOffset,l=h.bottom+window.pageYOffset;else for(r=t.offsetLeft,l=t.offsetTop+t.offsetHeight;t=t.offsetParent;)r+=t.offsetLeft,l+=t.offsetTop;(this._o.reposition&&ia.maxDate||a.disableWeekends&&(void 0,0===(w=R.getDay())||6===w)||a.disableDayFn&&a.disableDayFn(R),isEmpty:I,isStartRange:O,isEndRange:j,isInRange:W,showDaysInNextAndPreviousMonths:a.showDaysInNextAndPreviousMonths,enableSelectionDaysInNextAndPreviousMonths:a.enableSelectionDaysInNextAndPreviousMonths};a.pickWholeWeek&&N&&(M=!0),l.push(H(A)),7==++x&&(a.showWeekNumber&&l.unshift((D=k-o,v=t,b=e,_=void 0,_=new Date(b,0,1),''+Math.ceil(((new Date(b,v,D)-_)/864e5+_.getDay()+1)/7)+"")),r.push((p=l,y=a.isRTL,''+(y?p.reverse():p).join("")+"")),x=0,M=!(l=[]))}return V(a,r,n)},isVisible:function(){return this._v},show:function(){this.isVisible()||(this._v=!0,this.draw(),g(this.el,"is-hidden"),this._o.bound&&(r(c,"click",this._onClick),this.adjustPosition()),"function"==typeof this._o.onOpen&&this._o.onOpen.call(this))},hide:function(){var e=this._v;!1!==e&&(this._o.bound&&t(c,"click",this._onClick),this.el.style.position="static",this.el.style.left="auto",this.el.style.top="auto",f(this.el,"is-hidden"),this._v=!1,void 0!==e&&"function"==typeof this._o.onClose&&this._o.onClose.call(this))},destroy:function(){var e=this._o;this.hide(),t(this.el,"mousedown",this._onMouseDown,!0),t(this.el,"touchend",this._onMouseDown,!0),t(this.el,"change",this._onChange),e.keyboardInput&&t(c,"keydown",this._onKeyChange),e.field&&(t(e.field,"change",this._onInputChange),e.bound&&(t(e.trigger,"click",this._onInputClick),t(e.trigger,"focus",this._onInputFocus),t(e.trigger,"blur",this._onInputBlur))),this.el.parentNode&&this.el.parentNode.removeChild(this.el)}},e}); \ No newline at end of file diff --git a/fiscal_epos_print/static/src/js/ChromeWidgets/SetRefundInfoButton.js b/fiscal_epos_print/static/src/js/ChromeWidgets/SetRefundInfoButton.js index 7929097bc540..0eba44a3c5a8 100644 --- a/fiscal_epos_print/static/src/js/ChromeWidgets/SetRefundInfoButton.js +++ b/fiscal_epos_print/static/src/js/ChromeWidgets/SetRefundInfoButton.js @@ -1,130 +1,123 @@ -odoo.define("fiscal_epos_print.SetRefundInfoButton", function (require) { - "use strict"; - - const PosComponent = require("point_of_sale.PosComponent"); - const ProductScreen = require("point_of_sale.ProductScreen"); - const Registries = require("point_of_sale.Registries"); - const core = require("web.core"); - const _t = core._t; +/** @odoo-module */ + +import { Component, onMounted } from "@odoo/owl"; +import { useService } from "@web/core/utils/hooks"; +import { registry } from "@web/core/registry"; +import { _t } from "@web/core/l10n/translation"; +import { ProductScreen } from "@point_of_sale/app/screens/product_screen/product_screen"; +import { usePos } from "@point_of_sale/app/store/pos_hook"; +import { ErrorPopup } from "@point_of_sale/app/errors/popups/error_popup"; +import { RefundInfoPopup } from "../Popups/RefundInfoPopup"; + +export class SetRefundInfoButton extends Component { + static template = "SetRefundInfoButton"; + static components = { + ErrorPopup + } + setup() { + super.setup(); + this.pos = usePos(); + this.popup = useService("popup"); - class SetRefundInfoButton extends PosComponent { - onMounted() { + onMounted(() => { this.bind_order_events(); this.orderline_change(); + }); + } + is_available() { + const order = this.pos.get_order(); + return order; + } + render() { + var color = this.refund_get_button_color(); + $('#refund_info_button').css('background-color', color); + } + async onClickRefund() { + var self = this; + var current_order = this.pos.get_order(); + var dd = null; + var mm = null; + var yyyy = null; + // if (current_order) { + // dd = ("0" + current_order.date_order.getDate()).slice(-2); + // mm = ("0" + (current_order.date_order.getMonth() + 1)).slice(-2); + // yyyy = current_order.date_order.getFullYear(); + // } + await this.popup.add(RefundInfoPopup, { + title: _t("Refund Information Details"), + // refund_date: yyyy + "-" + mm + "-" + dd, + // refund_report: current_order.refund_report, + // refund_doc_num: current_order.refund_doc_num, + // refund_cash_fiscal_serial: current_order.refund_cash_fiscal_serial, + // refund_full_refund: current_order.refund_full_refund, + }).then(async () => { + this.update_refund_info_button(); + }); + } + update_refund_info_button() { + this.render(); + } + bind_order_events() { + var order = this.pos.get_order(); + if (!order) { + return; } - - is_available() { - const order = this.env.pos.get_order(); - return order; - } - - render() { - var color = this.refund_get_button_color(); - $(this.el).css("background", color); - } - - async onClickRefund() { - var self = this; - var current_order = this.env.pos.get_order(); - if (current_order.refund_date === null || current_order.refund_date === "") { - this.showPopup("ErrorPopup", { - title: _t("Error"), - body: _t( - "Must select a refund order before clicking on this button!" - ), - }); - } - var dd = ("0" + current_order.refund_date.getDate()).slice(-2); - var mm = ("0" + (current_order.refund_date.getMonth() + 1)).slice(-2); - var yyyy = current_order.refund_date.getFullYear(); - this.showPopup("RefundInfoPopup", { - title: _t("Refund Information Details"), - refund_date: yyyy + "-" + mm + "-" + dd, - refund_report: current_order.refund_report, - refund_doc_num: current_order.refund_doc_num, - refund_cash_fiscal_serial: current_order.refund_cash_fiscal_serial, - update_refund_info_button: function () { - self.render(); - }, - }); + if (this.old_order) { + this.old_order.unbind(null, null, this); } - - bind_order_events() { - var order = this.env.pos.get_order(); - - if (!order) { - return; - } - - if (this.old_order) { - this.old_order.unbind(null, null, this); - } - - this.env.pos.bind("change:selectedOrder", this.orderline_change, this); - + // TODO: Servono? + // this.pos.bind("change:selectedOrder", this.orderline_change, this); + var lines = order.orderlines; + // lines.unbind("add", this.orderline_change, this); + // lines.bind("add", this.orderline_change, this); + // lines.unbind("remove", this.orderline_change, this); + // lines.bind("remove", this.orderline_change, this); + // lines.unbind("change", this.orderline_change, this); + // lines.bind("change", this.orderline_change, this); + this.old_order = order; + } + refund_get_button_color() { + var order = this.pos.get_order(); + var color = "#e2e2e2"; + if (order) { var lines = order.orderlines; - lines.unbind("add", this.orderline_change, this); - lines.bind("add", this.orderline_change, this); - lines.unbind("remove", this.orderline_change, this); - lines.bind("remove", this.orderline_change, this); - lines.unbind("change", this.orderline_change, this); - lines.bind("change", this.orderline_change, this); - - this.old_order = order; - } - - refund_get_button_color() { - var order = this.env.pos.get_order(); - var color = "#e2e2e2"; - if (order) { - var lines = order.orderlines; - var has_refund = - lines.find(function (line) { - return line.quantity < 0.0; - }) !== undefined; - if (has_refund === true) { - if ( - order.refund_date && - order.refund_date !== "" && - order.refund_doc_num && - order.refund_doc_num !== "" && - order.refund_cash_fiscal_serial && - order.refund_cash_fiscal_serial !== "" && - order.refund_report && - order.refund_report !== "" - ) { - color = "lightgreen"; - } else { - color = "red"; - } + var has_refund = + lines.find(function (line) { + return line.quantity < 0.0; + }) !== undefined; + if (has_refund === true) { + if ( + order.refund_date && + order.refund_date !== "" && + order.refund_doc_num && + order.refund_doc_num !== "" && + order.refund_cash_fiscal_serial && + order.refund_cash_fiscal_serial !== "" && + order.refund_report && + order.refund_report !== "" + ) { + color = "lightgreen"; + } else { + color = "red"; } } - return color; } - - orderline_change() { - var order = this.env.pos.get_order(); - if (order) { - var lines = order.orderlines; - order.has_refund = - lines.find(function (line) { - return line.quantity < 0.0; - }) !== undefined; - } - this.render(); + return color; + } + orderline_change() { + var order = this.pos.get_order(); + if (order) { + var lines = order.orderlines; + order.has_refund = + lines.find(function (line) { + return line.quantity < 0.0; + }) !== undefined; } + this.render(); } - - SetRefundInfoButton.template = "SetRefundInfoButton"; - - ProductScreen.addControlButton({ - component: SetRefundInfoButton, - condition: function () { - return this.env.pos; - }, - }); - - Registries.Component.add(SetRefundInfoButton); - - return SetRefundInfoButton; +} +ProductScreen.addControlButton({ + component: SetRefundInfoButton }); +registry.category("pos_screens").add("SetRefundInfoButton", SetRefundInfoButton); +return SetRefundInfoButton; diff --git a/fiscal_epos_print/static/src/js/Popups/RefundInfoPopup.js b/fiscal_epos_print/static/src/js/Popups/RefundInfoPopup.js index c695302cc247..d5c5272a81dd 100644 --- a/fiscal_epos_print/static/src/js/Popups/RefundInfoPopup.js +++ b/fiscal_epos_print/static/src/js/Popups/RefundInfoPopup.js @@ -1,94 +1,83 @@ -odoo.define("fiscal_epos_print.RefundInfoPopup", function (require) { - "use strict"; +/** @odoo-module */ - const {useRef, useState} = owl; - const AbstractAwaitablePopup = require("point_of_sale.AbstractAwaitablePopup"); - const Registries = require("point_of_sale.Registries"); - const {_lt} = require("@web/core/l10n/translation"); +import { useState, useRef } from "@odoo/owl"; +import { AbstractAwaitablePopup } from "@point_of_sale/app/popup/abstract_awaitable_popup"; +import { _t } from "@web/core/l10n/translation"; +import { usePos } from "@point_of_sale/app/store/pos_hook"; - class RefundInfoPopup extends AbstractAwaitablePopup { - constructor() { - super(...arguments); +export class RefundInfoPopup extends AbstractAwaitablePopup { + static template = "RefundInfoPopup"; + static defaultProps = { + confirmText: _t("Ok"), + cancelText: _t("Cancel"), + body: "", + }; - this.state = useState({inputValue: this.props.startingValue}); - this.inputRefundReport = useRef("inputRefundReport"); - this.inputRefundDate = useRef("inputRefundDate"); - this.inputRefundDocNum = useRef("inputRefundDocNum"); - this.inputRefundCashFiscalSerial = useRef("inputRefundCashFiscalSerial"); - this.inputRefundFullRefund = useRef("inputRefundFullRefund"); - this.inputDatePicker = this.initializeDatePicker(); + setup() { + super.setup(); + this.pos = usePos(); + this.state = useState({inputValue: this.props.startingValue}); + this.inputRefundReport = useRef("inputRefundReport"); + this.inputRefundDate = useRef("inputRefundDate"); + this.inputRefundDocNum = useRef("inputRefundDocNum"); + this.inputRefundCashFiscalSerial = useRef("inputRefundCashFiscalSerial"); + this.inputRefundFullRefund = useRef("inputRefundFullRefund"); + this.inputDatePicker = this.initializeDatePicker(); + } + clickConfirmRefund() { + this.$el = $(this.el); + var self = this; + function allValid() { + return self.$el + .find("input") + .not("#refund_full_refund") + .toArray() + .every(function (element) { + return element.value && element.value != ""; + }); } - - clickConfirmRefund() { - this.$el = $(this.el); - var self = this; - function allValid() { - return self.$el - .find("input") - .not("#refund_full_refund") - .toArray() - .every(function (element) { - return element.value && element.value != ""; - }); - } - - if (allValid()) { - this.$el.find("#error-message-dialog").hide(); - - var refund_date = this.inputRefundDate.el.value; - var refund_report = this.inputRefundReport.el.value; - var refund_doc_num = this.inputRefundDocNum.el.value; - var refund_cash_fiscal_serial = - this.inputRefundCashFiscalSerial.el.value; - var refund_full_refund = this.inputRefundFullRefund.el.checked; - this.env.pos.context = { - refund_details: true, - refund_date: refund_date, - refund_report: refund_report, - refund_doc_num: refund_doc_num, - refund_cash_fiscal_serial: refund_cash_fiscal_serial, - refund_full_refund: refund_full_refund, - }; - this.env.pos.set_refund_data( - refund_date, - refund_report, - refund_doc_num, - refund_cash_fiscal_serial, - refund_full_refund - ); - if ( - this.props.update_refund_info_button && - this.props.update_refund_info_button instanceof Function - ) { - this.props.update_refund_info_button(); - } - this.env.posbus.trigger("close-popup", {popupId: this.props.id}); - } else { - this.$el.find("#error-message-dialog").show(); + if (allValid()) { + this.$el.find("#error-message-dialog").hide(); + var refund_date = this.inputRefundDate.el.value; + var refund_report = this.inputRefundReport.el.value; + var refund_doc_num = this.inputRefundDocNum.el.value; + var refund_cash_fiscal_serial = + this.inputRefundCashFiscalSerial.el.value; + var refund_full_refund = this.inputRefundFullRefund.el.checked; + this.pos.context = { + refund_details: true, + refund_date: refund_date, + refund_report: refund_report, + refund_doc_num: refund_doc_num, + refund_cash_fiscal_serial: refund_cash_fiscal_serial, + refund_full_refund: refund_full_refund, + }; + this.pos.set_refund_data( + refund_date, + refund_report, + refund_doc_num, + refund_cash_fiscal_serial, + refund_full_refund + ); + if ( + this.props.update_refund_info_button && + this.props.update_refund_info_button instanceof Function + ) { + this.props.update_refund_info_button(); } + this.confirm(); + } else { + this.$el.find("#error-message-dialog").show(); } - - initializeDatePicker() { - this.$el = $(this.el); - var element = this.$el.find("#refund_date").get(0); - if (element && !this.datepicker) { - // eslint-disable-next-line - this.datepicker = new Pikaday({ - field: element, - }); - } + } + initializeDatePicker() { + this.$el = $(this.el); + var element = this.$el.find("#refund_date").get(0); + if (element && !this.datepicker) { + // eslint-disable-next-line + this.datepicker = new Pikaday({ + field: element, + }); } } - - RefundInfoPopup.template = "RefundInfoPopup"; - - RefundInfoPopup.defaultProps = { - confirmText: _lt("Ok"), - cancelText: _lt("Cancel"), - body: "", - }; - - Registries.Component.add(RefundInfoPopup); - - return RefundInfoPopup; -}); +} \ No newline at end of file diff --git a/fiscal_epos_print/static/src/js/epson_epos_print.js b/fiscal_epos_print/static/src/js/epson_epos_print.js index f850421d8bd7..ee3488b6ba85 100644 --- a/fiscal_epos_print/static/src/js/epson_epos_print.js +++ b/fiscal_epos_print/static/src/js/epson_epos_print.js @@ -29,6 +29,11 @@ export class EpsonEposPrint { return tag === "printerStatus" || tag === "fsStatus"; } + addPadding(str, padding = 4) { + var pad = new Array(padding).fill(0).join("") + str; + return pad.substring(pad.length - padding); + } + // Method to handle successful receipt onReceive(res, tagListNames, addInfo) { let tagStatus = tagListNames ? tagListNames.filter(this.getStatusField) : []; @@ -50,8 +55,9 @@ export class EpsonEposPrint { JSON.stringify(tagListNames) + "\n" + JSON.stringify(addInfo); + // Save the order - // this.pos.push_single_order(order); + //this.pos.push_single_order(order); } if (tagStatus.length > 0) { @@ -89,13 +95,10 @@ export class EpsonEposPrint { order.fiscal_receipt_number = parseInt(addInfo.fiscalReceiptNumber, 10); order.fiscal_receipt_amount = parseFloat(addInfo.fiscalReceiptAmount.replace(",", ".")); const fiscalReceiptDate = new Date(addInfo.fiscalReceiptDate.replace(/(\d{1,2})\/(\d{1,2})\/(\d{4})/, "$3/$2/$1")); - //TODO moment non vien più utilizzato - //order.fiscal_receipt_date = moment(fiscalReceiptDate).format("YYYY-MM-DD"); + order.fiscal_receipt_date = fiscalReceiptDate.toISOString().slice(0, 10); order.fiscal_z_rep_number = addInfo.zRepNumber; order.fiscal_printer_serial = this.pos.config.fiscal_printer_serial; - - // Save the order - // this.pos.push_single_order(order); + //this.pos.push_single_order(order); } if (this.pos.config.fiscal_cashdrawer) { @@ -137,7 +140,7 @@ export class EpsonEposPrint { } printFiscalReceipt(receipt) { - //const hasRefund = receipt.orderlines.every((line) => line.quantity < 0); + const hasRefund = receipt.lines.every((line) => line[2].qty < 0); let xml = ""; const fiscalOperator = receipt.fiscal_operator_number || "1"; @@ -146,25 +149,24 @@ export class EpsonEposPrint { xml += this.printFiscalReceiptHeader(receipt); } - // TODO // If the receipt has refund - // if (hasRefund) { - // xml += receipt.refund_full_refund - // ? this.printFiscalVoidDetails({ - // refund_date: receipt.refund_date, - // refund_report: receipt.refund_report, - // refund_doc_num: receipt.refund_doc_num, - // refund_cash_fiscal_serial: receipt.refund_cash_fiscal_serial, - // operator: fiscalOperator, - // }) - // : this.printFiscalRefundDetails({ - // refund_date: receipt.refund_date, - // refund_report: receipt.refund_report, - // refund_doc_num: receipt.refund_doc_num, - // refund_cash_fiscal_serial: receipt.refund_cash_fiscal_serial, - // operator: fiscalOperator, - // }); - // } + if (hasRefund) { + xml += receipt.refund_full_refund + ? this.printFiscalVoidDetails({ + refund_date: receipt.refund_date, + refund_report: receipt.refund_report, + refund_doc_num: receipt.refund_doc_num, + refund_cash_fiscal_serial: receipt.refund_cash_fiscal_serial, + operator: fiscalOperator, //TODO: fiscalOperator or receipt.fiscal_operator_number? + }) + : this.printFiscalRefundDetails({ + refund_date: receipt.refund_date, + refund_report: receipt.refund_report, + refund_doc_num: receipt.refund_doc_num, + refund_cash_fiscal_serial: receipt.refund_cash_fiscal_serial, + operator: fiscalOperator, //TODO: fiscalOperator or receipt.fiscal_operator_number? + }); + } xml += ``; @@ -190,16 +192,16 @@ export class EpsonEposPrint { }); } } - // TODO - // else { - // xml += this.printRecRefund({ - // description: `${_t("Refund: ")} ${l.product_name}`, - // quantity: l.quantity * -1.0, - // unitPrice: round_pr(l.price, this.pos.currency.rounding), // TODO sostituire round_pr con toFixed - // department: l.tax_department.code, - // operator: fiscalOperator, - // }); - // } + else { + var product_name = l.product_name || l.full_product_name || ""; + xml += this.printRecRefund({ + description: `${_t("Refund: ")} ${product_name}`, + quantity: l.qty * -1.0, + unitPrice: l.price_unit_incl.toFixed(2), + department: l.tax_department.code, + operator: fiscalOperator, + }); + } } else { xml += this.printRecItemAdjustment({ adjustmentType: 3, @@ -284,8 +286,32 @@ export class EpsonEposPrint { return msg; } - printFiscalVoidDetails(details) { - // Implement the logic for printing void details + printFiscalVoidDetails(args) { + var message = + "VOID " + + this.addPadding(args.refund_report) + + " " + + this.addPadding(args.refund_doc_num) + + " " + + // Day + args.refund_date.substr(8, 2) + + // Month + args.refund_date.substr(5, 2) + + // Year + args.refund_date.substr(0, 4) + + " " + + args.refund_cash_fiscal_serial; + + var tag = + ""; + return tag; } printFiscalRefundDetails(args) { @@ -384,13 +410,33 @@ export class EpsonEposPrint { " />"; return tag; } - + /* + Prints a sale refund item line. + Prints refund items on a commercial refund document if flag SET 14/58 = 1 (from display 3333 > 14 > 58 > X). + */ printRecRefund(args) { - // Implement the logic for printing refund receipt items - } - - printRounding(args) { - // Implement rounding print logic + var tag = + ""; + return tag; } printFiscalReceiptFooter(receipt) { diff --git a/fiscal_epos_print/static/src/js/models.js b/fiscal_epos_print/static/src/js/models.js index bf8dfb45e93b..fb72fd73c7f2 100644 --- a/fiscal_epos_print/static/src/js/models.js +++ b/fiscal_epos_print/static/src/js/models.js @@ -5,38 +5,18 @@ import { patch } from "@web/core/utils/patch"; import { _t } from "@web/core/l10n/translation"; import { ErrorPopup } from "@point_of_sale/app/errors/popups/error_popup"; import { roundPrecision as round_pr } from "@web/core/utils/numbers"; - -// vedi PosStore, forse -// class FiscalEposPrintPosGlobalState extends PosGlobalState { -// set_refund_data(refund_date, refund_report, refund_doc_num, refund_cash_fiscal_serial, refund_full_refund) { -// const selectedOrder = this.get_order(); -// selectedOrder.refund_date = refund_date; -// selectedOrder.refund_report = refund_report; -// selectedOrder.refund_doc_num = refund_doc_num; -// selectedOrder.refund_cash_fiscal_serial = refund_cash_fiscal_serial; -// selectedOrder.refund_full_refund = refund_full_refund; -// } - -// set_lottery_code_data(lottery_code) { -// const selectedOrder = this.get_order(); -// selectedOrder.lottery_code = lottery_code; -// } - -// reset_cashier() { -// this.cashier = { -// name: null, -// id: null, -// barcode: null, -// user_id: null, -// pin: null, -// role: null, -// fiscal_operator_number: null, -// }; -// } -// } - -// Register the extended PosGlobalState class -//registry.category("models").add("PosGlobalState", FiscalEposPrintPosGlobalState); +import { PosStore } from "@point_of_sale/app/store/pos_store"; + +patch(PosStore.prototype, { + set_refund_data(refund_date, refund_report, refund_doc_num, refund_cash_fiscal_serial, refund_full_refund) { + const selectedOrder = this.get_order(); + selectedOrder.refund_date = refund_date; + selectedOrder.refund_report = refund_report; + selectedOrder.refund_doc_num = refund_doc_num; + selectedOrder.refund_cash_fiscal_serial = refund_cash_fiscal_serial; + selectedOrder.refund_full_refund = refund_full_refund; + }, +}); patch(Order.prototype, { setup() { diff --git a/fiscal_epos_print/static/src/xml/ChromeWidgets/SetRefundInfoButton.xml b/fiscal_epos_print/static/src/xml/ChromeWidgets/SetRefundInfoButton.xml index 8f1f45a83c88..5ef58459eb14 100644 --- a/fiscal_epos_print/static/src/xml/ChromeWidgets/SetRefundInfoButton.xml +++ b/fiscal_epos_print/static/src/xml/ChromeWidgets/SetRefundInfoButton.xml @@ -2,10 +2,10 @@ -
+
+
diff --git a/fiscal_epos_print/static/src/xml/Popups/RefundInfoPopup.xml b/fiscal_epos_print/static/src/xml/Popups/RefundInfoPopup.xml index 42a63d158191..1b76f5b1b722 100644 --- a/fiscal_epos_print/static/src/xml/Popups/RefundInfoPopup.xml +++ b/fiscal_epos_print/static/src/xml/Popups/RefundInfoPopup.xml @@ -3,8 +3,8 @@ -