From 3e4cd251eabf9f7559c8f8dd933474b611685f6f Mon Sep 17 00:00:00 2001 From: GregM Date: Fri, 29 Apr 2022 11:45:50 +0200 Subject: [PATCH 1/8] add edit extrafields Massaction products --- htdocs/core/actions_massactions.inc.php | 70 +++++++++++++++++++++++++ htdocs/core/tpl/massactions_pre.tpl.php | 25 +++++++++ htdocs/langs/en_US/main.lang | 4 ++ htdocs/product/list.php | 1 + 4 files changed, 100 insertions(+) diff --git a/htdocs/core/actions_massactions.inc.php b/htdocs/core/actions_massactions.inc.php index c5ff1d8f82a..5f5703fc872 100644 --- a/htdocs/core/actions_massactions.inc.php +++ b/htdocs/core/actions_massactions.inc.php @@ -1602,6 +1602,76 @@ if (!$error && ($massaction == 'disable' || ($action == 'disable' && $confirm == } } +if (!$error && $action == 'confirm_edit_value_extrafields' && $confirm == 'yes' && $permissiontoadd){ + $db->begin(); + + /** @var CommonObject $objecttmp */ + $objecttmp = new $objectclass($db); + + $nbok = 0; + $e = new ExtraFields($db); + $e->fetch_name_optionals_label($objecttmp->table_element); + + foreach ($toselect as $toselectid) { + $result = $objecttmp->fetch($toselectid); + + if ($result>0) { + + if (isset($e->attributes[$objecttmp->table_element]['type']) && is_array($e->attributes[$objecttmp->table_element]['type'])) { + foreach ($e->attributes[$objecttmp->table_element]['type'] as $key => $type){ + + //Permet de gérer les types d'extrafields + if (in_array($type, array('price', 'double'))) { + $value_arr = GETPOST("options_".$key, 'alpha'); + if(empty($value_arr)){ + continue; + } + $value_key = price2num($value_arr); + //var_dump($value_key);exit; + }else if (in_array($type, array('date'))) { + // Clean parameters + $value_key = dol_mktime(12, 0, 0, GETPOST("options_" . $key . "month", 'int'), GETPOST("options_" . $key . "day", 'int'), GETPOST("options_" . $key . "year", 'int')); + //var_dump($value_key);exit; + if(empty($value_key)){ + continue; + } + }else if (in_array($type, array('datetime'))) { + // Clean parameters + $value_key = dol_mktime(GETPOST("options_".$key."hour", 'int'), GETPOST("options_".$key."min", 'int'), GETPOST("options_".$key."sec", 'int'), GETPOST("options_".$key."month", 'int'), GETPOST("options_".$key."day", 'int'), GETPOST("options_".$key."year", 'int'), 'tzuserrel'); + if(empty($value_key)){ + continue; + } + } else { + $value_key = GETPOST("options_".$key); + if ((in_array($type, array('link')) && $key == '-1') || empty($value_key)) { + continue; + } + } + $objecttmp->array_options["options_".$key] = $value_key; + } + } + $objecttmp->insertExtraFields(); + + } else { + setEventMessages($objecttmp->error, $objecttmp->errors, 'errors'); + $error++; + break; + } + } + + if (!$error) { + if ($nbok > 1) { + setEventMessages($langs->trans("RecordsDisabled", $nbok), null, 'mesgs'); + } else { + setEventMessages($langs->trans("save"), null, 'mesgs'); + } + $db->commit(); + } else { + $db->rollback(); + } + +} + // Approve for leave only if (!$error && ($massaction == 'approveleave' || ($action == 'approveleave' && $confirm == 'yes')) && $permissiontoapprove) { $db->begin(); diff --git a/htdocs/core/tpl/massactions_pre.tpl.php b/htdocs/core/tpl/massactions_pre.tpl.php index de034f652d3..40394cb99ff 100644 --- a/htdocs/core/tpl/massactions_pre.tpl.php +++ b/htdocs/core/tpl/massactions_pre.tpl.php @@ -211,6 +211,31 @@ if ($massaction == 'presend') { print dol_get_fiche_end(); } +if ($massaction == 'edit_extrafields') { + + require_once DOL_DOCUMENT_ROOT.'/core/class/extrafields.class.php'; + $elementtype = 'product'; + /** @var CommonObject $objecttmp */ + $extrafields = new ExtraFields($db); + + $extrafields->fetch_name_optionals_label($elementtype); + $extrafields_list = $extrafields->attributes[$elementtype]['label']; + + $formquestion = array(); + if (!empty($extrafields_list)) { + $myParamExtra = $object->showOptionals($extrafields, 'create'); + + $formquestion[] = array( + 'type' => 'other', + 'value' => $object->showOptionals($extrafields, 'create') + ); + + print $form->formconfirm($_SERVER["PHP_SELF"], $langs->trans("ConfirmEditExtrafield"), $langs->trans("ConfirmEditExtrafieldQuestion", count($toselect)), "confirm_edit_value_extrafields", $formquestion, 1, 0, 200, 500, 1); + } else { + setEventMessage($langs->trans("noExtrafields")); + } +} + if ($massaction == 'preenable') { print $form->formconfirm($_SERVER["PHP_SELF"], $langs->trans("ConfirmMassEnabling"), $langs->trans("ConfirmMassEnablingQuestion", count($toselect)), "enable", null, 'yes', 0, 200, 500, 1); } diff --git a/htdocs/langs/en_US/main.lang b/htdocs/langs/en_US/main.lang index c66895e58a4..c543fcf31e0 100644 --- a/htdocs/langs/en_US/main.lang +++ b/htdocs/langs/en_US/main.lang @@ -1169,3 +1169,7 @@ CanceledShown=Canceled shown Terminate=Terminate Terminated=Terminated AddLineOnPosition=Add line on position (at the end if empty) +ConfirmEditExtrafield = Modifier les champs supplémentaires en masse +ChangeValueExtrafield = Modifier la valeur du champ supplémentaire +ConfirmEditExtrafieldQuestion = Etes vous sur de modifier cet extrafield ? +ConfirmEditValueExtrafieldQuestion = Etes vous sur de modifier la valeur de cet extrafield ? diff --git a/htdocs/product/list.php b/htdocs/product/list.php index de5e4f278b7..7cd0a91c923 100644 --- a/htdocs/product/list.php +++ b/htdocs/product/list.php @@ -727,6 +727,7 @@ if ($resql) { // List of mass actions available $arrayofmassactions = array( 'generate_doc'=>img_picto('', 'pdf', 'class="pictofixedwidth"').$langs->trans("ReGeneratePDF"), + 'edit_extrafields'=>img_picto('', 'edit', 'class="pictofixedwidth"').$langs->trans("Extrafields"), //'builddoc'=>img_picto('', 'pdf', 'class="pictofixedwidth"').$langs->trans("PDFMerge"), //'presend'=>img_picto('', 'email', 'class="pictofixedwidth"').$langs->trans("SendByMail"), ); From 8b248c75f29eff7a9ab61846bdc7f23ee5bf8c05 Mon Sep 17 00:00:00 2001 From: John BOTELLA Date: Fri, 29 Apr 2022 15:10:15 +0200 Subject: [PATCH 2/8] Factor save --- htdocs/core/actions_massactions.inc.php | 58 +++++++------------------ 1 file changed, 15 insertions(+), 43 deletions(-) diff --git a/htdocs/core/actions_massactions.inc.php b/htdocs/core/actions_massactions.inc.php index 5f5703fc872..ccf2fbec73e 100644 --- a/htdocs/core/actions_massactions.inc.php +++ b/htdocs/core/actions_massactions.inc.php @@ -1602,56 +1602,29 @@ if (!$error && ($massaction == 'disable' || ($action == 'disable' && $confirm == } } -if (!$error && $action == 'confirm_edit_value_extrafields' && $confirm == 'yes' && $permissiontoadd){ +if (!$error && $action == 'confirm_edit_value_extrafields' && $confirm == 'yes' && $permissiontoadd) { $db->begin(); - /** @var CommonObject $objecttmp */ - $objecttmp = new $objectclass($db); - $nbok = 0; - $e = new ExtraFields($db); - $e->fetch_name_optionals_label($objecttmp->table_element); + $extrafieldKeyToUpdate = GETPOST('extrafield-key-yo-update'); // TODO A FAIRE coté formulaire : ajouter le select de l'extrafield a utiliser + $extrafieldKeyToUpdate = 'code_tva_achat'; // TODO A FAIRE coté formulaire : ajouter le select de l'extrafield a utiliser + + // TODO vérifier que $extrafieldKeyToUpdate correspond bien a un extrafield foreach ($toselect as $toselectid) { + /** @var CommonObject $objecttmp */ + $objecttmp = new $objectclass($db); $result = $objecttmp->fetch($toselectid); - if ($result>0) { - - if (isset($e->attributes[$objecttmp->table_element]['type']) && is_array($e->attributes[$objecttmp->table_element]['type'])) { - foreach ($e->attributes[$objecttmp->table_element]['type'] as $key => $type){ - - //Permet de gérer les types d'extrafields - if (in_array($type, array('price', 'double'))) { - $value_arr = GETPOST("options_".$key, 'alpha'); - if(empty($value_arr)){ - continue; - } - $value_key = price2num($value_arr); - //var_dump($value_key);exit; - }else if (in_array($type, array('date'))) { - // Clean parameters - $value_key = dol_mktime(12, 0, 0, GETPOST("options_" . $key . "month", 'int'), GETPOST("options_" . $key . "day", 'int'), GETPOST("options_" . $key . "year", 'int')); - //var_dump($value_key);exit; - if(empty($value_key)){ - continue; - } - }else if (in_array($type, array('datetime'))) { - // Clean parameters - $value_key = dol_mktime(GETPOST("options_".$key."hour", 'int'), GETPOST("options_".$key."min", 'int'), GETPOST("options_".$key."sec", 'int'), GETPOST("options_".$key."month", 'int'), GETPOST("options_".$key."day", 'int'), GETPOST("options_".$key."year", 'int'), 'tzuserrel'); - if(empty($value_key)){ - continue; - } - } else { - $value_key = GETPOST("options_".$key); - if ((in_array($type, array('link')) && $key == '-1') || empty($value_key)) { - continue; - } - } - $objecttmp->array_options["options_".$key] = $value_key; - } + // Fill array 'array_options' with data from add form + $e = new ExtraFields($db); + $ret = $e->setOptionalsFromPost(null, $objecttmp, $extrafieldKeyToUpdate); + if ($ret > 0) { + $objecttmp->insertExtraFields(); // TODO gérer l'erreur + } else { + $error++; + setEventMessages($objecttmp->error, $objecttmp->errors, 'errors'); } - $objecttmp->insertExtraFields(); - } else { setEventMessages($objecttmp->error, $objecttmp->errors, 'errors'); $error++; @@ -1669,7 +1642,6 @@ if (!$error && $action == 'confirm_edit_value_extrafields' && $confirm == 'yes' } else { $db->rollback(); } - } // Approve for leave only From 02cf3fa36102ecebd890d5d9d12652d01d1aad0d Mon Sep 17 00:00:00 2001 From: John BOTELLA Date: Fri, 29 Apr 2022 15:38:12 +0200 Subject: [PATCH 3/8] end factoring --- htdocs/core/actions_massactions.inc.php | 12 +++++++----- htdocs/core/tpl/massactions_pre.tpl.php | 6 +++++- htdocs/product/list.php | 2 +- 3 files changed, 13 insertions(+), 7 deletions(-) diff --git a/htdocs/core/actions_massactions.inc.php b/htdocs/core/actions_massactions.inc.php index ccf2fbec73e..6308c33d268 100644 --- a/htdocs/core/actions_massactions.inc.php +++ b/htdocs/core/actions_massactions.inc.php @@ -1605,20 +1605,22 @@ if (!$error && ($massaction == 'disable' || ($action == 'disable' && $confirm == if (!$error && $action == 'confirm_edit_value_extrafields' && $confirm == 'yes' && $permissiontoadd) { $db->begin(); - $nbok = 0; + $objecttmp = new $objectclass($db); + $e = new ExtraFields($db);// fetch optionals attributes and labels + $e->fetch_name_optionals_label($objecttmp->table_element); - $extrafieldKeyToUpdate = GETPOST('extrafield-key-yo-update'); // TODO A FAIRE coté formulaire : ajouter le select de l'extrafield a utiliser - $extrafieldKeyToUpdate = 'code_tva_achat'; // TODO A FAIRE coté formulaire : ajouter le select de l'extrafield a utiliser + $nbok = 0; + $extrafieldKeyToUpdate = GETPOST('extrafield-key-to-update'); // TODO A FAIRE coté formulaire : ajouter le select de l'extrafield a utiliser // TODO vérifier que $extrafieldKeyToUpdate correspond bien a un extrafield foreach ($toselect as $toselectid) { /** @var CommonObject $objecttmp */ - $objecttmp = new $objectclass($db); + $objecttmp = new $objectclass($db); // to avoid ghost data $result = $objecttmp->fetch($toselectid); if ($result>0) { // Fill array 'array_options' with data from add form - $e = new ExtraFields($db); $ret = $e->setOptionalsFromPost(null, $objecttmp, $extrafieldKeyToUpdate); + if ($ret > 0) { $objecttmp->insertExtraFields(); // TODO gérer l'erreur } else { diff --git a/htdocs/core/tpl/massactions_pre.tpl.php b/htdocs/core/tpl/massactions_pre.tpl.php index 40394cb99ff..8e364cd24e1 100644 --- a/htdocs/core/tpl/massactions_pre.tpl.php +++ b/htdocs/core/tpl/massactions_pre.tpl.php @@ -212,7 +212,6 @@ if ($massaction == 'presend') { } if ($massaction == 'edit_extrafields') { - require_once DOL_DOCUMENT_ROOT.'/core/class/extrafields.class.php'; $elementtype = 'product'; /** @var CommonObject $objecttmp */ @@ -225,6 +224,11 @@ if ($massaction == 'edit_extrafields') { if (!empty($extrafields_list)) { $myParamExtra = $object->showOptionals($extrafields, 'create'); + $formquestion[] = array( + 'type' => 'other', + 'value' => $form->selectarray('extrafield-key-to-update', $extrafields_list, GETPOST('extrafield-key-to-update')) + ); + $formquestion[] = array( 'type' => 'other', 'value' => $object->showOptionals($extrafields, 'create') diff --git a/htdocs/product/list.php b/htdocs/product/list.php index 7cd0a91c923..4824015c299 100644 --- a/htdocs/product/list.php +++ b/htdocs/product/list.php @@ -740,7 +740,7 @@ if ($resql) { $arrayofmassactions['switchonpurchasestatus'] = img_picto('', 'stop-circle', 'class="pictofixedwidth"').$langs->trans("SwitchOnPurchaseStatus"); $arrayofmassactions['preaffecttag'] = img_picto('', 'category', 'class="pictofixedwidth"').$langs->trans("AffectTag"); } - if (in_array($massaction, array('presend', 'predelete','preaffecttag'))) { + if (in_array($massaction, array('presend', 'predelete','preaffecttag', 'edit_extrafields'))) { $arrayofmassactions = array(); } $massactionbutton = $form->selectMassAction('', $arrayofmassactions); From 56bab8221914c6fbb2d9834742dd05cf6d38b21a Mon Sep 17 00:00:00 2001 From: John BOTELLA Date: Fri, 29 Apr 2022 16:43:40 +0200 Subject: [PATCH 4/8] add js on change action --- htdocs/core/actions_massactions.inc.php | 1 - htdocs/core/tpl/massactions_pre.tpl.php | 36 ++++++++++++++++++++++--- 2 files changed, 32 insertions(+), 5 deletions(-) diff --git a/htdocs/core/actions_massactions.inc.php b/htdocs/core/actions_massactions.inc.php index 6308c33d268..983a44f4685 100644 --- a/htdocs/core/actions_massactions.inc.php +++ b/htdocs/core/actions_massactions.inc.php @@ -1620,7 +1620,6 @@ if (!$error && $action == 'confirm_edit_value_extrafields' && $confirm == 'yes' if ($result>0) { // Fill array 'array_options' with data from add form $ret = $e->setOptionalsFromPost(null, $objecttmp, $extrafieldKeyToUpdate); - if ($ret > 0) { $objecttmp->insertExtraFields(); // TODO gérer l'erreur } else { diff --git a/htdocs/core/tpl/massactions_pre.tpl.php b/htdocs/core/tpl/massactions_pre.tpl.php index 8e364cd24e1..3e7631d76bf 100644 --- a/htdocs/core/tpl/massactions_pre.tpl.php +++ b/htdocs/core/tpl/massactions_pre.tpl.php @@ -213,10 +213,10 @@ if ($massaction == 'presend') { if ($massaction == 'edit_extrafields') { require_once DOL_DOCUMENT_ROOT.'/core/class/extrafields.class.php'; - $elementtype = 'product'; + $elementtype = $objecttmp->element; /** @var CommonObject $objecttmp */ $extrafields = new ExtraFields($db); - + $keysuffix = ''; $extrafields->fetch_name_optionals_label($elementtype); $extrafields_list = $extrafields->attributes[$elementtype]['label']; @@ -226,12 +226,40 @@ if ($massaction == 'edit_extrafields') { $formquestion[] = array( 'type' => 'other', - 'value' => $form->selectarray('extrafield-key-to-update', $extrafields_list, GETPOST('extrafield-key-to-update')) + 'value' => $form->selectarray('extrafield-key-to-update', $extrafields_list, GETPOST('extrafield-key-to-update'), 1) ); + + $outputShowOutputFields = '
'; + // + // foreach ($extrafields_list as $extraKey => $extraLabel){ + // $outputShowOutputFields.= '
'; + // + // $outputShowOutputFields.= 'rrrrrrrr'.$extrafields->showInputField($key, '', '', $keysuffix, '', 0, $objecttmp->id, $objecttmp->table_element).'dddddddddd'; + // $outputShowOutputFields.= 'rrrrrrrr'.$extrafields->showInputField($key, '', '', $keysuffix, '', '', $objecttmp->id, $objecttmp->table_element).'dddddddddd'; + // + // $outputShowOutputFields.= '
'; + // } + $outputShowOutputFields.= ''.$object->showOptionals($extrafields, 'create').'
'; + $outputShowOutputFields.= ''; + $outputShowOutputFields.= '
'; + + + $formquestion[] = array( 'type' => 'other', - 'value' => $object->showOptionals($extrafields, 'create') + 'value' => $outputShowOutputFields ); print $form->formconfirm($_SERVER["PHP_SELF"], $langs->trans("ConfirmEditExtrafield"), $langs->trans("ConfirmEditExtrafieldQuestion", count($toselect)), "confirm_edit_value_extrafields", $formquestion, 1, 0, 200, 500, 1); From fb35e710b3053afcb310b444162c98a55f95ff3d Mon Sep 17 00:00:00 2001 From: John BOTELLA Date: Fri, 29 Apr 2022 17:04:43 +0200 Subject: [PATCH 5/8] add js on change action --- htdocs/core/tpl/massactions_pre.tpl.php | 21 ++++++++------------- 1 file changed, 8 insertions(+), 13 deletions(-) diff --git a/htdocs/core/tpl/massactions_pre.tpl.php b/htdocs/core/tpl/massactions_pre.tpl.php index 3e7631d76bf..c7149cc3985 100644 --- a/htdocs/core/tpl/massactions_pre.tpl.php +++ b/htdocs/core/tpl/massactions_pre.tpl.php @@ -231,24 +231,19 @@ if ($massaction == 'edit_extrafields') { $outputShowOutputFields = '
'; - // - // foreach ($extrafields_list as $extraKey => $extraLabel){ - // $outputShowOutputFields.= '
'; - // - // $outputShowOutputFields.= 'rrrrrrrr'.$extrafields->showInputField($key, '', '', $keysuffix, '', 0, $objecttmp->id, $objecttmp->table_element).'dddddddddd'; - // $outputShowOutputFields.= 'rrrrrrrr'.$extrafields->showInputField($key, '', '', $keysuffix, '', '', $objecttmp->id, $objecttmp->table_element).'dddddddddd'; - // - // $outputShowOutputFields.= '
'; - // } - $outputShowOutputFields.= ''.$object->showOptionals($extrafields, 'create').'
'; + + foreach ($extrafields_list as $extraKey => $extraLabel) { + $outputShowOutputFields.= ''; + } $outputShowOutputFields.= '