dolibarr 22.0.5
split.php
Go to the documentation of this file.
1<?php
2/* Copyright (C) 2021 Andreu Bisquerra <jove@bisquerra.com>
3 * Copyright (C) 2024 Frédéric France <frederic.france@free.fr>
4 * Copyright (C) 2025 MDW <mdeweerd@users.noreply.github.com>
5 *
6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by
8 * the Free Software Foundation; either version 3 of the License, or
9 * (at your option) any later version.
10 *
11 * This program is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU General Public License for more details.
15 *
16 * You should have received a copy of the GNU General Public License
17 * along with this program. If not, see <https://www.gnu.org/licenses/>.
18 */
19
26//if (! defined('NOREQUIREUSER')) define('NOREQUIREUSER', '1'); // Not disabled cause need to load personalized language
27//if (! defined('NOREQUIREDB')) define('NOREQUIREDB', '1'); // Not disabled cause need to load personalized language
28//if (! defined('NOREQUIRESOC')) define('NOREQUIRESOC', '1');
29//if (! defined('NOREQUIRETRAN')) define('NOREQUIRETRAN', '1');
30if (!defined('NOTOKENRENEWAL')) {
31 define('NOTOKENRENEWAL', '1');
32}
33if (!defined('NOREQUIREMENU')) {
34 define('NOREQUIREMENU', '1');
35}
36if (!defined('NOREQUIREHTML')) {
37 define('NOREQUIREHTML', '1');
38}
39if (!defined('NOREQUIREAJAX')) {
40 define('NOREQUIREAJAX', '1');
41}
42
43// Load Dolibarr environment
44require '../main.inc.php'; // Load $user and permissions
45require_once DOL_DOCUMENT_ROOT.'/compta/facture/class/facture.class.php';
52$langs->loadLangs(array("main", "bills", "cashdesk", "banks"));
53
54$action = GETPOST('action', 'aZ09');
55$place = (GETPOST('place', 'aZ09') ? GETPOST('place', 'aZ09') : 0);
56
57if (!$user->hasRight('takepos', 'run')) {
59}
60
61
62/*
63 * Actions
64 */
65
66if ($action == "split" && $user->hasRight('takepos', 'run')) {
67 $line = GETPOSTINT('line');
68 $split = GETPOSTINT('split');
69 $invoice = null;
70 $placeid = 0;
71 // The line can only be taken from the draft invoice of this terminal it is moved from
72 $sourceref = '(PROV-POS'.$_SESSION["takeposterminal"].'-'.($split == 1 ? $place : 'SPLIT').')';
73 if ($split == 1) { // Split line
74 $invoice = new Facture($db);
75 $ret = $invoice->fetch(0, '(PROV-POS'.$_SESSION["takeposterminal"].'-SPLIT)');
76 if ($ret > 0) {
77 $placeid = $invoice->id;
78 } else {
79 $constforcompanyid = 'CASHDESK_ID_THIRDPARTY'.$_SESSION["takeposterminal"];
80 $invoice->socid = getDolGlobalInt($constforcompanyid);
81 $invoice->date = dol_now();
82 $invoice->module_source = 'takepos';
83 $invoice->pos_source = $_SESSION["takeposterminal"];
84 $invoice->entity = !empty($_SESSION["takeposinvoiceentity"]) ? $_SESSION["takeposinvoiceentity"] : $conf->entity;
85 if ($invoice->socid <= 0) {
86 $langs->load('errors');
87 dol_htmloutput_errors($langs->trans("ErrorModuleSetupNotComplete", "TakePos"), [], 1);
88 } else {
89 $placeid = $invoice->create($user);
90 if ($placeid < 0) {
91 dol_htmloutput_errors($invoice->error, $invoice->errors, 1);
92 }
93 $sql = "UPDATE ".MAIN_DB_PREFIX."facture SET ref='(PROV-POS".$_SESSION["takeposterminal"]."-SPLIT)'";
94 $sql .= " WHERE rowid = ".((int) $placeid);
95 $db->query($sql);
96 }
97 }
98 if ($placeid > 0) {
99 $sql = "UPDATE ".MAIN_DB_PREFIX."facturedet SET fk_facture = ".((int) $placeid)." WHERE rowid = ".((int) $line);
100 $sql .= " AND fk_facture IN (SELECT f.rowid FROM ".MAIN_DB_PREFIX."facture as f WHERE f.ref = '".$db->escape($sourceref)."'";
101 $sql .= " AND f.fk_statut = ".Facture::STATUS_DRAFT." AND f.entity IN (".getEntity('invoice')."))";
102 $db->query($sql);
103 }
104 } elseif ($split == 0) { // Unsplit line
105 $invoice = new Facture($db);
106 if ($place == "SPLIT") {
107 $place = "0";
108 } // Avoid move line to the same place (from SPLIT to SPLIT place)
109 $ret = $invoice->fetch(0, '(PROV-POS'.$_SESSION["takeposterminal"].'-'.$place.')');
110 if ($ret > 0) {
111 $placeid = $invoice->id;
112 } else {
113 $constforcompanyid = 'CASHDESK_ID_THIRDPARTY'.$_SESSION["takeposterminal"];
114 $invoice->socid = getDolGlobalInt($constforcompanyid);
115 $invoice->date = dol_now();
116 $invoice->module_source = 'takepos';
117 $invoice->pos_source = $_SESSION["takeposterminal"];
118 $invoice->entity = !empty($_SESSION["takeposinvoiceentity"]) ? $_SESSION["takeposinvoiceentity"] : $conf->entity;
119 if ($invoice->socid <= 0) {
120 $langs->load('errors');
121 dol_htmloutput_errors($langs->trans("ErrorModuleSetupNotComplete", "TakePos"), [], 1);
122 } else {
123 $placeid = $invoice->create($user);
124 if ($placeid < 0) {
125 dol_htmloutput_errors($invoice->error, $invoice->errors, 1);
126 }
127
128 $sql = "UPDATE ".MAIN_DB_PREFIX."facture SET ref='(PROV-POS".$_SESSION["takeposterminal"]."-".$place.")'";
129 $sql .= " WHERE rowid = ".((int) $placeid);
130 $db->query($sql);
131 }
132 }
133 if ($placeid > 0) {
134 $sql = "UPDATE ".MAIN_DB_PREFIX."facturedet SET fk_facture = ".((int) $placeid)." WHERE rowid = ".((int) $line);
135 $sql .= " AND fk_facture IN (SELECT f.rowid FROM ".MAIN_DB_PREFIX."facture as f WHERE f.ref = '".$db->escape($sourceref)."'";
136 $sql .= " AND f.fk_statut = ".Facture::STATUS_DRAFT." AND f.entity IN (".getEntity('invoice')."))";
137 $db->query($sql);
138 }
139 }
140 if ($invoice !== null) {
141 $invoice->fetch(0, '(PROV-POS'.$_SESSION["takeposterminal"].'-SPLIT)');
142 $invoice->update_price();
143
144 $invoice->fetch(0, '(PROV-POS'.$_SESSION["takeposterminal"].'-'.$place.')');
145 $invoice->update_price();
146 }
147}
148
149
150/*
151 * View
152 */
153
154$invoice = new Facture($db);
155if (isset($invoiceid) && $invoiceid > 0) {
156 $invoice->fetch($invoiceid);
157} else {
158 $sql = "SELECT rowid FROM ".MAIN_DB_PREFIX."facture where ref='(PROV-POS".$_SESSION["takeposterminal"]."-".$place.")'";
159 $resql = $db->query($sql);
160 $obj = $db->fetch_object($resql);
161 if ($obj) {
162 $invoiceid = $obj->rowid;
163 }
164 if (!isset($invoiceid)) {
165 $invoiceid = 0; // Invoice does not exist yet
166 } else {
167 $invoice->fetch($invoiceid);
168 }
169}
170
171$arrayofcss = array('/takepos/css/pos.css.php');
172if (getDolGlobalInt('TAKEPOS_COLOR_THEME') == 1) {
173 $arrayofcss[] = '/takepos/css/colorful.css';
174}
175$arrayofjs = array();
176
177$head = '';
178$title = '';
179$disablejs = 0;
180$disablehead = 0;
181
182top_htmlhead($head, $title, $disablejs, $disablehead, $arrayofjs, $arrayofcss);
183
184// Define list of possible payments
185$arrayOfValidPaymentModes = array();
186$arrayOfValidBankAccount = array();
187
188?>
189<body class="takepossplitphp">
190
191<script>
192function Split(selectedline, split) {
193 $.ajax({
194 url: "split.php?action=split&token=<?php echo newToken(); ?>&line="+selectedline+"&split="+split+"&place=<?php echo $place;?>",
195 context: document.body
196 }).done(function() {
197 $("#currentplace").load("invoice.php?place="+parent.place+"&invoiceid="+parent.invoiceid, function() {
198 $('#currentplace').find('.posinvoiceline').click(function(){
199 Split(this.id, 1);
200 });
201 });
202 $("#splitplace").load("invoice.php?place=SPLIT", function() {
203 $('#splitplace').find('.posinvoiceline').click(function(){
204 Split(this.id, 0);
205 });
206 });
207 });
208}
209
210$( document ).ready(function() {
211 if (parent.place=='SPLIT') {
212 parent.place=0;
213 parent.invoiceid=0;
214 parent.Refresh();
215 }
216 $("#currentplace").load("invoice.php?place="+parent.place+"&invoiceid="+parent.invoiceid, function() {
217 $('#currentplace').find('.posinvoiceline')
218 .click(function(){
219 Split(this.id, 1);
220 });
221 });
222
223 $("#splitplace").load("invoice.php?place=SPLIT", function() {
224 $('#splitplace').find('.posinvoiceline').click(function(){
225 Split(this.id, 0);
226 });
227 });
228
229
230
231 $("#headersplit1").html("<?php echo $langs->trans("Place");?> "+parent.place);
232 $("#headersplit2").html("<?php echo $langs->trans("SplitSale");?>");
233
234});
235</script>
236
237<div class="headersplit">
238 <a href="#" onclick="top.location.href='index.php?place='+parent.place"><div class="headercontent" id="headersplit1"></div></a>
239</div>
240
241<div class="rowsplit">
242 <div class="splitsale" id="currentplace"></div>
243</div>
244
245<div class="headersplit">
246 <a href="#" onclick="top.location.href='index.php?place=SPLIT'"><div class="headercontent" id="headersplit2"></div></a>
247</div>
248
249<div class="rowsplit">
250 <div class="splitsale" id="splitplace"></div>
251</div>
252
253</body>
254</html>
Class to manage invoices.
GETPOSTINT($paramname, $method=0)
Return the value of a $_GET or $_POST supervariable, converted into integer.
dol_now($mode='auto')
Return date for now.
getDolGlobalInt($key, $default=0)
Return a Dolibarr global constant int value.
GETPOST($paramname, $check='alphanohtml', $method=0, $filter=null, $options=null, $noreplace=0)
Return value of a param into GET or POST supervariable.
dol_htmloutput_errors($mesgstring='', $mesgarray=array(), $keepembedded=0)
Print formatted error messages to output (Used to show messages on html output).
getEntity($element, $shared=1, $currentobject=null)
Get list of entity id to use.
top_htmlhead($head, $title='', $disablejs=0, $disablehead=0, $arrayofjs=array(), $arrayofcss=array(), $disableforlogin=0, $disablenofollow=0, $disablenoindex=0)
Output html header of a page.
global $conf
The following vars must be defined: $type2label $form $conf, $lang, The following vars may also be de...
Definition member.php:79
accessforbidden($message='', $printheader=1, $printfooter=1, $showonlymessage=0, $params=null)
Show a message to say access is forbidden and stop program.