/** * Mise a jour des totaux lignes de facture * * @param DoliDB $db Database handler * @param Translate $langs Object langs * @param Conf $conf Object conf * @return void */ function migrate_price_facture($db, $langs, $conf) { $err = 0; $db->begin(); print '<tr><td colspan="4">'; print '<br>'; print '<b>' . $langs->trans('MigrationInvoice') . "</b><br>\n"; // Liste des lignes facture non a jour $sql = "SELECT fd.rowid, fd.qty, fd.subprice, fd.remise_percent, fd.tva_tx as tva_taux, fd.total_ttc, fd.info_bits,"; $sql .= " f.rowid as facid, f.remise_percent as remise_percent_global, f.total_ttc as total_ttc_f"; $sql .= " FROM " . MAIN_DB_PREFIX . "facturedet as fd, " . MAIN_DB_PREFIX . "facture as f"; $sql .= " WHERE fd.fk_facture = f.rowid"; $sql .= " AND (((fd.total_ttc = 0 AND fd.remise_percent != 100) or fd.total_ttc IS NULL) or f.total_ttc IS NULL)"; //print $sql; dolibarr_install_syslog("upgrade2::migrate_price_facture", LOG_DEBUG); $resql = $db->query($sql); if ($resql) { $num = $db->num_rows($resql); $i = 0; if ($num) { while ($i < $num) { $obj = $db->fetch_object($resql); $rowid = $obj->rowid; $qty = $obj->qty; $pu = $obj->subprice; $txtva = $obj->tva_taux; $remise_percent = $obj->remise_percent; $remise_percent_global = $obj->remise_percent_global; $total_ttc_f = $obj->total_ttc_f; $info_bits = $obj->info_bits; // On met a jour les 3 nouveaux champs $facligne = new FactureLigne($db); $facligne->fetch($rowid); $result = calcul_price_total($qty, $pu, $remise_percent, $txtva, 0, 0, $remise_percent_global, 'HT', $info_bits, 0); $total_ht = $result[0]; $total_tva = $result[1]; $total_ttc = $result[2]; $facligne->total_ht = $total_ht; $facligne->total_tva = $total_tva; $facligne->total_ttc = $total_ttc; dolibarr_install_syslog("upgrade2: Line {$rowid}: facid={$obj->facid} pu={$pu} qty={$qty} tva_taux={$txtva} remise_percent={$remise_percent} remise_global={$remise_percent_global} -> {$total_ht}, {$total_tva}, {$total_ttc}"); print ". "; $facligne->update_total(); /* On touche a facture mere uniquement si total_ttc = 0 */ if (!$total_ttc_f) { $facture = new Facture($db); $facture->id = $obj->facid; if ($facture->fetch($facture->id) >= 0) { if ($facture->update_price() > 0) { //print $facture->id; } else { print "Error id=" . $facture->id; $err++; } } else { print "Error #3"; $err++; } } print " "; $i++; } } else { print $langs->trans("AlreadyDone"); } $db->free($resql); $db->commit(); } else { print "Error #1 " . $db->error(); $err++; $db->rollback(); } print '<br>'; print '</td></tr>'; }
function _createAvoir(&$PDOdb, &$db, &$user, &$conf, &$langs) { dol_include_once('/compta/facture/class/facture.class.php'); dol_include_once('/core/class/discount.class.php'); $sql = _getSql2(); $PDOdb->Execute($sql); $TFacnumberFetchError = array(); $TFacnumberCreateError = array(); $TDiscountCreateError = array(); $nbValidate = 0; while ($row = $PDOdb->Get_line()) { $fk_soc = $row->fk_soc; $facnumber = $row->facnumber; $factureImpayee = new Facture($db); if ($factureImpayee->fetch(null, $facnumber) <= 0) { $TFacnumberFetchError[] = $facnumber; continue; } $dateinvoice = dol_mktime(12, 0, 0, date('m'), date('d'), date('Y')); $facture = new Facture($db); $facture->socid = $fk_soc; $facture->fk_facture_source = $factureImpayee->id; $facture->type = Facture::TYPE_CREDIT_NOTE; $facture->date = $dateinvoice; if ($facture->create($user) <= 0) { $TFacnumberCreateError[] = $facnumber; continue; } foreach ($factureImpayee->lines as $line) { $line->fk_facture = $facture->id; $line->subprice = -$line->subprice; // invert price for object $line->pa_ht = -$line->pa_ht; $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->insert(); $facture->lines[] = $line; // insert new line in current object } $facture->update_price(1); $facture->validate($user); $discountcheck = new DiscountAbsolute($db); $result = $discountcheck->fetch(0, $facture->id); if (!empty($discountcheck->id)) { //can't convert $facture->delete(); continue; } $i = 0; $amount_ht = $amount_tva = $amount_ttc = array(); foreach ($facture->lines as $line) { if ($line->total_ht != 0) { // no need to create discount if amount is null $amount_ht[$line->tva_tx] += $line->total_ht; $amount_tva[$line->tva_tx] += $line->total_tva; $amount_ttc[$line->tva_tx] += $line->total_ttc; $i++; } } // Insert one discount by VAT rate category $discount = new DiscountAbsolute($db); $discount->description = '(CREDIT_NOTE)'; $discount->tva_tx = abs($facture->total_ttc); $discount->fk_soc = $facture->socid; $discount->fk_facture_source = $facture->id; foreach ($amount_ht as $tva_tx => $xxx) { $discount->amount_ht = abs($amount_ht[$tva_tx]); $discount->amount_tva = abs($amount_tva[$tva_tx]); $discount->amount_ttc = abs($amount_ttc[$tva_tx]); $discount->tva_tx = abs($tva_tx); $result = $discount->create($user); if ($result < 0) { $TDiscountCreateError[] = $facnumber; $error++; break; } $result = $facture->set_paid($user); $result = $discount->link_to_invoice(0, $factureImpayee->id); $r = $factureImpayee->set_paid($user); } /******/ $nbValidate++; } if ($nbValidate) { setEventMessages($langs->trans('sendinvoicetoadherentAvoirValidate', $nbValidate), null); } if (count($TFacnumberFetchError) > 0) { setEventMessages($langs->trans('sendinvoicetoadherentErrorFetchFacture', count($TFacnumberFetchError)), null, 'errors'); } if (count($TFacnumberCreateError) > 0) { setEventMessages($langs->trans('sendinvoicetoadherentErrorCreateAvoir', count($TFacnumberCreateError)), null, 'errors'); } $_SESSION['SENDTOINVOICETOADHERENT_TFETCHERROR'] = $TFacnumberFetchError; $_SESSION['SENDTOINVOICETOADHERENT_TCREATEERROR'] = $TFacnumberCreateError; header('Location: ' . dol_buildpath('/sendinvoicetoadherent/sendinvoicetoadherent.php?action=listAvoir', 2)); exit; }