query($sqlStmt); if (DB::isError($result)) die ("$PHP_SELF: " . $result->getMessage()); TA("B"); $currentTime = getDateTime("0"); while ($row = $result->fetch_assoc()): $moveResult = stockMoveTA (($row["stk_id_to"] == "" ? "0" : $row["stk_id_to"]), ($row["stk_id_from"] == "" ? "0" : $row["stk_id_from"]), $row["at_id"], $row["stkmv_itemquantity"], $row["stkmv_tan"], "Storno " . $row["stkmv_id"], $row["stkmv_serialno"], "", $usr_id, $stkmvAtIdBundle, $currentTime, $stkmvSpecialDatetime2); // !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! // !!! Check for associations to jobs ... removal of tourarticles and so on ... !!!!!!!!!!!!!!!!!!!!!!!! // !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! if (trim($moveResult[1]) != "") : $statusMessage .= $row["stkmv_id"] . ": " . $moveResult[1] . " "; endif; endwhile; $result->free(); TA("C"); TA("E"); else : $statusMessage = getLngt("Journalfehler! Es besteht kein Bezug (mehr) zur angeforderten Gesamtmenge!"); endif; else : $statusMessage = getLngt("Journalfehler! Ein Storno kann nicht stattfinden, da der angefragte Journaleintrag nicht gefunden wurde!"); endif; endif; endif; $stkNameRoot = getFieldValueFromId("stock","stk_id",$stkIdRoot,"stk_name"); $tmpFields = getFieldsValueFromId("stock","stk_id",$stkIdCurrent,array("stk_path","stk_name","stk_visible")); $stkPathCurrent = mcArrIsSet($tmpFields, 0); $stkNameCurrent = mcArrIsSet($tmpFields, 1); $stkVisibleCurrent = mcArrIsSet($tmpFields, 2); $stkVisibleCurrent2 = 0; if ($stkVisibleCurrent != "1") : $stkVisibleCurrent = 0; $stkVisibleCurrent2 = 1; endif; /* echo "customerId: " . $customerId . "

" . "stkIdRoot: " . $stkIdRoot . "
" . "stkIdCurrent: " . $stkIdCurrent . "
"; echo "stkNameCurrent: " . $stkNameCurrent . "
" . "stkPathCurrent: " . $stkPathCurrent . "
" . "nameStock: " . $nameStock . "

