<?php
/* Copyright (C) 2007-2017 Laurent Destailleur  <eldy@users.sourceforge.net>
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation; either version 3 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program. If not, see <https://www.gnu.org/licenses/>.
 */

/**
 *   	\file       htdocs/product/inventory/card.php
 *		\ingroup    inventory
 *		\brief      Inventory card
 */
// Load Dolibarr environment
require '../../main.inc.php';
require_once DOL_DOCUMENT_ROOT . '/core/class/html.formcompany.class.php';
require_once DOL_DOCUMENT_ROOT . '/core/class/html.formfile.class.php';
require_once DOL_DOCUMENT_ROOT . '/core/class/html.formprojet.class.php';
require_once DOL_DOCUMENT_ROOT . '/product/inventory/class/inventory.class.php';
require_once DOL_DOCUMENT_ROOT . '/product/inventory/lib/inventory.lib.php';
require_once DOL_DOCUMENT_ROOT . '/product/stock/class/entrepot.class.php';
require_once DOL_DOCUMENT_ROOT . '/custom/rollerstorage/class/statuses.class.php';

// Load translation files required by the page
$langs->loadLangs(array("stocks", "other"));

// Get parameters
$id = GETPOST('id', 'int');
$ref = GETPOST('ref', 'alpha');
$action = GETPOST('action', 'aZ09');
$confirm = GETPOST('confirm', 'alpha');
$cancel = GETPOST('cancel', 'aZ09');
$contextpage = GETPOST('contextpage', 'aZ') ? GETPOST('contextpage', 'aZ') : 'inventorycard'; // To manage different context of search
$backtopage = GETPOST('backtopage', 'alpha');
$warehouseFrom = GETPOST('warehouse_from', 'int') ? GETPOST('warehouse_from', 'int') : null;
$statusFrom = GETPOST('status_from', 'int') ? GETPOST('status_from', 'int') : null;
$inventory_id = GETPOST('inventory_id', 'int') ? GETPOST('inventory_id', 'int') : null;
$idmenu = GETPOST('idmenu', 'int');


/* $cancelbackpage = $backtopage;
$cancelbackpage .= !$inventory_id ? '?' : '&';
$cancelbackpage .= 'idmenu=' . $idmenu . '&leftmenu='; */

/* if (empty($conf->global->MAIN_USE_ADVANCED_PERMS)) {
    $result = restrictedArea($user, 'stock', $id);
} else {
    $result = restrictedArea($user, 'stock', $id, '', 'inventory_advance');
} */

// Initialize technical objects
$object = new Inventory($db);
$extrafields = new ExtraFields($db);
$stasusesObj = new Statuses($db);
// no inventory docs yet
$includedocgeneration = false;
$diroutputmassaction = null;
// $diroutputmassaction = $conf->stock->dir_output.'/temp/massgeneration/'.$user->id;
$hookmanager->initHooks(array('inventorycard', 'globalcard')); // Note that conf->hooks_modules contains array

// Fetch optionals attributes and labels
$extrafields->fetch_name_optionals_label($object->table_element);

$entrepotObj = new Entrepot($db);
$entrepotObj->fetch($inventory_id);
if ($entrepotObj->array_options['options_entrepot_type'] == 1){
    $extrafields->attributes['inventory']['param']['device_type']['options'] = ["rollerstorage_devicetype:ref:type_id::type = 'roller'" => null];
} else {
    $extrafields->attributes['inventory']['param']['device_type']['options'] = ["rollerstorage_devicetype:ref:type_id::type = 'device'" => null];
}

$search_array_options = $extrafields->getOptionalsFromPost($object->table_element, '', 'search_');

// Initialize array of search criterias
$search_all = GETPOST("search_all", 'alpha');
$search = array();
foreach ($object->fields as $key => $val) {
    if (GETPOST('search_' . $key, 'alpha')) {
        $search[$key] = GETPOST('search_' . $key, 'alpha');
    }
}
if (empty($action) && empty($id) && empty($ref)) {
    $action = 'view';
}
// Load object
include DOL_DOCUMENT_ROOT . '/core/actions_fetchobject.inc.php'; // Must be include, not include_once.

// Security check - Protection if external user
//if ($user->socid > 0) accessforbidden();
//if ($user->socid > 0) $socid = $user->socid;
//$result = restrictedArea($user, 'mymodule', $id);

