27require
'../../../main.inc.php';
28require_once DOL_DOCUMENT_ROOT.
'/core/class/html.formcompany.class.php';
29require_once DOL_DOCUMENT_ROOT.
'/core/class/html.formfile.class.php';
30require_once DOL_DOCUMENT_ROOT.
'/core/class/html.formprojet.class.php';
31require_once DOL_DOCUMENT_ROOT.
'/product/class/product.class.php';
32require_once DOL_DOCUMENT_ROOT.
'/product/stock/class/productlot.class.php';
33require_once DOL_DOCUMENT_ROOT.
'/product/class/html.formproduct.class.php';
34require_once DOL_DOCUMENT_ROOT.
'/product/stock/stocktransfer/class/stocktransfer.class.php';
35require_once DOL_DOCUMENT_ROOT.
'/product/stock/stocktransfer/class/stocktransferline.class.php';
36require_once DOL_DOCUMENT_ROOT.
'/product/stock/stocktransfer/lib/stocktransfer_stocktransfer.lib.php';
37require_once DOL_DOCUMENT_ROOT.
'/core/modules/stocktransfer/modules_stocktransfer.php';
48$langs->loadLangs(array(
"stocks",
"other",
"productbatch",
"companies"));
49if (isModEnabled(
'incoterm')) {
50 $langs->load(
'incoterm');
58$action =
GETPOST(
'action',
'aZ09');
59$confirm =
GETPOST(
'confirm',
'alpha');
60$cancel =
GETPOST(
'cancel',
'aZ09');
61$contextpage =
GETPOST(
'contextpage',
'aZ') ?
GETPOST(
'contextpage',
'aZ') : str_replace(
'_',
'', basename(dirname(__FILE__)).basename(__FILE__,
'.php'));
62$backtopage =
GETPOST(
'backtopage',
'alpha');
63$backtopageforcancel =
GETPOST(
'backtopageforcancel',
'alpha');
66$fk_warehouse_source =
GETPOSTINT(
'fk_warehouse_source');
67$fk_warehouse_destination =
GETPOSTINT(
'fk_warehouse_destination');
69$label =
GETPOST(
'label',
'alpha');
70$batch =
GETPOST(
'batch',
'alpha');
71$code_inv =
GETPOST(
'inventorycode',
'alphanohtml');
72$sortfield =
GETPOST(
'sortfield',
'aZ09comma');
73$sortorder =
GETPOST(
'sortorder',
'aZ09comma');
78$diroutputmassaction =
$conf->stocktransfer->dir_output.
'/temp/massgeneration/'.$user->id;
79$hookmanager->initHooks(array(
$object->element.
'card',
'globalcard'));
82$extrafields->fetch_name_optionals_label(
$object->table_element);
84$search_array_options = $extrafields->getOptionalsFromPost(
$object->table_element,
'',
'search_');
87$search_all = trim(
GETPOST(
"search_all",
'alpha'));
89foreach (
$object->fields as $key => $val) {
90 if (
GETPOST(
'search_'.$key,
'alpha')) {
91 $search[$key] =
GETPOST(
'search_'.$key,
'alpha');
95if (empty($action) && empty($id) && empty($ref)) {
100include DOL_DOCUMENT_ROOT.
'/core/actions_fetchobject.inc.php';
103$permissiontoread = $user->hasRight(
'stocktransfer',
'stocktransfer',
'read');
104$permissiontoadd = $user->hasRight(
'stocktransfer',
'stocktransfer',
'write');
105$permissionnote = $user->hasRight(
'stocktransfer',
'stocktransfer',
'write');
106$permissiontodelete = $user->rights->stocktransfer->stocktransfer->delete || ($permissiontoadd && isset(
$object->status) &&
$object->status < $object::STATUS_TRANSFERED);
107$permissiondellink = $user->hasRight(
'stocktransfer',
'stocktransfer',
'write');
108$upload_dir =
$conf->stocktransfer->multidir_output[isset(
$object->entity) ?
$object->entity : 1];
116if (!$permissiontoread || ($action ===
'create' && !$permissiontoadd)) {
125$parameters = array();
126$reshook = $hookmanager->executeHooks(
'doActions', $parameters, $object, $action);
131if (empty($reshook)) {
134 $backurlforlist =
dol_buildpath(
'/product/stock/stocktransfer/stocktransfer_list.php', 1);
136 if (empty($backtopage) || ($cancel && empty($id))) {
137 if (empty($backtopage) || ($cancel && strpos($backtopage,
'__ID__'))) {
138 if (empty($id) && (($action !=
'add' && $action !=
'create') || $cancel)) {
139 $backtopage = $backurlforlist;
141 $backtopage =
dol_buildpath(
'/product/stock/stocktransfer/stocktransfer_card.php', 1).
'?id='.(
$id > 0 ?
$id :
'__ID__');
146 $triggermodname =
'STOCKTRANSFER_STOCKTRANSFER_MODIFY';
149 include DOL_DOCUMENT_ROOT.
'/core/actions_addupdatedelete.inc.php';
152 $permissiontodelete = $user->rights->stocktransfer->stocktransfer->delete || ($permissiontoadd && isset(
$object->status) &&
$object->status == $object::STATUS_DRAFT);
155 include DOL_DOCUMENT_ROOT.
'/core/actions_dellink.inc.php';
158 include DOL_DOCUMENT_ROOT.
'/core/actions_printing.inc.php';
161 include DOL_DOCUMENT_ROOT.
'/core/actions_lineupdown.inc.php';
164 include DOL_DOCUMENT_ROOT.
'/core/actions_builddoc.inc.php';
166 if ($action ==
'set_thirdparty' && $permissiontoadd) {
167 $object->setValueFrom(
'fk_soc',
GETPOSTINT(
'fk_soc'),
'',
null,
'date',
'', $user, $triggermodname);
169 if ($action ==
'classin' && $permissiontoadd) {
173 if ($action ==
'addline' && $permissiontoadd) {
176 setEventMessages($langs->trans(
"ErrorFieldRequired", $langs->transnoentitiesnoconv(
"Qty")),
null,
'errors');
180 if ($fk_warehouse_source <= 0) {
182 setEventMessages($langs->trans(
"ErrorFieldRequired", $langs->transnoentitiesnoconv(
"WarehouseSource")),
null,
'errors');
186 if ($fk_warehouse_destination <= 0) {
188 setEventMessages($langs->trans(
"ErrorFieldRequired", $langs->transnoentitiesnoconv(
"WarehouseTarget")),
null,
'errors');
193 $prod->fetch($fk_product);
194 if ($prod->hasbatch()) {
197 $langs->load(
"errors");
198 setEventMessages($langs->transnoentities(
"ErrorTryToMakeMoveOnProductRequiringBatchData", $prod->ref),
null,
'errors');
201 if (!empty($batch)) {
203 setEventMessages($langs->transnoentities(
'StockTransferNoBatchForProduct', $prod->getNomUrl()),
null,
'errors');
207 if ($prod->status_batch == 2 && abs($qty) > 1) {
209 setEventMessages($langs->transnoentities(
'TooManyQtyForSerialNumber', $prod->ref),
null,
'errors');
214 $records = $line->fetchAll(
'',
'', 0, 0,
'(fk_stocktransfer:=:'.((
int) $id).
') AND (fk_product:=:'.((
int) $fk_product).
') AND (fk_warehouse_source:=:'.((
int) $fk_warehouse_source).
') AND (fk_warehouse_destination:=:'.((
int) $fk_warehouse_destination).
') AND ('.(empty($batch) ?
"(batch:=:'') OR (batch:IS:NULL)" :
"batch:=:'".$db->escape($batch).
"'").
')');
215 if (!empty($records[key($records)])) {
216 $line = $records[key($records)];
218 $line->fk_stocktransfer =
$id;
220 $line->fk_warehouse_source = $fk_warehouse_source;
221 $line->fk_warehouse_destination = $fk_warehouse_destination;
222 $line->fk_product = $fk_product;
223 $line->batch = $batch;
225 $line->pmp = $prod->pmp;
227 $line->update($user);
229 $line->rang = (is_array(
$object->lines) ||
$object->lines instanceof Countable) ? count(
$object->lines) + 1 : 1;
230 $line->create($user);
234 } elseif ($action ===
'updateline' && $permissiontoadd) {
237 setEventMessages($langs->trans(
"ErrorFieldRequired", $langs->transnoentitiesnoconv(
"Qty")),
null,
'errors');
238 $action =
'editline';
241 if ($fk_warehouse_source <= 0) {
243 setEventMessages($langs->trans(
"ErrorFieldRequired", $langs->transnoentitiesnoconv(
"WarehouseSource")),
null,
'errors');
244 $action =
'editline';
247 if ($fk_warehouse_destination <= 0) {
249 setEventMessages($langs->trans(
"ErrorFieldRequired", $langs->transnoentitiesnoconv(
"WarehouseTarget")),
null,
'errors');
250 $action =
'editline';
254 $prod->fetch($fk_product);
255 if ($prod->hasbatch()) {
258 $langs->load(
"errors");
259 setEventMessages($langs->transnoentities(
"ErrorTryToMakeMoveOnProductRequiringBatchData", $prod->getNomUrl()),
null,
'errors');
260 $action =
'editline';
263 if (!empty($batch)) {
265 setEventMessages($langs->transnoentities(
'StockTransferNoBatchForProduct', $prod->getNomUrl()),
null,
'errors');
266 $action =
'editline';
270 if ($prod->status_batch == 2 && abs($qty) > 1) {
272 setEventMessages($langs->transnoentities(
'TooManyQtyForSerialNumber', $prod->ref),
null,
'errors');
273 $action =
'editline';
278 $line->fetch($lineid);
280 $line->fk_warehouse_source = $fk_warehouse_source;
281 $line->fk_warehouse_destination = $fk_warehouse_destination;
282 $line->fk_product = $fk_product;
283 $line->batch = $batch;
284 $line->pmp = $prod->pmp;
285 $line->update($user);
289 if ($permissiontoadd) {
291 if ($action ==
'confirm_destock' && $confirm ==
'yes' &&
$object->status == $object::STATUS_VALIDATED) {
292 $lines =
$object->getLinesArray();
293 if (!empty($lines)) {
295 foreach ($lines as $line) {
296 $res = $line->doStockMovement($label, $code_inv, $line->fk_warehouse_source);
309 $object->setStatut($object::STATUS_TRANSFERED, $id);
310 $object->status = $object::STATUS_TRANSFERED;
318 if ($action ==
'confirm_destockcancel' && $confirm ==
'yes' &&
$object->status == $object::STATUS_TRANSFERED) {
319 $lines =
$object->getLinesArray();
320 if (!empty($lines)) {
322 foreach ($lines as $line) {
323 $res = $line->doStockMovement($label, $code_inv, $line->fk_warehouse_source, 0);
336 $object->setStatut($object::STATUS_VALIDATED, $id);
337 $object->status = $object::STATUS_VALIDATED;
338 $object->date_reelle_depart =
null;
345 if ($action ==
'confirm_addstock' && $confirm ==
'yes' &&
$object->status == $object::STATUS_TRANSFERED) {
346 $lines =
$object->getLinesArray();
347 if (!empty($lines)) {
349 foreach ($lines as $line) {
350 $res = $line->doStockMovement($label, $code_inv, $line->fk_warehouse_destination, 0);
363 $object->setStatut($object::STATUS_CLOSED, $id);
364 $object->status = $object::STATUS_CLOSED;
372 if ($action ==
'confirm_addstockcancel' && $confirm ==
'yes' &&
$object->status == $object::STATUS_CLOSED) {
373 $lines =
$object->getLinesArray();
374 if (!empty($lines)) {
376 foreach ($lines as $line) {
377 $res = $line->doStockMovement($label, $code_inv, $line->fk_warehouse_destination);
390 $object->setStatut($object::STATUS_TRANSFERED, $id);
391 $object->status = $object::STATUS_TRANSFERED;
392 $object->date_reelle_arrivee =
null;
400 if ($action ==
'set_incoterms' && isModEnabled(
'incoterm') && $permissiontoadd) {
404 $triggersendname =
'STOCKTRANSFER_SENTBYMAIL';
405 $autocopy =
'MAIN_MAIL_AUTOCOPY_STOCKTRANSFER_TO';
406 $trackid =
'stocktransfer'.$object->id;
407 include DOL_DOCUMENT_ROOT.
'/core/actions_sendmails.inc.php';
417$form =
new Form($db);
421$title = $langs->trans(
"StockTransfer");
424llxHeader(
'', $title, $help_url,
'', 0, 0,
'',
'',
'',
'mod-product page-stock-stocktransfer_stocktransfer_card');
429print
'<script type="text/javascript" language="javascript">
430jQuery(document).ready(function() {';
433$date_prevue_depart =
$object->date_prevue_depart;
434$date_prevue_depart_plus_delai = $date_prevue_depart;
435if (
$object->lead_time_for_warning > 0) {
436 $date_prevue_depart_plus_delai = strtotime(date(
'Y-m-d', $date_prevue_depart) .
' + '.
$object->lead_time_for_warning.
' day');
438if (!empty($date_prevue_depart) && $date_prevue_depart_plus_delai < strtotime(date(
'Y-m-d'))) {
439 print
"$('.valuefield.fieldname_date_prevue_depart').append('";
440 print
img_warning($langs->trans(
'Alert').
' - '.$langs->trans(
'Late'));
449if ($action ==
'create') {
450 if (empty($permissiontoadd)) {
456 print
'<form method="POST" action="'.$_SERVER[
"PHP_SELF"].
'">';
457 print
'<input type="hidden" name="token" value="'.newToken().
'">';
458 print
'<input type="hidden" name="action" value="add">';
460 print
'<input type="hidden" name="backtopage" value="'.$backtopage.
'">';
462 if ($backtopageforcancel) {
463 print
'<input type="hidden" name="backtopageforcancel" value="'.$backtopageforcancel.
'">';
469 print
'<table class="border centpercent tableforfieldcreate">'.
"\n";
472 include DOL_DOCUMENT_ROOT.
'/core/tpl/commonfields_add.tpl.php';
474 if (isModEnabled(
'incoterm')) {
480 print
'<td><label for="incoterm_id">'.$form->textwithpicto($langs->trans(
"IncotermLabel"), $soc->label_incoterms, 1).
'</label></td>';
481 print
'<td class="maxwidthonsmartphone">';
482 print $form->select_incoterms((!empty($soc->fk_incoterms) ? $soc->fk_incoterms :
''), (!empty($soc->location_incoterms) ? $soc->location_incoterms :
''),
'',
'fk_incoterms');
486 print
'<tr><td>'.$langs->trans(
'DefaultModel').
'</td>';
488 print
img_picto(
'',
'pdf',
'class="pictofixedwidth"');
489 include_once DOL_DOCUMENT_ROOT.
'/core/modules/commande/modules_commande.php';
492 print $form->selectarray(
'model', $liste, $preselected, 0, 0, 0,
'', 0, 0, 0,
'',
'maxwidth200 widthcentpercentminusx', 1);
496 include DOL_DOCUMENT_ROOT.
'/core/tpl/extrafields_add.tpl.php';
498 print
'</table>'.
"\n";
502 print $form->buttonsSaveCancel(
"Create");
510if (($id || $ref) && $action ==
'edit') {
513 print
'<form method="POST" action="' . $_SERVER[
"PHP_SELF"] .
'">';
514 print
'<input type="hidden" name="token" value="' .
newToken() .
'">';
515 print
'<input type="hidden" name="action" value="update">';
516 print
'<input type="hidden" name="id" value="' .
$object->id .
'">';
518 print
'<input type="hidden" name="backtopage" value="' . $backtopage .
'">';
520 if ($backtopageforcancel) {
521 print
'<input type="hidden" name="backtopageforcancel" value="' . $backtopageforcancel .
'">';
526 print
'<table class="border centpercent tableforfieldedit">' .
"\n";
529 include DOL_DOCUMENT_ROOT .
'/core/tpl/commonfields_edit.tpl.php';
532 include DOL_DOCUMENT_ROOT .
'/core/tpl/extrafields_edit.tpl.php';
538 print $form->buttonsSaveCancel();
544if (
$object->id > 0 && (empty($action) || ($action !=
'edit' && $action !=
'create'))) {
545 $res =
$object->fetch_optionals();
554 if ($action ==
'delete' || (
$conf->use_javascript_ajax && empty(
$conf->dol_use_jmobile))) {
555 $formconfirm = $form->formconfirm($_SERVER[
"PHP_SELF"].
'?id='.
$object->id, $langs->trans(
'DeleteMyObject'), $langs->trans(
'ConfirmDeleteObject'),
'confirm_delete',
'', 0,
'action-delete');
558 if ($action ==
'deleteline') {
559 $formconfirm = $form->formconfirm($_SERVER[
"PHP_SELF"].
'?id='.
$object->id.
'&lineid='.$lineid, $langs->trans(
'DeleteLine'), $langs->trans(
'ConfirmDeleteLine'),
'confirm_deleteline',
'', 0, 1);
561 $formquestion = array();
563 if ($action ==
'clone') {
565 $formconfirm = $form->formconfirm($_SERVER[
"PHP_SELF"].
'?id='.
$object->id, $langs->trans(
'ToClone'), $langs->trans(
'ConfirmCloneAsk',
$object->ref),
'confirm_clone', $formquestion,
'yes', 1);
566 } elseif ($action ==
'destock') {
568 $formquestion = array(
'text' =>
'',
569 0 => array(
'type' =>
'text',
'name' =>
'label',
'label' => $langs->trans(
"Label"),
'value' => $langs->trans(
'ConfirmDestock',
$object->ref),
'size' => 40),
570 1 => array(
'type' =>
'text',
'name' =>
'inventorycode',
'label' => $langs->trans(
"InventoryCode"),
'value' =>
dol_print_date(
dol_now(),
'%y%m%d%H%M%S'),
'size' => 25)
572 $formconfirm = $form->formconfirm($_SERVER[
"PHP_SELF"].
'?id='.
$object->id, $langs->trans(
'DestockAllProduct'),
'',
'confirm_destock', $formquestion,
'yes', 1);
573 } elseif ($action ==
'destockcancel') {
575 $formquestion = array(
'text' =>
'',
576 0 => array(
'type' =>
'text',
'name' =>
'label',
'label' => $langs->trans(
"Label"),
'value' => $langs->trans(
'ConfirmDestockCancel',
$object->ref),
'size' => 40),
577 1 => array(
'type' =>
'text',
'name' =>
'inventorycode',
'label' => $langs->trans(
"InventoryCode"),
'value' =>
dol_print_date(
dol_now(),
'%y%m%d%H%M%S'),
'size' => 25)
579 $formconfirm = $form->formconfirm($_SERVER[
"PHP_SELF"].
'?id='.
$object->id, $langs->trans(
'DestockAllProductCancel'),
'',
'confirm_destockcancel', $formquestion,
'yes', 1);
580 } elseif ($action ==
'addstock') {
582 $formquestion = array(
'text' =>
'',
583 0 => array(
'type' =>
'text',
'name' =>
'label',
'label' => $langs->trans(
"Label").
' :',
'value' => $langs->trans(
'ConfirmAddStock',
$object->ref),
'size' => 40),
584 1 => array(
'type' =>
'text',
'name' =>
'inventorycode',
'label' => $langs->trans(
"InventoryCode"),
'value' =>
dol_print_date(
dol_now(),
'%y%m%d%H%M%S'),
'size' => 25)
586 $formconfirm = $form->formconfirm($_SERVER[
"PHP_SELF"].
'?id='.
$object->id, $langs->trans(
'AddStockAllProduct'),
'',
'confirm_addstock', $formquestion,
'yes', 1);
587 } elseif ($action ==
'addstockcancel') {
589 $formquestion = array(
'text' =>
'',
590 0 => array(
'type' =>
'text',
'name' =>
'label',
'label' => $langs->trans(
"Label").
' :',
'value' => $langs->trans(
'ConfirmAddStockCancel',
$object->ref),
'size' => 40),
591 1 => array(
'type' =>
'text',
'name' =>
'inventorycode',
'label' => $langs->trans(
"InventoryCode"),
'value' =>
dol_print_date(
dol_now(),
'%y%m%d%H%M%S'),
'size' => 25)
593 $formconfirm = $form->formconfirm($_SERVER[
"PHP_SELF"].
'?id='.
$object->id, $langs->trans(
'AddStockAllProductCancel'),
'',
'confirm_addstockcancel', $formquestion,
'yes', 1);
597 if ($action ==
'xxx') {
598 $formquestion = array();
609 $formconfirm = $form->formconfirm($_SERVER[
"PHP_SELF"].
'?id='.
$object->id, $langs->trans(
'XXX'), $text,
'confirm_xxx', $formquestion, 0, 1, 220);
613 if ($action ==
'valid' && $permissiontoadd) {
614 $nextref =
$object->getNextNumRef();
615 $formconfirm = $form->formconfirm($_SERVER[
"PHP_SELF"].
'?id='.
$object->id, $langs->trans(
'Validate'), $langs->transnoentities(
'ConfirmValidateStockTransfer', $nextref),
'confirm_validate', $formquestion, 0, 2);
619 $parameters = array(
'formConfirm' => $formconfirm,
'lineid' => $lineid);
620 $reshook = $hookmanager->executeHooks(
'formConfirm', $parameters, $object, $action);
621 if (empty($reshook)) {
622 $formconfirm .= $hookmanager->resPrint;
623 } elseif ($reshook > 0) {
624 $formconfirm = $hookmanager->resPrint;
633 $linkback =
'<a href="'.dol_buildpath(
'/product/stock/stocktransfer/stocktransfer_list.php', 1).
'?restore_lastsearch_values=1'.(!empty($socid) ?
'&socid='.$socid :
'').
'">'.$langs->trans(
"BackToList").
'</a>';
635 $morehtmlref =
'<div class="refidno">';
637 $morehtmlref .= empty(
$object->thirdparty) ?
'' :
$object->thirdparty->getNomUrl(1,
'customer');
639 $morehtmlref .=
' (<a href="'.DOL_URL_ROOT.
'/commande/list.php?socid='.
$object->thirdparty->id.
'&search_societe='.urlencode(
$object->thirdparty->name).
'">'.$langs->trans(
"OtherOrders").
'</a>)';
642 if (isModEnabled(
'project')) {
643 $langs->load(
"projects");
644 $morehtmlref .= (empty(
$object->thirdparty) ?
'' :
'<br>');
645 if ($permissiontoadd) {
646 $morehtmlref .=
img_picto($langs->trans(
"Project"),
'project',
'class="pictofixedwidth"');
647 if ($action !=
'classify') {
648 $morehtmlref .=
'<a class="editfielda" href="'.$_SERVER[
'PHP_SELF'].
'?action=classify&token='.
newToken().
'&id='.
$object->id.
'">'.
img_edit($langs->transnoentitiesnoconv(
'SetProject')).
'</a> ';
650 $morehtmlref .= $form->form_project($_SERVER[
'PHP_SELF'].
'?id='.
$object->id,
$object->socid,
$object->fk_project, ($action ==
'classify' ?
'projectid' :
'none'), 0, 0, 0, 1,
'',
'maxwidth300');
652 if (!empty(
$object->fk_project)) {
654 $proj->fetch(
$object->fk_project);
655 $morehtmlref .= $proj->getNomUrl(1);
657 $morehtmlref .=
'<span class="opacitymedium"> - '.dol_escape_htmltag($proj->title).
'</span>';
662 $morehtmlref .=
'</div>';
665 dol_banner_tab($object,
'ref', $linkback, 1,
'ref',
'ref', $morehtmlref);
668 print
'<div class="fichecenter">';
669 print
'<div class="fichehalfleft">';
670 print
'<div class="underbanner clearboth"></div>';
671 print
'<table class="border centpercent tableforfield">'.
"\n";
678 $object->fields[
'fk_soc'][
'visible'] = 0;
679 $object->fields[
'fk_project'][
'visible'] = 0;
680 include DOL_DOCUMENT_ROOT.
'/core/tpl/commonfields_view.tpl.php';
683 if (isModEnabled(
'incoterm')) {
685 print
'<table width="100%" class="nobordernopadding"><tr><td>';
686 print $langs->trans(
'IncotermLabel');
687 print
'<td><td class="right">';
688 if ($permissiontoadd && $action !=
'editincoterm') {
689 print
'<a class="editfielda" href="'.$_SERVER[
'PHP_SELF'].
'?id='.
$object->id.
'&action=editincoterm">'.
img_edit().
'</a>';
693 print
'</td></tr></table>';
696 if ($action !=
'editincoterm') {
697 print $form->textwithpicto(
$object->display_incoterms(),
$object->label_incoterms, 1);
699 print $form->select_incoterms((!empty(
$object->fk_incoterms) ?
$object->fk_incoterms :
''), (!empty(
$object->location_incoterms) ?
$object->location_incoterms :
''), $_SERVER[
'PHP_SELF'].
'?id='.
$object->id);
705 echo
'<td>'.$langs->trans(
'EnhancedValue').
' '.strtolower($langs->trans(
'TotalWoman'));
706 echo
'<td>'.price(
$object->getValorisationTotale(), 0,
'', 1, -1, -1,
$conf->currency).
'</td>';
710 include DOL_DOCUMENT_ROOT.
'/core/tpl/extrafields_view.tpl.php';
716 print
'<div class="clearboth"></div>';
725 if (!empty(
$object->table_element_line)) {
739 if (!empty(
$conf->use_javascript_ajax) &&
$object->status == 0) {
741 include DOL_DOCUMENT_ROOT.
'/core/tpl/ajaxrow.tpl.php';
781 print
'<div class="div-table-responsive-no-min">';
782 print
' <form name="addproduct" id="addproduct" action="'.$_SERVER[
"PHP_SELF"].
'?id='.
$object->id.(($action !=
'editline') ?
'#addline' :
'#line_'.
GETPOSTINT(
'lineid')).
'" method="POST">
783 <input type="hidden" name="token" value="' .
newToken().
'">
784 <input type="hidden" name="action" value="' . (($action !=
'editline') ?
'addline' :
'updateline').
'">
785 <input type="hidden" name="mode" value="">
786 <input type="hidden" name="id" value="' .
$object->id.
'">
789 print
'<input type="hidden" name="lineid" value="'.$lineid.
'" />';
791 print
'<table id="tablelines" class="liste centpercent">';
796 print
'<tr class="liste_titre">';
797 print
getTitleFieldOfList($langs->trans(
'ProductRef'), 0, $_SERVER[
"PHP_SELF"],
'', $param,
'',
'', $sortfield, $sortorder,
'tagtd maxwidthonsmartphone ');
798 if (isModEnabled(
'productbatch')) {
799 print
getTitleFieldOfList($langs->trans(
'Batch'), 0, $_SERVER[
"PHP_SELF"],
'', $param,
'',
'', $sortfield, $sortorder,
'tagtd maxwidthonsmartphone ');
801 print
getTitleFieldOfList($langs->trans(
'WarehouseSource'), 0, $_SERVER[
"PHP_SELF"],
'', $param,
'',
'', $sortfield, $sortorder,
'tagtd maxwidthonsmartphone ');
802 print
getTitleFieldOfList($langs->trans(
'WarehouseTarget'), 0, $_SERVER[
"PHP_SELF"],
'', $param,
'',
'', $sortfield, $sortorder,
'tagtd maxwidthonsmartphone ');
803 print
getTitleFieldOfList($langs->trans(
'Qty'), 0, $_SERVER[
"PHP_SELF"],
'', $param,
'',
'', $sortfield, $sortorder,
'center tagtd maxwidthonsmartphone ');
805 print
getTitleFieldOfList($langs->trans(
'Unit'), 0, $_SERVER[
"PHP_SELF"],
'', $param,
'',
'', $sortfield, $sortorder,
'tagtd maxwidthonsmartphone ');
807 print
getTitleFieldOfList($langs->trans(
'AverageUnitPricePMPShort'), 0, $_SERVER[
"PHP_SELF"],
'', $param,
'',
'', $sortfield, $sortorder,
'center tagtd maxwidthonsmartphone ');
808 print
getTitleFieldOfList($langs->trans(
'EstimatedStockValueShort'), 0, $_SERVER[
"PHP_SELF"],
'', $param,
'',
'', $sortfield, $sortorder,
'center tagtd maxwidthonsmartphone ');
809 if (empty(
$object->status) && $permissiontoadd) {
817 $listofdata =
$object->getLinesArray();
818 $productstatic =
new Product($db);
819 $warehousestatics =
new Entrepot($db);
820 $warehousestatict =
new Entrepot($db);
822 foreach ($listofdata as $key => $line) {
823 $productstatic->fetch($line->fk_product);
824 $warehousestatics->fetch($line->fk_warehouse_source);
825 $warehousestatict->fetch($line->fk_warehouse_destination);
828 $domData =
' data-element="'.$line->element.
'"';
829 $domData .=
' data-id="'.$line->id.
'"';
830 $domData .=
' data-qty="'.$line->qty.
'"';
833 print
'<tr id="row-'.$line->id.
'" class="drag drop oddeven" '.$domData.
'>';
834 print
'<td class="titlefield">';
835 if ($action ===
'editline' && $line->id == $lineid) {
836 $form->select_produits($line->fk_product,
'fk_product',
'', 0, 0, -1, 2,
'', 0, array(), 0, 0, 0,
'minwidth200imp maxwidth300', 1);
838 print $productstatic->getNomUrl(1).
' - '.$productstatic->label;
841 if (isModEnabled(
'productbatch')) {
843 if ($action ===
'editline' && $line->id == $lineid) {
844 print
'<input type="text" value="'.$line->batch.
'" name="batch" class="flat maxwidth50"/>';
847 if ($productlot->fetch(0, $line->fk_product, $line->batch) > 0) {
848 print $productlot->getNomUrl(1);
849 } elseif (!empty($line->batch)) {
850 print $line->batch.
' '.
img_warning($langs->trans(
'BatchNotFound'));
857 print
'<td class="tdoverflowmax150">';
858 if ($action ===
'editline' && $line->id == $lineid) {
859 print $formproduct->selectWarehouses($line->fk_warehouse_source,
'fk_warehouse_source',
'warehouseopen,warehouseinternal', 1, 0, 0,
'', 0, 0, array(),
'minwidth200imp maxwidth200');
861 print $warehousestatics->getNomUrl(1);
866 print
'<td class="tdoverflowmax150">';
867 if ($action ===
'editline' && $line->id == $lineid) {
868 print $formproduct->selectWarehouses($line->fk_warehouse_destination,
'fk_warehouse_destination',
'warehouseopen,warehouseinternal', 1, 0, 0,
'', 0, 0, array(),
'minwidth200imp maxwidth200');
870 print $warehousestatict->getNomUrl(1);
874 if ($action ===
'editline' && $line->id == $lineid) {
875 print
'<td class="center"><input type="text" class="flat maxwidth50" name="qty" value="'.$line->qty.
'"></td>';
877 print
'<td class="center">'.$line->qty.
'</td>';
881 print
'<td class="linecoluseunit nowrap left">';
882 $label = $productstatic->getLabelOfUnit(
'short');
884 print $langs->trans($label);
889 print
'<td class="center">';
890 print
price($line->pmp, 0,
'', 1, -1, -1,
$conf->currency);
893 print
'<td class="center">';
894 print
price($line->pmp * $line->qty, 0,
'', 1, -1, -1,
$conf->currency);
897 if (empty(
$object->status) && $permissiontoadd) {
898 if ($action ===
'editline' && $line->id == $lineid) {
900 print
'<td class="center valignmiddle" colspan="2"><input type="submit" class="button buttongen marginbottomonly" id="savelinebutton marginbottomonly" name="save" value="'.$langs->trans(
"Save").
'"><br>';
901 print
'<input type="submit" class="button buttongen marginbottomonly" id="cancellinebutton" name="cancel" value="'.$langs->trans(
"Cancel").
'"></td>';
903 print
'<td class="right">';
904 print
'<a class="editfielda reposition" href="' . $_SERVER[
"PHP_SELF"] .
'?id=' .
$object->id .
'&action=editline&lineid=' . $line->id .
'#line_' . $line->id .
'">';
907 print
'<td class="right">';
908 print
'<a href="' . $_SERVER[
"PHP_SELF"] .
'?id=' .
$id .
'&action=deleteline&lineid=' . $line->id .
'">' .
img_delete($langs->trans(
"Remove")) .
'</a>';
914 if ($num > 1 &&
$conf->browser->layout !=
'phone' && empty($disablemove)) {
915 print
'<td class="linecolmove tdlineupdown center">';
917 <a
class=
"lineupdown" href=
"<?php print $_SERVER["PHP_SELF
"].'?id='.$id.'&action=up&rowid='.$line->id; ?>">
918 <?php print
img_up(
'default', 0,
'imgupforline'); ?>
921 if ($i < $num - 1) { ?>
922 <a
class=
"lineupdown" href=
"<?php print $_SERVER["PHP_SELF
"].'?id='.$id.'&action=down&rowid='.$line->id; ?>">
923 <?php print
img_down(
'default', 0,
'imgdownforline'); ?>
928 print
'<td '.(($conf->browser->layout !=
'phone' && empty($disablemove)) ?
' class="linecolmove tdlineupdown center"' :
' class="linecolmove center"').
'></td>';
935 if (empty(
$object->status) && $action !==
'editline' && $permissiontoadd) {
936 print
'<tr class="oddeven">';
938 print
'<td class="titlefield">';
949 $form->select_produits($fk_product,
'fk_product', $filtertype, $limit, 0, -1, 2,
'', 0, array(), 0, 0, 0,
'minwidth200imp maxwidth300', 1);
952 if (isModEnabled(
'productbatch')) {
954 print
'<input type="text" name="batch" class="flat maxwidth50" '.(!empty($error) ?
'value="'.$batch.
'"' :
'').
'>';
958 $formproduct->loadWarehouses();
961 $TExcludedWarehouseSource = array();
962 if (!empty(
$object->fk_warehouse_source)) {
964 $source_ent->fetch(
$object->fk_warehouse_source);
965 foreach ($formproduct->cache_warehouses as $TDataCacheWarehouse) {
966 if (strpos($TDataCacheWarehouse[
'full_label'], $source_ent->label) ===
false) {
967 $TExcludedWarehouseSource[] = $TDataCacheWarehouse[
'id'];
973 $TExcludedWarehouseDestination = array();
974 if (!empty(
$object->fk_warehouse_destination)) {
976 $dest_ent->fetch(
$object->fk_warehouse_destination);
977 foreach ($formproduct->cache_warehouses as $TDataCacheWarehouse) {
978 if (strpos($TDataCacheWarehouse[
'full_label'], $dest_ent->label) ===
false) {
979 $TExcludedWarehouseDestination[] = $TDataCacheWarehouse[
'id'];
985 $formproduct->cache_warehouses = array();
988 print $formproduct->selectWarehouses(empty($fk_warehouse_source) ?
$object->fk_warehouse_source : $fk_warehouse_source,
'fk_warehouse_source',
'warehouseopen,warehouseinternal', 1, 0, 0,
'', 0, 0, array(),
'minwidth200imp maxwidth200', $TExcludedWarehouseSource);
992 $formproduct->cache_warehouses = array();
995 print $formproduct->selectWarehouses(empty($fk_warehouse_destination) ?
$object->fk_warehouse_destination : $fk_warehouse_destination,
'fk_warehouse_destination',
'warehouseopen,warehouseinternal', 1, 0, 0,
'', 0, 0, array(),
'minwidth200imp maxwidth200', $TExcludedWarehouseDestination);
999 print
'<td class="center"><input type="text" class="flat maxwidth50" name="qty" '.(!empty($error) ?
'value="'.$qty.
'"' :
'').
'></td>';
1012 print
'<td class="right" colspan="2"><input type="submit" class="button" name="addline" value="' .
dol_escape_htmltag($langs->trans(
'Add')) .
'"></td>';
1026 if ($action !=
'presend' && $action !=
'editline') {
1027 print
'<div class="tabsAction">'.
"\n";
1028 $parameters = array();
1029 $reshook = $hookmanager->executeHooks(
'addMoreActionsButtons', $parameters, $object, $action);
1034 if (empty($reshook)) {
1036 if (empty($user->socid)) {
1037 print
dolGetButtonAction(
'', $langs->trans(
'SendMail'),
'default', $_SERVER[
"PHP_SELF"].
'?id='.
$object->id.
'&action=presend&token='.
newToken().
'&mode=init#formmailbeforetitle');
1041 if (
$object->status == $object::STATUS_VALIDATED) {
1042 print
dolGetButtonAction(
'', $langs->trans(
'SetToDraft'),
'default', $_SERVER[
"PHP_SELF"].
'?id='.
$object->id.
'&action=confirm_setdraft&confirm=yes&token='.
newToken(),
'', $permissiontoadd);
1046 print
dolGetButtonAction(
'', $langs->trans(
'Modify'),
'default', $_SERVER[
"PHP_SELF"].
'?id='.
$object->id.
'&action=edit&token='.
newToken(),
'', $permissiontoadd);
1049 if (
$object->status == $object::STATUS_DRAFT) {
1050 if (empty(
$object->table_element_line) || (is_array(
$object->lines) && count(
$object->lines) > 0)) {
1051 print
dolGetButtonAction(
'', $langs->trans(
'Validate'),
'default', $_SERVER[
'PHP_SELF'].
'?id='.
$object->id.
'&action=confirm_validate&confirm=yes&token='.
newToken(),
'', $permissiontoadd);
1053 $langs->load(
"errors");
1054 print
dolGetButtonAction($langs->trans(
"ErrorAddAtLeastOneLineFirst"), $langs->trans(
"Validate"),
'default',
'#',
'', 0);
1056 } elseif (
$object->status == $object::STATUS_VALIDATED && $permissiontoadd) {
1057 print
'<a class="butAction" href="'.$_SERVER[
'PHP_SELF'].
'?id='.
$object->id.
'&action=destock&token='.
newToken().
'">'.$langs->trans(
"StockTransferDecrementation").
'</a>';
1058 } elseif (
$object->status == $object::STATUS_TRANSFERED && $permissiontoadd) {
1059 print
'<a class="butActionDelete" href="'.$_SERVER[
'PHP_SELF'].
'?id='.
$object->id.
'&action=destockcancel&token='.
newToken().
'">'.$langs->trans(
"StockTransferDecrementationCancel").
'</a>';
1060 print
'<a class="butAction" href="'.$_SERVER[
'PHP_SELF'].
'?id='.
$object->id.
'&action=addstock&token='.
newToken().
'">'.$langs->trans(
"StockTransferIncrementation").
'</a>';
1061 } elseif (
$object->status == $object::STATUS_CLOSED && $permissiontoadd) {
1062 print
'<a class="butActionDelete" href="'.$_SERVER[
'PHP_SELF'].
'?id='.
$object->id.
'&action=addstockcancel&token='.
newToken().
'">'.$langs->trans(
"StockTransferIncrementationCancel").
'</a>';
1066 if ($permissiontoadd) {
1067 print
dolGetButtonAction(
'', $langs->trans(
'ToClone'),
'default', $_SERVER[
'PHP_SELF'].
'?id='.
$object->id.(!empty(
$object->socid) ?
'&socid='.$object->socid :
'').
'&action=clone&token='.
newToken(),
'', $permissiontoadd);
1089 $deleteUrl = $_SERVER[
"PHP_SELF"].
'?id='.
$object->id.
'&action=delete&token='.
newToken();
1090 $buttonId =
'action-delete-no-ajax';
1091 if (
$conf->use_javascript_ajax && empty(
$conf->dol_use_jmobile)) {
1093 $buttonId =
'action-delete';
1096 print
dolGetButtonAction(
'', $langs->trans(
"Delete"),
'delete', $deleteUrl, $buttonId, $permissiontodelete, $params);
1098 print
'</div>'.
"\n";
1103 if (
GETPOST(
'modelselected')) {
1104 $action =
'presend';
1107 if ($action !=
'presend') {
1108 print
'<div class="fichecenter"><div class="fichehalfleft">';
1109 print
'<a name="builddoc"></a>';
1111 $includedocgeneration = 1;
1114 if ($includedocgeneration) {
1116 $relativepath = $objref .
'/' . $objref .
'.pdf';
1117 $filedir =
$conf->stocktransfer->dir_output.
'/'.
$object->element.
'/'.$objref;
1118 $urlsource = $_SERVER[
"PHP_SELF"] .
"?id=" .
$object->id;
1119 $genallowed = $permissiontoread;
1120 $delallowed = $permissiontoadd;
1121 print $formfile->showdocuments(
'stocktransfer:StockTransfer',
$object->element.
'/'.$objref, $filedir, $urlsource, $genallowed, $delallowed,
$object->model_pdf, 1, 0, 0, 28, 0,
'',
'',
'', $langs->defaultlang);
1125 $tmparray = $form->showLinkToObjectBlock($object, array(), array(
'stocktransfer'), 1);
1126 $linktoelem = $tmparray[
'linktoelem'];
1127 $htmltoenteralink = $tmparray[
'htmltoenteralink'];
1128 print $htmltoenteralink;
1130 $somethingshown = $form->showLinkedObjectBlock($object, $linktoelem);
1133 print
'</div><div class="fichehalfright">';
1140 include_once DOL_DOCUMENT_ROOT.
'/core/class/html.formactions.class.php';
1142 $somethingshown = $formactions->showactions($object,
'stocktransfer', 0, 1,
'', $MAXEVENT,
'');
1144 print
'</div></div>';
1148 if (
GETPOST(
'modelselected')) {
1149 $action =
'presend';
1153 $modelmail =
'stocktransfer';
1154 $defaulttopic =
'InformationMessage';
1155 $diroutput =
$conf->stocktransfer->dir_output;
1156 $trackid =
'stocktransfer'.$object->id;
1158 include DOL_DOCUMENT_ROOT.
'/core/tpl/card_presend.tpl.php';
if( $user->socid > 0) if(! $user->hasRight('accounting', 'chartofaccount')) $object
if(!defined('NOREQUIRESOC')) if(!defined( 'NOREQUIRETRAN')) if(!defined('NOTOKENRENEWAL')) if(!defined( 'NOREQUIREMENU')) if(!defined('NOREQUIREHTML')) if(!defined( 'NOREQUIREAJAX')) llxHeader($head='', $title='', $help_url='', $target='', $disablejs=0, $disablehead=0, $arrayofjs='', $arrayofcss='', $morequerystring='', $morecssonbody='', $replacemainareaby='', $disablenofollow=0, $disablenoindex=0)
Empty header.
Class to manage warehouses.
static liste_modeles($db, $maxfilenamelength=0)
Return list of active generation modules.
Class to manage products or services.
Class with list of lots and properties.
Class to manage projects.
Class to manage third parties objects (customers, suppliers, prospects...)
Class for StockTransferLine.
load_fiche_titre($title, $morehtmlright='', $picto='generic', $pictoisfullpath=0, $id='', $morecssontable='', $morehtmlcenter='')
Load a title with picto.
setEventMessages($mesg, $mesgs, $style='mesgs', $messagekey='', $noduplicate=0, $attop=0)
Set event messages in dol_events session object.
img_warning($titlealt='default', $moreatt='', $morecss='pictowarning')
Show warning logo.
img_delete($titlealt='default', $other='class="pictodelete"', $morecss='')
Show delete logo.
img_picto($titlealt, $picto, $moreatt='', $pictoisfullpath=0, $srconly=0, $notitle=0, $alt='', $morecss='', $marginleftonlyshort=2)
Show picto whatever it's its name (generic function)
GETPOSTINT($paramname, $method=0)
Return the value of a $_GET or $_POST supervariable, converted into integer.
dol_get_fiche_head($links=array(), $active='', $title='', $notab=0, $picto='', $pictoisfullpath=0, $morehtmlright='', $morecss='', $limittoshow=0, $moretabssuffix='', $dragdropfile=0)
Show tabs of a record.
dolGetButtonTitle($label, $helpText='', $iconClass='fa fa-file', $url='', $id='', $status=1, $params=array())
Function dolGetButtonTitle : this kind of buttons are used in title in list.
dol_get_fiche_end($notab=0)
Return tab footer of a card.
setEventMessage($mesgs, $style='mesgs', $noduplicate=0, $attop=0)
Set event message in dol_events session object.
img_down($titlealt='default', $selected=0, $moreclass='')
Show down arrow logo.
price($amount, $form=0, $outlangs='', $trunc=1, $rounding=-1, $forcerounding=-1, $currency_code='')
Function to format a value into an amount for visual output Function used into PDF and HTML pages.
dol_now($mode='auto')
Return date for now.
getDolGlobalInt($key, $default=0)
Return a Dolibarr global constant int value.
dol_print_date($time, $format='', $tzoutput='auto', $outputlangs=null, $encodetooutput=false)
Output date in a string format according to outputlangs (or langs if not defined).
newToken()
Return the value of token currently saved into session with name 'newtoken'.
dolGetButtonAction($label, $text='', $actionType='default', $url='', $id='', $userRight=1, $params=array())
Function dolGetButtonAction.
getTitleFieldOfList($name, $thead=0, $file="", $field="", $begin="", $moreparam="", $moreattrib="", $sortfield="", $sortorder="", $prefix="", $disablesortlink=0, $tooltip='', $forcenowrapcolumntitle=0)
Get title line of an array.
GETPOST($paramname, $check='alphanohtml', $method=0, $filter=null, $options=null, $noreplace=0)
Return value of a param into GET or POST supervariable.
dol_buildpath($path, $type=0, $returnemptyifnotfound=0)
Return path of url or filesystem.
dol_sanitizeFileName($str, $newstr='_', $unaccent=1)
Clean a string to use it as a file name.
getDolGlobalString($key, $default='')
Return a Dolibarr global constant string value.
img_edit($titlealt='default', $float=0, $other='')
Show logo edit/modify fiche.
img_up($titlealt='default', $selected=0, $moreclass='')
Show top arrow logo.
dol_escape_htmltag($stringtoescape, $keepb=0, $keepn=0, $noescapetags='', $escapeonlyhtmltags=0, $cleanalsojavascript=0)
Returns text escaped for inclusion in HTML alt or title or value tags, or into values of HTML input f...
global $conf
The following vars must be defined: $type2label $form $conf, $lang, The following vars may also be de...
accessforbidden($message='', $printheader=1, $printfooter=1, $showonlymessage=0, $params=null)
Show a message to say access is forbidden and stop program.
stocktransferPrepareHead($object)
Prepare array of tabs for StockTransfer.