"; echo "Date range: " . $fromDateRange . " - " . $toDateRange . "
"; echo "f_act: " . $f_act . "
"; */ // Selection of all CHILDREN of the current stock $whereClauseVisibility = " AND stk_visible = '1' "; if ($f_show_invisible == "1") : $whereClauseVisibility = ""; endif; $sqlquery = "SELECT stk_id, stk_name, stk_path FROM stock" . " WHERE stk_pre_id != '0' AND stk_pre_id = '" . $stkIdCurrent . "'" . $whereClauseVisibility . " ORDER BY stk_name"; $result = $db->query($sqlquery); if (DB::isError($result)) die ("$PHP_SELF: " . $result->getMessage()); $listOfChildren = ""; while ($row = $result->fetch_assoc()): $stk_id = $row["stk_id"]; $stk_name = $row["stk_name"]; $stk_path = $row["stk_path"]; $listOfChildren .= "\n"; endwhile; if ($listOfChildren != "") : $listOfChildren = "\n" . $listOfChildren; endif; $result->free(); // Output of the path links for navigation in the stock tree $stkPathCurrentOut = ""; $fields = spliti("//",$stkPathCurrent); $len = count($fields); $pathDelimiter = ""; $rootFlag = FALSE; $maxPathLength = 4; $pathPrefix = ""; $pathPrefixFlag = FALSE; for ($i = 0; $i < $len; $i++) : if ($fields[$i] != "") : // Only show the subpath from the "current root" of the employee // if ($fields[$i] == $stkIdRoot) : $rootFlag = TRUE; endif; $rootFlag = TRUE; if ($rootFlag) : // Only output of the last elements if ($i > $len - $maxPathLength) : $stk_name = getFieldValueFromClause("stock","stk_name","stk_id = '" . $fields[$i] . "'"); $stkPathCurrentOut .= "" . $stk_name . ""; $stkPathCurrentOut .= $pathDelimiter; else : if (!$pathPrefixFlag && ($i > $len - $maxPathLength - 1)) : $stk_name = getFieldValueFromClause("stock","stk_name","stk_id = '" . $fields[$i] . "'"); $pathPrefix .= "" . "" . ""; $pathPrefix .= $pathDelimiter; $pathPrefixFlag = TRUE; endif; endif; endif; endif; endfor; $stkPathCurrentOut = $pathPrefix . $stkPathCurrentOut . $stkNameCurrent; // Check for the right to administrate the stocks, only for output $stkAdminDisabled = ""; if ($userTypeName == "cs") : if (substr($empRights,9,1) != "1") : $stkAdminDisabled = "disabled"; endif; else : if (substr($empRights,14,1) != "1") : $stkAdminDisabled = "disabled"; endif; endif; // Definition of the select-fields, only for output $selectFieldSelectStock = ""; $selectFieldSelectStock2 = ""; $selectFieldDeleteStock = ""; if ($listOfChildren != "") : // Check for the right to navigate in the subtree $selectFieldSelectStock = "\n" . "\n" . "\n"; $selectFieldSelectStock2 = "\n" . "\n" . "\n"; $selectFieldDeleteStock = "
" . "
\n" . "\n" . "  
\n" . defineButtonType10(getLngt("Löschen"), "action_remove", "stkFinishPage('" . ec("deleteStock") . "');", "100", "left", "2"); endif; // Check the status of the visibility of the current stock $buttonVisibility = ""; $displayTextVisibility = ""; $confirmTextVisibility = ""; if ($stkIdRoot != $stkIdCurrent) : // NOT for the root stock !!! (Check $userTypeName == "hq" ???) $buttonVisibility = defineButtonType10(getLngt("Ausblenden"), "action_invisible", "visibilityFinishPage();", "100", "left", "2"); $confirmTextVisibility = getLngt("Soll der aktuelle Lagerort wirklich ausgeblendet werden?"); if ($stkVisibleCurrent != "1") : $buttonVisibility = defineButtonType10(getLngt("Einblenden"), "action_visible", "visibilityFinishPage();", "100", "left", "2"); $displayTextVisibility = getLngt("(ausgeblendet)"); $confirmTextVisibility = getLngt("Soll der aktuelle Lagerort wirklich eingeblendet werden?"); endif; endif; // Checkbox for displaying all stocks $showInvisibles = getLngt("Alle anz.") . " "; // Check for the right to make the stocks (in)visible, only for output if (($userTypeName == "cs" && substr($empRights,9,1) != "1") || ($userTypeName == "hq" && substr($empRights,14,1) != "1")) : $buttonVisibility = ""; $showInvisibles = ""; endif; // Currently ONLY for headquarters if ($userTypeName == "hq" && $stockRight) : // ************** // * STOCK DATA * // ************** // Enter the max quantity of the current stock if ($f_stk_maxquantity == "") : $f_stk_maxquantity = "0"; endif; if ($g_cs_id == "") : $g_cs_id = "0"; endif; if ($g_csc_id == "") : $g_csc_id = "0"; endif; if ($f_act == "saveStockData") : // *** Save the quantity (Begin) *** // Check quantity according to the tree consistence $doUpdate = true; /* SEMANTIC IS NOT CORRECT !!! if (!checkStockQuantitySubtree($stkIdCurrent, $f_stk_maxquantity, "")) : $statusMessage = getLngt("Die Summe aller maximalen Kapazitäten des gesamten Lagerortbaums unterhalb des aktuellen Lagerortes ist größer als die eingegebene Größe!"); $doUpdate = false; endif; */ if ($stkIdCurrent != $stkIdRoot && !checkStockQuantitySameLevel($stkIdCurrent, $f_stk_maxquantity, "")) : $statusMessage = getLngt("Die Summe aller maximalen Kapazitäten der Lagerorte, die sich in derselben Ebene des aktuellen Lagerortes befinden, übersteigt die Kapazität im übergeordneten Knoten!"); $doUpdate = false; endif; if ($doUpdate && !checkStockQuantityNextSubLevel($stkIdCurrent, $f_stk_maxquantity, "")) : $statusMessage = getLngt("Die Summe aller maximalen Kapazitäten der Lagerorte, die sich in der nächsten Unterebene des aktuellen Lagerortes befinden, übersteigt die eingegebene Kapazität des aktuellen Knotens!"); $doUpdate = false; endif; if ($doUpdate && $f_stk_planning == "1" && !checkStockArticleQuantitySubtree($stkIdCurrent, $f_stk_maxquantity, "")) : $statusMessage = getLngt("Die Summe aller Artikelbestände des gesamten Lagerortbaums unterhalb des aktuellen Lagerortes ist größer als die eingegebene Größe!"); $doUpdate = false; endif; if ($doUpdate) : // Update stock with quantity updateStmt("stock", "stk_id", $stkIdCurrent, array("stk_maxquantity", $f_stk_maxquantity, "stk_planning", $f_stk_planning, "ad_id", $f_ad_id, "cs_id", $g_cs_id, "csc_id", $g_csc_id, "stk_barcode", $f_stk_barcode)); // Write logdata into log database writeToLogDB("91",$hq_id,"",$usr_id,"","",$customerId,"HQ_ID=".$hqId."|STK_ID=".$stkIdCurrent."|STK_NAME=".$stkNameCurrent."|STK_QUANTITY=".$f_stk_maxquantity."|AD_ID=".$f_ad_id."|CS_ID=".$g_cs_id."|CSC_ID=".$g_csc_id."|STK_BARCODE=".$f_stk_barcode); endif; endif; // *** Save the quantity (End) *** // *** Save the adress (Begin) *** if ($f_act == "saveAddress") : // *** Save the adress (Begin) *** $f_ad_street = trim($f_ad_street); $f_ad_zipcode = trim($f_ad_zipcode); $f_ad_city = trim($f_ad_city); $f_ad_country = trim($f_ad_country); $f_stk_hsno = trim($f_stk_hsno); // Check for empty entries in address-fields if ($f_ad_street != "" && $f_ad_zipcode != "" && $f_ad_city != "" && $f_ad_country != "") : // Check validity according to the address-server $addressValid = getGeoCoordinates($f_ad_street, $f_ad_zipcode, $f_ad_city, $f_cscad_hsno, $f_ad_country, ""); if ($addressValid != "") : // Check zipcode and city $addressValidityArray = checkCityZipcode($f_ad_zipcode, $f_ad_city, $f_ad_street); if ($noValidationOfAddress || $addressValidityArray[0] >= 1) : TA("B"); // Check for existing entry in address (because of redundance) if ($f_ad_country == "") : $f_ad_country = "DE"; endif; $tmpArray = insertAddress($f_ad_street, $f_ad_zipcode, $f_ad_city, "", $f_ad_country, $noValidationOfAddress); $ad_id_new = $tmpArray[0]; // Check for address data in stock $adIdCurrent = getFieldValueFromId("stock","stk_id",$stkIdCurrent,"ad_id"); $stkHsnoCurrent = getFieldValueFromId("stock","stk_id",$stkIdCurrent,"stk_hsno"); if ($ad_id_new != $adIdCurrent || $f_stk_hsno != $stkHsnoCurrent) : $sqlStmt = "UPDATE stock SET ad_id = '" . $ad_id_new . "', stk_hsno = '" . $f_stk_hsno . "' WHERE stk_id = '" . $stkIdCurrent . "'"; $res = $db->query($sqlStmt); // Write logdata into log database writeToLogDB("92",$hq_id,"",$usr_id,"","",$customerId,"STK_ID=".$stkIdCurrent."|AD_ID_OLD=".$adIdCurrent."|AD_ID_NEW=".$ad_id_new."|ADDRESS=".$f_ad_street.";".$f_ad_zipcode.";".$f_ad_city.";".$f_ad_country.";".$f_stk_hsno); endif; TA("C"); TA("E"); else : $statusMessage = getLngt("Die Postleitzahl passt nicht zu dem angegebenen Ort!"); $addressValidationErr = "1"; endif; else : $statusMessage = getLngt("Der Adress-Server kennt die eingebene Adresse nicht! Bitte korrekt erfassen!"); endif; else : $statusMessage = getLngt("Bitte geben Sie mindestens Straße, Hausnummer, Stadt und Land an!"); endif; endif; // *** Save the adress (End) *** if ($f_act == "saveJournalTitles") : $stkJournalTitleArrayLen = count($stkJournalTitleArray); // Max. number of columns to be displayed $f_journal_headlines_len = count($f_journal_headlines); if ($f_journal_headlines_len > 0) : $journalHeadlinesArray = array("0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0"); $journalOrderByArray = array("0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0"); $journalHeadlinesArrayLen = count($journalHeadlinesArray); for ($i = 0; $i < $journalHeadlinesArrayLen; $i++) : if (in_array($i, $f_journal_headlines)) : $journalHeadlinesArray[$i] = "1"; endif; if (in_array($i, $f_journal_orderby)) : $journalOrderByArray[$i] = "1"; endif; endfor; $journalHeadlinesStr = implode(",", $journalHeadlinesArray); $tmpStkIdRoot = getStkPathId($stkIdRoot); // Makes it safe to have a real root stock if (existsEntry("parameter",array("par_key","MASK_STK_JOURNALHEADLINES_DISPLAYED_" . $tmpStkIdRoot))) : updateStmt("parameter","emp_id","0",array("par_value",$journalHeadlinesStr),"par_key = 'MASK_STK_JOURNALHEADLINES_DISPLAYED_" . $tmpStkIdRoot . "' AND hq_id = '0'"); else : insertStmt("parameter",array("emp_id","0","hq_id","0","par_key","MASK_STK_JOURNALHEADLINES_DISPLAYED_" . $tmpStkIdRoot,"par_value",$journalHeadlinesStr)); endif; $journalOrderByStr = implode(",", $journalOrderByArray); if (existsEntry("parameter",array("par_key","MASK_STK_JOURNAL_ORDERBY_DIRECTION_" . $tmpStkIdRoot))) : updateStmt("parameter","emp_id","0",array("par_value",$journalOrderByStr),"par_key = 'MASK_STK_JOURNAL_ORDERBY_DIRECTION_" . $tmpStkIdRoot . "' AND hq_id = '0'"); else : insertStmt("parameter",array("emp_id","0","hq_id","0","par_key","MASK_STK_JOURNAL_ORDERBY_DIRECTION_" . $tmpStkIdRoot,"par_value",$journalOrderByStr)); endif; else : $statusMessage = getLngt("Sie müssen mindestens eine Spalte in der Listenanzeige des Journals haben!"); endif; endif; endif; if (true) : // *** Save the stock article movement (Begin) *** if ($f_act == "moveArticle") : $f_mv_data = array($f_mv_datafield_01, $f_mv_datafield_02, $f_mv_datafield_03, $f_mv_datafield_04, $f_mv_datafield_05, $f_mv_datafield_06, $f_mv_datafield_07, $f_mv_datafield_08, $f_mv_datafield_09, $f_mv_datafield_10, $f_mv_datafield_11, $f_mv_datafield_12, $f_mv_datafield_13, $f_mv_datafield_14, $f_mv_datafield_15); $moveResult = stockMoveTA ($f_mv_stk_from, $f_mv_stk_to, $f_mv_at, $f_mv_stk_itemquantity, $f_mv_tan, $f_mv_remark, $f_mv_serialno, $f_mv_data, $f_mv_jb_id, $usr_id, "0", "", $stkmvSpecialDatetime2, $f_mv_serialno_old); if ($moveResult[0]) : // TA executed $f_mv_stk_itemquantity = 0; // Reset quantity value (only for display) $f_mv_tan = ""; $f_mv_remark = ""; $f_mv_serialno = ""; $f_mv_serialno_old = ""; // $f_mv_serialno_old ONLY is used for the case stk_from eq. stk_to !!! Not relevant for other cases !!! $f_mv_datafield_01 = ""; $f_mv_datafield_02 = ""; $f_mv_datafield_03 = ""; $f_mv_datafield_04 = ""; $f_mv_datafield_05 = ""; $f_mv_datafield_06 = ""; $f_mv_datafield_07 = ""; $f_mv_datafield_08 = ""; $f_mv_datafield_09 = ""; $f_mv_datafield_10 = ""; $f_mv_datafield_11 = ""; $f_mv_datafield_12 = ""; $f_mv_datafield_13 = ""; $f_mv_datafield_14 = ""; $f_mv_datafield_15 = ""; endif; if (trim($moveResult[1]) != "") : $statusMessage = $moveResult[1]; endif; endif; // *** Save the stock article movement (End) *** // ************************************ // * Data settings of the current stock * // ************************************ $sqlquery = "SELECT stk.stk_pre_id, stk.stk_maxquantity, stk.stk_planning, stk.stk_barcode, stk.ad_id, ad.ad_street, ad.ad_zipcode, stk.stk_hsno, ad.ad_city, ad.ad_country," . " stk.csc_id, csc.csc_name, cs.cs_id, cs.cs_eid, cmp.cmp_comp, cmp.cmp_comp2" . " FROM stock AS stk LEFT JOIN address AS ad ON stk.ad_id = ad.ad_id" . " LEFT JOIN costcenter AS csc ON stk.csc_id = csc.csc_id" . " LEFT JOIN customer AS cs ON csc.cs_id = cs.cs_id" . " LEFT JOIN company AS cmp ON cs.cmp_id = cmp.cmp_id" . " WHERE stk.stk_id = '" . $stkIdCurrent . "'"; $result = $db->query($sqlquery); if (DB::isError($result)) die ("$PHP_SELF: " . $result->getMessage()); while ($row = $result->fetch_assoc()): $f_stk_pre_id = $row["stk_pre_id"]; $f_stk_maxquantity = $row["stk_maxquantity"]; // $f_stk_planning = $row["stk_planning"]; $f_stk_barcode = $row["stk_barcode"]; $f_ad_id = $row["ad_id"]; $f_ad_street = $row["ad_street"]; $f_stk_hsno = $row["stk_hsno"]; $f_ad_zipcode = $row["ad_zipcode"]; $f_ad_city = $row["ad_city"]; $f_ad_country = $row["ad_country"]; $g_csc_id = $row["csc_id"]; $g_csc_name = $row["csc_name"]; $g_cs_id = $row["cs_id"]; $g_cs_eid = $row["cs_eid"]; $g_cmp_comp = $row["cmp_comp"]; $g_cmp_comp2 = $row["cmp_comp2"]; endwhile; $result->free(); // Only it is possible to enable/disable the stock area planning for the whole tree $f_stk_planning = getFieldValueFromId("stock","stk_id",$stkIdRoot,"stk_planning"); // ************************* // * STOCK ARTICLE DATA * // ************************* $stockArticles = ""; // * SPECIAL USAGE AFTER BARCODE SCAN * // Use article id for filter $whereClause = ""; $executeCommand = false; if ($js_execute_cmd == "2") : $whereClause = "at.at_id = '" . $js_execute_data . "'"; $executeCommand = true; $f_stkat_search_at_misc = ""; // Remove article filter $f_stkat_search_atg = ""; // Remove special article group filter endif; if ($js_execute_cmd == "3") : $whereClause = "stk.stk_id = '" . $js_execute_data . "'"; $executeCommand = true; $f_stkat_search_at_misc = ""; // Remove article filter $f_stkat_search_atg = ""; // Remove special article group filter endif; if ($f_act == "stockArticleList" || $executeCommand || $maskStkatShowPermanent == "1") : $f_stkat_search_at_misc = trim($f_stkat_search_at_misc); if ($f_stkat_search_at_misc != "") : // First step: Only get article item rows matching $tmpWhereClause = "(ati.ati_serialno LIKE '%" . $f_stkat_search_at_misc . "%' OR " . "ati.ati_data_01 LIKE '%" . $f_stkat_search_at_misc . "%' OR ati.ati_data_02 LIKE '%" . $f_stkat_search_at_misc . "%' OR " . "ati.ati_data_03 LIKE '%" . $f_stkat_search_at_misc . "%' OR ati.ati_data_04 LIKE '%" . $f_stkat_search_at_misc . "%' OR " . "ati.ati_data_05 LIKE '%" . $f_stkat_search_at_misc . "%' OR ati.ati_data_06 LIKE '%" . $f_stkat_search_at_misc . "%' OR " . "ati.ati_data_07 LIKE '%" . $f_stkat_search_at_misc . "%' OR ati.ati_data_08 LIKE '%" . $f_stkat_search_at_misc . "%' OR " . "ati.ati_data_09 LIKE '%" . $f_stkat_search_at_misc . "%' OR ati.ati_data_10 LIKE '%" . $f_stkat_search_at_misc . "%' OR " . "ati.ati_data_11 LIKE '%" . $f_stkat_search_at_misc . "%' OR ati.ati_data_12 LIKE '%" . $f_stkat_search_at_misc . "%' OR " . "ati.ati_data_13 LIKE '%" . $f_stkat_search_at_misc . "%' OR ati.ati_data_14 LIKE '%" . $f_stkat_search_at_misc . "%' OR " . "ati.ati_data_15 LIKE '%" . $f_stkat_search_at_misc . "%')"; $sqlStmt = getStmtStockArticleItemSearch($tmpWhereClause); $result = $db->query($sqlStmt); if (DB::isError($result)) die ("$PHP_SELF: " . $result->getMessage()); $whereClauseArticleItemsArray = array(); while ($row = $result->fetch_assoc()): $whereClauseArticleItemsArray[] = "(stkat.at_id = '" . $row["at_id"] . "' AND stkat.stk_id = '" . $row["stk_id"] . "')"; endwhile; $result->free(); if (count($whereClauseArticleItemsArray) > 0) : $whereClauseArticleItems = "(" . implode(" OR ", $whereClauseArticleItemsArray) . ")"; endif; // Second step: Search for article attributes matching if ($whereClause != "") : $whereClause .= " AND "; endif; $whereClauseArticle = "(at.at_eid LIKE '%" . $f_stkat_search_at_misc . "%' OR at.at_name LIKE '%" . $f_stkat_search_at_misc . "%' OR at.at_match LIKE '%" . $f_stkat_search_at_misc . "%' OR at.at_description LIKE '%" . $f_stkat_search_at_misc . "%' OR at.at_barcode LIKE '%" . $f_stkat_search_at_misc . "%')"; if ($whereClauseArticleItems != "") : $whereClause = "(" . $whereClauseArticle . " OR " . $whereClauseArticleItems . ")"; else : $whereClause .= $whereClauseArticle; endif; endif; if ($f_stkat_search_atg != "") : if ($whereClause != "") : $whereClause .= " AND "; endif; $whereClause .= "atgi.atg_id = '" . $f_stkat_search_atg . "'"; endif; // Check for accessible substocks according to the rights of the current user if ($stkReadonlyWhereDefinedWriteaccess != "0") : $whereClauseAccessibleStocks .= getAccessibleSubstocks("1"); if ($whereClauseAccessibleStocks != "") : if ($whereClause != "") : $whereClause .= " AND "; endif; $whereClause .= " (" . $whereClauseAccessibleStocks . ") "; endif; endif; if ($f_displayModeStockArticle == "0") : $stockArticles = showStockArticles($stkIdCurrent, "0", $whereClause, $f_mv_sort_stockArticle); // All articles with used areas of the current stock elseif ($f_displayModeStockArticle == "1") : $stockArticles = showStockArticles($stkIdCurrent, "1", $whereClause, $f_mv_sort_stockArticle); // All articles with used areas of the whole subtree including the current stock elseif ($f_displayModeStockArticle == "2") : $stockArticles = showArticleSum($stkIdCurrent, $whereClause, $f_mv_sort_stockArticle); // All stocks with used areas but without articles elseif ($f_displayModeStockArticle == "3") : $stockArticles = showStockSum($stkIdCurrent, $whereClause); // All stocks with used areas but without articles elseif ($f_displayModeStockArticle == "4") : $stockArticles = showStockInventory($stkIdCurrent, "1", $whereClause, $f_mv_sort_stockArticle); // All articles with used areas of the whole subtree including the current stock and containing item data endif; $executeCommand = false; endif; // ****************** // * STOCK MOVEMENT * // ****************** // To enter a transaction (article movement) it would be easier to have a reduced list of stocks in relation to the root stock. $whereClauseMovementStocks = ""; if ($f_mv_modeStockEntries == "0") : // Display only stocks belonging to the current stock $whereClauseMovementStocks = "stk_id = '" . $stkIdCurrent . "' OR stk_path LIKE '%//" . $stkIdCurrent . "//%'"; elseif ($f_mv_modeStockEntries == "1") : // Display only stocks belonging to the current ROOT stock $whereClauseMovementStocks = "stk_id = '" . $stkIdRoot . "' OR stk_path LIKE '%//" . $stkIdRoot . "//%'"; elseif ($f_mv_modeStockEntries == "2") : // Display all stocks of ALL ROOT stocks (of the whole system) $whereClauseMovementStocks = ""; endif; $fromClauseMovementArticles = "article AS at, stock AS stk, stockarticle AS stkat"; $whereClauseMovementArticles = ""; if ($f_mv_modeArticleEntries == "0") : // Display only articles belonging to the current stock (all stocks of the current tree) $fromClauseMovementArticles = "article AS at, stock AS stk, stockarticle AS stkat"; $whereClauseMovementArticles = "at.at_id = stkat.at_id AND stkat.stk_id = stk.stk_id AND (stk.stk_id = '" . $stkIdCurrent . "' OR stk.stk_path LIKE '%//" . $stkIdCurrent . "//%') AND stkat.stkat_itemquantity > 0"; elseif ($f_mv_modeArticleEntries == "1") : // Display only articles belonging to the current ROOT stock (all stocks of the current tree) $fromClauseMovementArticles = "article AS at, stock AS stk, stockarticle AS stkat"; $whereClauseMovementArticles = "at.at_id = stkat.at_id AND stkat.stk_id = stk.stk_id AND (stk.stk_id = '" . $stkIdRoot . "' OR stk.stk_path LIKE '%//" . $stkIdRoot . "//%') AND stkat.stkat_itemquantity > 0"; elseif ($f_mv_modeArticleEntries == "2") : // Display all articles belonging to any root stocks (of the whole system) $fromClauseMovementArticles = "article AS at, stock AS stk, stockarticle AS stkat"; $whereClauseMovementArticles = "at.at_id = stkat.at_id AND stkat.stk_id = stk.stk_id"; elseif ($f_mv_modeArticleEntries == "3") : // Display all "NEW" articles NOT belonging to ANY stock (of the whole system) $fromClauseMovementArticles = "article AS at"; $whereClauseMovementArticles = "at.at_id NOT IN (SELECT DISTINCT stkat.at_id FROM stockarticle AS stkat)"; elseif ($f_mv_modeArticleEntries == "4") : // Display all articles (of the whole system), containing articles never booked before $fromClauseMovementArticles = "article AS at"; $whereClauseMovementArticles = ""; elseif ($f_mv_modeArticleEntries == "5") : // Display all articles of the specified article group if ($f_at_search_atg == "") : $f_at_search_atg = "0"; endif; $fromClauseMovementArticles = "article AS at, articlegroup AS atg, articlegroupitem AS atgi"; $whereClauseMovementArticles = "at.at_id = atgi.at_id AND atgi.md_id = '" . $md_id . "' AND atgi.atg_id = atg.atg_id AND atg.atg_id = '" . $f_at_search_atg. "'"; endif; // ***************** // * STOCK JOURNAL * // ***************** // Per default only the journal entries of the current stock will be displayed in the select box $whereClauseJournalStocks = ""; if ($f_journal_modeStockEntries == "0") : // Display only journal entries belonging to the current stock $whereClauseJournalStocks = "stk_id = '" . $stkIdCurrent . "'"; elseif ($f_journal_modeStockEntries == "1") : // Display only journal entries belonging to the current root stock (all stocks of the current tree) $whereClauseJournalStocks = "stk_id = '" . $stkIdCurrent . "' OR stk_path LIKE '%//" . $stkIdCurrent . "//%'"; elseif ($f_journal_modeStockEntries == "2") : // Display only journal entries belonging to the current root stock (all stocks of the current tree) $whereClauseJournalStocks = "stk_id = '" . $stkIdRoot . "' OR stk_path LIKE '%//" . $stkIdRoot . "//%'"; elseif ($f_journal_modeStockEntries == "3") : // Display all stocks of all root stocks (of the whole system) $whereClauseJournalStocks = ""; endif; // * SPECIAL USAGE AFTER BARCODE SCAN * // Use article id for filter $whereClauseBarcodeScan = ""; if ($js_execute_cmd == "1") : $whereClauseBarcodeScan = "stkmv.stkmv_serialno = '" . $js_execute_data . "'"; $executeCommand = true; endif; $showJournal = true; $whereClauseJournal = ""; $whereClauseJournalArray = array(); if ($f_act == "journalSearch" || $executeCommand) : if ($whereClauseBarcodeScan != "") : $whereClauseJournalArray[] = $whereClauseBarcodeScan; endif; // Filter according to access rights if ($emp_id != $empIdRootAdmin) : if ($stkRootAccessIDsEmpId != "") : $tmpClause = "(stk.stk_id IN (" . $stkRootAccessIDsEmpId . ")"; $tmpClause .= " OR stk2.stk_id IN (" . $stkRootAccessIDsEmpId . ")"; $stkRootAccessIDsEmpIdArrayLen = count($stkRootAccessIDsEmpIdArray); for ($i = 0; $i < $stkRootAccessIDsEmpIdArrayLen; $i++) : $tmpClause .= " OR stk.stk_path LIKE '%//" . $stkRootAccessIDsEmpIdArray[$i] . "//%'"; $tmpClause .= " OR stk2.stk_path LIKE '%//" . $stkRootAccessIDsEmpIdArray[$i] . "//%'"; endfor; $tmpClause .= ")"; $whereClauseJournalArray[] = $tmpClause; else : // No access to any root stock. Exclude all stocks !!! $whereClauseJournalArray[] = "stk.stk_id = '0'"; $showJournal = false; endif; endif; // Check for accessible substocks according to the rights of the current user if ($stkReadonlyWhereDefinedWriteaccess != "0") : $whereClauseAccessibleStocks .= getAccessibleSubstocks("1"); if ($whereClauseAccessibleStocks != "") : $whereClauseJournalArray[] .= " (" . $whereClauseAccessibleStocks . ") "; endif; endif; // Search mode for source and target stock if ($stkSearchMode == "1") : $tmpWhereClauseStkFrom = ""; if ($f_mv_search_stk_name_from != "") : if ($f_mv_search_stk_from_sub == "1") : $tmpWhereClauseStkFrom = "(stk.stk_id = '" . $f_mv_search_stk_name_from . "' OR stk.stk_path LIKE '%//" . $f_mv_search_stk_name_from . "//%')"; else : $tmpWhereClauseStkFrom = "stk.stk_id = '" . $f_mv_search_stk_name_from . "'"; endif; endif; $tmpWhereClauseStkTo = ""; if ($f_mv_search_stk_name_to != "") : if ($f_mv_search_stk_to_sub == "1") : $tmpWhereClauseStkTo = "(stk2.stk_id = '" . $f_mv_search_stk_name_to . "' OR stk2.stk_path LIKE '%//" . $f_mv_search_stk_name_to . "//%')"; else : $tmpWhereClauseStkTo = "stk2.stk_id = '" . $f_mv_search_stk_name_to . "'"; endif; endif; $tmpWhereClauseStk = ""; if ($tmpWhereClauseStkFrom != "") : $tmpWhereClauseStk .= $tmpWhereClauseStkFrom; endif; if ($tmpWhereClauseStkFrom != "" && $tmpWhereClauseStkTo != "") : $tmpWhereClauseStk .= " OR "; endif; if ($tmpWhereClauseStkTo != "") : $tmpWhereClauseStk .= $tmpWhereClauseStkTo; endif; if ($tmpWhereClauseStk != "") : $whereClauseJournalArray[] = "(" . $tmpWhereClauseStk . ")"; endif; else : if ($f_mv_search_stk_name_from != "") : if ($f_mv_search_stk_from_sub == "1") : $whereClauseJournalArray[] = "(stk.stk_id = '" . $f_mv_search_stk_name_from . "' OR stk.stk_path LIKE '%//" . $f_mv_search_stk_name_from . "//%')"; else : $whereClauseJournalArray[] = "stk.stk_id = '" . $f_mv_search_stk_name_from . "'"; endif; endif; if ($f_mv_search_stk_name_to != "") : if ($f_mv_search_stk_to_sub == "1") : $whereClauseJournalArray[] = "(stk2.stk_id = '" . $f_mv_search_stk_name_to . "' OR stk2.stk_path LIKE '%//" . $f_mv_search_stk_name_to . "//%')"; else : $whereClauseJournalArray[] = "stk2.stk_id = '" . $f_mv_search_stk_name_to . "'"; endif; endif; endif; $f_mv_search_at_misc = trim($f_mv_search_at_misc); if ($f_mv_search_at_misc != "") : $whereClauseJournalArray[] = "(at.at_eid LIKE '%" . $f_mv_search_at_misc . "%' OR at.at_name LIKE '%" . $f_mv_search_at_misc . "%' OR at.at_match LIKE '%" . $f_mv_search_at_misc . "%' OR at.at_description LIKE '%" . $f_mv_search_at_misc . "%' OR at.at_barcode LIKE '%" . $f_mv_search_at_misc . "%')"; endif; if ($f_mv_search_atg != "") : $whereClauseJournalArray[] = "atgi.atg_id = '" . $f_mv_search_atg . "'"; endif; // Search mode if ($searchMode == "1") : $f_mv_search_misc = trim($f_mv_search_misc); if ($f_mv_search_misc != "") : $whereClauseJournalArray[] = "(stkmv.stkmv_tan LIKE '%" . $f_mv_search_misc . "%' OR stkmv.stkmv_remark LIKE '%" . $f_mv_search_misc . "%' OR stkmv.stkmv_serialno LIKE '%" . $f_mv_search_misc . "%' OR stkmv.stkmv_data LIKE '%" . $f_mv_search_misc . "%')"; endif; else : $f_mv_search_tan_from = trim($f_mv_search_tan_from); if ($f_mv_search_tan_from != "") : $whereClauseJournalArray[] = "stkmv.stkmv_tan >= '" . $f_mv_search_tan_from . "'"; endif; $f_mv_search_tan_to = trim($f_mv_search_tan_to); if ($f_mv_search_tan_to != "") : $whereClauseJournalArray[] = "stkmv.stkmv_tan <= '" . $f_mv_search_tan_to . "'"; endif; $f_mv_search_remark = trim($f_mv_search_remark); if ($f_mv_search_remark != "") : $whereClauseJournalArray[] = "stkmv.stkmv_remark LIKE '%" . $f_mv_search_remark . "%'"; endif; $f_mv_search_serialno = trim($f_mv_search_serialno); if ($f_mv_search_serialno != "") : $whereClauseJournalArray[] = "stkmv.stkmv_serialno LIKE '%" . $f_mv_search_serialno . "%'"; endif; $f_mv_search_data = trim($f_mv_search_data); if ($f_mv_search_data != "") : $whereClauseJournalArray[] = "stkmv.stkmv_data LIKE '%" . $f_mv_search_data . "%'"; endif; endif; $f_mv_search_jb_id = trim($f_mv_search_jb_id); if ($f_mv_search_jb_id != "") : $whereClauseJournalArray[] = "stkmv.jb_id LIKE '%" . $f_mv_search_jb_id . "%'"; endif; // Ignore date interval if ($executeCommand || ($f_mv_search_tan_from != "" && $f_mv_search_tan_to != "") || $f_mv_search_serialno != "" || $f_mv_search_data != "" || $f_mv_search_jb_id != "" || $f_mv_search_misc != "") : $fromDateRange = ""; $toDateRange = ""; endif; if ($fromDateRange != "") : $whereClauseJournalArray[] = "stkmv.stkmv_timestamp >= '" . $fromDateRange . "'"; endif; if ($toDateRange != "") : $whereClauseJournalArray[] = "stkmv.stkmv_timestamp <= '" . $toDateRange . "'"; endif; if ($journalSearchDatetime != "") : $whereClauseJournalArray[] = "stkmv.stkmv_datetime2 = '" . $journalSearchDatetime . "'"; endif; if (count($whereClauseJournalArray) > 0) : $whereClauseJournal = implode(" AND ", $whereClauseJournalArray); endif; $executeCommand = false; else : $showJournal = false; // No search operation requested. Only take journal of the current stock to be displayed according to the date interval if ($stkIdCurrent != "") : $whereClauseJournal .= "stkmv.stkmv_timestamp >= '" . $fromDateRange . "' AND "; $whereClauseJournal .= "stkmv.stkmv_timestamp <= '" . $toDateRange . "' AND "; $whereClauseJournal .= "(stk.stk_id = '" . $stkIdCurrent . "' OR stk2.stk_id = '" . $stkIdCurrent . "')"; $showJournal = true; // Automatic preset of search parameters // $f_mv_search_stk_name_from = $stkNameCurrent // $f_mv_search_stk_name_to = $stkNameCurrent endif; endif; // Generate journal output $stockJournal = ""; if ($showJournal) : // Get configuration according ORDER BY field and direction (ASC/DESC) if ($f_mv_sort_journal == "") : $f_mv_sort_journal = "stkmv.stkmv_id"; endif; $maskStkJournalOrderByDirection = getParameterValue("0", "MASK_STK_JOURNAL_ORDERBY_DIRECTION_" . $tmpStkIdRoot, "0"); if ($maskStkJournalOrderByDirection == "") : $maskStkJournalOrderByDirection = $stkJournalOrderByDirectionArray; else : $maskStkJournalOrderByDirection = spliti(",",$maskStkJournalOrderByDirection); endif; $tmpOrderByDirection = ""; $pos = array_search($f_mv_sort_journal, $stkJournalFieldArray); if (!($pos === FALSE)) : if ($maskStkJournalOrderByDirection[$pos] == "1") : $tmpOrderByDirection = " DESC "; endif; endif; // Get journal $stockJournal = getStockJournal($whereClauseJournal, $f_mv_sort_journal, "", $tmpOrderByDirection); endif; if ($f_act == "journalSearch" && $numOfJournalEntries == 0) : $stockJournal .= "" . getLngt("Kein Eintrag im Suchergebnis!") . ""; else : $stockJournal .= "" . getLngt("Anzahl angezeigter Einträge:") . " " . $numOfJournalEntries . ""; endif; // ************ // * OUTPUT * // ************ // Display $f_stk_planning_0 = ""; if ($f_stk_planning == "1") : $f_stk_planning_0 = "checked"; // Get max quantity of the whole subtree of the current stock $stkNextSublevelMaxQuantity = getFieldSumOfNextSubLevelOfTree("stk_maxquantity", $stkIdCurrent, "stock", "stk_pre_id", ""); // Get quantity of places occupied by articles $articlePlaceQuantityOfCurrentStock = getStockArticleQuantitySubtree($stkIdCurrent, "1", "", ""); endif; // Special treatment of the data fields of the article move to be displayed if ($f_mv_serialno == "") : $maskDisplayMoveDataFieldsSwitch = "0"; endif; // Date range for stock journal $currentFrameName = ""; // Empty string for "main frame" $filter_dateranges = ""; $stkmvSpecialDate = ""; $js_date = ""; if (true) : // Date-ranges for journal search $filter_dateranges .= "" . getLngt("Von:") . "\n"; $filter_dateranges .= "\n"; $filter_dateranges .= "\n"; $filter_dateranges .= "\n"; $filter_dateranges .= "  " . getLngt("bis:") . "\n"; $filter_dateranges .= "\n"; $filter_dateranges .= "\n"; $filter_dateranges .= "\n"; $filter_dateranges .= ""; // Special date fields associated to the disposition of a stock movement $stkmvSpecialDate .= "\n"; $stkmvSpecialDate .= "\n"; $stkmvSpecialDate .= "\n"; // Javascript-function as template only for $js_date .= "\n"; endif; endif; ?> <?php echo getLngt("LAGERORTE") ?>
       
    
    
    
    
    
    
    
    
       
"; echo "  "; echo "
"; echo defineButtonType10(getLngt("Anlegen"), "action_new", "stkFinishPage('" . ec("newStock") . "');", "100", "left", "2"); echo defineButtonType10(getLngt("Umbenennen"), "action_rename", "stkFinishPage('" . ec("renameStock") . "');", "100", "left", "2"); endif; ?>       
       