if (empty($conf->global->MAIN_USE_ADVANCED_PERMS)) {
    //$permissiontoread = $user->rights->stock->lire;
    //$permissiontoadd = $user->rights->stock->creer;
    //$permissiontodelete = $user->rights->stock->supprimer;
    $read = 'read_' . $inventory_id;
    $write = 'write_' . $inventory_id;
    $delete = 'delete_' . $inventory_id;
    $permissiontoread = $user->rights->rollerstorage->rollerhistory->$read;
    $permissiontoadd = $user->rights->rollerstorage->rollerhistory->$write;
    $permissiontodelete = $user->rights->rollerstorage->rollerhistory->$delete;
    /*     $permissiontoread = $user->rights->rollerstorage->rollerhistory->read;
    $permissiontoadd = $user->rights->rollerstorage->rollerhistory->write;
    $permissiontodelete = $user->rights->rollerstorage->rollerhistory->delete; */
    //$permissionnote = $user->rights->stock->creer; // Used by the include of actions_setnotes.inc.php
    //$permissiondellink = $user->rights->stock->creer; // Used by the include of actions_dellink.inc.php
    $permissionnote = $user->rights->rollerstorage->rollerhistory->write; // Used by the include of actions_setnotes.inc.php
    $permissiondellink = $user->rights->rollerstorage->rollerhistory->write; // Used by the include of actions_dellink.inc.php
    $upload_dir = $conf->stock->multidir_output[isset($object->entity) ? $object->entity : 1];
} else {
    $permissiontoread = $user->rights->stock->inventory_advance->read;
    $permissiontoadd = $user->rights->stock->inventory_advance->write;
    $permissiontodelete = $user->rights->stock->inventory_advance->write;
    $permissionnote = $user->rights->stock->inventory_advance->write; // Used by the include of actions_setnotes.inc.php
    $permissiondellink = $user->rights->stock->inventory_advance->write; // Used by the include of actions_dellink.inc.php
    $upload_dir = $conf->stock->multidir_output[isset($object->entity) ? $object->entity : 1];
}

/* if($action == 'list'){
header("Location: " . DOL_URL_ROOT . '/custom/rollerstorage/card.php?id=1');
} */
/*
 * Actions
 */

if (!is_null($warehouseFrom)) {
    $object->egyebAdatok = array("warehouse_from" => $warehouseFrom, "status_from" => $statusFrom);
}

$parameters = array();
$reshook = $hookmanager->executeHooks('doActions', $parameters, $object, $action); // Note that $action and $object may have been modified by some hooks
if ($reshook < 0) {
    setEventMessages($hookmanager->error, $hookmanager->errors, 'errors');
}

if (empty($reshook)) {
    $savaction = $action;
    $error = 0;

    $backurlforlist = DOL_URL_ROOT . '/custom/rollerstorage/rollerstorageinventoryindex.php';

    if (empty($backtopage) || ($cancel && empty($id))) {
        if (empty($backtopage) || ($cancel && strpos($backtopage, '__ID__'))) {
            if (empty($id) && (($action != 'add' && $action != 'create') || $cancel)) {
                $backtopage = $backurlforlist;
            } else {
                $backtopage = dol_buildpath('/custom/rollerstorage/card.php', 1) . '?id=' . ($id > 0 ? $id : '__ID__');
            }
        }
    }

    $triggermodname = 'STOCK_INVENTORY_MODIFY'; // Name of trigger action code to execute when we modify record

    // Actions cancel, add, update, update_extras, confirm_validate, confirm_delete, confirm_deleteline, confirm_clone, confirm_close, confirm_setdraft, confirm_reopen
    include DOL_DOCUMENT_ROOT . '/custom/rollerstorage/actions_addupdatedelete.inc.php';

    // Actions when linking object each other
    include DOL_DOCUMENT_ROOT . '/core/actions_dellink.inc.php';

    // Actions when printing a doc from card
    include DOL_DOCUMENT_ROOT . '/core/actions_printing.inc.php';

    // Action to move up and down lines of object
    //include DOL_DOCUMENT_ROOT.'/core/actions_lineupdown.inc.php';

    // Action to build doc
    include DOL_DOCUMENT_ROOT . '/core/actions_builddoc.inc.php';

    /*if ($action == 'set_thirdparty' && $permissiontoadd)
    {
    $object->setValueFrom('fk_soc', GETPOST('fk_soc', 'int'), '', '', 'date', '', $user, 'MYOBJECT_MODIFY');
    }*/
    if ($action == 'classin' && $permissiontoadd) {
        $object->setProject(GETPOST('projectid', 'int'));
    }

    // Actions to send emails
    $triggersendname = 'INVENTORY_SENTBYMAIL';
    $autocopy = 'MAIN_MAIL_AUTOCOPY_INVENTORY_TO';
    $trackid = 'stockinv' . $object->id;
    include DOL_DOCUMENT_ROOT . '/core/actions_sendmails.inc.php';

    if (!$error && $savaction == 'confirm_validate' && $action == '' && $object->id > 0) {
        // Switch to the tab inventory
        header("Location: " . DOL_URL_ROOT . '/product/inventory/inventory.php?id=' . $object->id);
        exit;
    }
}




