diff --git a/htdocs/comm/card.php b/htdocs/comm/card.php index 7cf7b372a53..376745c3d55 100644 --- a/htdocs/comm/card.php +++ b/htdocs/comm/card.php @@ -964,16 +964,19 @@ if ($id > 0) $sql.= ', f.tva as total_tva'; $sql.= ', f.total_ttc'; $sql.= ', f.datec as dc'; - $sql.= ', f.status as status'; + $sql.= ', f.date_last_gen'; + $sql.= ', f.frequency'; + $sql.= ', f.unit_frequency'; + $sql.= ', f.suspended as suspended'; $sql.= ', s.nom, s.rowid as socid'; $sql.= " FROM ".MAIN_DB_PREFIX."societe as s,".MAIN_DB_PREFIX."facture_rec as f"; $sql.= " WHERE f.fk_soc = s.rowid AND s.rowid = ".$object->id; $sql.= " AND f.entity = ".$conf->entity; $sql.= ' GROUP BY f.rowid, f.titre, f.amount, f.total, f.tva, f.total_ttc,'; - $sql.= ' f.datec,'; - $sql.= ' f.status,'; + $sql.= ' f.date_last_gen, f.datec, f.frequency, f.unit_frequency,'; + $sql.= ' f.suspended,'; $sql.= ' s.nom, s.rowid'; - $sql.= " ORDER BY f.datec DESC"; + $sql.= " ORDER BY f.date_last_gen, f.datec DESC"; $resql=$db->query($sql); if ($resql) @@ -999,19 +1002,28 @@ if ($id > 0) print ''; $invoicetemplate->id = $objp->id; $invoicetemplate->ref = $objp->ref; - $invoicetemplate->statut = $objp->status; + $invoicetemplate->suspended = $objp->suspended; + $invoicetemplate->frequency = $objp->frequency; + $invoicetemplate->unit_frequency = $objp->unit_frequency; $invoicetemplate->total_ht = $objp->total_ht; $invoicetemplate->total_tva = $objp->total_tva; $invoicetemplate->total_ttc = $objp->total_ttc; print $invoicetemplate->getNomUrl(1); print ''; - if ($objp->dc > 0) + if ($objp->frequency && $objp->date_last_gen > 0) { - print ''.dol_print_date($db->jdate($objp->dc),'day').''; + print ''.dol_print_date($db->jdate($objp->date_last_gen),'day').''; } else { - print '!!!'; + if ($objp->dc > 0) + { + print ''.dol_print_date($db->jdate($objp->dc),'day').''; + } + else + { + print '!!!'; + } } print ''; print price($objp->total_ht); @@ -1025,7 +1037,8 @@ if ($id > 0) } print ''; - print ($invoicetemplate->LibStatut(0,$invoicetemplate->statut,5,0)); + print $langs->trans('FrequencyPer_'.$invoicetemplate->unit_frequency, $invoicetemplate->frequency).' - '; + print ($invoicetemplate->LibStatut($invoicetemplate->frequency,$invoicetemplate->suspended,5,0)); print ''; print "\n"; $i++; diff --git a/htdocs/compta/facture/class/facture-rec.class.php b/htdocs/compta/facture/class/facture-rec.class.php index f6c2fe7ef2e..e4c1a7d4280 100644 --- a/htdocs/compta/facture/class/facture-rec.class.php +++ b/htdocs/compta/facture/class/facture-rec.class.php @@ -248,7 +248,7 @@ class FactureRec extends CommonInvoice */ function fetch($rowid, $ref='', $ref_ext='', $ref_int='') { - $sql = 'SELECT f.rowid, f.entity, f.titre, f.status, f.fk_soc, f.amount, f.tva, f.localtax1, f.localtax2, f.total, f.total_ttc'; + $sql = 'SELECT f.rowid, f.entity, f.titre, f.suspended, f.fk_soc, f.amount, f.tva, f.localtax1, f.localtax2, f.total, f.total_ttc'; $sql.= ', f.remise_percent, f.remise_absolue, f.remise'; $sql.= ', f.date_lim_reglement as dlr'; $sql.= ', f.note_private, f.note_public, f.fk_user_author'; @@ -281,7 +281,7 @@ class FactureRec extends CommonInvoice $this->titre = $obj->titre; $this->ref = $obj->titre; $this->ref_client = $obj->ref_client; - $this->statut = $obj->status; + $this->suspended = $obj->suspended; $this->type = $obj->type; $this->datep = $obj->dp; $this->date = $obj->df; @@ -879,6 +879,7 @@ class FactureRec extends CommonInvoice $facture->brouillon = 1; $facture->date = $facturerec->date_when; // We could also use dol_now here but we prefer date_when so invoice has real date when we would like even if we generate later. $facture->socid = $facturerec->socid; + $facture->suspended = 0; $invoiceidgenerated = $facture->create($user); if ($invoiceidgenerated <= 0) @@ -956,57 +957,93 @@ class FactureRec extends CommonInvoice return $result; } + /** + * Return label of object status + * + * @param int $mode 0=long label, 1=short label, 2=Picto + short label, 3=Picto, 4=Picto + long label, 5=short label + picto, 6=Long label + picto + * @param integer $alreadypaid Not used + * @return string Label + */ + function getLibStatut($mode=0,$alreadypaid=-1) + { + return $this->LibStatut($this->frequency?1:0, $this->suspended, $mode, $alreadypaid, $this->type); + } + /** * Renvoi le libelle d'un statut donne * - * @param int $paye Status field paye - * @param int $status Id status + * @param int $recur Is it a recurring invoice ? + * @param int $status Id status (suspended or not) * @param int $mode 0=long label, 1=short label, 2=Picto + short label, 3=Picto, 4=Picto + long label, 5=short label + picto, 6=long label + picto - * @param integer $alreadypaid 0=No payment already done, >0=Some payments were already done (we recommand to put here amount payed if you have it, 1 otherwise) + * @param int $alreadypaid Not used * @param int $type Type invoice * @return string Libelle du statut */ - function LibStatut($paye,$status,$mode=0,$alreadypaid=-1,$type=0) + function LibStatut($recur,$status,$mode=0,$alreadypaid=-1,$type=0) { global $langs; $langs->load('bills'); - //print "$paye,$status,$mode,$alreadypaid,$type"; + //print "$recur,$status,$mode,$alreadypaid,$type"; if ($mode == 0) { $prefix=''; - if ($type == -1) return $langs->trans('Suspended'); // credit note - else return $langs->trans('Active'); + if ($recur) + { + if ($status == 1) return $langs->trans('Suspended'); // credit note + else return $langs->trans('Active'); + } + else return $langs->trans("Draft"); } if ($mode == 1) { $prefix='Short'; - if ($status == -1) return $langs->trans('Suspended'); - else return $langs->trans('Active'); + if ($recur) + { + if ($status == 1) return $langs->trans('Suspended'); + else return $langs->trans('Active'); + } + else return $langs->trans("Draft"); } if ($mode == 2) { - if ($status == -1) return img_picto($langs->trans('Suspended'),'statut6').' '.$langs->trans('Suspended'); - else return img_picto($langs->trans('Active'),'statut4').' '.$langs->trans('Active'); + if ($recur) + { + if ($status == 1) return img_picto($langs->trans('Suspended'),'statut6').' '.$langs->trans('Suspended'); + else return img_picto($langs->trans('Active'),'statut4').' '.$langs->trans('Active'); + } + else return img_picto($langs->trans('Draft'),'statut0').' '.$langs->trans('Draft'); } if ($mode == 3) { - $prefix='Short'; - if ($type == -1) return img_picto($langs->trans('Suspended'),'statut6'); - else return img_picto($langs->trans('Active'),'statut4'); + if ($recur) + { + $prefix='Short'; + if ($status == 1) return img_picto($langs->trans('Suspended'),'statut6'); + else return img_picto($langs->trans('Active'),'statut4'); + } + else return img_picto($langs->trans('Draft'),'statut0'); } if ($mode == 4) { $prefix=''; - if ($type == -1) return img_picto($langs->trans('Suspended'),'statut6').' '.$langs->trans('Suspended'); - else return img_picto($langs->trans('Active'),'statut4').' '.$langs->trans('Active'); + if ($recur) + { + if ($type == 1) return img_picto($langs->trans('Suspended'),'statut6').' '.$langs->trans('Suspended'); + else return img_picto($langs->trans('Active'),'statut4').' '.$langs->trans('Active'); + } + else return img_picto($langs->trans('Draft'),'statut0').' '.$langs->trans('Draft'); } if ($mode == 5 || $mode == 6) { $prefix=''; if ($mode == 5) $prefix='Short'; - if ($type == -1) return ''.$langs->trans('Suspended').' '.img_picto($langs->trans('Suspended'),'statut6'); - else return ''.$langs->trans('Active').' '.img_picto($langs->trans('Active'),'statut4'); + if ($recur) + { + if ($status == 1) return ''.$langs->trans('Suspended').' '.img_picto($langs->trans('Suspended'),'statut6'); + else return ''.$langs->trans('Active').' '.img_picto($langs->trans('Active'),'statut4'); + } + else return $langs->trans('Draft').' '.img_picto($langs->trans('Active'),'statut0'); } } diff --git a/htdocs/compta/facture/fiche-rec.php b/htdocs/compta/facture/fiche-rec.php index 5c1d33e7808..9c95d25ceaa 100644 --- a/htdocs/compta/facture/fiche-rec.php +++ b/htdocs/compta/facture/fiche-rec.php @@ -121,7 +121,8 @@ $arrayfields=array( 'f.nb_gen_done'=>array('label'=>$langs->trans("NbOfGenerationDone"), 'checked'=>1), 'f.date_last_gen'=>array('label'=>$langs->trans("DateLastGeneration"), 'checked'=>1), 'f.date_when'=>array('label'=>$langs->trans("NextDateToExecution"), 'checked'=>1), - 'f.datec'=>array('label'=>$langs->trans("DateCreation"), 'checked'=>0, 'position'=>500), + 'status'=>array('label'=>$langs->trans("Status"), 'checked'=>1, 'position'=>100), + 'f.datec'=>array('label'=>$langs->trans("DateCreation"), 'checked'=>0, 'position'=>500), 'f.tms'=>array('label'=>$langs->trans("DateModificationShort"), 'checked'=>0, 'position'=>500), ); // Extra fields @@ -934,6 +935,7 @@ $form = new Form($db); $formother = new FormOther($db); if (! empty($conf->projet->enabled)) { $formproject = new FormProjets($db); } $companystatic = new Societe($db); +$invoicerectmp = new FactureRec($db); $now = dol_now(); $tmparray=dol_getdate($now); @@ -1409,7 +1411,7 @@ else { if ($object->frequency > 0) { - print $langs->trans('FrequencyPer_'.$object->unit_frequency, $object->frequency); + print $langs->trans('FrequencyPer_'.$object->unit_frequency, $object->frequency); } else { @@ -1617,7 +1619,7 @@ else /* * List mode */ - $sql = "SELECT s.nom as name, s.rowid as socid, f.rowid as facid, f.titre, f.total, f.tva as total_vat, f.total_ttc, f.frequency,"; + $sql = "SELECT s.nom as name, s.rowid as socid, f.rowid as facid, f.titre, f.total, f.tva as total_vat, f.total_ttc, f.frequency, f.unit_frequency,"; $sql.= " f.nb_gen_done, f.nb_gen_max, f.date_last_gen, f.date_when,"; $sql.= " f.datec, f.tms"; $sql.= " FROM ".MAIN_DB_PREFIX."societe as s,".MAIN_DB_PREFIX."facture_rec as f"; @@ -1625,7 +1627,7 @@ else $sql .= ", ".MAIN_DB_PREFIX."societe_commerciaux as sc"; } $sql.= " WHERE f.fk_soc = s.rowid"; - $sql.= " AND f.entity = ".$conf->entity; + $sql.= ' AND f.entity IN ('.getEntity('facture').')'; if (! $user->rights->societe->client->voir && ! $socid) { $sql .= " AND s.rowid = sc.fk_soc AND sc.fk_user = ".$user->id; } @@ -1837,6 +1839,12 @@ else print ''; print ''; } + // Status + if (! empty($arrayfields['status']['checked'])) + { + print ''; + print ''; + } // Action column print ''; $searchpicto=$form->showFilterAndCheckAddButtons(0, 'checkforselect', 1); @@ -1855,8 +1863,9 @@ else if (! empty($arrayfields['f.nb_gen_done']['checked'])) print_liste_field_titre($arrayfields['f.nb_gen_done']['label'],$_SERVER['PHP_SELF'],"f.nb_gen_done","",$param,'align="center"',$sortfield,$sortorder); if (! empty($arrayfields['f.date_last_gen']['checked'])) print_liste_field_titre($arrayfields['f.date_last_gen']['label'],$_SERVER['PHP_SELF'],"f.date_last_gen","",$param,'align="center"',$sortfield,$sortorder); if (! empty($arrayfields['f.date_when']['checked'])) print_liste_field_titre($arrayfields['f.date_when']['label'],$_SERVER['PHP_SELF'],"f.date_when","",$param,'align="center"',$sortfield,$sortorder); - if (! empty($arrayfields['f.datec']['checked'])) print_liste_field_titre($arrayfields['f.datec']['label'],$_SERVER['PHP_SELF'],"f.date_when","",$param,'align="center"',$sortfield,$sortorder); - if (! empty($arrayfields['f.tms']['checked'])) print_liste_field_titre($arrayfields['f.tms']['label'],$_SERVER['PHP_SELF'],"f.date_when","",$param,'align="center"',$sortfield,$sortorder); + if (! empty($arrayfields['f.datec']['checked'])) print_liste_field_titre($arrayfields['f.datec']['label'],$_SERVER['PHP_SELF'],"f.datec","",$param,'align="center"',$sortfield,$sortorder); + if (! empty($arrayfields['f.tms']['checked'])) print_liste_field_titre($arrayfields['f.tms']['label'],$_SERVER['PHP_SELF'],"f.tms","",$param,'align="center"',$sortfield,$sortorder); + if (! empty($arrayfields['status']['checked'])) print_liste_field_titre($arrayfields['status']['label'],$_SERVER['PHP_SELF'],"","",$param,'align="center"',$sortfield,$sortorder); print_liste_field_titre($selectedfields, $_SERVER["PHP_SELF"],"",'','','align="center"',$sortfield,$sortorder,'maxwidthsearch ')."\n"; print "\n"; @@ -1871,6 +1880,11 @@ else $companystatic->id=$objp->socid; $companystatic->name=$objp->name; + $invoicerectmp->id=$objp->id; + $invoicerectmp->frequency=$objp->frequency; + $invoicerectmp->suspend=$objp->suspend; + $invoicerectmp->unit_frequency=$objp->unit_frequency; + print ''; if (! empty($arrayfields['f.titre']['checked'])) @@ -1928,6 +1942,12 @@ else print dol_print_date($db->jdate($objp->tms),'dayhour'); print ''; } + if (! empty($arrayfields['status']['checked'])) + { + print ''; + print $invoicerectmp->getLibStatut(3,0); + print ''; + } // Action column print ''; if ($user->rights->facture->creer) diff --git a/htdocs/core/lib/functions.lib.php b/htdocs/core/lib/functions.lib.php index f5049ab8482..99ad792c217 100644 --- a/htdocs/core/lib/functions.lib.php +++ b/htdocs/core/lib/functions.lib.php @@ -1347,6 +1347,11 @@ function dol_banner_tab($object, $paramid, $morehtml='', $shownav=1, $fieldid='r if ($object->statut==0) $morehtmlstatus.=$object->getLibStatut(2); else $morehtmlstatus.=$object->getLibStatut(4); } + elseif ($object->element == 'facturerec') + { + if ($object->frequency==0) $morehtmlstatus.=$object->getLibStatut(2); + else $morehtmlstatus.=$object->getLibStatut(4); + } else { // Generic case $tmptxt=$object->getLibStatut(6); if (empty($tmptxt) || $tmptxt == $object->getLibStatut(3) || $conf->browser->layout=='phone') $tmptxt=$object->getLibStatut(5); diff --git a/htdocs/install/mysql/migration/6.0.0-7.0.0.sql b/htdocs/install/mysql/migration/6.0.0-7.0.0.sql index 0b67bf4b369..419681c28ec 100644 --- a/htdocs/install/mysql/migration/6.0.0-7.0.0.sql +++ b/htdocs/install/mysql/migration/6.0.0-7.0.0.sql @@ -38,7 +38,8 @@ ALTER TABLE llx_website_page ADD COLUMN fk_user_modif integer; -- For 7.0 -ALTER TABLE llx_facture_rec ADD COLUMN status integer DEFAULT 1; +ALTER TABLE llx_facture_rec ADD COLUMN suspended integer DEFAULT 0; + UPDATE llx_c_email_templates SET position = 0 WHERE position IS NULL; diff --git a/htdocs/install/mysql/tables/llx_facture_rec.sql b/htdocs/install/mysql/tables/llx_facture_rec.sql index 9258634a1de..1a0c08ca334 100644 --- a/htdocs/install/mysql/tables/llx_facture_rec.sql +++ b/htdocs/install/mysql/tables/llx_facture_rec.sql @@ -28,7 +28,7 @@ create table llx_facture_rec datec datetime, -- date de creation tms timestamp, -- date creation/modification - status integer DEFAULT 1, -- 1=active, 0=suspended + suspended integer DEFAULT 0, -- 1=suspended amount double(24,8) DEFAULT 0 NOT NULL, remise real DEFAULT 0,