:
>
          >                   
>
  
>
  
>
      
  Keine Prüfung     
 
"; endif; ?>
>
    
\n"; echo ""; $stkJournalTitleArrayLen = count($stkJournalTitleArray); for ($i = 0; $i < $stkJournalTitleArrayLen; $i++) : if ($maskStkJournalHeadlines[$i] != "") : $stkJournalTitleArray[$i] = $maskStkJournalHeadlines[$i]; endif; echo ""; echo "\n"; echo "\n"; echo ""; endfor; echo "
" . getLngt("Angezeigte Spalten im Journal:") . "   " . getLngt("Absteigende Sortierung:") . "
  " . $stkJournalTitleArray[$i] . "  
\n"; ?>
           =  (   +   )  +  frei:    0 && ($articlePlaceQuantityOfCurrentStock + $stkNextSublevelMaxQuantity) == $f_stk_maxquantity) : echo "" . getLngt("KAPAZITÄT ERSCHÖPFT!") . ""; endif; ?> 0 && ($f_stk_maxquantity - $stkNextSublevelMaxQuantity) > 0 && $articlePlaceQuantityOfCurrentStock == 0) : echo getLngt("(Alle nicht reservierten Plätze frei!)"); endif; ?>  
   
     
  >
                    
            >   
" . $tmpHeadlinesArray[$i] . ":"; endif; endfor; ?>
Weitere Datenfelder:
              
              
              
   
onfocus="javascript:setScanFocus();">  onfocus="javascript:setScanFocus();" >        
   
                
  >
 

      -                
  Suche  onChange="stkFinishPage('');">  onChange="stkFinishPage('');">     onChange="stkFinishPage('');">UNDiert  onChange="stkFinishPage('');">geODERt