/*
 * View
 */

$form = new Form($db);
$formfile = new FormFile($db);
$formproject = new FormProjets($db);

$title = $langs->trans("Inventory");

$help_url = 'EN:Module_Stocks_En|FR:Module_Stock|ES:Módulo_Stocks|DE:Modul_Bestände';

llxHeader('', $title, $help_url);


// Part to create
if ($action == 'create') {
    print load_fiche_titre($langs->trans("NewInventory"), '', 'product');

    print '<form method="POST" action="' . $_SERVER["PHP_SELF"] . '?inventory_id=' . $inventory_id . '">';
    print '<input type="hidden" name="token" value="' . newToken() . '">';
    print '<input type="hidden" name="action" value="add">';
    if ($backtopage) {
        print '<input type="hidden" name="backtopage" value="' . $backtopage . '">';
    }
    if (!empty($backtopageforcancel)) {
        print '<input type="hidden" name="backtopageforcancel" value="' . $backtopageforcancel . '">';
    }

    print dol_get_fiche_head(array(), '');

    print '<table class="border centpercent tableforfieldcreate">' . "\n";

    // Common attributes
    //include DOL_DOCUMENT_ROOT.'/core/tpl/commonfields_add.tpl.php';
    include DOL_DOCUMENT_ROOT . '/custom/rollerstorage/tpl/commonfields_add.tpl.php';

    // Other attributes
    include DOL_DOCUMENT_ROOT . '/custom/rollerstorage/tpl/extrafields_add.tpl.php';

    //print '<tr><td class="titlefield fieldname_invcode">'.$langs->trans("InventoryCode").'</td><td>INV'.$object->id.'</td></tr>';

    print '</table>' . "\n";

    print dol_get_fiche_end();

    //print $form->buttonsSaveCancel("Create");
    print '<div class="center">';
    print '<input type="submit" class="button button-add " name="add" value="' . $langs->trans('Create') . '">';
    print '<a class="button button-cancel" href="/custom/rollerstorage/rollerstorageinventoryindex.php?inventory_id=' . $inventory_id . '">' . $langs->trans('Cancel') . '</a>';
    print '</div>';

    print '</form>';

    dol_set_focus('input[name="ref"]');
}

// Part to edit record
if (($id || $ref) && $action == 'edit') {

    if ($permissiontoadd) {
        $href = $backtopage . '&inventory_id=' . $inventory_id;
        $backtopageforMegsem = '&backtopage=/custom/rollerstorage/rollerstorageinventoryindex.php?inventory_id=' . $inventory_id;
        $href .= $backtopageforMegsem;
        //$backtopage .= '&inventory_id='.$inventory_id;
        print load_fiche_titre($langs->trans("Inventory"), '', 'product');

        print '<form method="POST" action="' . $_SERVER["PHP_SELF"] . '?id=' . $object->id . '&inventory_id=' . $inventory_id . '">';
        print '<input type="hidden" name="token" value="' . newToken() . '">';
        print '<input type="hidden" name="action" value="update">';
        print '<input type="hidden" name="id" value="' . $object->id . '">';

        if ($backtopage) {
            print '<input type="hidden" name="backtopage" value="' . $href . '">';
        }
        if ($backtopageforcancel) {
            print '<input type="hidden" name="backtopageforcancel" value="' . $backtopageforcancel . '">';
        }

        $statuses2 = new Statuses($db);
        $status_id_from_statuses = $statuses2->getRowIdFromStatusId($db, $object->status);

        print '<input type="hidden" name="warehouse_from" value="' . $object->fk_warehouse . '">';
        print '<input type="hidden" name="status_from" value="' . $status_id_from_statuses . '">';

        print dol_get_fiche_head();

        print '<table class="border centpercent tableforfieldedit">' . "\n";

        // Common attributes
        //include DOL_DOCUMENT_ROOT . '/core/tpl/commonfields_edit.tpl.php';
        include DOL_DOCUMENT_ROOT . '/custom/rollerstorage/tpl/commonfields_edit.tpl.php';

        // Other attributes
        include DOL_DOCUMENT_ROOT . '/custom/rollerstorage/tpl/extrafields_edit.tpl.php';

        print '</table>';

        print dol_get_fiche_end();

        //print $form->buttonsSaveCancel();
        print '<div class="center">';
        print '<input type="submit" class="button button-save " name="save" value="' . $langs->trans('Save') . '">';
        print '<a class="button button-cancel" href="' . $href . '">' . $langs->trans('Cancel') . '</a>';
        print '</div>';

        print '</form>';
    } else {
        print '<div class="error">Hozzáférés megtagadva.<br>Egy letiltott modul oldalához, területéhez vagy szolgáltatásához próbál hozzáférni, vagy anélkül, hogy hitelesített munkamenetben lenne, vagy amely nem engedélyezett a felhasználó számára.</div>';
    }
}

