require_once DOL_DOCUMENT_ROOT . '/core/lib/date.lib.php'; $obj_facturation = unserialize($_SESSION['serObjFacturation']); unset($_SESSION['serObjFacturation']); $action = GETPOST('action'); $bankaccountid = GETPOST('cashdeskbank'); switch ($action) { default: $redirection = DOL_URL_ROOT . '/cashdesk/affIndex.php?menu=validation'; break; case 'valide_achat': $company = new Societe($db); $company->fetch($conf->global->CASHDESK_ID_THIRDPARTY); $invoice = new Facture($db); $invoice->date = dol_now(); $invoice->type = 0; $num = $invoice->getNextNumRef($company); $obj_facturation->numInvoice($num); $obj_facturation->getSetPaymentMode($_POST['hdnChoix']); // Si paiement autre qu'en especes, montant encaisse = prix total $mode_reglement = $obj_facturation->getSetPaymentMode(); if ($mode_reglement != 'ESP') { $montant = $obj_facturation->prixTotalTtc(); } else { $montant = $_POST['txtEncaisse']; } if ($mode_reglement != 'DIF') { $obj_facturation->montantEncaisse($montant); //Determination de la somme rendue $total = $obj_facturation->prixTotalTtc(); $encaisse = $obj_facturation->montantEncaisse(); $obj_facturation->montantRendu($encaisse - $total);
/** * * Create facture into Database * * @param array $aryTicket Ticket object */ private function CreateFacture($aryTicket) { global $db, $user, $conf; $function = "CreateFacture"; $idFacture = -1; $data = $aryTicket['data']; $lines = $data['lines']; $idTicket = $data["id"]; if ($data['idsource'] > 0) { $prods_returned = self::testSourceFac($aryTicket); if (sizeof($prods_returned) > 0) { return -6; } $vater = new Facture($db); $vater->fetch($data['idsource']); $data['payment_type'] = $vater->mode_reglement_id; } $cash = new Cash($db); $terminal = $data['cashId']; $cash->fetch($terminal); if (!$data['customerId']) { $socid = $cash->fk_soc; $data['customerId'] = $socid; } else { $socid = $data['customerId']; } if (!$data['employeeId']) { $employee = $_SESSION['uid']; } else { $employee = $data['employeeId']; } if ($data['mode'] == 1) { $object = new Facturesim($db); } else { $object = new Facture($db); } $object->type = $data['type'] == 0 ? 0 : 2; $object->socid = $socid; $object->statut = $data['state']; $object->fk_cash = $terminal; $object->remise_percent = $data['discount_percent']; $object->remise_absolue = $data['discount_qty']; if ($data['customerpay1'] > 0) { $object->mode_reglement_id = $cash->fk_modepaycash; } else { if ($data['customerpay2'] > 0) { $object->mode_reglement_id = $cash->fk_modepaybank; } else { $object->mode_reglement_id = $cash->fk_modepaybank_extra; } } $object->fk_place = $data['id_place']; $object->note_private = $data['note']; $object->customer_pay = $data['customerpay']; if ($object->customer_pay > 0) { $object->diff_payment = $data['difpayment']; } else { $object->diff_payment = $data['total']; } $object->fk_facture_source = $data['idsource']; $employ = new User($db); $employ->fetch($employee); $employ->getrights(); $now = dol_now(); $object->date = $now; $db->begin; $idFacture = $object->create($employ); if ($object->statut == 1 || $object->type == 2) { $res = $object->validate($employ); if ($res < 0) { $soc = new Societe($db); $soc->fetch($socid); $num = $object->getNextNumRef($soc); // Validate $sql = 'UPDATE ' . MAIN_DB_PREFIX . 'facture'; $sql .= " SET facnumber='" . $num . "', fk_statut = 1, fk_user_valid = " . $employ->id . ", date_valid = '" . $db->idate($now) . "'"; if (!empty($conf->global->FAC_FORCE_DATE_VALIDATION)) { $sql .= ', datef=' . $db->idate($now); $sql .= ', date_lim_reglement=' . $db->idate($now); } $sql .= ' WHERE rowid = ' . $object->id; dol_syslog(get_class($this) . "::validate sql=" . $sql); $resql = $db->query($sql); $object->ref = $num; } } $sql = 'INSERT INTO ' . MAIN_DB_PREFIX . 'pos_facture (fk_cash, fk_place,fk_facture,customer_pay) VALUES (' . $object->fk_cash . ',' . ($object->fk_place ? $object->fk_place : 'null') . ',' . $idFacture . ',' . $object->customer_pay . ')'; dol_syslog("pos_facture::update sql=" . $sql); $resql = $db->query($sql); if (!$resql) { $this->db->rollback(); return -1; } $data['ref'] = $object->ref; if ($idFacture < 0) { $db->rollback(); return -1; } else { //Adding lines $data['id'] = $idFacture; //introducir descuentos if (!empty($data['idCoupon'])) { $res_dis = $object->insert_discount($data['idCoupon']); } else { $res_dis = 1; } $idLines = self::addFactureLines($lines, $idFacture, $object->type == 1 ? true : false); if ($idLines < 0 || $res_dis < 0) { $db->rollback(); return -2; } else { //Adding Payments $payment = self::addPaymentFac($data); if ($payment < 0) { $db->rollback(); return -3; } //Decrease stock $stock = self::quitSotck($lines, $object->type == 2 ? true : false); if ($stock) { $db->rollback(); return -4; } } } if ($idTicket) { $ticket = new Ticket($db); $ticket->fetch($idTicket); $ticket->delete_ticket(); } return $idFacture; }