Fix: Le bit des remises cres sur propales, commandes, contrat n'tait pas propag qd on cre une facture

New: Quand on classe pay partiellement une facture, on demande motif (si motif =escompte, c'est normal on passe en pay complet, si motif=autre, on passe en pay partiellement)
This commit is contained in:
Laurent Destailleur 2006-08-22 01:24:01 +00:00
parent 159dbad26f
commit 299b75d7f2
5 changed files with 63 additions and 34 deletions

View File

@ -119,7 +119,11 @@ if ($_POST['action'] == "setabsolutediscount" && $user->rights->propale->creer)
$ret=$fac->fetch($_GET['facid']);
if ($ret > 0)
{
$fac->insert_discount($_POST["remise_id"]);
$result=$fac->insert_discount($_POST["remise_id"]);
if ($result < 0)
{
$mesg='<div class="error">'.$fac->error.'</div>';
}
}
else
{
@ -236,14 +240,23 @@ if ($_POST['action'] == 'confirm_payed_partially' && $_POST['confirm'] == 'yes'
$close_note=$_POST["close_note"];
if ($close_code)
{
/*
if ($close_code == 'other' && ! $close_note)
{
$msg='<div class="error">'.$langs->trans("ErrorFieldRequired",$langs->trans("Comment")).'</div>';
}
else
{
$result = $fac->set_payed($user,$close_code,$close_note);
}
*/
if ($close_code == 'abandon')
{
$result = $fac->set_canceled($user,$close_code,$close_note);
}
else
{
$result = $fac->set_payed($user,$close_code,$close_note);
}
// }
}
else
{
@ -342,7 +355,8 @@ if ($_POST['action'] == 'add')
'',
'',
0,
$prop->lignes[$i]->info_bits);
$prop->lignes[$i]->info_bits,
$prop->lignes[$i]->fk_remise_except);
}
}
else
@ -384,7 +398,8 @@ if ($_POST['action'] == 'add')
'',
'',
0,
$lines[$i]->info_bits);
$lines[$i]->info_bits,
$lines[$i]->fk_remise_except);
}
}
else
@ -431,7 +446,10 @@ if ($_POST['action'] == 'add')
$lines[$i]->fk_product,
$lines[$i]->remise_percent,
$date_start,
$date_end);
$date_end,
0,
$lines[$i]->info_bits,
$lines[$i]->fk_remise_except);
}
}
else
@ -1420,22 +1438,19 @@ else
if ($_GET['action'] == 'payed' && $resteapayer > 0)
{
// Crée un tableau formulaire
// \todo Restreindre les choix en fonction d'une option globale
$helpescompte_avoir=$langs->trans("ConfirmClassifyPayedPartiallyAvoir").'<br><br>'.$langs->trans("Note").': '.$langs->trans("HelpEscompte");
$helpescompte_novat=$langs->trans("ConfirmClassifyPayedPartiallyNoVat").'<br><br>'.$langs->trans("Note").': '.$langs->trans("HelpEscompte");
$helpescompte_vat =$langs->trans("ConfirmClassifyPayedPartiallyVat"). '<br><br>'.$langs->trans("Note").': '.$langs->trans("HelpEscompte");
$reason_avoir=$html->textwithhelp($langs->transnoentities("ConfirmClassifyPayedPartiallyReasonDiscountAvoir",$resteapayer,$langs->trans("Currency".$conf->monnaie)),$helpescompte_avoir,1);
$reason_novat=$html->textwithhelp($langs->transnoentities("ConfirmClassifyPayedPartiallyReasonDiscountNoVat",$resteapayer,$langs->trans("Currency".$conf->monnaie)),$helpescompte_novat,1);
$reason_vat =$html->textwithhelp($langs->transnoentities("ConfirmClassifyPayedPartiallyReasonDiscountVat",$resteapayer,$langs->trans("Currency".$conf->monnaie)),$helpescompte_vat,1);
$reason_other=$langs->trans("ConfirmClassifyPayedPartiallyReasonOther");
$arrayreasons['discount_avoir']=$reason_avoir;
$arrayreasons['discount_novat']=$reason_novat;
$arrayreasons['discount_vat'] =$reason_vat;
$arrayreasons['discount_other']=$reason_other;
//$helpescompte_avoir=$langs->trans("ConfirmClassifyPayedPartiallyAvoir");
$helpescompte_vat =$langs->trans("HelpEscompte").'<br><br>'.$langs->trans("ConfirmClassifyPayedPartiallyVat");
$helpescompte_abandon=$langs->trans("ConfirmClassifyPayedPartiallyAbandon");
//$reason_avoir =$html->textwithhelp($langs->transnoentities("ConfirmClassifyPayedPartiallyReasonAvoir",$resteapayer,$langs->trans("Currency".$conf->monnaie)),$helpescompte_avoir,1);
$reason_vat =$html->textwithhelp($langs->transnoentities("ConfirmClassifyPayedPartiallyReasonDiscountVat",$resteapayer,$langs->trans("Currency".$conf->monnaie)),$helpescompte_vat,1);
$reason_abandon=$html->textwithhelp($langs->transnoentities("ConfirmClassifyPayedPartiallyReasonAbandon",$resteapayer,$langs->trans("Currency".$conf->monnaie)),$helpescompte_abandon,1);
//$arrayreasons['avoir'] =$reason_avoir;
$arrayreasons['discount_vat']=$reason_vat;
$arrayreasons['abandon'] =$reason_abandon;
$formquestion=array(
'text' => $langs->trans("ConfirmClassifyPayedPartiallyQuestion"),
array('type' => 'radio', 'name' => 'close_code', 'label' => $langs->trans("Reason"), 'values' => $arrayreasons),
array('type' => 'text', 'name' => 'close_note', 'label' => $langs->trans("Comment"), 'value' => '', 'size' => '70')
array('type' => 'text', 'name' => 'close_note', 'label' => $langs->trans("Comment"), 'value' => '', 'size' => '100')
);
// Paiement incomplet. On demande si motif = escompte ou autre
$html->form_confirm($_SERVER["PHP_SELF"].'?facid='.$fac->id,$langs->trans('ClassifyPayed'),$langs->trans('ConfirmClassifyPayedPartially',$fac->ref),'confirm_payed_partially',$formquestion);

View File

@ -717,7 +717,6 @@ class Facture extends CommonObject
* \brief Tag la facture comme payée complètement + appel trigger BILL_PAYED
* \param user Objet utilisateur qui modifie
* \param close_code Code renseigné si on classe à payée alors que paiement incomplet
* Les valeurs possibles sont: escompte, other
* \param close_note Commentaire renseigné si on classe à payée alors que paiement incomplet
* \return int <0 si ok, >0 si ok
*/
@ -788,15 +787,20 @@ class Facture extends CommonObject
/**
* \brief Tag la facture comme abandonnée + appel trigger BILL_CANCEL
* \param user Objet utilisateur qui modifie
* \param close_code Code renseigné si on classe à payée alors que paiement incomplet
* \param close_note Commentaire renseigné si on classe à payée alors que paiement incomplet
* \return int <0 si ok, >0 si ok
*/
function set_canceled($user)
function set_canceled($user,$close_code='',$close_note='')
{
global $conf,$langs;
dolibarr_syslog("Facture.class.php::set_canceled rowid=".$this->id);
$sql = 'UPDATE '.MAIN_DB_PREFIX.'facture';
$sql.= ' SET fk_statut=3 WHERE rowid = '.$this->id;
$sql = 'UPDATE '.MAIN_DB_PREFIX.'facture SET';
$sql.= ' fk_statut=3';
if ($close_code) $sql.= ", close_code='".addslashes($close_code)."'";
if ($close_note) $sql.= ", close_note='".addslashes($close_note)."'";
$sql.= ' WHERE rowid = '.$this->id;
$resql = $this->db->query($sql);
if ($resql)
@ -898,11 +902,11 @@ class Facture extends CommonObject
/*
* Tope les lignes de remises fixes avec id des lignes de facture au montant négatif
* Tope les lignes de remises fixes avec id des lignes de facture de remise
*/
foreach($this->lignes as $i => $line)
{
if (($this->lignes[$i]->info_bits & 2) == 2)
if (($this->lignes[$i]->info_bits & 2) == 2 && $this->lignes[$i]->fk_remise_except)
{
// Ligne de remise
dolibarr_syslog("Facture.class::set_valid: recherche si remise ".$this->lignes[$i]->fk_remise_except." toujours dispo");
@ -1102,7 +1106,7 @@ class Facture extends CommonObject
* par l'appelant par la methode get_default_tva(societe_vendeuse,societe_acheteuse,taux_produit)
* et le desc doit deja avoir la bonne valeur (a l'appelant de gerer le multilangue)
*/
function addline($facid, $desc, $pu, $qty, $txtva, $fk_product=0, $remise_percent=0, $date_start='', $date_end='', $ventil=0, $info_bits='')
function addline($facid, $desc, $pu, $qty, $txtva, $fk_product=0, $remise_percent=0, $date_start='', $date_end='', $ventil=0, $info_bits='', $fk_remise_except='')
{
global $conf;
dolibarr_syslog("facture.class.php::addline($facid,$desc,$pu,$qty,$txtva,$fk_product,$remise_percent,$date_start,$date_end,$ventil,$info_bits)");
@ -1157,6 +1161,7 @@ class Facture extends CommonObject
$ligne->ventil=$ventil;
$ligne->rang=-1;
$ligne->info_bits=$info_bits;
$ligne->fk_remise_except=$fk_remise_except;
$ligne->total_ht=$total_ht;
$ligne->total_tva=$total_tva;
$ligne->total_ttc=$total_ttc;

View File

@ -87,8 +87,14 @@ ConfirmClassifyPayedBill=Are you sure you want to change invoice <b>%s</b> to st
ConfirmCancelBill=Are you sure you want to cancel invoice <b>%s</b> ?
ConfirmClassifyPayedPartially=Are you sure you want to change invoice <b>%s</b> to status payed ?
ConfirmClassifyPayedPartiallyQuestion=This invoice has not been payed completely. What are reasons for you to close this invoice ?
ConfirmClassifyPayedPartiallyReasonEscompte=Remainder to pay <b>(%s %s)</b> is a discount granted because payment was made before term
ConfirmClassifyPayedPartiallyReasonOther=Other
ConfirmClassifyPayedPartiallyReasonAvoir=Remainder to pay <b>(%s %s)</b> is a discount granted because payment was made before term. Je régularise la TVA par un avoir.
ConfirmClassifyPayedPartiallyReasonDiscountNoVat=Remainder to pay <b>(%s %s)</b> is a discount granted because payment was made before term. J'accepte de perdre la TVA sur cet escompte.
ConfirmClassifyPayedPartiallyReasonDiscountVat=Remainder to pay <b>(%s %s)</b> is a discount granted because payment was made before term. Je récupère la TVA sur cet escompte sans avoir.
ConfirmClassifyPayedPartiallyReasonAbandon=Debit irremediably not recoverable (bad customer...)
ConfirmClassifyPayedPartiallyNoVat=Ce choix est possible si votre facture était munie de la mention adéquate. (Exemple: « escompte net de taxe »)
ConfirmClassifyPayedPartiallyVat=Ce choix est possible si votre facture était munie de la mention adéquate. (Exemple: «seule la taxe correspondant au prix effectivement payé ouvre droit à déduction»)
ConfirmClassifyPayedPartiallyAvoir=Ce choix est le choix à prendre si les autres ne sont pas applicables
ConfirmClassifyPayedPartiallyAbandon=Ce choix sera celui dans le cas d'un mauvais payeur sans aucun espoir de recouvrement
ValidateBill=Validate invoice
NumberOfBills=Nb of invoices
NumberOfBillsByMonth=Nb of invoices by month

View File

@ -87,13 +87,14 @@ ConfirmClassifyPayedBill=
ConfirmCancelBill=Êtes-vous sûr de vouloir annuler la facture <b>%s</b> ?
ConfirmClassifyPayedPartially=Êtes-vous sûr de vouloir classer la facture <b>%s</b> comme payée ?
ConfirmClassifyPayedPartiallyQuestion=Cette facture n'a pas été payée à hauteur du montant initial. Pour quelle raison voulez-vous la classer magré tout ?
ConfirmClassifyPayedPartiallyReasonDiscountNoVat=Le reste à payer <b>(%s %s)</b> est un escompte accordé après facture. J'accepte de perdre la TVA sur cet escompte.
ConfirmClassifyPayedPartiallyReasonDiscountVat=Le reste à payer <b>(%s %s)</b> est un escompte accordé après facture. Je récupère la TVA sur cet escompte sans avoir.
ConfirmClassifyPayedPartiallyReasonDiscountAvoir=Le reste à payer <b>(%s %s)</b> est un escompte accordé après facture. Je régularise la TVA par un avoir.
ConfirmClassifyPayedPartiallyReasonOther=Autre
ConfirmClassifyPayedPartiallyNoVat=Ce choix est possible si votre facture était munie de la mention adéquate. (Exemple: « escompte net de taxe »)
ConfirmClassifyPayedPartiallyVat=Ce choix est possible si votre facture était munie de la mention adéquate. (Exemple: «seule la taxe correspondant au prix effectivement payé ouvre droit à déduction»)
ConfirmClassifyPayedPartiallyReasonAvoir=Le reste à payer <b>(%s %s)</b> est un trop facturé (car article retourné, oubli, escompte non défini...) régularisé par un avoir
ConfirmClassifyPayedPartiallyReasonDiscountNoVat=Le rest à payer <b>(%s %s)</b> est un escompte accordé après facture. J'accepte de perdre la TVA sur cet escompte
ConfirmClassifyPayedPartiallyReasonDiscountVat=Le reste à payer <b>(%s %s)</b> est un escompte
ConfirmClassifyPayedPartiallyReasonAbandon=Créance définitivement abandonnée (client irrécouvrable...)
ConfirmClassifyPayedPartiallyAvoir=Ce choix est le choix à prendre si les autres ne sont pas applicables
ConfirmClassifyPayedPartiallyNoVat=Ce choix est possible si votre facture était munie de la mention adéquate. (Exemple: «escompte net de taxe»)
ConfirmClassifyPayedPartiallyVat=Ce choix est possible si votre facture était munie de la mention adéquate. (Exemple: mention définissant l'escompte ou du genre «seule la taxe correspondant au prix effectivement payé ouvre droit à déduction»)
ConfirmClassifyPayedPartiallyAbandon=Ce choix sera celui dans le cas d'un mauvais payeur sans aucun espoir de recouvrement
ValidateBill=Valider facture
NumberOfBills=Nb de factures
NumberOfBillsByMonth=Nb de factures par mois

View File

@ -118,6 +118,8 @@ ALTER TABLE llx_facturedet ADD COLUMN total_tva real AFTER total_ht;
ALTER TABLE llx_facturedet ADD COLUMN total_ttc real AFTER total_tva;
ALTER TABLE llx_facturedet ADD COLUMN info_bits integer DEFAULT 0 AFTER date_end;
UPDATE llx_facturedet SET info_bits=0 where (fk_remise_except IS NULL OR fk_remise_except = 0);
ALTER TABLE llx_propaldet ADD COLUMN total_ht real AFTER price;
ALTER TABLE llx_propaldet ADD COLUMN total_tva real AFTER total_ht;
ALTER TABLE llx_propaldet ADD COLUMN total_ttc real AFTER total_tva;