// Part to show record
if ($object->id > 0 && (empty($action) || ($action != 'edit' && $action != 'create'))) {
    $res = $object->fetch_optionals();

    $tabs = array(
        array(dol_buildpath('/custom/rollerstorage/card.php?id=' . $object->id . $get . '&inventory_id=' . $inventory_id . '&backtopage=' . $backtopage, 1), $langs->trans('Roller'), 'roller'),
        array(dol_buildpath('/custom/rollerstorage/rollerhistory_list.php?id=' . $object->id . $get . '&inventory_id=' . $inventory_id . '&backtopage=' . $backtopage, 1), $langs->trans('Rollerhistory'), 'rollerhistory')
    );
    $head = $tabs;
    //$head = inventoryPrepareHead($object);
    //$head[] = array(' /custom/rollerstorage/card.php?id=' . $object->id, $object->ref, 'card');

    //print_r($head);
    print dol_get_fiche_head($head, 'roller', $langs->trans("Roller"), -1, 'stock');

    $formconfirm = '';

    // Confirmation to delete
    if ($action == 'delete') {
        $backtopage .= '?id=' . $object->id . '&inventory_id=' . $inventory_id;
        $formconfirm = $form->formconfirm($_SERVER["PHP_SELF"] . '?id=' . $object->id . '&inventory_id=' . $inventory_id . '&backtopage=' . $backtopage, $langs->trans('DeleteInventory'), $langs->trans('ConfirmDeleteObject'), 'confirm_delete', '', 0, 1);
    }

    // Confirmation of action xxxx
    if ($action == 'xxx') {
        $formquestion = array();
        $formconfirm = $form->formconfirm($_SERVER["PHP_SELF"] . '?id=' . $object->id, $langs->trans('XXX'), $text, 'confirm_xxx', $formquestion, 0, 1, 220);
    }

    // Call Hook formConfirm
    $parameters = array('formConfirm' => $formconfirm);
    $reshook = $hookmanager->executeHooks('formConfirm', $parameters, $object, $action); // Note that $action and $object may have been modified by hook
    if (empty($reshook)) {
        $formconfirm .= $hookmanager->resPrint;
    } elseif ($reshook > 0) {
        $formconfirm = $hookmanager->resPrint;
    }

    // Print form confirm
    print $formconfirm;


    // Object card
    // ------------------------------------------------------------
    $linkback = '<a href="' . DOL_URL_ROOT . $backtopage . (!empty($socid) ? '?socid=' . $socid : '') . '">' . $langs->trans("BackToList") . '</a>';

    $morehtmlref = '<div class="refidno">';
    $morehtmlref .= '</div>';



    dol_banner_tab($object, 'ref', $linkback, 1, 'ref', 'ref', $morehtmlref);


    print '<div class="fichecenter">';
    print '<div class="fichehalfleft">';
    print '<div class="underbanner clearboth"></div>';
    print '<table class="border centpercent tableforfield">' . "\n";

    // Common attributes
    include DOL_DOCUMENT_ROOT . '/custom/rollerstorage/tpl/commonfields_view.tpl.php';

    // Other attributes. Fields from hook formObjectOptions and Extrafields.
    include DOL_DOCUMENT_ROOT . '/core/tpl/extrafields_view.tpl.php';

    print '</table>';
    print '</div>';
    print '</div>';

    print '<div class="clearboth"></div>';

    print dol_get_fiche_end();

    // Buttons for actions
    if ($action != 'presend' && $action != 'editline') {
        print '<div class="tabsAction">' . "\n";
        $parameters = array();
        $reshook = $hookmanager->executeHooks('addMoreActionsButtons', $parameters, $object, $action); // Note that $action and $object may have been modified by hook
        if ($reshook < 0) {
            setEventMessages($hookmanager->error, $hookmanager->errors, 'errors');
        }

        if (empty($reshook)) {
            // Modify
            $backtopage = '/custom/rollerstorage/card.php?id=' . $object->id . '&inventory_id=' . $inventory_id;

            if ($permissiontoadd) {
                print '<a class="butAction" href="' . $_SERVER["PHP_SELF"] . '?id=' . $object->id . '&backtopage=' . $backtopage . '&action=edit&token=' . newToken() . '">' . $langs->trans("Modify") . '</a>' . "\n";
            } else {
                print '<a class="butActionRefused classfortooltip" href="#" title="' . dol_escape_htmltag($langs->trans("NotEnoughPermissions")) . '">' . $langs->trans('Modify') . '</a>' . "\n";
            }

            // Delete
            print dolGetButtonAction($langs->trans("Delete"), '', 'delete', $_SERVER["PHP_SELF"] . '?id=' . $object->id . '&inventory_id=' . $inventory_id . '&backtopage=' . $backurlforlist . '&action=delete&token=' . newToken(), 'delete', $permissiontodelete);
        }
        print '</div>' . "\n";
    }


    // Select mail models is same action as presend
    if (GETPOST('modelselected')) {
        $action = 'presend';
    }

    if ($action != 'presend') {
        print '<div class="fichecenter"><div class="fichehalfleft">';
        print '<a name="builddoc"></a>'; // ancre

        // Documents
        if ($includedocgeneration) {
            $objref = dol_sanitizeFileName($object->ref);
            $relativepath = $objref . '/' . $objref . '.pdf';
            $filedir = $conf->mymodule->dir_output . '/' . $object->element . '/' . $objref;
            $urlsource = $_SERVER["PHP_SELF"] . "?id=" . $object->id;
            $genallowed = $user->rights->mymodule->myobject->read; // If you can read, you can build the PDF to read content
            $delallowed = $user->rights->mymodule->myobject->write; // If you can create/edit, you can remove a file on card
            print $formfile->showdocuments('mymodule:MyObject', $object->element . '/' . $objref, $filedir, $urlsource, $genallowed, $delallowed, $object->model_pdf, 1, 0, 0, 28, 0, '', '', '', $langs->defaultlang);
        }

        // Show links to link elements
        $linktoelem = $form->showLinkToObjectBlock($object, null, array('inventory'));
        //$somethingshown = $form->showLinkedObjectBlock($object, $linktoelem);


        print '</div><div class="fichehalfright">';

        $MAXEVENT = 10;

        //$morehtmlcenter = dolGetButtonTitle($langs->trans('SeeAll'), '', 'fa fa-bars imgforviewmode', DOL_URL_ROOT.'/product/inventory/inventory_info.php?id='.$object->id);
        $morehtmlcenter = '';

        // List of actions on element
        //include_once DOL_DOCUMENT_ROOT.'/core/class/html.formactions.class.php';
        //$formactions = new FormActions($db);
        //$somethingshown = $formactions->showactions($object, $object->element, 0, 1, '', $MAXEVENT, '', $morehtmlcenter);

        print '</div></div>';
    }

    //Select mail models is same action as presend
    if (GETPOST('modelselected')) {
        $action = 'presend';
    }

    // Presend form
    $modelmail = 'inventory';
    $defaulttopic = 'InformationMessage';
    $diroutput = $conf->product->dir_output . '/inventory';
    $trackid = 'stockinv' . $object->id;

    include DOL_DOCUMENT_ROOT . '/core/tpl/card_presend.tpl.php';
    include DOL_DOCUMENT_ROOT . '/custom/rollerstorage/tpl/rollerhistory.tpl.php';
}


// End of page
llxFooter();
$db->close();
