diff --git a/htdocs/core/class/html.form.class.php b/htdocs/core/class/html.form.class.php index 377922192f2..8bdb428d26b 100644 --- a/htdocs/core/class/html.form.class.php +++ b/htdocs/core/class/html.form.class.php @@ -2930,10 +2930,11 @@ class Form * @param string $htmlname HTML field name * @param int $maxlength Maximum length for labels * @param int $excludeafterid Exclude all categories after this leaf in category tree. + * @param int $outputmode 0=HTML select string, 1=Array * @return string * @see select_categories */ - function select_all_categories($type, $selected='', $htmlname="parent", $maxlength=64, $excludeafterid=0) + function select_all_categories($type, $selected='', $htmlname="parent", $maxlength=64, $excludeafterid=0, $outputmode=0) { global $langs; $langs->load("categories"); @@ -2942,6 +2943,7 @@ class Form $cate_arbo = $cat->get_full_arbo($type,$excludeafterid); $output = ''; $output.= "\n"; - return $output; + + if ($outputmode) return $outarray; + return $output; } /** diff --git a/htdocs/core/class/html.formother.class.php b/htdocs/core/class/html.formother.class.php index 786d2c53a34..c42a673976e 100644 --- a/htdocs/core/class/html.formother.class.php +++ b/htdocs/core/class/html.formother.class.php @@ -374,9 +374,13 @@ class FormOther if ($conf->use_javascript_ajax) { include_once DOL_DOCUMENT_ROOT . '/core/lib/ajax.lib.php'; + $comboenhancement = ajax_combobox($htmlname); - $out.=$comboenhancement; - $nodatarole=($comboenhancement?' data-role="none"':''); + if ($comboenhancement) + { + $out.=$comboenhancement; + $nodatarole=($comboenhancement?' data-role="none"':''); + } } // Select each sales and print them in a select input $out.=''; print ''; + // Date print ' '; - if($conf->expedition_bon->enabled) { + if ($conf->livraison_bon->enabled) + { print ''; print ''; - } - if($conf->livraison_bon->enabled) { + print ' '; } print ''; @@ -193,14 +193,23 @@ if ($resql) { }*/ print "\n"; - if($conf->expedition_bon->enabled) { - // Date real - print ''; - print dol_print_date($db->jdate($objp->date_expedition),"day"); - print ''."\n"; - } - if($conf->livraison_bon->enabled) { - print ''; + + // Date real + print ''; + print dol_print_date($db->jdate($objp->date_expedition),"day"); + print ''."\n"; + + if ($conf->livraison_bon->enabled) + { + $shipment->fetchObjectLinked($shipment->id,$shipment->element); + $receiving=(! empty($shipment->linkedObjects['delivery'][0])?$shipment->linkedObjects['delivery'][0]:''); + + // Ref + print ''; + print !empty($receiving) ? $receiving->getNomUrl($db) : ''; + print ''; + + print ''; print dol_print_date($db->jdate($objp->date_reception),"day"); print ''."\n"; } diff --git a/htdocs/langs/en_US/trips.lang b/htdocs/langs/en_US/trips.lang index 82d64509c6c..30b6070632b 100644 --- a/htdocs/langs/en_US/trips.lang +++ b/htdocs/langs/en_US/trips.lang @@ -7,7 +7,7 @@ TripsAndExpenses=Expenses reports TripsAndExpensesStatistics=Expense reports statistics TripCard=Expense report card AddTrip=Create expense report -ListOfTrips=List of expense report +ListOfTrips=List of expense reports ListOfFees=List of fees NewTrip=New expense report CompanyVisited=Company/foundation visited @@ -27,7 +27,7 @@ AnyOtherInThisListCanValidate=Person to inform for validation. TripSociete=Information company TripSalarie=Informations user TripNDF=Informations expense report -DeleteLine=Delete a ligne of the expense report +DeleteLine=Delete a line of the expense report ConfirmDeleteLine=Are you sure you want to delete this line ? PDFStandardExpenseReports=Standard template to generate a PDF document for expense report ExpenseReportLine=Expense report line @@ -40,7 +40,7 @@ TF_BUS=Bus TF_CAR=Car TF_PEAGE=Toll TF_ESSENCE=Fuel -TF_HOTEL=Hostel +TF_HOTEL=Hotel TF_TAXI=Taxi ErrorDoubleDeclaration=You have declared another expense report into a similar date range. @@ -56,12 +56,12 @@ ModePaiement=Payment mode Note=Note Project=Project -VALIDATOR=User to inform for approbation +VALIDATOR=User responsible for approval VALIDOR=Approved by AUTHOR=Recorded by -AUTHORPAIEMENT=Paied by +AUTHORPAIEMENT=Paid by REFUSEUR=Denied by -CANCEL_USER=Canceled by +CANCEL_USER=Deleted by MOTIF_REFUS=Reason MOTIF_CANCEL=Reason @@ -74,7 +74,7 @@ DATE_PAIEMENT=Payment date TO_PAID=Pay BROUILLONNER=Reopen -SendToValid=Sent to approve +SendToValid=Sent on approval ModifyInfoGen=Edit ValidateAndSubmit=Validate and submit for approval @@ -93,7 +93,7 @@ ConfirmPaidTrip=Are you sure you want to change status of this expense report to CancelTrip=Cancel an expense report ConfirmCancelTrip=Are you sure you want to cancel this expense report ? -BrouillonnerTrip=Move back expense report to status "Draft"n +BrouillonnerTrip=Move back expense report to status "Draft" ConfirmBrouillonnerTrip=Are you sure you want to move this expense report to status "Draft" ? SaveTrip=Validate expense report diff --git a/htdocs/langs/en_US/workflow.lang b/htdocs/langs/en_US/workflow.lang index e08c88a9170..84b245fd77c 100644 --- a/htdocs/langs/en_US/workflow.lang +++ b/htdocs/langs/en_US/workflow.lang @@ -1,11 +1,11 @@ # Dolibarr language file - Source file is en_US - admin WorkflowSetup=Workflow module setup -WorkflowDesc=This module is designed to modify the behaviour of automatic actions into application. By default, workflow is opened (you make thing in order you want). You can activate the automatic actions that you are interesting in. -ThereIsNoWorkflowToModify=There is no workflow you can modify for module you have activated. -descWORKFLOW_PROPAL_AUTOCREATE_ORDER=Create a customer order automatically after a commercial proposal is signed -descWORKFLOW_PROPAL_AUTOCREATE_INVOICE=Create a customer invoice automatically after a commercial proposal is signed -descWORKFLOW_CONTRACT_AUTOCREATE_INVOICE=Create a customer invoice automatically after a contract is validated -descWORKFLOW_ORDER_AUTOCREATE_INVOICE=Create a customer invoice automatically after a customer order is closed +WorkflowDesc=This module is designed to modify the behaviour of automatic actions into application. By default, workflow is opened (you make thing in order you want). You can activate the automatic actions that you are interested in. +ThereIsNoWorkflowToModify=There is no workflow to modify for the activated module. +descWORKFLOW_PROPAL_AUTOCREATE_ORDER=Automatically create a customer order after a commercial proposal is signed +descWORKFLOW_PROPAL_AUTOCREATE_INVOICEAutomatically create a customer invoice after a commercial proposal is signed +descWORKFLOW_CONTRACT_AUTOCREATE_INVOICEAutomatically create a customer invoice after a contract is validated +descWORKFLOW_ORDER_AUTOCREATE_INVOICEAutomatically create a customer invoice after a customer order is closed descWORKFLOW_ORDER_CLASSIFY_BILLED_PROPAL=Classify linked source proposal to billed when customer order is set to paid descWORKFLOW_INVOICE_CLASSIFY_BILLED_ORDER=Classify linked source customer order(s) to billed when customer invoice is set to paid descWORKFLOW_INVOICE_AMOUNT_CLASSIFY_BILLED_ORDER=Classify linked source customer order(s) to billed when customer invoice is validated diff --git a/htdocs/product/card.php b/htdocs/product/card.php index 102b86299eb..239e351cedb 100644 --- a/htdocs/product/card.php +++ b/htdocs/product/card.php @@ -40,6 +40,7 @@ require_once DOL_DOCUMENT_ROOT.'/core/class/extrafields.class.php'; require_once DOL_DOCUMENT_ROOT.'/core/class/genericobject.class.php'; require_once DOL_DOCUMENT_ROOT.'/core/lib/product.lib.php'; require_once DOL_DOCUMENT_ROOT.'/core/lib/company.lib.php'; +require_once DOL_DOCUMENT_ROOT.'/categories/class/categorie.class.php'; if (! empty($conf->propal->enabled)) require_once DOL_DOCUMENT_ROOT.'/comm/propal/class/propal.class.php'; if (! empty($conf->facture->enabled)) require_once DOL_DOCUMENT_ROOT.'/compta/facture/class/facture.class.php'; if (! empty($conf->commande->enabled)) require_once DOL_DOCUMENT_ROOT.'/commande/class/commande.class.php'; @@ -271,6 +272,16 @@ if (empty($reshook)) if ($id > 0) { + // Category association + $categories = GETPOST('categories'); + if(!empty($categories)) { + $cat = new Categorie($db); + foreach($categories as $id_category) { + $cat->fetch($id_category); + $cat->add_type($object, 'product'); + } + } + header("Location: ".$_SERVER['PHP_SELF']."?id=".$id); exit; } @@ -349,6 +360,23 @@ if (empty($reshook)) { if ($object->update($object->id, $user) > 0) { + // Category association + // First we delete all categories association + $sql = "DELETE FROM ".MAIN_DB_PREFIX."categorie_product"; + $sql .= " WHERE fk_product = ".$object->id; + $db->query($sql); + + // Then we add the associated categories + $categories = GETPOST('categories'); + if(!empty($categories)) { + $cat = new Categorie($db); + + foreach($categories as $id_category) { + $cat->fetch($id_category); + $cat->add_type($object, 'product'); + } + } + $action = 'view'; } else @@ -1003,6 +1031,13 @@ else $doleditor->Create(); print ""; + + // Categories + print ''.$langs->trans("Categories").''; + $cate_arbo = $form->select_all_categories(0, '', 'parent', 64, 0, 1); + print $form->multiselectarray('categories', $cate_arbo, $arrayselected, '', 0, '', 0, 250); + print ""; + print ''; print '
'; @@ -1272,6 +1307,18 @@ else $doleditor->Create(); print ""; + + // Categories + print ''.$langs->trans("Categories").''; + $cate_arbo = $form->select_all_categories(0, '', 'parent', 64, 0, 1); + $c = new Categorie($db); + $cats = $c->containing($object->id,0); + foreach($cats as $cat) { + $arrayselected[] = $cat->id; + } + print $form->multiselectarray('categories', $cate_arbo, $arrayselected, '', 0, '', 0, 250); + print ""; + print ''; print '
'; @@ -1561,6 +1608,19 @@ else print ''.$langs->trans("Note").''.(dol_textishtml($object->note)?$object->note:dol_nl2br($object->note,1,true)).''."\n"; print ' '."\n"; + // Categories + print ''.$langs->trans("Categories").''; + $cat = new Categorie($db); + $categories = $cat->containing($object->id,0); + $catarray = $form->select_all_categories(0, '', 'parent', 64, 0, 1); + + $toprint = array(); + foreach($categories as $c) { + $toprint[] = $catarray[$c->id]; + } + print implode('
', $toprint); + print ""; + print "\n"; dol_fiche_end();