2018-09-28 13:31:41 +02:00
< ? php
2018-12-07 17:02:06 +01:00
/**
* Copyright ( C ) 2018 Andreu Bisquerra < jove @ bisquerra . com >
2021-02-24 15:48:15 +01:00
* Copyright ( C ) 2021 Nicolas ZABOURI < info @ inovea - conseil . com >
2018-09-28 13:31:41 +02:00
*
* This program is free software ; you can redistribute it and / or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation ; either version 3 of the License , or
* ( at your option ) any later version .
*
* This program is distributed in the hope that it will be useful ,
* but WITHOUT ANY WARRANTY ; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE . See the
* GNU General Public License for more details .
*
* You should have received a copy of the GNU General Public License
2019-09-23 21:55:30 +02:00
* along with this program . If not , see < https :// www . gnu . org / licenses />.
2018-09-28 13:31:41 +02:00
*/
2019-03-28 09:56:01 +01:00
/**
* \file htdocs / takepos / invoice . php
* \ingroup takepos
* \brief Page to generate section with list of lines
*/
2019-03-15 12:07:33 +01:00
// if (! defined('NOREQUIREUSER')) define('NOREQUIREUSER', '1'); // Not disabled cause need to load personalized language
// if (! defined('NOREQUIREDB')) define('NOREQUIREDB', '1'); // Not disabled cause need to load personalized language
// if (! defined('NOREQUIRESOC')) define('NOREQUIRESOC', '1');
// if (! defined('NOREQUIRETRAN')) define('NOREQUIRETRAN', '1');
2021-02-26 21:17:52 +01:00
if ( ! defined ( 'NOCSRFCHECK' )) {
define ( 'NOCSRFCHECK' , '1' );
}
if ( ! defined ( 'NOTOKENRENEWAL' )) {
define ( 'NOTOKENRENEWAL' , '1' );
}
if ( ! defined ( 'NOREQUIREMENU' )) {
define ( 'NOREQUIREMENU' , '1' );
}
if ( ! defined ( 'NOREQUIREHTML' )) {
define ( 'NOREQUIREHTML' , '1' );
}
if ( ! defined ( 'NOREQUIREAJAX' )) {
define ( 'NOREQUIREAJAX' , '1' );
}
2018-12-07 08:04:40 +01:00
2021-02-26 21:17:52 +01:00
if ( ! defined ( 'INCLUDE_PHONEPAGE_FROM_PUBLIC_PAGE' )) {
require '../main.inc.php' ;
}
2019-11-12 00:15:34 +01:00
require_once DOL_DOCUMENT_ROOT . '/compta/facture/class/facture.class.php' ;
require_once DOL_DOCUMENT_ROOT . '/compta/paiement/class/paiement.class.php' ;
require_once DOL_DOCUMENT_ROOT . '/core/class/html.form.class.php' ;
2018-12-07 08:04:40 +01:00
2020-03-17 09:44:59 +01:00
global $mysoc ;
2020-06-29 17:58:04 +02:00
$langs -> loadLangs ( array ( " companies " , " commercial " , " bills " , " cashdesk " , " stocks " , " banks " ));
2019-03-14 16:35:36 +01:00
2018-12-07 08:04:40 +01:00
$id = GETPOST ( 'id' , 'int' );
2020-09-16 19:39:50 +02:00
$action = GETPOST ( 'action' , 'aZ09' );
2018-12-07 08:04:40 +01:00
$idproduct = GETPOST ( 'idproduct' , 'int' );
2020-03-23 15:02:15 +01:00
$place = ( GETPOST ( 'place' , 'aZ09' ) ? GETPOST ( 'place' , 'aZ09' ) : 0 ); // $place is id of table for Bar or Restaurant
2020-01-01 21:54:47 +01:00
$placeid = 0 ; // $placeid is ID of invoice
2020-12-04 00:58:51 +01:00
// Terminal is stored into $_SESSION["takeposterminal"];
2019-03-27 20:13:12 +01:00
2020-05-08 17:25:48 +02:00
if ( empty ( $user -> rights -> takepos -> run ) && ! defined ( 'INCLUDE_PHONEPAGE_FROM_PUBLIC_PAGE' )) {
2020-03-23 15:46:16 +01:00
accessforbidden ();
2020-03-16 19:23:18 +01:00
}
2020-12-04 00:58:51 +01:00
/*
* View
*/
2021-02-26 21:17:52 +01:00
if (( $conf -> global -> TAKEPOS_PHONE_BASIC_LAYOUT == 1 && $conf -> browser -> layout == 'phone' ) || defined ( 'INCLUDE_PHONEPAGE_FROM_PUBLIC_PAGE' )) {
2019-05-26 16:44:17 +02:00
// DIRECT LINK TO THIS PAGE FROM MOBILE AND NO TERMINAL SELECTED
2021-02-26 21:17:52 +01:00
if ( $_SESSION [ " takeposterminal " ] == " " ) {
if ( $conf -> global -> TAKEPOS_NUM_TERMINALS == " 1 " ) {
$_SESSION [ " takeposterminal " ] = 1 ;
} else {
2020-03-16 15:41:21 +01:00
header ( " Location: " . DOL_URL_ROOT . " /takepos/index.php " );
2019-05-26 16:44:17 +02:00
exit ;
}
}
$mobilepage = GETPOST ( 'mobilepage' , 'alpha' );
2019-11-12 00:15:34 +01:00
$title = 'TakePOS - Dolibarr ' . DOL_VERSION ;
2021-02-26 21:17:52 +01:00
if ( ! empty ( $conf -> global -> MAIN_APPLICATION_TITLE )) {
$title = 'TakePOS - ' . $conf -> global -> MAIN_APPLICATION_TITLE ;
}
2019-11-12 00:15:34 +01:00
$head = ' < meta name = " apple-mobile-web-app-title " content = " TakePOS " />
2019-05-26 16:44:17 +02:00
< meta name = " apple-mobile-web-app-capable " content = " yes " >
< meta name = " mobile-web-app-capable " content = " yes " >
< meta name = " viewport " content = " width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no " /> ' ;
2020-05-15 23:44:19 +02:00
$arrayofcss = array (
'/takepos/css/pos.css.php' ,
'/takepos/js/jquery.colorbox-min.js'
);
$arrayofjs = array ( '/takepos/js/jquery.colorbox-min.js' );
2019-05-26 16:44:17 +02:00
top_htmlhead ( $head , $title , $disablejs , $disablehead , $arrayofjs , $arrayofcss );
}
2019-03-22 09:06:44 +01:00
/**
* Abort invoice creationg with a given error message
*
* @ param string $message Message explaining the error to the user
* @ return void
*/
function fail ( $message )
{
2019-11-12 00:15:34 +01:00
header ( $_SERVER [ 'SERVER_PROTOCOL' ] . ' 500 Internal Server Error' , true , 500 );
2019-03-22 09:06:44 +01:00
die ( $message );
}
2019-03-27 12:40:32 +01:00
$number = GETPOST ( 'number' , 'alpha' );
$idline = GETPOST ( 'idline' , 'int' );
2019-12-08 23:16:49 +01:00
$selectedline = GETPOST ( 'selectedline' , 'int' );
2020-09-16 17:56:26 +02:00
$desc = GETPOST ( 'desc' , 'alphanohtml' );
$pay = GETPOST ( 'pay' , 'aZ09' );
2019-03-27 12:40:32 +01:00
$amountofpayment = price2num ( GETPOST ( 'amount' , 'alpha' ));
2018-12-07 08:04:40 +01:00
2019-03-27 15:42:53 +01:00
$invoiceid = GETPOST ( 'invoiceid' , 'int' );
2019-03-14 16:35:36 +01:00
2019-03-26 20:01:06 +01:00
$paycode = $pay ;
2021-02-26 21:17:52 +01:00
if ( $pay == 'cash' ) {
$paycode = 'LIQ' ; // For backward compatibility
}
if ( $pay == 'card' ) {
$paycode = 'CB' ; // For backward compatibility
}
if ( $pay == 'cheque' ) {
$paycode = 'CHQ' ; // For backward compatibility
}
2019-03-27 12:40:32 +01:00
2019-03-15 12:07:33 +01:00
// Retrieve paiementid
2019-03-25 16:49:33 +01:00
$sql = " SELECT id FROM " . MAIN_DB_PREFIX . " c_paiement " ;
2019-11-12 00:15:34 +01:00
$sql .= " WHERE entity IN ( " . getEntity ( 'c_paiement' ) . " ) " ;
$sql .= " AND code = ' " . $db -> escape ( $paycode ) . " ' " ;
2019-03-15 12:07:33 +01:00
$resql = $db -> query ( $sql );
2020-12-04 00:58:51 +01:00
$obj = $db -> fetch_object ( $resql );
$paiementid = $obj -> id ;
2019-03-27 12:40:32 +01:00
2019-03-27 15:42:53 +01:00
$invoice = new Facture ( $db );
2021-02-26 21:17:52 +01:00
if ( $invoiceid > 0 ) {
2020-09-07 10:18:17 +02:00
$ret = $invoice -> fetch ( $invoiceid );
2020-05-21 15:05:19 +02:00
} else {
2020-09-07 10:18:17 +02:00
$ret = $invoice -> fetch ( '' , '(PROV-POS' . $_SESSION [ " takeposterminal " ] . '-' . $place . ')' );
2019-03-27 15:42:53 +01:00
}
2021-02-26 21:17:52 +01:00
if ( $ret > 0 ) {
2020-09-07 10:18:17 +02:00
$placeid = $invoice -> id ;
2019-03-27 15:42:53 +01:00
}
2020-01-01 21:54:47 +01:00
$constforcompanyid = 'CASHDESK_ID_THIRDPARTY' . $_SESSION [ " takeposterminal " ];
$soc = new Societe ( $db );
2021-02-26 21:17:52 +01:00
if ( $invoice -> socid > 0 ) {
$soc -> fetch ( $invoice -> socid );
} else {
$soc -> fetch ( $conf -> global -> $constforcompanyid );
}
2020-01-01 21:54:47 +01:00
2019-03-27 15:42:53 +01:00
2018-09-28 13:31:41 +02:00
/*
2019-03-26 20:01:06 +01:00
* Actions
*/
2018-09-28 13:31:41 +02:00
2020-06-29 17:58:04 +02:00
// Action to record a payment on a TakePOS invoice
2021-02-26 21:17:52 +01:00
if ( $action == 'valid' && $user -> rights -> facture -> creer ) {
2020-06-29 17:58:04 +02:00
$bankaccount = 0 ;
$error = 0 ;
2020-09-07 10:18:17 +02:00
if ( ! empty ( $conf -> global -> TAKEPOS_CAN_FORCE_BANK_ACCOUNT_DURING_PAYMENT )) {
2020-06-29 17:58:04 +02:00
$bankaccount = GETPOST ( 'accountid' , 'int' );
2020-12-04 00:58:51 +01:00
} else {
2021-02-26 21:17:52 +01:00
if ( $pay == " cash " ) {
$bankaccount = $conf -> global -> { 'CASHDESK_ID_BANKACCOUNT_CASH' . $_SESSION [ " takeposterminal " ]}; // For backward compatibility
} elseif ( $pay == " card " ) {
$bankaccount = $conf -> global -> { 'CASHDESK_ID_BANKACCOUNT_CB' . $_SESSION [ " takeposterminal " ]}; // For backward compatibility
} elseif ( $pay == " cheque " ) {
$bankaccount = $conf -> global -> { 'CASHDESK_ID_BANKACCOUNT_CHEQUE' . $_SESSION [ " takeposterminal " ]}; // For backward compatibility
} else {
2020-09-07 10:18:17 +02:00
$accountname = " CASHDESK_ID_BANKACCOUNT_ " . $pay . $_SESSION [ " takeposterminal " ];
$bankaccount = $conf -> global -> $accountname ;
}
2020-06-29 17:58:04 +02:00
}
2020-08-11 07:49:54 +02:00
if ( $bankaccount <= 0 && $pay != " delayed " ) {
2020-06-29 17:58:04 +02:00
$errormsg = $langs -> trans ( " ErrorFieldRequired " , $langs -> transnoentitiesnoconv ( " BankAccount " ));
$error ++ ;
}
2019-11-12 00:15:34 +01:00
$now = dol_now ();
2019-09-24 14:25:02 +02:00
$res = 0 ;
2019-03-14 16:35:36 +01:00
2018-09-28 13:31:41 +02:00
$invoice = new Facture ( $db );
$invoice -> fetch ( $placeid );
2020-06-29 17:58:04 +02:00
2019-10-17 12:28:48 +02:00
if ( $invoice -> total_ttc < 0 ) {
2019-11-12 00:15:34 +01:00
$invoice -> type = $invoice :: TYPE_CREDIT_NOTE ;
2020-12-30 22:58:40 +01:00
2020-09-20 03:32:43 +02:00
$sql = " SELECT rowid FROM " . MAIN_DB_PREFIX . " facture WHERE " ;
$sql .= " fk_soc = " . (( int ) $invoice -> socid );
$sql .= " AND type <> " . Facture :: TYPE_CREDIT_NOTE ;
$sql .= " AND fk_statut >= " . $invoice :: STATUS_VALIDATED ;
$sql .= " ORDER BY rowid DESC " ;
2020-12-30 22:58:40 +01:00
2019-03-22 09:06:44 +01:00
$resql = $db -> query ( $sql );
2019-11-12 00:15:34 +01:00
if ( $resql ) {
2019-03-22 09:06:44 +01:00
$obj = $db -> fetch_object ( $resql );
2019-11-12 00:15:34 +01:00
$fk_source = $obj -> rowid ;
if ( $fk_source == null ) {
2019-03-22 09:06:44 +01:00
fail ( $langs -> transnoentitiesnoconv ( " NoPreviousBillForCustomer " ));
}
2019-11-12 00:15:34 +01:00
} else {
2019-03-22 09:06:44 +01:00
fail ( $langs -> transnoentitiesnoconv ( " NoPreviousBillForCustomer " ));
}
2019-11-12 00:15:34 +01:00
$invoice -> fk_facture_source = $fk_source ;
2019-03-22 09:06:44 +01:00
$invoice -> update ( $user );
}
2020-02-27 18:13:26 +01:00
2020-03-12 18:31:43 +01:00
//$sav_FACTURE_ADDON = '';
//if (!empty($conf->global->TAKEPOS_ADDON)) {
// $sav_FACTURE_ADDON = $conf->global->FACTURE_ADDON;
// if ($conf->global->TAKEPOS_ADDON == "terminal") $conf->global->FACTURE_ADDON = $conf->global->{'TAKEPOS_ADDON'.$_SESSION["takeposterminal"]};
// else $conf->global->FACTURE_ADDON = $conf->global->TAKEPOS_ADDON;
//}
2020-02-26 22:45:32 +01:00
2019-08-27 15:53:03 +02:00
$constantforkey = 'CASHDESK_NO_DECREASE_STOCK' . $_SESSION [ " takeposterminal " ];
2020-06-29 17:58:04 +02:00
if ( $error ) {
dol_htmloutput_errors ( $errormsg , null , 1 );
} elseif ( $invoice -> statut != Facture :: STATUS_DRAFT ) {
2019-10-20 22:01:54 +02:00
//If invoice is validated but it is not fully paid is not error and make the payment
2020-06-29 17:58:04 +02:00
if ( $invoice -> getRemainToPay () > 0 ) {
$res = 1 ;
} else {
2019-10-20 22:01:54 +02:00
dol_syslog ( " Sale already validated " );
dol_htmloutput_errors ( $langs -> trans ( " InvoiceIsAlreadyValidated " , " TakePos " ), null , 1 );
}
2020-06-29 17:58:04 +02:00
} elseif ( count ( $invoice -> lines ) == 0 ) {
2020-11-17 10:11:58 +01:00
$error ++ ;
2020-11-18 14:32:11 +01:00
dol_syslog ( 'Sale without lines' );
2019-08-24 16:44:06 +02:00
dol_htmloutput_errors ( $langs -> trans ( " NoLinesToBill " , " TakePos " ), null , 1 );
2020-06-29 17:58:04 +02:00
} elseif ( ! empty ( $conf -> stock -> enabled ) && $conf -> global -> $constantforkey != " 1 " ) {
2019-08-27 17:42:25 +02:00
$savconst = $conf -> global -> STOCK_CALCULATE_ON_BILL ;
2019-11-12 00:15:34 +01:00
$conf -> global -> STOCK_CALCULATE_ON_BILL = 1 ;
2019-03-14 16:35:36 +01:00
2019-08-27 15:39:35 +02:00
$constantforkey = 'CASHDESK_ID_WAREHOUSE' . $_SESSION [ " takeposterminal " ];
2019-08-27 17:42:25 +02:00
dol_syslog ( " Validate invoice with stock change into warehouse defined into constant " . $constantforkey . " = " . $conf -> global -> $constantforkey );
2020-02-21 11:08:34 +01:00
$batch_rule = 0 ;
if ( ! empty ( $conf -> productbatch -> enabled ) && ! empty ( $conf -> global -> CASHDESK_FORCE_DECREASE_STOCK )) {
2020-03-12 12:45:44 +01:00
require_once DOL_DOCUMENT_ROOT . '/product/class/productbatch.class.php' ;
2020-02-21 11:08:34 +01:00
$batch_rule = Productbatch :: BATCH_RULE_SELLBY_EATBY_DATES_FIRST ;
}
$res = $invoice -> validate ( $user , '' , $conf -> global -> $constantforkey , 0 , $batch_rule );
2019-02-18 19:14:25 +01:00
2019-08-27 17:42:25 +02:00
$conf -> global -> STOCK_CALCULATE_ON_BILL = $savconst ;
2020-05-21 15:05:19 +02:00
} else {
2020-09-07 10:18:17 +02:00
$res = $invoice -> validate ( $user );
2020-12-04 00:58:51 +01:00
if ( $res < 0 ) {
$error ++ ;
dol_htmloutput_errors ( $invoice -> error , $invoice -> errors , 1 );
}
2019-03-27 12:40:32 +01:00
}
2019-03-14 16:35:36 +01:00
2020-02-27 00:11:13 +01:00
// Restore save values
2020-03-12 18:31:43 +01:00
//if (!empty($sav_FACTURE_ADDON))
//{
// $conf->global->FACTURE_ADDON = $sav_FACTURE_ADDON;
//}
2020-02-27 18:13:26 +01:00
2018-09-28 13:31:41 +02:00
// Add the payment
2020-10-01 19:43:23 +02:00
if ( ! $error && $res >= 0 ) {
2020-09-30 15:09:45 +02:00
$remaintopay = $invoice -> getRemainToPay ();
if ( $remaintopay > 0 ) {
$payment = new Paiement ( $db );
$payment -> datepaye = $now ;
$payment -> fk_account = $bankaccount ;
$payment -> amounts [ $invoice -> id ] = $amountofpayment ;
2021-02-26 21:17:52 +01:00
if ( $pay == 'cash' ) {
$payment -> pos_change = price2num ( GETPOST ( 'excess' , 'alpha' ));
}
2020-09-30 15:09:45 +02:00
2020-10-01 19:35:49 +02:00
// If user has not used change control, add total invoice payment
2020-10-01 19:37:56 +02:00
// Or if user has used change control and the amount of payment is higher than remain to pay, add the remain to pay
2021-02-26 21:17:52 +01:00
if ( $amountofpayment == 0 || $amountofpayment > $remaintopay ) {
$payment -> amounts [ $invoice -> id ] = $remaintopay ;
}
2020-10-01 19:35:49 +02:00
2020-09-30 15:09:45 +02:00
$payment -> paiementid = $paiementid ;
$payment -> num_payment = $invoice -> ref ;
2020-10-01 19:43:23 +02:00
if ( $pay != " delayed " ) {
$payment -> create ( $user );
$payment -> addPaymentToBank ( $user , 'payment' , '(CustomerInvoicePayment)' , $bankaccount , '' , '' );
2020-10-07 15:01:28 +02:00
$remaintopay = $invoice -> getRemainToPay (); // Recalculate remain to pay after the payment is recorded
2020-10-01 19:43:23 +02:00
}
2020-08-19 14:36:03 +02:00
}
2019-09-24 10:08:48 +02:00
if ( $remaintopay == 0 ) {
2019-10-17 12:28:48 +02:00
dol_syslog ( " Invoice is paid, so we set it to status Paid " );
2021-02-09 10:26:17 +01:00
$result = $invoice -> setPaid ( $user );
2021-02-26 21:17:52 +01:00
if ( $result > 0 ) {
$invoice -> paye = 1 ;
}
2020-03-11 17:42:30 +01:00
// set payment method
$invoice -> setPaymentMethods ( $paiementid );
2019-09-24 10:08:48 +02:00
} else {
2019-11-12 00:15:34 +01:00
dol_syslog ( " Invoice is not paid, remain to pay = " . $remaintopay );
2019-09-24 10:08:48 +02:00
}
} else {
dol_htmloutput_errors ( $invoice -> error , $invoice -> errors , 1 );
2020-09-07 10:18:17 +02:00
}
2018-09-28 13:31:41 +02:00
}
2021-02-26 21:17:52 +01:00
if ( $action == 'creditnote' ) {
2020-10-25 20:03:25 +01:00
$creditnote = new Facture ( $db );
$creditnote -> socid = $invoice -> socid ;
$creditnote -> date = dol_now ();
$creditnote -> type = Facture :: TYPE_CREDIT_NOTE ;
$creditnote -> fk_facture_source = $placeid ;
$creditnote -> remise_absolue = $invoice -> remise_absolue ;
$creditnote -> remise_percent = $invoice -> remise_percent ;
$creditnote -> create ( $user );
2020-10-25 20:24:17 +01:00
2021-02-26 21:17:52 +01:00
foreach ( $invoice -> lines as $line ) {
2020-10-25 20:03:25 +01:00
// Extrafields
if ( method_exists ( $line , 'fetch_optionals' )) {
// load extrafields
$line -> fetch_optionals ();
}
// Reset fk_parent_line for no child products and special product
if (( $line -> product_type != 9 && empty ( $line -> fk_parent_line )) || $line -> product_type == 9 ) {
$fk_parent_line = 0 ;
}
2021-02-26 21:17:52 +01:00
if ( $invoice -> type == Facture :: TYPE_SITUATION ) {
2020-10-25 20:03:25 +01:00
$source_fk_prev_id = $line -> fk_prev_id ; // temporary storing situation invoice fk_prev_id
$line -> fk_prev_id = $line -> id ; // The new line of the new credit note we are creating must be linked to the situation invoice line it is created from
2021-02-26 21:17:52 +01:00
if ( ! empty ( $invoice -> tab_previous_situation_invoice )) {
2020-10-25 20:03:25 +01:00
// search the last standard invoice in cycle and the possible credit note between this last and invoice
// TODO Move this out of loop of $invoice->lines
$tab_jumped_credit_notes = array ();
$lineIndex = count ( $invoice -> tab_previous_situation_invoice ) - 1 ;
$searchPreviousInvoice = true ;
2021-02-26 21:17:52 +01:00
while ( $searchPreviousInvoice ) {
if ( $invoice -> tab_previous_situation_invoice [ $lineIndex ] -> type == Facture :: TYPE_SITUATION || $lineIndex < 1 ) {
2020-10-25 20:03:25 +01:00
$searchPreviousInvoice = false ; // find, exit;
break ;
} else {
if ( $invoice -> tab_previous_situation_invoice [ $lineIndex ] -> type == Facture :: TYPE_CREDIT_NOTE ) {
$tab_jumped_credit_notes [ $lineIndex ] = $invoice -> tab_previous_situation_invoice [ $lineIndex ] -> id ;
}
$lineIndex -- ; // go to previous invoice in cycle
}
}
$maxPrevSituationPercent = 0 ;
2021-02-26 21:17:52 +01:00
foreach ( $invoice -> tab_previous_situation_invoice [ $lineIndex ] -> lines as $prevLine ) {
if ( $prevLine -> id == $source_fk_prev_id ) {
2020-10-25 20:03:25 +01:00
$maxPrevSituationPercent = max ( $maxPrevSituationPercent , $prevLine -> situation_percent );
//$line->subprice = $line->subprice - $prevLine->subprice;
$line -> total_ht = $line -> total_ht - $prevLine -> total_ht ;
$line -> total_tva = $line -> total_tva - $prevLine -> total_tva ;
$line -> total_ttc = $line -> total_ttc - $prevLine -> total_ttc ;
$line -> total_localtax1 = $line -> total_localtax1 - $prevLine -> total_localtax1 ;
$line -> total_localtax2 = $line -> total_localtax2 - $prevLine -> total_localtax2 ;
$line -> multicurrency_subprice = $line -> multicurrency_subprice - $prevLine -> multicurrency_subprice ;
$line -> multicurrency_total_ht = $line -> multicurrency_total_ht - $prevLine -> multicurrency_total_ht ;
$line -> multicurrency_total_tva = $line -> multicurrency_total_tva - $prevLine -> multicurrency_total_tva ;
$line -> multicurrency_total_ttc = $line -> multicurrency_total_ttc - $prevLine -> multicurrency_total_ttc ;
}
}
// prorata
$line -> situation_percent = $maxPrevSituationPercent - $line -> situation_percent ;
//print 'New line based on invoice id '.$invoice->tab_previous_situation_invoice[$lineIndex]->id.' fk_prev_id='.$source_fk_prev_id.' will be fk_prev_id='.$line->fk_prev_id.' '.$line->total_ht.' '.$line->situation_percent.'<br>';
// If there is some credit note between last situation invoice and invoice used for credit note generation (note: credit notes are stored as delta)
$maxPrevSituationPercent = 0 ;
foreach ( $tab_jumped_credit_notes as $index => $creditnoteid ) {
2021-02-26 21:17:52 +01:00
foreach ( $invoice -> tab_previous_situation_invoice [ $index ] -> lines as $prevLine ) {
if ( $prevLine -> fk_prev_id == $source_fk_prev_id ) {
2020-10-25 20:03:25 +01:00
$maxPrevSituationPercent = $prevLine -> situation_percent ;
$line -> total_ht -= $prevLine -> total_ht ;
$line -> total_tva -= $prevLine -> total_tva ;
$line -> total_ttc -= $prevLine -> total_ttc ;
$line -> total_localtax1 -= $prevLine -> total_localtax1 ;
$line -> total_localtax2 -= $prevLine -> total_localtax2 ;
$line -> multicurrency_subprice -= $prevLine -> multicurrency_subprice ;
$line -> multicurrency_total_ht -= $prevLine -> multicurrency_total_ht ;
$line -> multicurrency_total_tva -= $prevLine -> multicurrency_total_tva ;
$line -> multicurrency_total_ttc -= $prevLine -> multicurrency_total_ttc ;
}
}
}
// prorata
$line -> situation_percent += $maxPrevSituationPercent ;
//print 'New line based on invoice id '.$invoice->tab_previous_situation_invoice[$lineIndex]->id.' fk_prev_id='.$source_fk_prev_id.' will be fk_prev_id='.$line->fk_prev_id.' '.$line->total_ht.' '.$line->situation_percent.'<br>';
}
}
$line -> fk_facture = $creditnote -> id ;
$line -> fk_parent_line = $fk_parent_line ;
$line -> subprice = - $line -> subprice ; // invert price for object
$line -> pa_ht = $line -> pa_ht ; // we choosed to have buy/cost price always positive, so no revert of sign here
$line -> total_ht = - $line -> total_ht ;
$line -> total_tva = - $line -> total_tva ;
$line -> total_ttc = - $line -> total_ttc ;
$line -> total_localtax1 = - $line -> total_localtax1 ;
$line -> total_localtax2 = - $line -> total_localtax2 ;
$line -> multicurrency_subprice = - $line -> multicurrency_subprice ;
$line -> multicurrency_total_ht = - $line -> multicurrency_total_ht ;
$line -> multicurrency_total_tva = - $line -> multicurrency_total_tva ;
$line -> multicurrency_total_ttc = - $line -> multicurrency_total_ttc ;
$result = $line -> insert ( 0 , 1 ); // When creating credit note with same lines than source, we must ignore error if discount alreayd linked
$creditnote -> lines [] = $line ; // insert new line in current object
// Defined the new fk_parent_line
if ( $result > 0 && $line -> product_type == 9 ) {
$fk_parent_line = $result ;
}
}
$creditnote -> update_price ( 1 );
2020-10-25 20:24:17 +01:00
2020-10-25 20:03:25 +01:00
$constantforkey = 'CASHDESK_NO_DECREASE_STOCK' . $_SESSION [ " takeposterminal " ];
if ( ! empty ( $conf -> stock -> enabled ) && $conf -> global -> $constantforkey != " 1 " ) {
$savconst = $conf -> global -> STOCK_CALCULATE_ON_BILL ;
$conf -> global -> STOCK_CALCULATE_ON_BILL = 1 ;
$constantforkey = 'CASHDESK_ID_WAREHOUSE' . $_SESSION [ " takeposterminal " ];
dol_syslog ( " Validate invoice with stock change into warehouse defined into constant " . $constantforkey . " = " . $conf -> global -> $constantforkey );
$batch_rule = 0 ;
if ( ! empty ( $conf -> productbatch -> enabled ) && ! empty ( $conf -> global -> CASHDESK_FORCE_DECREASE_STOCK )) {
require_once DOL_DOCUMENT_ROOT . '/product/class/productbatch.class.php' ;
$batch_rule = Productbatch :: BATCH_RULE_SELLBY_EATBY_DATES_FIRST ;
}
$res = $creditnote -> validate ( $user , '' , $conf -> global -> $constantforkey , 0 , $batch_rule );
$conf -> global -> STOCK_CALCULATE_ON_BILL = $savconst ;
} else {
$res = $creditnote -> validate ( $user );
}
}
2021-02-26 21:17:52 +01:00
if ( $action == 'history' || $action == 'creditnote' ) {
if ( $action == 'creditnote' ) {
$placeid = $creditnote -> id ;
} else {
$placeid = ( int ) GETPOST ( 'placeid' , 'int' );
}
2020-09-07 10:18:17 +02:00
$invoice = new Facture ( $db );
$invoice -> fetch ( $placeid );
2019-04-28 18:12:33 +02:00
}
2020-10-07 15:01:28 +02:00
if ( ! empty ( $conf -> multicurrency -> enabled ) && $_SESSION [ " takeposcustomercurrency " ] != " " ) {
2020-10-04 16:53:31 +02:00
$invoice -> setMulticurrencyCode ( $_SESSION [ " takeposcustomercurrency " ]);
}
2021-02-26 21:17:52 +01:00
if (( $action == " addline " || $action == " freezone " ) && $placeid == 0 ) {
2020-01-01 21:54:47 +01:00
$invoice -> socid = $conf -> global -> $constforcompanyid ;
2019-03-14 16:35:36 +01:00
$invoice -> date = dol_now ();
$invoice -> module_source = 'takepos' ;
2019-05-14 19:58:08 +02:00
$invoice -> pos_source = $_SESSION [ " takeposterminal " ];
2020-10-31 14:32:18 +01:00
$invoice -> entity = ! empty ( $_SESSION [ " takeposinvoiceentity " ]) ? $_SESSION [ " takeposinvoiceentity " ] : $conf -> entity ;
2019-03-14 16:35:36 +01:00
2021-02-26 21:17:52 +01:00
if ( $invoice -> socid <= 0 ) {
2019-08-01 12:23:02 +02:00
$langs -> load ( 'errors' );
dol_htmloutput_errors ( $langs -> trans ( " ErrorModuleSetupNotComplete " , " TakePos " ), null , 1 );
2020-05-21 15:05:19 +02:00
} else {
2019-08-01 12:23:02 +02:00
$placeid = $invoice -> create ( $user );
2021-02-26 21:17:52 +01:00
if ( $placeid < 0 ) {
2019-08-01 12:23:02 +02:00
dol_htmloutput_errors ( $invoice -> error , $invoice -> errors , 1 );
}
2021-06-09 15:36:47 +02:00
$sql = " UPDATE " . MAIN_DB_PREFIX . " facture set ref='(PROV-POS " . $_SESSION [ " takeposterminal " ] . " - " . $place . " )' where rowid = " . (( int ) $placeid );
2019-08-01 12:23:02 +02:00
$db -> query ( $sql );
}
2018-09-28 13:31:41 +02:00
}
2021-02-26 21:17:52 +01:00
if ( $action == " addline " ) {
2019-03-14 16:35:36 +01:00
$prod = new Product ( $db );
2020-09-07 10:18:17 +02:00
$prod -> fetch ( $idproduct );
2019-03-14 16:35:36 +01:00
2019-10-30 22:34:54 +01:00
$customer = new Societe ( $db );
$customer -> fetch ( $invoice -> socid );
2020-01-01 21:54:47 +01:00
$datapriceofproduct = $prod -> getSellPrice ( $mysoc , $customer , 0 );
2019-03-14 16:35:36 +01:00
2020-01-01 21:54:47 +01:00
$price = $datapriceofproduct [ 'pu_ht' ];
$price_ttc = $datapriceofproduct [ 'pu_ttc' ];
//$price_min = $datapriceofproduct['price_min'];
$price_base_type = $datapriceofproduct [ 'price_base_type' ];
$tva_tx = $datapriceofproduct [ 'tva_tx' ];
$tva_npr = $datapriceofproduct [ 'tva_npr' ];
// Local Taxes
$localtax1_tx = get_localtax ( $tva_tx , 1 , $customer , $mysoc , $tva_npr );
$localtax2_tx = get_localtax ( $tva_tx , 2 , $customer , $mysoc , $tva_npr );
2019-03-14 16:35:36 +01:00
2021-02-26 21:17:52 +01:00
if ( ! empty ( $conf -> global -> TAKEPOS_SUPPLEMENTS )) {
2019-12-08 23:16:49 +01:00
require_once DOL_DOCUMENT_ROOT . '/categories/class/categorie.class.php' ;
$cat = new Categorie ( $db );
$categories = $cat -> containing ( $idproduct , 'product' );
$found = ( array_search ( $conf -> global -> TAKEPOS_SUPPLEMENTS_CATEGORY , array_column ( $categories , 'id' )));
2021-02-26 21:17:52 +01:00
if ( $found !== false ) { // If this product is a supplement
2019-12-08 23:16:49 +01:00
$sql = " SELECT fk_parent_line FROM " . MAIN_DB_PREFIX . " facturedet where rowid= $selectedline " ;
$resql = $db -> query ( $sql );
$row = $db -> fetch_array ( $resql );
2021-02-26 21:17:52 +01:00
if ( $row [ 0 ] == null ) {
$parent_line = $selectedline ;
} else {
$parent_line = $row [ 0 ]; //If the parent line is already a supplement, add the supplement to the main product
}
2019-12-08 23:16:49 +01:00
}
}
2020-03-12 11:00:17 +01:00
$idoflineadded = 0 ;
if ( ! empty ( $conf -> global -> TAKEPOS_GROUP_SAME_PRODUCT )) {
foreach ( $invoice -> lines as $line ) {
if ( $line -> product_ref == $prod -> ref ) {
2020-04-10 10:59:32 +02:00
$result = $invoice -> updateline ( $line -> id , $line -> desc , $line -> subprice , $line -> qty + 1 , $line -> remise_percent , $line -> date_start , $line -> date_end , $line -> tva_tx , $line -> localtax1_tx , $line -> localtax2_tx , 'HT' , $line -> info_bits , $line -> product_type , $line -> fk_parent_line , 0 , $line -> fk_fournprice , $line -> pa_ht , $line -> label , $line -> special_code , $line -> array_options , $line -> situation_percent , $line -> fk_unit );
2020-03-12 11:00:17 +01:00
if ( $result < 0 ) {
dol_htmloutput_errors ( $invoice -> error , $invoice -> errors , 1 );
} else {
$idoflineadded = $line -> id ;
}
break ;
}
}
}
if ( $idoflineadded <= 0 ) {
2020-08-06 07:32:28 +02:00
$invoice -> fetch_thirdparty ();
2020-04-09 14:42:42 +02:00
$idoflineadded = $invoice -> addline ( $prod -> description , $price , 1 , $tva_tx , $localtax1_tx , $localtax2_tx , $idproduct , $customer -> remise_percent , '' , 0 , 0 , 0 , '' , $price_base_type , $price_ttc , $prod -> type , - 1 , 0 , '' , 0 , $parent_line , null , '' , '' , 0 , 100 , '' , null , 0 );
2020-03-12 11:00:17 +01:00
}
2020-01-01 22:37:13 +01:00
2020-04-12 17:01:44 +02:00
$invoice -> fetch ( $placeid );
2018-09-28 13:31:41 +02:00
}
2018-12-07 17:02:06 +01:00
if ( $action == " freezone " ) {
2020-09-07 10:18:17 +02:00
$customer = new Societe ( $db );
$customer -> fetch ( $invoice -> socid );
2020-01-01 21:54:47 +01:00
2020-03-17 09:44:59 +01:00
$tva_tx = GETPOST ( 'tva_tx' , 'alpha' );
if ( $tva_tx != '' ) {
2021-02-10 01:10:31 +01:00
if ( ! preg_match ( '/\((.*)\)/' , $tva_tx )) {
$tva_tx = price2num ( $tva_tx );
}
2020-03-17 09:44:59 +01:00
} else {
$tva_tx = get_default_tva ( $mysoc , $customer );
}
2020-01-01 21:54:47 +01:00
2020-09-08 21:27:28 +02:00
// Local Taxes
$localtax1_tx = get_localtax ( $tva_tx , 1 , $customer , $mysoc , $tva_npr );
$localtax2_tx = get_localtax ( $tva_tx , 2 , $customer , $mysoc , $tva_npr );
2020-01-01 21:54:47 +01:00
2020-09-08 21:27:28 +02:00
$invoice -> addline ( $desc , $number , 1 , $tva_tx , $localtax1_tx , $localtax2_tx , 0 , 0 , '' , 0 , 0 , 0 , '' , 'TTC' , $number , 0 , - 1 , 0 , '' , 0 , 0 , null , '' , '' , 0 , 100 , '' , null , 0 );
$invoice -> fetch ( $placeid );
2018-09-28 13:31:41 +02:00
}
2019-03-03 12:50:36 +01:00
if ( $action == " addnote " ) {
2021-02-26 21:17:52 +01:00
foreach ( $invoice -> lines as $line ) {
2021-04-14 00:15:02 +02:00
if ( $line -> id == $idline ) {
$desc = GETPOST ( 'addnote' , 'alpha' );
$result = $invoice -> updateline ( $line -> id , $desc , $line -> subprice , $line -> qty , $line -> remise_percent , $line -> date_start , $line -> date_end , $line -> tva_tx , $line -> localtax1_tx , $line -> localtax2_tx , 'HT' , $line -> info_bits , $line -> product_type , $line -> fk_parent_line , 0 , $line -> fk_fournprice , $line -> pa_ht , $line -> label , $line -> special_code , $line -> array_options , $line -> situation_percent , $line -> fk_unit );
2020-09-08 21:27:28 +02:00
}
}
$invoice -> fetch ( $placeid );
2019-03-03 12:50:36 +01:00
}
2018-12-07 17:02:06 +01:00
if ( $action == " deleteline " ) {
2020-09-08 21:27:28 +02:00
if ( $idline > 0 and $placeid > 0 ) { // If invoice exists and line selected. To avoid errors if deleted from another device or no line selected.
$invoice -> deleteline ( $idline );
$invoice -> fetch ( $placeid );
} elseif ( $placeid > 0 ) { // If invoice exists but no line selected, proceed to delete last line.
2020-09-20 03:32:43 +02:00
$sql = " SELECT rowid FROM " . MAIN_DB_PREFIX . " facturedet where fk_facture = " . (( int ) $placeid ) . " ORDER BY rowid DESC " ;
2020-09-08 21:27:28 +02:00
$resql = $db -> query ( $sql );
$row = $db -> fetch_array ( $resql );
$deletelineid = $row [ 0 ];
$invoice -> deleteline ( $deletelineid );
$invoice -> fetch ( $placeid );
}
2020-10-04 15:54:23 +02:00
if ( count ( $invoice -> lines ) == 0 ) {
2020-10-04 15:56:36 +02:00
$invoice -> delete ( $user );
header ( " Location: " . DOL_URL_ROOT . " /takepos/invoice.php " );
exit ;
2020-10-04 15:54:23 +02:00
}
2018-09-28 13:31:41 +02:00
}
2020-12-30 21:22:54 +01:00
// Action to delete or discard an invoice
2019-04-02 17:36:27 +02:00
if ( $action == " delete " ) {
2019-08-27 15:39:35 +02:00
// $placeid is the invoice id (it differs from place) and is defined if the place is set and the ref of invoice is '(PROV-POS'.$_SESSION["takeposterminal"].'-'.$place.')', so the fetch at begining of page works.
if ( $placeid > 0 ) {
2020-09-07 10:18:17 +02:00
$result = $invoice -> fetch ( $placeid );
2019-08-27 15:39:35 +02:00
2021-02-26 21:17:52 +01:00
if ( $result > 0 && $invoice -> statut == Facture :: STATUS_DRAFT ) {
2020-09-07 10:18:17 +02:00
$db -> begin ();
2019-08-27 15:42:35 +02:00
2020-09-07 10:18:17 +02:00
// We delete the lines
2020-11-30 11:22:49 +01:00
$resdeletelines = 1 ;
2020-12-01 15:45:19 +01:00
foreach ( $invoice -> lines as $line ) {
2020-11-30 15:39:35 +01:00
$tmpres = $invoice -> deleteline ( $line -> id );
if ( $tmpres < 0 ) {
$resdeletelines = 0 ;
break ;
}
2020-11-30 11:22:49 +01:00
}
2020-11-30 11:32:58 +01:00
2020-12-30 21:22:54 +01:00
$sql = " UPDATE " . MAIN_DB_PREFIX . " facture " ;
$sql .= " SET fk_soc= " . $conf -> global -> { 'CASHDESK_ID_THIRDPARTY' . $_SESSION [ " takeposterminal " ]} . " , " ;
$sql .= " datec = ' " . $db -> idate ( dol_now ()) . " ' " ;
2020-12-01 10:04:51 +01:00
$sql .= " WHERE ref='(PROV-POS " . $db -> escape ( $_SESSION [ " takeposterminal " ] . " - " . $place ) . " )' " ;
2020-11-30 11:22:49 +01:00
$resql1 = $db -> query ( $sql );
2019-08-27 15:42:35 +02:00
2020-12-01 11:38:46 +01:00
if ( $resdeletelines && $resql1 ) {
2021-02-26 21:17:52 +01:00
$db -> commit ();
} else {
$db -> rollback ();
}
2019-04-02 17:36:27 +02:00
2020-09-07 10:18:17 +02:00
$invoice -> fetch ( $placeid );
}
}
2019-04-02 17:36:27 +02:00
}
2021-02-26 21:17:52 +01:00
if ( $action == " updateqty " ) {
foreach ( $invoice -> lines as $line ) {
if ( $line -> id == $idline ) {
2021-04-17 01:06:30 +02:00
if ( ! $user -> rights -> takepos -> editlines || ( ! $user -> rights -> takepos -> editorderedlines && $line -> special_code == " 4 " )) dol_htmloutput_errors ( $langs -> trans ( " NotEnoughPermissions " , " TakePos " ), null , 1 );
else $result = $invoice -> updateline ( $line -> id , $line -> desc , $line -> subprice , $number , $line -> remise_percent , $line -> date_start , $line -> date_end , $line -> tva_tx , $line -> localtax1_tx , $line -> localtax2_tx , 'HT' , $line -> info_bits , $line -> product_type , $line -> fk_parent_line , 0 , $line -> fk_fournprice , $line -> pa_ht , $line -> label , $line -> special_code , $line -> array_options , $line -> situation_percent , $line -> fk_unit );
2020-09-07 10:18:17 +02:00
}
}
2018-12-07 17:02:06 +01:00
2020-09-07 10:18:17 +02:00
$invoice -> fetch ( $placeid );
2018-09-28 13:31:41 +02:00
}
2021-02-26 21:17:52 +01:00
if ( $action == " updateprice " ) {
foreach ( $invoice -> lines as $line ) {
if ( $line -> id == $idline ) {
2020-01-28 22:18:23 +01:00
$prod = new Product ( $db );
$prod -> fetch ( $line -> fk_product );
$customer = new Societe ( $db );
$customer -> fetch ( $invoice -> socid );
$datapriceofproduct = $prod -> getSellPrice ( $mysoc , $customer , 0 );
$price_min = $datapriceofproduct [ 'price_min' ];
$usercanproductignorepricemin = (( ! empty ( $conf -> global -> MAIN_USE_ADVANCED_PERMS ) && empty ( $user -> rights -> produit -> ignore_price_min_advance )) || empty ( $conf -> global -> MAIN_USE_ADVANCED_PERMS ));
$pu_ht = price2num ( $number / ( 1 + ( $line -> tva_tx / 100 )), 'MU' );
//Check min price
2021-02-26 21:17:52 +01:00
if ( $usercanproductignorepricemin && ( ! empty ( $price_min ) && ( price2num ( $pu_ht ) * ( 1 - price2num ( $line -> remise_percent ) / 100 ) < price2num ( $price_min )))) {
2020-01-28 22:18:23 +01:00
echo $langs -> trans ( " CantBeLessThanMinPrice " );
2021-02-26 21:17:52 +01:00
} else {
2021-04-17 01:06:30 +02:00
if ( ! $user -> rights -> takepos -> editlines || ( ! $user -> rights -> takepos -> editorderedlines && $line -> special_code == " 4 " )) dol_htmloutput_errors ( $langs -> trans ( " NotEnoughPermissions " , " TakePos " ), null , 1 );
else $result = $invoice -> updateline ( $line -> id , $line -> desc , $number , $line -> qty , $line -> remise_percent , $line -> date_start , $line -> date_end , $line -> tva_tx , $line -> localtax1_tx , $line -> localtax2_tx , 'TTC' , $line -> info_bits , $line -> product_type , $line -> fk_parent_line , 0 , $line -> fk_fournprice , $line -> pa_ht , $line -> label , $line -> special_code , $line -> array_options , $line -> situation_percent , $line -> fk_unit );
2021-02-26 21:17:52 +01:00
}
2020-09-07 10:18:17 +02:00
}
}
$invoice -> fetch ( $placeid );
2018-09-28 13:31:41 +02:00
}
2021-02-26 21:17:52 +01:00
if ( $action == " updatereduction " ) {
foreach ( $invoice -> lines as $line ) {
if ( $line -> id == $idline ) {
2020-01-28 22:21:19 +01:00
$prod = new Product ( $db );
$prod -> fetch ( $line -> fk_product );
$customer = new Societe ( $db );
$customer -> fetch ( $invoice -> socid );
$datapriceofproduct = $prod -> getSellPrice ( $mysoc , $customer , 0 );
$price_min = $datapriceofproduct [ 'price_min' ];
$usercanproductignorepricemin = (( ! empty ( $conf -> global -> MAIN_USE_ADVANCED_PERMS ) && empty ( $user -> rights -> produit -> ignore_price_min_advance )) || empty ( $conf -> global -> MAIN_USE_ADVANCED_PERMS ));
$pu_ht = price2num ( $line -> multicurrency_subprice / ( 1 + ( $line -> tva_tx / 100 )), 'MU' );
//Check min price
2021-02-26 21:17:52 +01:00
if ( $usercanproductignorepricemin && ( ! empty ( $price_min ) && ( price2num ( $line -> multicurrency_subprice ) * ( 1 - price2num ( $number ) / 100 ) < price2num ( $price_min )))) {
2020-01-28 22:21:19 +01:00
echo $langs -> trans ( " CantBeLessThanMinPrice " );
2021-02-26 21:17:52 +01:00
} else {
2021-04-17 01:06:30 +02:00
if ( ! $user -> rights -> takepos -> editlines || ( ! $user -> rights -> takepos -> editorderedlines && $line -> special_code == " 4 " )) dol_htmloutput_errors ( $langs -> trans ( " NotEnoughPermissions " , " TakePos " ), null , 1 );
else $result = $invoice -> updateline ( $line -> id , $line -> desc , $line -> multicurrency_subprice , $line -> qty , $number , $line -> date_start , $line -> date_end , $line -> tva_tx , $line -> localtax1_tx , $line -> localtax2_tx , 'HT' , $line -> info_bits , $line -> product_type , $line -> fk_parent_line , 0 , $line -> fk_fournprice , $line -> pa_ht , $line -> label , $line -> special_code , $line -> array_options , $line -> situation_percent , $line -> fk_unit );
2021-02-26 21:17:52 +01:00
}
2020-01-28 22:21:19 +01:00
}
2020-09-07 10:18:17 +02:00
}
2020-03-11 12:30:07 +01:00
$invoice -> fetch ( $placeid );
} elseif ( $action == 'update_reduction_global' ) {
foreach ( $invoice -> lines as $line ) {
$result = $invoice -> updateline ( $line -> id , $line -> desc , $line -> subprice , $line -> qty , $number , $line -> date_start , $line -> date_end , $line -> tva_tx , $line -> localtax1_tx , $line -> localtax2_tx , 'HT' , $line -> info_bits , $line -> product_type , $line -> fk_parent_line , 0 , $line -> fk_fournprice , $line -> pa_ht , $line -> label , $line -> special_code , $line -> array_options , $line -> situation_percent , $line -> fk_unit );
}
2020-01-28 22:21:19 +01:00
$invoice -> fetch ( $placeid );
2018-09-28 13:31:41 +02:00
}
2021-02-26 21:17:52 +01:00
if ( $action == " order " and $placeid != 0 ) {
2020-09-07 10:18:17 +02:00
include_once DOL_DOCUMENT_ROOT . '/categories/class/categorie.class.php' ;
2020-11-12 22:31:32 +01:00
if ( $conf -> global -> TAKEPOS_PRINT_METHOD == " receiptprinter " || $conf -> global -> TAKEPOS_PRINT_METHOD == " takeposconnector " ) {
2020-02-22 11:30:48 +01:00
require_once DOL_DOCUMENT_ROOT . '/core/class/dolreceiptprinter.class.php' ;
$printer = new dolReceiptPrinter ( $db );
}
2018-12-07 17:02:06 +01:00
2020-11-24 21:48:08 +01:00
$sql = " SELECT label FROM " . MAIN_DB_PREFIX . " takepos_floor_tables where rowid= " . (( int ) $place );
2020-12-01 02:41:19 +01:00
$resql = $db -> query ( $sql );
$row = $db -> fetch_object ( $resql );
2020-11-24 21:48:08 +01:00
$headerorder = '<html><br><b>' . $langs -> trans ( 'Place' ) . ' ' . $row -> label . '<br><table width="65%"><thead><tr><th class="left">' . $langs -> trans ( " Label " ) . '</th><th class="right">' . $langs -> trans ( " Qty " ) . '</th></tr></thead><tbody>' ;
2020-09-07 10:18:17 +02:00
$footerorder = '</tbody></table>' . dol_print_date ( dol_now (), 'dayhour' ) . '<br></html>' ;
$order_receipt_printer1 = " " ;
$order_receipt_printer2 = " " ;
2020-10-12 22:07:05 +02:00
$order_receipt_printer3 = " " ;
2020-09-07 10:18:17 +02:00
$catsprinter1 = explode ( ';' , $conf -> global -> TAKEPOS_PRINTED_CATEGORIES_1 );
$catsprinter2 = explode ( ';' , $conf -> global -> TAKEPOS_PRINTED_CATEGORIES_2 );
2020-10-12 22:07:05 +02:00
$catsprinter3 = explode ( ';' , $conf -> global -> TAKEPOS_PRINTED_CATEGORIES_3 );
2021-02-26 21:17:52 +01:00
foreach ( $invoice -> lines as $line ) {
2020-09-07 10:18:17 +02:00
if ( $line -> special_code == " 4 " ) {
continue ;
}
$c = new Categorie ( $db );
$existing = $c -> containing ( $line -> fk_product , Categorie :: TYPE_PRODUCT , 'id' );
$result = array_intersect ( $catsprinter1 , $existing );
$count = count ( $result );
2021-02-26 21:17:52 +01:00
if ( ! $line -> fk_product ) {
$count ++ ; // Print Free-text item (Unassigned printer) to Printer 1
}
2020-09-07 10:18:17 +02:00
if ( $count > 0 ) {
$linestoprint ++ ;
$sql = " UPDATE " . MAIN_DB_PREFIX . " facturedet set special_code='1' where rowid= " . $line -> id ; //Set to print on printer 1
$db -> query ( $sql );
2020-11-24 21:48:08 +01:00
$order_receipt_printer1 .= '<tr><td class="left">' ;
2021-02-26 21:17:52 +01:00
if ( $line -> fk_product ) {
$order_receipt_printer1 .= $line -> product_label ;
} else {
$order_receipt_printer1 .= $line -> description ;
}
2020-11-24 21:48:08 +01:00
$order_receipt_printer1 .= '</td><td class="right">' . $line -> qty ;
2021-02-26 21:17:52 +01:00
if ( ! empty ( $line -> array_options [ 'options_order_notes' ])) {
$order_receipt_printer1 .= " <br>( " . $line -> array_options [ 'options_order_notes' ] . " ) " ;
}
2019-11-12 00:15:34 +01:00
$order_receipt_printer1 .= '</td></tr>' ;
2020-09-07 10:18:17 +02:00
}
}
2020-11-12 22:31:32 +01:00
if (( $conf -> global -> TAKEPOS_PRINT_METHOD == " receiptprinter " || $conf -> global -> TAKEPOS_PRINT_METHOD == " takeposconnector " ) && $linestoprint > 0 ) {
2020-02-22 11:30:48 +01:00
$invoice -> fetch ( $placeid ); //Reload object before send to printer
2020-04-13 13:24:42 +02:00
$printer -> orderprinter = 1 ;
2020-11-12 22:31:32 +01:00
echo " <script> " ;
echo " var orderprinter1esc=' " ;
2020-04-10 19:18:42 +02:00
$ret = $printer -> sendToPrinter ( $invoice , $conf -> global -> { 'TAKEPOS_TEMPLATE_TO_USE_FOR_ORDERS' . $_SESSION [ " takeposterminal " ]}, $conf -> global -> { 'TAKEPOS_ORDER_PRINTER1_TO_USE' . $_SESSION [ " takeposterminal " ]}); // PRINT TO PRINTER 1
2020-11-12 22:31:32 +01:00
echo " ';</script> " ;
2020-02-22 11:30:48 +01:00
}
$sql = " UPDATE " . MAIN_DB_PREFIX . " facturedet set special_code='4' where special_code='1' and fk_facture= " . $invoice -> id ; // Set as printed
$db -> query ( $sql );
$invoice -> fetch ( $placeid ); //Reload object after set lines as printed
2020-04-13 13:24:42 +02:00
$linestoprint = 0 ;
2018-12-07 17:02:06 +01:00
2021-02-26 21:17:52 +01:00
foreach ( $invoice -> lines as $line ) {
2020-09-07 10:18:17 +02:00
if ( $line -> special_code == " 4 " ) {
continue ;
}
$c = new Categorie ( $db );
$existing = $c -> containing ( $line -> fk_product , Categorie :: TYPE_PRODUCT , 'id' );
$result = array_intersect ( $catsprinter2 , $existing );
$count = count ( $result );
if ( $count > 0 ) {
$linestoprint ++ ;
$sql = " UPDATE " . MAIN_DB_PREFIX . " facturedet set special_code='2' where rowid= " . $line -> id ; //Set to print on printer 2
$db -> query ( $sql );
$order_receipt_printer2 .= '<tr>' . $line -> product_label . '<td class="right">' . $line -> qty ;
2021-02-26 21:17:52 +01:00
if ( ! empty ( $line -> array_options [ 'options_order_notes' ])) {
$order_receipt_printer2 .= " <br>( " . $line -> array_options [ 'options_order_notes' ] . " ) " ;
}
2019-11-12 00:15:34 +01:00
$order_receipt_printer2 .= '</td></tr>' ;
2020-09-07 10:18:17 +02:00
}
}
2020-11-12 22:31:32 +01:00
if (( $conf -> global -> TAKEPOS_PRINT_METHOD == " receiptprinter " || $conf -> global -> TAKEPOS_PRINT_METHOD == " takeposconnector " ) && $linestoprint > 0 ) {
2020-02-22 11:30:48 +01:00
$invoice -> fetch ( $placeid ); //Reload object before send to printer
2020-04-13 13:24:42 +02:00
$printer -> orderprinter = 2 ;
2020-11-12 22:31:32 +01:00
echo " <script> " ;
echo " var orderprinter2esc=' " ;
2020-04-10 19:18:42 +02:00
$ret = $printer -> sendToPrinter ( $invoice , $conf -> global -> { 'TAKEPOS_TEMPLATE_TO_USE_FOR_ORDERS' . $_SESSION [ " takeposterminal " ]}, $conf -> global -> { 'TAKEPOS_ORDER_PRINTER2_TO_USE' . $_SESSION [ " takeposterminal " ]}); // PRINT TO PRINTER 2
2020-11-12 22:31:32 +01:00
echo " ';</script> " ;
2020-02-22 11:30:48 +01:00
}
$sql = " UPDATE " . MAIN_DB_PREFIX . " facturedet set special_code='4' where special_code='2' and fk_facture= " . $invoice -> id ; // Set as printed
$db -> query ( $sql );
$invoice -> fetch ( $placeid ); //Reload object after set lines as printed
2020-10-12 22:07:05 +02:00
$linestoprint = 0 ;
2020-10-12 22:34:05 +02:00
2021-02-26 21:17:52 +01:00
foreach ( $invoice -> lines as $line ) {
2020-10-12 22:07:05 +02:00
if ( $line -> special_code == " 4 " ) {
continue ;
}
$c = new Categorie ( $db );
$existing = $c -> containing ( $line -> fk_product , Categorie :: TYPE_PRODUCT , 'id' );
$result = array_intersect ( $catsprinter3 , $existing );
$count = count ( $result );
if ( $count > 0 ) {
$linestoprint ++ ;
$sql = " UPDATE " . MAIN_DB_PREFIX . " facturedet set special_code='3' where rowid= " . $line -> id ; //Set to print on printer 3
$db -> query ( $sql );
$order_receipt_printer3 .= '<tr>' . $line -> product_label . '<td class="right">' . $line -> qty ;
2021-02-26 21:17:52 +01:00
if ( ! empty ( $line -> array_options [ 'options_order_notes' ])) {
$order_receipt_printer3 .= " <br>( " . $line -> array_options [ 'options_order_notes' ] . " ) " ;
}
2020-10-12 22:07:05 +02:00
$order_receipt_printer3 .= '</td></tr>' ;
}
}
2020-11-12 22:31:32 +01:00
if (( $conf -> global -> TAKEPOS_PRINT_METHOD == " receiptprinter " || $conf -> global -> TAKEPOS_PRINT_METHOD == " takeposconnector " ) && $linestoprint > 0 ) {
2020-10-12 22:07:05 +02:00
$invoice -> fetch ( $placeid ); //Reload object before send to printer
$printer -> orderprinter = 3 ;
2020-11-12 22:31:32 +01:00
echo " <script> " ;
echo " var orderprinter3esc=' " ;
2020-10-12 22:07:05 +02:00
$ret = $printer -> sendToPrinter ( $invoice , $conf -> global -> { 'TAKEPOS_TEMPLATE_TO_USE_FOR_ORDERS' . $_SESSION [ " takeposterminal " ]}, $conf -> global -> { 'TAKEPOS_ORDER_PRINTER3_TO_USE' . $_SESSION [ " takeposterminal " ]}); // PRINT TO PRINTER 3
2020-11-12 22:31:32 +01:00
echo " ';</script> " ;
2020-10-12 22:07:05 +02:00
}
$sql = " UPDATE " . MAIN_DB_PREFIX . " facturedet set special_code='4' where special_code='3' and fk_facture= " . $invoice -> id ; // Set as printed
$db -> query ( $sql );
$invoice -> fetch ( $placeid ); //Reload object after set lines as printed
2018-12-07 17:02:06 +01:00
}
2018-09-28 13:31:41 +02:00
2019-11-12 00:15:34 +01:00
$sectionwithinvoicelink = '' ;
2021-02-26 21:17:52 +01:00
if ( $action == " valid " || $action == " history " || $action == 'creditnote' ) {
2020-09-07 10:18:17 +02:00
$sectionwithinvoicelink .= '<!-- Section with invoice link -->' . " \n " ;
$sectionwithinvoicelink .= '<span style="font-size:120%;" class="center">' ;
$sectionwithinvoicelink .= $invoice -> getNomUrl ( 1 , '' , 0 , 0 , '' , 0 , 0 , - 1 , '_backoffice' ) . " - " ;
$remaintopay = $invoice -> getRemainToPay ();
2021-02-26 21:17:52 +01:00
if ( $remaintopay > 0 ) {
2020-09-07 10:18:17 +02:00
$sectionwithinvoicelink .= $langs -> trans ( 'RemainToPay' ) . ': <span class="amountremaintopay" style="font-size: unset">' . price ( $remaintopay , 1 , $langs , 1 , - 1 , - 1 , $conf -> currency ) . '</span>' ;
} else {
2021-02-26 21:17:52 +01:00
if ( $invoice -> paye ) {
$sectionwithinvoicelink .= '<span class="amountpaymentcomplete" style="font-size: unset">' . $langs -> trans ( " Paid " ) . '</span>' ;
} else {
$sectionwithinvoicelink .= $langs -> trans ( 'BillShortStatusValidated' );
}
2020-09-07 10:18:17 +02:00
}
2020-10-04 15:01:22 +02:00
$sectionwithinvoicelink .= '</span><br>' ;
2020-09-07 10:18:17 +02:00
if ( $conf -> global -> TAKEPOS_PRINT_METHOD == " takeposconnector " ) {
2021-02-26 21:17:52 +01:00
if ( filter_var ( $conf -> global -> TAKEPOS_PRINT_SERVER , FILTER_VALIDATE_URL ) == true ) {
$sectionwithinvoicelink .= ' <button id="buttonprint" type="button" onclick="TakeposConnector(' . $placeid . ');">' . $langs -> trans ( 'PrintTicket' ) . '</button>' ;
} else {
$sectionwithinvoicelink .= ' <button id="buttonprint" type="button" onclick="TakeposPrinting(' . $placeid . ');">' . $langs -> trans ( 'PrintTicket' ) . '</button>' ;
}
2020-09-07 10:18:17 +02:00
} elseif ( $conf -> global -> TAKEPOS_PRINT_METHOD == " receiptprinter " ) {
$sectionwithinvoicelink .= ' <button id="buttonprint" type="button" onclick="DolibarrTakeposPrinting(' . $placeid . ');">' . $langs -> trans ( 'PrintTicket' ) . '</button>' ;
} else {
$sectionwithinvoicelink .= ' <button id="buttonprint" type="button" onclick="Print(' . $placeid . ');">' . $langs -> trans ( 'PrintTicket' ) . '</button>' ;
2020-08-02 11:13:41 +02:00
if ( $conf -> global -> TAKEPOS_GIFT_RECEIPT ) {
2020-10-04 15:01:22 +02:00
$sectionwithinvoicelink .= ' <button id="buttonprint" type="button" onclick="Print(' . $placeid . ', 1);">' . $langs -> trans ( 'GiftReceipt' ) . '</button>' ;
2020-08-02 11:13:41 +02:00
}
2020-09-07 10:18:17 +02:00
}
2021-02-26 21:17:52 +01:00
if ( $conf -> global -> TAKEPOS_EMAIL_TEMPLATE_INVOICE > 0 ) {
2020-09-07 10:18:17 +02:00
$sectionwithinvoicelink .= ' <button id="buttonsend" type="button" onclick="SendTicket(' . $placeid . ');">' . $langs -> trans ( 'SendTicket' ) . '</button>' ;
}
2019-11-07 15:12:37 +01:00
2021-02-26 21:17:52 +01:00
if ( $remaintopay <= 0 && $conf -> global -> TAKEPOS_AUTO_PRINT_TICKETS ) {
$sectionwithinvoicelink .= '<script language="javascript">$("#buttonprint").click();</script>' ;
}
2019-10-23 22:05:37 +02:00
}
2019-03-27 15:42:53 +01:00
2021-03-14 17:18:04 +01:00
2019-03-27 15:42:53 +01:00
/*
* View
*/
2019-03-27 17:50:23 +01:00
$form = new Form ( $db );
2018-09-28 13:31:41 +02:00
?>
< script language = " javascript " >
var selectedline = 0 ;
var selectedtext = " " ;
2019-11-12 00:15:34 +01:00
var placeid =< ? php echo ( $placeid > 0 ? $placeid : 0 ); ?> ;
2019-03-27 17:50:23 +01:00
$ ( document ) . ready ( function () {
2019-11-12 00:15:34 +01:00
var idoflineadded = < ? php echo ( $idoflineadded ? $idoflineadded : 0 ); ?> ;
2019-03-29 12:19:23 +01:00
2021-02-26 21:17:52 +01:00
$ ( '.posinvoiceline' ) . click ( function (){
console . log ( " Click done on " + this . id );
$ ( '.posinvoiceline' ) . removeClass ( " selected " );
$ ( this ) . addClass ( " selected " );
if ( selectedline == this . id ) return ; // If is already selected
else selectedline = this . id ;
selectedtext = $ ( '#' + selectedline ) . find ( " td:first " ) . html ();
2020-05-08 17:25:48 +02:00
< ? php
2020-05-15 13:55:31 +02:00
if ( defined ( 'INCLUDE_PHONEPAGE_FROM_PUBLIC_PAGE' )) {
2020-05-08 17:25:48 +02:00
print ' $ ( " #phonediv1 " ) . load ( " auto_order.php?action=editline&placeid= " + placeid + " &selectedline= " + selectedline , function () {
}); ' ;
}
?>
2021-02-26 21:17:52 +01:00
});
/* Autoselect the line */
if ( idoflineadded > 0 )
{
console . log ( " Auto select " + idoflineadded );
$ ( '.posinvoiceline#' + idoflineadded ) . click ();
}
2018-09-28 13:31:41 +02:00
< ? php
2018-12-07 08:04:40 +01:00
2018-12-07 17:02:06 +01:00
if ( $action == " order " and $order_receipt_printer1 != " " ) {
2020-12-01 02:41:19 +01:00
if ( filter_var ( $conf -> global -> TAKEPOS_PRINT_SERVER , FILTER_VALIDATE_URL ) == true ) {
2020-11-12 22:31:32 +01:00
?>
$ . ajax ({
type : " POST " ,
url : '<?php print $conf->global->TAKEPOS_PRINT_SERVER; ?>/printer/index.php' ,
data : 'invoice=' + orderprinter1esc
});
< ? php
2021-02-26 21:17:52 +01:00
} else {
2020-11-12 22:31:32 +01:00
?>
$ . ajax ({
type : " POST " ,
url : 'http://<?php print $conf->global->TAKEPOS_PRINT_SERVER; ?>:8111/print' ,
data : ' < ? php
print $headerorder . $order_receipt_printer1 . $footerorder ; ?> '
});
< ? php
}
2018-09-28 13:31:41 +02:00
}
2018-12-07 08:04:40 +01:00
2018-12-07 17:02:06 +01:00
if ( $action == " order " and $order_receipt_printer2 != " " ) {
2020-12-01 02:41:19 +01:00
if ( filter_var ( $conf -> global -> TAKEPOS_PRINT_SERVER , FILTER_VALIDATE_URL ) == true ) {
2020-11-12 22:31:32 +01:00
?>
$ . ajax ({
type : " POST " ,
url : '<?php print $conf->global->TAKEPOS_PRINT_SERVER; ?>/printer/index.php?printer=2' ,
data : 'invoice=' + orderprinter2esc
});
< ? php
2021-02-26 21:17:52 +01:00
} else {
2020-11-12 22:31:32 +01:00
?>
$ . ajax ({
type : " POST " ,
url : 'http://<?php print $conf->global->TAKEPOS_PRINT_SERVER; ?>:8111/print2' ,
data : ' < ? php
print $headerorder . $order_receipt_printer2 . $footerorder ; ?> '
});
2021-02-26 21:17:52 +01:00
< ? php
2020-11-12 22:31:32 +01:00
}
}
if ( $action == " order " and $order_receipt_printer3 != " " ) {
2020-12-01 02:41:19 +01:00
if ( filter_var ( $conf -> global -> TAKEPOS_PRINT_SERVER , FILTER_VALIDATE_URL ) == true ) {
2020-11-12 22:31:32 +01:00
?>
$ . ajax ({
type : " POST " ,
url : '<?php print $conf->global->TAKEPOS_PRINT_SERVER; ?>/printer/index.php?printer=3' ,
data : 'invoice=' + orderprinter3esc
});
< ? php
}
2018-12-07 17:02:06 +01:00
}
2018-12-07 08:04:40 +01:00
2019-03-29 11:45:40 +01:00
// Set focus to search field
if ( $action == " search " || $action == " valid " ) {
2020-09-07 10:18:17 +02:00
?>
2019-03-29 11:45:40 +01:00
parent . setFocusOnSearchField ();
2021-02-26 21:17:52 +01:00
< ? php
2018-12-07 17:02:06 +01:00
}
2018-12-07 08:04:40 +01:00
2019-03-27 15:42:53 +01:00
2018-12-07 17:02:06 +01:00
if ( $action == " temp " and $ticket_printer1 != " " ) {
2020-09-07 10:18:17 +02:00
?>
2021-02-26 21:17:52 +01:00
$ . ajax ({
type : " POST " ,
url : 'http://<?php print $conf->global->TAKEPOS_PRINT_SERVER; ?>:8111/print' ,
data : ' < ? php
2020-09-07 10:18:17 +02:00
print $header_soc . $header_ticket . $body_ticket . $ticket_printer1 . $ticket_total . $footer_ticket ; ?> '
2021-02-26 21:17:52 +01:00
});
< ? php
2018-09-28 13:31:41 +02:00
}
2018-12-07 00:40:00 +01:00
2018-12-07 17:02:06 +01:00
if ( $action == " search " ) {
2020-09-07 10:18:17 +02:00
?>
2021-02-26 21:17:52 +01:00
$ ( '#search' ) . focus ();
< ? php
2018-09-28 13:31:41 +02:00
}
2018-12-07 08:04:40 +01:00
2018-09-28 13:31:41 +02:00
?>
2019-03-27 17:50:23 +01:00
2018-09-28 13:31:41 +02:00
});
2019-11-07 15:25:57 +01:00
function SendTicket ( id )
2019-08-24 16:46:04 +02:00
{
2021-02-26 21:17:52 +01:00
console . log ( " Open box to select the Print/Send form " );
2021-04-27 19:33:11 +02:00
$ . colorbox ({ href : " send.php?facid= " + id , width : " 70% " , height : " 30% " , transition : " none " , iframe : " true " , title : '<?php echo dol_escape_js($langs->trans("SendTicket")); ?>' });
2019-08-24 16:46:04 +02:00
}
2018-09-28 13:31:41 +02:00
2020-08-02 11:13:41 +02:00
function Print ( id , gift ){
2021-04-27 19:33:11 +02:00
console . log ( " Call Print() to generate the receipt. " );
$ . colorbox ({ href : " receipt.php?facid= " + id + " &gift= " + gift , width : " 40% " , height : " 90% " , transition : " none " , iframe : " true " , title : '<?php echo dol_escape_js($langs->trans("PrintTicket")); ?>' });
2018-09-28 13:31:41 +02:00
}
function TakeposPrinting ( id ){
2021-02-26 21:17:52 +01:00
var receipt ;
2020-10-05 16:38:40 +02:00
console . log ( " TakeposPrinting " + id );
2021-02-26 21:17:52 +01:00
$ . get ( " receipt.php?facid= " + id , function ( data , status ){
receipt = data . replace ( / ([ ^> \r\n ] ? )( \r\n | \n\r | \r | \n ) / g , '' );
$ . ajax ({
type : " POST " ,
url : 'http://<?php print $conf->global->TAKEPOS_PRINT_SERVER; ?>:8111/print' ,
data : receipt
});
});
2018-09-28 13:31:41 +02:00
}
2020-04-11 22:19:36 +02:00
function TakeposConnector ( id ){
2020-10-05 16:38:40 +02:00
console . log ( " TakeposConnector " + id );
2021-06-17 03:37:52 +02:00
$ . get ( " <?php echo DOL_URL_ROOT; ?>/takepos/ajax/ajax.php?action=printinvoiceticket&term=<?php echo urlencode( $_SESSION["takeposterminal"] ); ?>&id= " + id + " &token=<?php echo currentToken(); ?> " , function ( data , status ) {
2021-02-26 21:17:52 +01:00
$ . ajax ({
2020-10-04 22:50:27 +02:00
type : " POST " ,
url : '<?php print $conf->global->TAKEPOS_PRINT_SERVER; ?>/printer/index.php' ,
data : 'invoice=' + data
});
2021-02-26 21:17:52 +01:00
});
2020-04-11 22:19:36 +02:00
}
2019-11-03 00:50:58 +01:00
function DolibarrTakeposPrinting ( id ) {
2021-02-26 21:17:52 +01:00
console . log ( " DolibarrTakeposPrinting Printing invoice ticket " + id )
$ . ajax ({
type : " GET " ,
2021-06-17 03:37:52 +02:00
data : { token : '<?php echo currentToken(); ?>' },
url : " <?php print DOL_URL_ROOT.'/takepos/ajax/ajax.php?action=printinvoiceticket&term='.urlencode( $_SESSION["takeposterminal"] ).'&id='; ?> " + id ,
2021-02-26 21:17:52 +01:00
});
2019-11-03 00:50:58 +01:00
}
2020-03-08 22:33:56 +01:00
2020-10-25 20:03:25 +01:00
function CreditNote () {
$ ( " #poslines " ) . load ( " invoice.php?action=creditnote&invoiceid= " + placeid , function () {
});
}
2021-04-14 00:15:02 +02:00
function SetNote () {
$ ( " #poslines " ) . load ( " invoice.php?action=addnote&invoiceid= " + placeid + " &idline= " + selectedline + " &addnote= " + $ ( " #textinput " ) . val (), function () {
});
}
2020-03-16 13:27:10 +01:00
2020-03-08 22:33:56 +01:00
$ ( document ) . ready ( function () {
2021-01-02 15:36:19 +01:00
console . log ( " Set customer info and sales in header placeid=<?php echo $placeid ; ?> status=<?php echo $invoice->statut ; ?> " );
2020-03-16 13:27:10 +01:00
2021-02-26 21:17:52 +01:00
< ? php
2020-09-07 10:18:17 +02:00
$s = $langs -> trans ( " Customer " );
if ( $invoice -> id > 0 && ( $invoice -> socid != $conf -> global -> $constforcompanyid )) {
$s = $soc -> name ;
}
?>
2020-03-16 13:27:10 +01:00
2021-02-26 21:17:52 +01:00
$ ( " #customerandsales " ) . html ( '' );
2020-04-20 13:20:09 +02:00
2020-12-04 00:58:51 +01:00
$ ( " #customerandsales " ) . append ( '<a class="valignmiddle tdoverflowmax100 minwidth100" id="customer" onclick="Customer();" title="<?php print dol_escape_js($s); ?>"><span class="fas fa-building paddingrightonly"></span><?php print dol_escape_js($s); ?></a>' );
2020-03-16 13:27:10 +01:00
< ? php
2020-03-23 14:12:48 +01:00
$sql = " SELECT rowid, datec, ref FROM " . MAIN_DB_PREFIX . " facture " ;
2021-01-02 15:36:19 +01:00
if ( empty ( $conf -> global -> TAKEPOS_CAN_EDIT_IF_ALREADY_VALIDATED )) {
// By default, only invoices with a ref not already defined can in list of open invoice we can edit.
2021-01-02 15:49:30 +01:00
$sql .= " WHERE ref LIKE '(PROV-POS " . $db -> escape ( $_SESSION [ " takeposterminal " ]) . " -0%' AND entity IN ( " . getEntity ( 'invoice' ) . " ) " ;
2021-01-02 15:36:19 +01:00
} else {
// If TAKEPOS_CAN_EDIT_IF_ALREADY_VALIDATED set, we show also draft invoice that already has a reference defined
2021-01-02 15:49:30 +01:00
$sql .= " WHERE pos_source = ' " . $db -> escape ( $_SESSION [ " takeposterminal " ]) . " ' " ;
2021-01-02 15:36:19 +01:00
$sql .= " AND module_source = 'takepos' " ;
2021-01-02 15:49:30 +01:00
$sql .= " AND entity IN ( " . getEntity ( 'invoice' ) . " ) " ;
2021-01-02 15:36:19 +01:00
}
2021-01-02 15:49:30 +01:00
2020-04-10 10:59:32 +02:00
$sql .= $db -> order ( 'datec' , 'ASC' );
2020-03-22 14:50:09 +01:00
$resql = $db -> query ( $sql );
if ( $resql ) {
while ( $obj = $db -> fetch_object ( $resql )) {
echo '$("#customerandsales").append(\'' ;
2020-12-30 22:53:21 +01:00
echo '<a class="valignmiddle" title="' . dol_escape_js ( $langs -> trans ( " SaleStartedAt " , dol_print_date ( $db -> jdate ( $obj -> datec ), '%H:%M' , 'tzuser' ))) . '" onclick="place=\\\'' ;
2020-04-10 10:59:32 +02:00
$num_sale = str_replace ( " ) " , " " , str_replace ( " (PROV-POS " . $_SESSION [ " takeposterminal " ] . " - " , " " , $obj -> ref ));
2020-03-22 14:50:09 +01:00
echo $num_sale ;
2021-02-26 21:17:52 +01:00
if ( str_replace ( " - " , " " , $num_sale ) > $max_sale ) {
$max_sale = str_replace ( " - " , " " , $num_sale );
}
2021-01-02 15:36:19 +01:00
echo '\\\'; invoiceid=\\\'' ;
echo $obj -> rowid ;
echo '\\\'; Refresh();">' ;
2021-02-26 21:17:52 +01:00
if ( $placeid == $obj -> rowid ) {
echo " <b> " ;
}
2021-03-29 14:03:19 +02:00
echo '<span class="fa fa-shopping-cart paddingright"></span>' . dol_print_date ( $db -> jdate ( $obj -> datec ), '%H:%M' , 'tzuser' );
2021-02-26 21:17:52 +01:00
if ( $placeid == $obj -> rowid ) {
echo " </b> " ;
}
2020-03-22 14:50:09 +01:00
echo '</a>\');' ;
}
2020-03-23 22:44:26 +01:00
echo '$("#customerandsales").append(\'<a onclick="place=\\\'0-' ;
2020-04-10 10:59:32 +02:00
echo $max_sale + 1 ;
2021-03-29 14:03:19 +02:00
echo '\\\'; invoiceid=0; Refresh();"><div><span class="fa fa-plus" title="' . dol_escape_htmltag ( $langs -> trans ( " StartAParallelSale " )) . '"><span class="fa fa-shopping-cart"></span></div></a>\');' ;
2020-03-23 14:12:48 +01:00
} else {
dol_print_error ( $db );
2020-03-22 14:50:09 +01:00
}
2020-03-22 15:24:32 +01:00
2020-03-16 13:27:10 +01:00
$s = '' ;
2020-09-07 10:18:17 +02:00
$constantforkey = 'CASHDESK_NO_DECREASE_STOCK' . $_SESSION [ " takeposterminal " ];
2021-02-26 21:17:52 +01:00
if ( ! empty ( $conf -> stock -> enabled ) && $conf -> global -> $constantforkey != " 1 " ) {
2020-09-07 10:18:17 +02:00
$s = '<span class="small">' ;
$constantforkey = 'CASHDESK_ID_WAREHOUSE' . $_SESSION [ " takeposterminal " ];
$warehouse = new Entrepot ( $db );
$warehouse -> fetch ( $conf -> global -> $constantforkey );
$s .= $langs -> trans ( " Warehouse " ) . '<br>' . $warehouse -> ref ;
$s .= '</span>' ;
}
2020-03-16 13:27:10 +01:00
?>
2021-02-26 21:17:52 +01:00
$ ( " #infowarehouse " ) . html ( '<?php print dol_escape_js($s); ?>' );
2020-03-16 13:27:10 +01:00
< ? php
// Module Adherent
$s = '' ;
2021-02-26 21:17:52 +01:00
if ( ! empty ( $conf -> adherent -> enabled ) && $invoice -> socid > 0 && $invoice -> socid != $conf -> global -> $constforcompanyid ) {
2020-03-16 13:27:10 +01:00
$s = '<span class="small">' ;
require_once DOL_DOCUMENT_ROOT . '/adherents/class/adherent.class.php' ;
$langs -> load ( " members " );
$s .= $langs -> trans ( " Member " ) . ': ' ;
$adh = new Adherent ( $db );
$result = $adh -> fetch ( '' , '' , $invoice -> socid );
2021-02-26 21:17:52 +01:00
if ( $result > 0 ) {
2020-03-16 13:27:10 +01:00
$adh -> ref = $adh -> getFullName ( $langs );
2021-02-26 21:17:52 +01:00
if ( empty ( $adh -> statut )) {
$s .= " <s> " ;
}
2020-04-10 10:59:32 +02:00
$s .= $adh -> getFullName ( $langs );
$s .= ' - ' . $adh -> type ;
2021-02-26 21:17:52 +01:00
if ( $adh -> datefin ) {
2020-04-10 10:59:32 +02:00
$s .= '<br>' . $langs -> trans ( " SubscriptionEndDate " ) . ': ' . dol_print_date ( $adh -> datefin , 'day' );
2020-03-16 13:27:10 +01:00
if ( $adh -> hasDelay ()) {
2020-04-10 10:59:32 +02:00
$s .= " " . img_warning ( $langs -> trans ( " Late " ));
2020-03-16 13:27:10 +01:00
}
2020-05-21 15:05:19 +02:00
} else {
2020-04-10 10:59:32 +02:00
$s .= '<br>' . $langs -> trans ( " SubscriptionNotReceived " );
2021-02-26 21:17:52 +01:00
if ( $adh -> statut > 0 ) {
$s .= " " . img_warning ( $langs -> trans ( " Late " )); // displays delay Pictogram only if not a draft and not terminated
}
}
if ( empty ( $adh -> statut )) {
$s .= " </s> " ;
2020-03-16 13:27:10 +01:00
}
2020-05-21 15:05:19 +02:00
} else {
2020-04-10 10:59:32 +02:00
$s .= '<br>' . $langs -> trans ( " ThirdpartyNotLinkedToMember " );
2020-03-16 13:27:10 +01:00
}
2020-04-10 10:59:32 +02:00
$s .= '</span>' ;
2020-03-16 13:27:10 +01:00
}
?>
$ ( " #moreinfo " ) . html ( '<?php print dol_escape_js($s); ?>' );
2020-03-08 22:33:56 +01:00
});
2018-09-28 13:31:41 +02:00
</ script >
2019-03-27 17:50:23 +01:00
2018-09-28 13:31:41 +02:00
< ? php
2020-03-16 15:41:21 +01:00
// Add again js for footer because this content is injected into index.php page so all init
2019-03-27 17:50:23 +01:00
// for tooltip and other js beautifiers must be reexecuted too.
2021-02-26 21:17:52 +01:00
if ( ! empty ( $conf -> use_javascript_ajax )) {
2020-09-07 10:18:17 +02:00
print " \n " . '<!-- Includes JS Footer of Dolibarr -->' . " \n " ;
print '<script src="' . DOL_URL_ROOT . '/core/js/lib_foot.js.php?lang=' . $langs -> defaultlang . ( $ext ? '&' . $ext : '' ) . '"></script>' . " \n " ;
2019-03-27 17:50:23 +01:00
}
2020-03-16 15:41:21 +01:00
print '<!-- invoice.php place=' . ( int ) $place . ' invoice=' . $invoice -> ref . ' mobilepage=' . $mobilepage . ' $_SESSION["basiclayout"]=' . $_SESSION [ " basiclayout " ] . ' conf->global->TAKEPOS_BAR_RESTAURANT=' . $conf -> global -> TAKEPOS_BAR_RESTAURANT . ' -->' . " \n " ;
2018-12-07 21:33:40 +01:00
print '<div class="div-table-responsive-no-min invoice">' ;
2019-03-28 18:51:04 +01:00
print '<table id="tablelines" class="noborder noshadow postablelines" width="100%">' ;
2020-10-13 11:00:56 +02:00
if ( $sectionwithinvoicelink && ( $mobilepage == " invoice " || $mobilepage == " " )) {
2021-02-26 21:17:52 +01:00
if ( ! empty ( $conf -> global -> TAKEPOS_SHOW_HT )) {
print '<tr><td colspan="5">' . $sectionwithinvoicelink . '</td></tr>' ;
} else {
2021-02-24 15:48:15 +01:00
print '<tr><td colspan="4">' . $sectionwithinvoicelink . '</td></tr>' ;
}
2020-10-04 15:01:22 +02:00
}
2018-09-28 13:31:41 +02:00
print '<tr class="liste_titre nodrag nodrop">' ;
2019-03-27 20:13:12 +01:00
print '<td class="linecoldescription">' ;
2020-07-07 03:50:14 +02:00
// In phone version only show when it is invoice page
if ( $mobilepage == " invoice " || $mobilepage == " " ) {
2020-10-04 15:01:22 +02:00
print '<input type="hidden" name="invoiceid" id="invoiceid" value="' . $invoice -> id . '">' ;
2020-07-07 03:50:14 +02:00
}
2021-02-26 21:17:52 +01:00
if ( $conf -> global -> TAKEPOS_BAR_RESTAURANT ) {
2020-09-07 10:18:17 +02:00
$sql = " SELECT floor, label FROM " . MAIN_DB_PREFIX . " takepos_floor_tables where rowid= " . (( int ) $place );
$resql = $db -> query ( $sql );
$obj = $db -> fetch_object ( $resql );
2021-02-26 21:17:52 +01:00
if ( $obj ) {
2020-09-07 10:18:17 +02:00
$label = $obj -> label ;
$floor = $obj -> floor ;
}
2019-10-16 16:26:00 +02:00
// In phone version only show when is invoice page
2019-11-12 00:15:34 +01:00
if ( $mobilepage == " invoice " || $mobilepage == " " ) {
2020-07-07 03:50:14 +02:00
print '<span class="opacitymedium">' . $langs -> trans ( 'Place' ) . " </span> <b> " . $label . " </b><br> " ;
print '<span class="opacitymedium">' . $langs -> trans ( 'Floor' ) . " </span> <b> " . $floor . " </b> " ;
2021-02-26 21:17:52 +01:00
} elseif ( defined ( 'INCLUDE_PHONEPAGE_FROM_PUBLIC_PAGE' )) {
print $mysoc -> name ;
} elseif ( $mobilepage == " cats " ) {
print $langs -> trans ( 'Category' );
} elseif ( $mobilepage == " products " ) {
print $langs -> trans ( 'Label' );
2019-10-16 16:26:00 +02:00
}
2020-07-07 03:50:14 +02:00
} else {
print $langs -> trans ( " Products " );
2019-10-16 16:26:00 +02:00
}
2020-07-07 03:50:14 +02:00
print '</td>' ;
2021-02-26 21:17:52 +01:00
if ( $_SESSION [ " basiclayout " ] != 1 ) {
2019-11-12 00:15:34 +01:00
print '<td class="linecolqty right">' . $langs -> trans ( 'ReductionShort' ) . '</td>' ;
print '<td class="linecolqty right">' . $langs -> trans ( 'Qty' ) . '</td>' ;
2021-02-24 15:57:33 +01:00
if ( $conf -> global -> TAKEPOS_SHOW_HT ) {
2021-02-26 21:17:52 +01:00
print '<td class="linecolht right nowraponall">' ;
print '<span class="opacitymedium small">' . $langs -> trans ( 'TotalHTShort' ) . '</span><br>' ;
// In phone version only show when it is invoice page
if ( $mobilepage == " invoice " || $mobilepage == " " ) {
print '<span id="linecolht-span-total" style="font-size:1.3em; font-weight: bold;">' . price ( $invoice -> total_ht , 1 , '' , 1 , - 1 , - 1 , $conf -> currency ) . '</span>' ;
if ( ! empty ( $conf -> multicurrency -> enabled ) && $_SESSION [ " takeposcustomercurrency " ] != " " && $conf -> currency != $_SESSION [ " takeposcustomercurrency " ]) {
//Only show customer currency if multicurrency module is enabled, if currency selected and if this currency selected is not the same as main currency
include_once DOL_DOCUMENT_ROOT . '/multicurrency/class/multicurrency.class.php' ;
$multicurrency = new MultiCurrency ( $db );
$multicurrency -> fetch ( 0 , $_SESSION [ " takeposcustomercurrency " ]);
print '<br><span id="linecolht-span-total" style="font-size:0.9em; font-style:italic;">(' . price ( $invoice -> total_ht * $multicurrency -> rate -> rate ) . ' ' . $_SESSION [ " takeposcustomercurrency " ] . ')</span>' ;
}
print '</td>' ;
}
print '</td>' ;
}
2020-07-07 03:50:14 +02:00
print '<td class="linecolht right nowraponall">' ;
print '<span class="opacitymedium small">' . $langs -> trans ( 'TotalTTCShort' ) . '</span><br>' ;
// In phone version only show when it is invoice page
if ( $mobilepage == " invoice " || $mobilepage == " " ) {
print '<span id="linecolht-span-total" style="font-size:1.3em; font-weight: bold;">' . price ( $invoice -> total_ttc , 1 , '' , 1 , - 1 , - 1 , $conf -> currency ) . '</span>' ;
2020-10-07 15:01:28 +02:00
if ( ! empty ( $conf -> multicurrency -> enabled ) && $_SESSION [ " takeposcustomercurrency " ] != " " && $conf -> currency != $_SESSION [ " takeposcustomercurrency " ]) {
2020-10-04 14:40:52 +02:00
//Only show customer currency if multicurrency module is enabled, if currency selected and if this currency selected is not the same as main currency
include_once DOL_DOCUMENT_ROOT . '/multicurrency/class/multicurrency.class.php' ;
$multicurrency = new MultiCurrency ( $db );
$multicurrency -> fetch ( 0 , $_SESSION [ " takeposcustomercurrency " ]);
2020-10-07 15:01:28 +02:00
print '<br><span id="linecolht-span-total" style="font-size:0.9em; font-style:italic;">(' . price ( $invoice -> total_ttc * $multicurrency -> rate -> rate ) . ' ' . $_SESSION [ " takeposcustomercurrency " ] . ')</span>' ;
2020-10-04 14:40:52 +02:00
}
2020-07-07 03:50:14 +02:00
print '</td>' ;
}
print '</td>' ;
2021-02-26 21:17:52 +01:00
} elseif ( $mobilepage == " invoice " ) {
print '<td class="linecolqty right">' . $langs -> trans ( 'Qty' ) . '</td>' ;
2019-05-26 16:44:17 +02:00
}
2018-09-28 13:31:41 +02:00
print " </tr> \n " ;
2018-12-07 08:04:40 +01:00
2020-01-01 21:54:47 +01:00
2021-02-26 21:17:52 +01:00
if ( $_SESSION [ " basiclayout " ] == 1 ) {
if ( $mobilepage == " cats " ) {
2019-05-26 16:44:17 +02:00
require_once DOL_DOCUMENT_ROOT . '/categories/class/categorie.class.php' ;
$categorie = new Categorie ( $db );
2020-09-07 10:18:17 +02:00
$categories = $categorie -> get_full_arbo ( 'product' );
2019-05-26 16:44:17 +02:00
$htmlforlines = '' ;
2020-09-07 10:18:17 +02:00
foreach ( $categories as $row ) {
2021-02-26 21:17:52 +01:00
if ( defined ( 'INCLUDE_PHONEPAGE_FROM_PUBLIC_PAGE' )) {
$htmlforlines .= '<div class="leftcat' ;
} else {
$htmlforlines .= '<tr class="drag drop oddeven posinvoiceline' ;
}
2019-11-12 00:15:34 +01:00
$htmlforlines .= '" onclick="LoadProducts(' . $row [ 'id' ] . ');">' ;
2021-02-26 21:17:52 +01:00
if ( defined ( 'INCLUDE_PHONEPAGE_FROM_PUBLIC_PAGE' )) {
$htmlforlines .= '<img class="imgwrapper" width="33%" src="' . DOL_URL_ROOT . '/takepos/public/auto_order.php?genimg=cat&query=cat&id=' . $row [ 'id' ] . '"><br>' ;
} else {
$htmlforlines .= '<td class="left">' ;
}
2019-11-12 00:15:34 +01:00
$htmlforlines .= $row [ 'label' ];
2021-02-26 21:17:52 +01:00
if ( defined ( 'INCLUDE_PHONEPAGE_FROM_PUBLIC_PAGE' )) {
$htmlforlines .= '</div>' . " \n " ;
} else {
$htmlforlines .= '</td></tr>' . " \n " ;
}
2019-05-26 16:44:17 +02:00
}
2019-11-12 00:15:34 +01:00
$htmlforlines .= '</table>' ;
$htmlforlines .= '</table>' ;
2019-05-26 16:44:17 +02:00
print $htmlforlines ;
}
2019-08-26 16:49:25 +02:00
2021-02-26 21:17:52 +01:00
if ( $mobilepage == " products " ) {
2019-05-26 16:44:17 +02:00
require_once DOL_DOCUMENT_ROOT . '/categories/class/categorie.class.php' ;
$object = new Categorie ( $db );
$catid = GETPOST ( 'catid' , 'int' );
2019-11-12 00:15:34 +01:00
$result = $object -> fetch ( $catid );
2019-05-26 16:44:17 +02:00
$prods = $object -> getObjectsInCateg ( " product " );
$htmlforlines = '' ;
foreach ( $prods as $row ) {
2021-02-26 21:17:52 +01:00
if ( defined ( 'INCLUDE_PHONEPAGE_FROM_PUBLIC_PAGE' )) {
$htmlforlines .= '<div class="leftcat' ;
} else {
$htmlforlines .= '<tr class="drag drop oddeven posinvoiceline' ;
}
2019-11-12 00:15:34 +01:00
$htmlforlines .= '" onclick="AddProduct(\'' . $place . '\', ' . $row -> id . ')">' ;
2020-05-24 16:30:42 +02:00
if ( defined ( 'INCLUDE_PHONEPAGE_FROM_PUBLIC_PAGE' )) {
$htmlforlines .= '<img class="imgwrapper" width="33%" src="' . DOL_URL_ROOT . '/takepos/public/auto_order.php?genimg=pro&query=pro&id=' . $row -> id . '"><br>' ;
$htmlforlines .= $row -> label . '' . price ( $row -> price_ttc , 1 , $langs , 1 , - 1 , - 1 , $conf -> currency );
$htmlforlines .= '</div>' . " \n " ;
2021-02-26 21:17:52 +01:00
} else {
2020-05-24 16:30:42 +02:00
$htmlforlines .= '<td class="left">' ;
$htmlforlines .= $row -> label ;
$htmlforlines .= '<div class="right">' . price ( $row -> price_ttc , 1 , $langs , 1 , - 1 , - 1 , $conf -> currency ) . '</div>' ;
$htmlforlines .= '</tr>' . " \n " ;
}
2019-05-26 16:44:17 +02:00
}
2019-11-12 00:15:34 +01:00
$htmlforlines .= '</table>' ;
2019-05-26 16:44:17 +02:00
print $htmlforlines ;
}
2019-08-26 16:49:25 +02:00
2021-02-26 21:17:52 +01:00
if ( $mobilepage == " places " ) {
2019-11-12 00:15:34 +01:00
$sql = " SELECT rowid, entity, label, leftpos, toppos, floor FROM " . MAIN_DB_PREFIX . " takepos_floor_tables " ;
2019-05-26 16:44:17 +02:00
$resql = $db -> query ( $sql );
$rows = array ();
$htmlforlines = '' ;
2019-11-12 00:15:34 +01:00
while ( $row = $db -> fetch_array ( $resql )) {
2019-05-26 16:44:17 +02:00
$rows [] = $row ;
2019-11-12 00:15:34 +01:00
$htmlforlines .= '<tr class="drag drop oddeven posinvoiceline' ;
$htmlforlines .= '" onclick="LoadPlace(\'' . $row [ 'label' ] . '\')">' ;
$htmlforlines .= '<td class="left">' ;
$htmlforlines .= $row [ 'label' ];
$htmlforlines .= '</td>' ;
$htmlforlines .= '</tr>' . " \n " ;
2019-05-26 16:44:17 +02:00
}
2019-11-12 00:15:34 +01:00
$htmlforlines .= '</table>' ;
2019-05-26 16:44:17 +02:00
print $htmlforlines ;
}
}
2021-02-26 21:17:52 +01:00
if ( $placeid > 0 ) {
2019-10-16 16:26:00 +02:00
//In Phone basic layout hide some content depends situation
2021-02-26 21:17:52 +01:00
if ( $_SESSION [ " basiclayout " ] == 1 && $mobilepage != " invoice " && $action != " order " ) {
return ;
}
2019-10-20 15:37:20 +02:00
2021-02-26 21:17:52 +01:00
if ( is_array ( $invoice -> lines ) && count ( $invoice -> lines )) {
2020-12-04 00:58:51 +01:00
print '<!-- invoice.php show lines of invoices -->' . " \n " ;
2020-09-07 10:18:17 +02:00
$tmplines = array_reverse ( $invoice -> lines );
2021-02-26 21:17:52 +01:00
foreach ( $tmplines as $line ) {
if ( $line -> fk_parent_line != false ) {
2020-03-12 12:45:44 +01:00
$htmlsupplements [ $line -> fk_parent_line ] .= '<tr class="drag drop oddeven posinvoiceline' ;
2021-02-26 21:17:52 +01:00
if ( $line -> special_code == " 4 " ) {
$htmlsupplements [ $line -> fk_parent_line ] .= ' order' ;
}
2020-03-12 12:45:44 +01:00
$htmlsupplements [ $line -> fk_parent_line ] .= '" id="' . $line -> id . '">' ;
$htmlsupplements [ $line -> fk_parent_line ] .= '<td class="left">' ;
$htmlsupplements [ $line -> fk_parent_line ] .= img_picto ( '' , 'rightarrow' );
2021-02-26 21:17:52 +01:00
if ( $line -> product_label ) {
$htmlsupplements [ $line -> fk_parent_line ] .= $line -> product_label ;
}
if ( $line -> product_label && $line -> desc ) {
$htmlsupplements [ $line -> fk_parent_line ] .= '<br>' ;
}
if ( $line -> product_label != $line -> desc ) {
2019-12-08 23:16:49 +01:00
$firstline = dolGetFirstLineOfText ( $line -> desc );
2021-02-26 21:17:52 +01:00
if ( $firstline != $line -> desc ) {
2019-12-08 23:16:49 +01:00
$htmlsupplements [ $line -> fk_parent_line ] .= $form -> textwithpicto ( dolGetFirstLineOfText ( $line -> desc ), $line -> desc );
2020-05-21 15:05:19 +02:00
} else {
2019-12-08 23:16:49 +01:00
$htmlsupplements [ $line -> fk_parent_line ] .= $line -> desc ;
}
}
$htmlsupplements [ $line -> fk_parent_line ] .= '</td>' ;
2021-02-26 21:17:52 +01:00
if ( $_SESSION [ " basiclayout " ] != 1 ) {
2019-12-08 23:16:49 +01:00
$htmlsupplements [ $line -> fk_parent_line ] .= '<td class="right">' . vatrate ( $line -> remise_percent , true ) . '</td>' ;
$htmlsupplements [ $line -> fk_parent_line ] .= '<td class="right">' . $line -> qty . '</td>' ;
$htmlsupplements [ $line -> fk_parent_line ] .= '<td class="right">' . price ( $line -> total_ttc ) . '</td>' ;
}
$htmlsupplements [ $line -> fk_parent_line ] .= '</tr>' . " \n " ;
continue ;
}
2020-09-08 21:27:28 +02:00
$htmlforlines = '' ;
$htmlforlines .= '<tr class="drag drop oddeven posinvoiceline' ;
if ( $line -> special_code == " 4 " ) {
$htmlforlines .= ' order' ;
}
$htmlforlines .= '" id="' . $line -> id . '">' ;
$htmlforlines .= '<td class="left">' ;
2021-02-26 21:17:52 +01:00
if ( $_SESSION [ " basiclayout " ] == 1 ) {
$htmlforlines .= '<span class="phoneqty">' . $line -> qty . " </span> x " ;
}
if ( isset ( $line -> product_type )) {
if ( empty ( $line -> product_type )) {
$htmlforlines .= img_object ( '' , 'product' ) . ' ' ;
} else {
$htmlforlines .= img_object ( '' , 'service' ) . ' ' ;
}
2020-09-08 21:27:28 +02:00
}
if ( empty ( $conf -> global -> TAKEPOS_SHOW_N_FIRST_LINES )) {
$tooltiptext = '' ;
if ( $line -> product_ref ) {
$tooltiptext .= '<b>' . $langs -> trans ( " Ref " ) . '</b> : ' . $line -> product_ref . '<br>' ;
$tooltiptext .= '<b>' . $langs -> trans ( " Label " ) . '</b> : ' . $line -> product_label . '<br>' ;
if ( $line -> product_label != $line -> desc ) {
2021-02-26 21:17:52 +01:00
if ( $line -> desc ) {
$tooltiptext .= '<br>' ;
}
2020-09-08 21:27:28 +02:00
$tooltiptext .= $line -> desc ;
}
}
$htmlforlines .= $form -> textwithpicto ( $line -> product_label ? $line -> product_label : ( $line -> product_ref ? $line -> product_ref : dolGetFirstLineOfText ( $line -> desc , 1 )), $tooltiptext );
} else {
2021-02-26 21:17:52 +01:00
if ( $line -> product_label ) {
$htmlforlines .= $line -> product_label ;
}
if ( $line -> product_label != $line -> desc ) {
if ( $line -> product_label && $line -> desc ) {
$htmlforlines .= '<br>' ;
}
2020-09-08 21:27:28 +02:00
$firstline = dolGetFirstLineOfText ( $line -> desc , $conf -> global -> TAKEPOS_SHOW_N_FIRST_LINES );
2021-02-26 21:17:52 +01:00
if ( $firstline != $line -> desc ) {
2020-09-08 21:27:28 +02:00
$htmlforlines .= $form -> textwithpicto ( dolGetFirstLineOfText ( $line -> desc ), $line -> desc );
} else {
$htmlforlines .= $line -> desc ;
}
}
}
2021-02-26 21:17:52 +01:00
if ( ! empty ( $line -> array_options [ 'options_order_notes' ])) {
$htmlforlines .= " <br>( " . $line -> array_options [ 'options_order_notes' ] . " ) " ;
}
2020-12-04 00:58:51 +01:00
if ( $_SESSION [ " basiclayout " ] == 1 ) {
$htmlforlines .= '</td><td class="right phonetable"><button type="button" onclick="SetQty(place, ' . $line -> rowid . ', ' . ( $line -> qty - 1 ) . ');" class="publicphonebutton2 phonered">-</button> <button type="button" onclick="SetQty(place, ' . $line -> rowid . ', ' . ( $line -> qty + 1 ) . ');" class="publicphonebutton2 phonegreen">+</button>' ;
}
2021-02-26 21:17:52 +01:00
if ( $_SESSION [ " basiclayout " ] != 1 ) {
2020-01-01 21:54:47 +01:00
$moreinfo = '' ;
$moreinfo .= $langs -> transcountry ( " TotalHT " , $mysoc -> country_code ) . ': ' . price ( $line -> total_ht );
2021-02-26 21:17:52 +01:00
if ( $line -> vat_src_code ) {
$moreinfo .= '<br>' . $langs -> trans ( " VATCode " ) . ': ' . $line -> vat_src_code ;
}
2020-03-23 15:02:15 +01:00
$moreinfo .= '<br>' . $langs -> transcountry ( " TotalVAT " , $mysoc -> country_code ) . ': ' . price ( $line -> total_tva );
2020-01-01 21:54:47 +01:00
$moreinfo .= '<br>' . $langs -> transcountry ( " TotalLT1 " , $mysoc -> country_code ) . ': ' . price ( $line -> total_localtax1 );
$moreinfo .= '<br>' . $langs -> transcountry ( " TotalLT2 " , $mysoc -> country_code ) . ': ' . price ( $line -> total_localtax2 );
$moreinfo .= '<br>' . $langs -> transcountry ( " TotalTTC " , $mysoc -> country_code ) . ': ' . price ( $line -> total_ttc );
//$moreinfo .= $langs->trans("TotalHT").': '.$line->total_ht;
2021-02-26 21:17:52 +01:00
if ( $line -> date_start || $line -> date_end ) {
$htmlforlines .= '<br><div class="clearboth nowraponall">' . get_date_range ( $line -> date_start , $line -> date_end ) . '</div>' ;
}
2019-11-12 00:15:34 +01:00
$htmlforlines .= '</td>' ;
$htmlforlines .= '<td class="right">' . vatrate ( $line -> remise_percent , true ) . '</td>' ;
2020-09-20 23:29:59 +02:00
$htmlforlines .= '<td class="right">' ;
2021-02-26 21:17:52 +01:00
if ( ! empty ( $conf -> stock -> enabled ) && ! empty ( $user -> rights -> stock -> mouvement -> lire )) {
2020-09-20 23:29:59 +02:00
$constantforkey = 'CASHDESK_ID_WAREHOUSE' . $_SESSION [ " takeposterminal " ];
2020-12-07 22:26:08 +01:00
if ( ! empty ( $conf -> global -> $constantforkey ) && $line -> fk_product > 0 ) {
2020-12-04 00:58:51 +01:00
$sql = " SELECT e.rowid, e.ref, e.lieu, e.fk_parent, e.statut, ps.reel, ps.rowid as product_stock_id, p.pmp " ;
$sql .= " FROM " . MAIN_DB_PREFIX . " entrepot as e, " ;
$sql .= " " . MAIN_DB_PREFIX . " product_stock as ps " ;
$sql .= " LEFT JOIN " . MAIN_DB_PREFIX . " product as p ON p.rowid = ps.fk_product " ;
$sql .= " WHERE ps.reel != 0 " ;
2021-03-22 13:31:06 +01:00
$sql .= " AND ps.fk_entrepot = " . (( int ) $conf -> global -> $constantforkey );
2020-12-04 00:58:51 +01:00
$sql .= " AND e.entity IN ( " . getEntity ( 'stock' ) . " ) " ;
$sql .= " AND ps.fk_product = " . $line -> fk_product ;
$resql = $db -> query ( $sql );
if ( $resql ) {
$obj = $db -> fetch_object ( $resql );
$stock_real = price2num ( $obj -> reel , 'MS' );
$htmlforlines .= $line -> qty ;
2021-02-26 21:17:52 +01:00
if ( $line -> qty && $line -> qty > $stock_real ) {
$htmlforlines .= '<span style="color: var(--amountremaintopaycolor)">' ;
}
2020-12-04 00:58:51 +01:00
$htmlforlines .= ' <span class="posstocktoolow">(' . $langs -> trans ( " Stock " ) . ' ' . $stock_real . ')</span>' ;
2021-02-26 21:17:52 +01:00
if ( $line -> qty && $line -> qty > $stock_real ) {
$htmlforlines .= " </span> " ;
}
2020-12-04 00:58:51 +01:00
} else {
dol_print_error ( $db );
}
} else {
2020-09-24 00:06:02 +02:00
$htmlforlines .= $line -> qty ;
2020-09-20 23:29:59 +02:00
}
2020-12-04 00:58:51 +01:00
} else {
$htmlforlines .= $line -> qty ;
2020-09-20 23:29:59 +02:00
}
2020-12-04 00:58:51 +01:00
2020-09-20 23:29:59 +02:00
$htmlforlines .= '</td>' ;
2021-02-26 21:17:52 +01:00
if ( $conf -> global -> TAKEPOS_SHOW_HT ) {
$htmlforlines .= '<td class="right classfortooltip" title="' . $moreinfo . '">' ;
$htmlforlines .= price ( $line -> total_ht , 1 , '' , 1 , - 1 , - 1 , $conf -> currency );
if ( ! empty ( $conf -> multicurrency -> enabled ) && $_SESSION [ " takeposcustomercurrency " ] != " " && $conf -> currency != $_SESSION [ " takeposcustomercurrency " ]) {
//Only show customer currency if multicurrency module is enabled, if currency selected and if this currency selected is not the same as main currency
include_once DOL_DOCUMENT_ROOT . '/multicurrency/class/multicurrency.class.php' ;
$multicurrency = new MultiCurrency ( $db );
$multicurrency -> fetch ( 0 , $_SESSION [ " takeposcustomercurrency " ]);
$htmlforlines .= '<br><span id="linecolht-span-total" style="font-size:0.9em; font-style:italic;">(' . price ( $line -> total_ht * $multicurrency -> rate -> rate ) . ' ' . $_SESSION [ " takeposcustomercurrency " ] . ')</span>' ;
}
$htmlforlines .= '</td>' ;
}
2020-10-03 22:13:32 +02:00
$htmlforlines .= '<td class="right classfortooltip" title="' . $moreinfo . '">' ;
2020-10-04 14:42:16 +02:00
$htmlforlines .= price ( $line -> total_ttc , 1 , '' , 1 , - 1 , - 1 , $conf -> currency );
2020-10-07 15:01:28 +02:00
if ( ! empty ( $conf -> multicurrency -> enabled ) && $_SESSION [ " takeposcustomercurrency " ] != " " && $conf -> currency != $_SESSION [ " takeposcustomercurrency " ]) {
2020-10-03 22:13:32 +02:00
//Only show customer currency if multicurrency module is enabled, if currency selected and if this currency selected is not the same as main currency
include_once DOL_DOCUMENT_ROOT . '/multicurrency/class/multicurrency.class.php' ;
$multicurrency = new MultiCurrency ( $db );
$multicurrency -> fetch ( 0 , $_SESSION [ " takeposcustomercurrency " ]);
2020-10-07 15:01:28 +02:00
$htmlforlines .= '<br><span id="linecolht-span-total" style="font-size:0.9em; font-style:italic;">(' . price ( $line -> total_ttc * $multicurrency -> rate -> rate ) . ' ' . $_SESSION [ " takeposcustomercurrency " ] . ')</span>' ;
2020-10-03 22:13:32 +02:00
}
$htmlforlines .= '</td>' ;
2019-05-26 16:44:17 +02:00
}
2019-11-12 00:15:34 +01:00
$htmlforlines .= '</tr>' . " \n " ;
2019-12-08 23:16:49 +01:00
$htmlforlines .= $htmlsupplements [ $line -> id ];
2019-03-27 20:20:39 +01:00
2020-09-07 10:18:17 +02:00
print $htmlforlines ;
}
} else {
2021-02-24 15:48:15 +01:00
print '<tr class="drag drop oddeven"><td class="left"><span class="opacitymedium">' . $langs -> trans ( " Empty " ) . '</span></td><td></td><td></td><td></td>' ;
2021-02-26 21:17:52 +01:00
if ( ! empty ( $conf -> global -> TAKEPOS_SHOW_HT )) {
print '<td></td>' ;
}
2021-02-24 15:48:15 +01:00
print '</tr>' ;
2020-09-07 10:18:17 +02:00
}
2020-05-21 15:05:19 +02:00
} else { // No invoice generated yet
2021-02-24 15:48:15 +01:00
print '<tr class="drag drop oddeven"><td class="left"><span class="opacitymedium">' . $langs -> trans ( " Empty " ) . '</span></td><td></td><td></td><td></td>' ;
2021-02-26 21:17:52 +01:00
if ( ! empty ( $conf -> global -> TAKEPOS_SHOW_HT )) {
print '<td></td>' ;
}
print '</tr>' ;
2019-03-28 09:56:01 +01:00
}
2018-12-07 08:04:40 +01:00
2018-09-28 13:31:41 +02:00
print '</table>' ;
2018-12-07 08:04:40 +01:00
2020-11-10 21:45:15 +01:00
if (( $action == " valid " || $action == " history " ) && $invoice -> type != Facture :: TYPE_CREDIT_NOTE ) {
2020-10-25 20:03:25 +01:00
print '<button id="buttonprint" type="button" onclick="ModalBox(\'ModalCreditNote\')">' . $langs -> trans ( 'CreateCreditNote' ) . '</button>' ;
}
2020-01-01 21:54:47 +01:00
2021-02-26 21:17:52 +01:00
if ( $action == " search " ) {
2020-09-07 10:18:17 +02:00
print ' < center >
2019-11-12 00:15:34 +01:00
< input type = " text " id = " search " name = " search " onkeyup = " Search2(); " name = " search " style = " width:80%;font-size: 150%; " placeholder = ' . $langs->trans(' Search ').'
2018-09-28 13:31:41 +02:00
</ center > ' ;
}
2018-12-07 08:04:40 +01:00
2020-12-06 14:20:16 +01:00
print '</div>' ;