0) : $retArray = array_merge($retArray, $tmpArray); endif; // Check GDC $tmpArray = getColVectorFromDB2ArrayByClause("genericdatacontainer", "gdc_obj_id", "gdc_obj_type = 'jb' AND gdc_gen_fieldname = 'jb_search' AND gdc_content = '" . $searchItem . "'", "", "", ""); if (count($tmpArray) > 0) : $retArray = array_merge($retArray, $tmpArray); endif; $tmpArray = getColVectorFromDB2ArrayByClause("genericdatacontainer", "gdc_obj_id", "gdc_obj_type = 'jb' AND gdc_gen_fieldname = 'info_0' AND gdc_content = '" . $searchItem . "'", "", "", ""); if (count($tmpArray) > 0) : $retArray = array_merge($retArray, $tmpArray); endif; endif; return $retArray; } // Gets last (youngest) job ID function getLastJob ($objId, $objType = "cs", $noStorno = "1", $specialClause = "") { $retVal = ""; if ($objId != "" && is_numeric($objId)) : $whereClause = ""; if ($objType == "cmp.cs" || $objType == "cmp") : $objId = getFieldValueFromId("customer", "cmp_id", $objId, "cs_id"); $objType = "cs"; endif; if ($objType == "cmp.cr") : $objId = getFieldValueFromId("courier", "cmp_id", $objId, "cr_id"); $objType = "cr"; endif; if ($objType == "cs") : $cscIdArray = getColVectorFromDB2ArrayByClause("costcenter", "csc_id", "cs_id = '" . $objId . "'", "", "", ""); if (count($cscIdArray) > 0) : $whereClause = " csc_id_payer IN (" . implode(",",$cscIdArray) . ") "; endif; endif; if ($objType == "csc") : $whereClause = " csc_id_payer = '" . $objId . "' "; endif; if ($objType == "cr") : $whereClause = " cr_id = '" . $objId . "' "; endif; if ($noStorno == "1") : $whereClause .= " AND (isnull(jb_storno) OR jb_storno = '0' OR jb_storno = '1') "; endif; if ($specialClause != "") : $whereClause .= " AND " . $specialClause; endif; $retVal = getOneStmt("SELECT jb_id FROM job WHERE " . $whereClause . " ORDER BY jb_id DESC LIMIT 0,1", "jb_id"); endif; return $retVal; } // Gets the total weight of all articles of a job function getTratTotalweight ($jbId, $trSort = "") { global $db, $PHP_SELF; $retVal = 0; if ($jbId != "" && is_numeric($jbId)) : // Get data from the job $whereClause = ""; if ($trSort != "" && is_numeric($trSort)) : $whereClause .= " AND trat.tr_sort = '" . $trSort . "' "; endif; $sqlquery = "SELECT SUM(trat.trat_weight) AS weight FROM tourarticle AS trat WHERE trat.jb_id = '" . $jbId . "'" . $whereClause; $result = $db->query($sqlquery); if (DB::isError($result)) die ("$PHP_SELF: " . $result->getMessage()); while ($row = $result->fetch_assoc()): if ($row["weight"] != "" && $row["weight"] != "0") : $retVal = $row["weight"]; endif; endwhile; $result->free(); endif; return $retVal; } // Gets the sum of packing pieces of all articles of a job function getTratPackingPieces ($jbId, $trSort = "") { global $db, $PHP_SELF; $retVal = 0; if ($jbId != "" && is_numeric($jbId)) : // Get data from the job $whereClause = ""; if ($trSort != "" && is_numeric($trSort)) : $whereClause .= " AND trat.tr_sort = '" . $trSort . "' "; endif; $sqlquery = "SELECT SUM(trat.trat_packingpieces) AS packingpieces FROM tourarticle AS trat WHERE trat.jb_id = '" . $jbId . "'" . $whereClause; $result = $db->query($sqlquery); if (DB::isError($result)) die ("$PHP_SELF: " . $result->getMessage()); while ($row = $result->fetch_assoc()): if ($row["packingpieces"] != "" && $row["packingpieces"] != "0") : $retVal = $row["packingpieces"]; endif; endwhile; $result->free(); endif; return $retVal; } // Gets customer group function getCustomerGroupIdFromJob ($jbId, $cscId = "", $cscFieldMode = "") { global $db, $PHP_SELF; $retVal = ""; if ($jbId != "" && is_numeric($jbId) && $cscId == "") : $cscField = "csc_id_related"; if ($cscFieldMode == "1") : $cscField = "csc_id_payer"; endif; $cscId = getFieldValueFromId("job", "jb_id", $jbId, $cscField); // Get the requested costcenter ID of the job endif; if ($cscId != "" && is_numeric($cscId)) : $csId = getFieldValueFromId("costcenter", "csc_id", $cscId, "cs_id"); // Get "cs_id" of the related costcenter $grpStr = getFieldValueFromId("customer", "cs_id", $csId, "cs_group"); // Get (static) group of the customer if ($grpStr != "") : $grpArray = spliti(",", $grpStr); $retVal = $grpArray[1]; // Because of first sign of $tmpGrpStr is "," take array element with index "1" (and not "0") endif; endif; return $retVal; } // Gets associated articles of a special station of a job in "tourarticle" function getTratArticles ($jbId, $trSort = "", $specialWhereClause = "") { global $db, $PHP_SELF; $retArray = array(); if ($jbId != "" && is_numeric($jbId)) : $whereClause = ""; if ($trSort != "" && is_numeric($trSort)) : $whereClause .= " AND trat.tr_sort = '" . $trSort . "' "; endif; if ($specialWhereClause != "") : $whereClause .= " AND " . $specialWhereClause . " "; endif; /* Article has to exist in table "article" $sqlquery = "SELECT trat.trat_id, trat.tr_id, trat.at_id, trat.trat_quantity, trat.trat_price, trat.trat_sort, trat.trat_packingpieces, trat.trat_weight, trat.trat_int_serialno, trat.trat_serialno, trat.trat_state, trat.trat_remark, at.at_name, at.at_description" . " FROM article AS at, tourarticle AS trat" . " WHERE trat.jb_id = '" . $jbId . "' AND trat.at_id = at.at_id" . $whereClause . " ORDER BY trat.tr_sort, trat.trat_sort"; */ // ATTENTION: Data from "tourarticle" ONLY, MAPPING trat.trat_serialno => trat.trat_name, trat.trat_remark => trat.trat_description !!!! $sqlquery = "SELECT trat.trat_id, trat.tr_id, trat.at_id, trat.trat_quantity, trat.trat_price, trat.trat_sort, trat.trat_packingpieces, trat.trat_weight, trat.trat_int_serialno, trat.trat_serialno, trat.trat_state, trat.trat_remark," . " trat.trat_serialno, trat.trat_name, trat.trat_remark AS trat_description" . " FROM tourarticle AS trat" . " WHERE trat.jb_id = '" . $jbId . "'" . $whereClause . " ORDER BY trat.tr_sort, trat.trat_sort"; $result = $db->query($sqlquery); if (DB::isError($result)) die ("$PHP_SELF: " . $result->getMessage()); while ($row = $result->fetch_assoc()): $retArray[] = array($row["at_id"], $row["trat_quantity"], $row["trat_sort"], $row["trat_packingpieces"], $row["trat_serialno"], $row["trat_state"], $row["trat_remark"], $row["trat_price"], $row["trat_name"], $row["trat_description"], $row["trat_weight"], $row["trat_id"], $row["tr_id"], $row["trat_int_serialno"]); endwhile; $result->free(); endif; return $retArray; } // Gets associated articles of a special station of a job in "tourarticle" function getValueOfGoodsOfTratArticles ($atArray, $cDateTime, $grpId, $csId, $mtSort = "", $mode = 0) { global $db, $PHP_SELF; $retVal = 0; if ($atArray != "" && is_array($atArray)) : $atArrayLen = count($atArray); for ($i = 0; $i < $atArrayLen; $i++) : // Try to get price from "articleprice" for this article $tmpAtPrice = ""; $atId = $atArray[$i][0]; $tratQuantity = $atArray[$i][1]; if ($mtSort != "") : if ($csId != "") : $tmpAtPrice = getArticleServiceValues($atId, $cDateTime, "", $csId, $mtSort, $mode); // Check for article SPECIAL price of the SPECIAL customer endif; if (($tmpAtPrice == "" || $tmpAtPrice == 0) && $grpId == "") : $tmpAtPrice = getArticleServiceValues($atId, $cDateTime, $grpId, "", $mtSort, $mode); // Check for article SPECIAL group price endif; endif; if (($tmpAtPrice == "" || $tmpAtPrice == 0) && $csId != "") : $tmpAtPrice = getArticleServiceValues($atId, $cDateTime, "", $csId, "", 0); // Check for article STANDARD price of the SPECIAL customer endif; if (($tmpAtPrice == "" || $tmpAtPrice == 0) && $grpId != "") : $tmpAtPrice = getArticleServiceValues($atId, $cDateTime, $grpId, "", "", "", 0); // Check for article STANDARD group price endif; if ($tmpAtPrice != "" && is_numeric($tmpAtPrice)) : if ($tratQuantity != "" && is_numeric($tratQuantity)) : $tmpAtPrice *= $tratQuantity; endif; $retVal += $tmpAtPrice; endif; endfor; endif; return $retVal; } // Gets output of tourarticle data for a sepecified job function getOutputJobTratArticleData ($jb_id, $noTitle = "", $noHeadline = "", $noSummation = "", $noDefaultCols = "", $trSort = "") { global $db, $PHP_SELF; global $hq_id; $retVal = ""; if ($jb_id != "" && is_numeric($jb_id)) : $outputTourarticle = ""; if ($trSort == "") : $trSort = "2"; endif; $tratArray = getTratArticles($jb_id, $trSort); $tratArrayLen = count($tratArray); if ($tratArrayLen > 0) : if ($noTitle == "") : $outputTourarticle .= "" . getLngt("Artikel") . "
"; endif; // Parameter for displaying scan events $parOutputArticleScanEvents = getParameterValue("0", "MASK_JOBDETAILS_ARTICLE_SCAN_EVENTS", $hq_id); if ($parOutputArticleScanEvents == "") : $parOutputArticleScanEvents = getParameterValue("0", "MASK_JOBDETAILS_ARTICLE_SCAN_EVENTS", "0"); endif; // Headline if ($noHeadline == "") : $parOutputArticlesHeadline = getParameterValue("0", "MASK_JOBDETAILS_ARTICLE_HEADLINE", $hq_id); if ($parOutputArticlesHeadline == "") : $parOutputArticlesHeadline = getParameterValue("0", "MASK_JOBDETAILS_ARTICLE_HEADLINE", "0"); endif; if ($parOutputArticlesHeadline == "") : $parOutputArticlesHeadline = getLngt("ID,Menge,Sortierung,Packstücke,Seriennummer,Status,Bemerkung,Preis,Nummer,Artikelbeschreibung,Gewicht"); endif; if ($parOutputArticleScanEvents == "1") : $parOutputArticlesHeadline .= ",Auslieferstatus"; endif; $parOutputArticlesHeadlineArray = spliti(",", $parOutputArticlesHeadline); endif; // Body with articles $parOutputArticles = getParameterValue("0", "MASK_JOBDETAILS_ARTICLES", $hq_id); if ($parOutputArticles == "") : $parOutputArticles = getParameterValue("0", "MASK_JOBDETAILS_ARTICLES", "0"); endif; if ($parOutputArticles == "" && $noDefaultCols == "") : $parOutputArticles = "9,8,1,10,3,7"; // Default cols (at_description, at_name, trat_quantity, trat_weight, trat_packingpieces, trat_price) endif; if ($parOutputArticleScanEvents == "1") : if ($parOutputArticles != "") : $parOutputArticles .= ","; endif; $parOutputArticles .= "4,99"; endif; $parOutputArticlesArray = spliti(",", $parOutputArticles); $parOutputArticlesArrayLen = count($parOutputArticlesArray); $outputTourarticle .= ""; // Output headline if ($noHeadline == "") : // $outputTourarticle .= ""; $outputTourarticle .= ""; for ($j = 0; $j < $parOutputArticlesArrayLen; $j++) : $tmpVal = $parOutputArticlesArray[$j]; // !!!! $outputTourarticle .= ""; endfor; $outputTourarticle .= ""; endif; // Output body with articles $sumOfTratPackingPieces = 0; $sumOfTratWeight = 0; $sumOfTratPrice = 0; for ($i = 0; $i < $tratArrayLen; $i++) : $outputTourarticle .= ""; /* STATIC OUTPUT $outputTourarticle .= ""; // at_description $outputTourarticle .= ""; // at_name $outputTourarticle .= ""; // trat_quantity $outputTourarticle .= ""; // trat_weight $outputTourarticle .= ""; // trat_packingpieces $outputTourarticle .= ""; // trat_price */ for ($j = 0; $j < $parOutputArticlesArrayLen; $j++) : $tmpVal = $parOutputArticlesArray[$j]; if ($tmpVal != "") : if ($tmpVal == "9") : $outputTourarticle .= ""; elseif ($tmpVal == "8") : $outputTourarticle .= ""; elseif ($tmpVal == "7" || $tmpVal == "10") : $outputTourarticle .= ""; elseif ($tmpVal == "99") : $tratpState = getFieldValueFromId("tourarticleprocess", "trat_id", $tratArray[$i][11], "tratp_state"); // $outputTourarticle .= ""; // $outputTourarticle .= ""; else : $outputTourarticle .= ""; endif; endif; endfor; $outputTourarticle .= ""; $sumOfTratPackingPieces += $tratArray[$i][3]; $sumOfTratPrice += $tratArray[$i][7]; $sumOfTratWeight += $tratArray[$i][10]; endfor; if ($noSummation == "") : $outputTourarticle .= ""; $outputTourarticle .= ""; $outputTourarticle .= ""; $outputTourarticle .= ""; $outputTourarticle .= ""; $outputTourarticle .= ""; $outputTourarticle .= ""; // Check for additional article info in GDC $gdcContentJbAddedInfo = getFieldValueFromClause("genericdatacontainer", "gdc_content", "gdc_obj_type = 'jb' AND gdc_obj_id = '" . $jb_id . "' AND gdc_gen_fieldname = 'jb_addinfo'"); if ($gdcContentJbAddedInfo) : $outputTourarticle .= ""; $outputTourarticle .= ""; $outputTourarticle .= ""; endif; endif; $outputTourarticle .= "
" . getLngt("Artikelbeschreibung") . " " . getLngt("Nummer") . " " . getLngt("Menge") . " " . getLngt("Gewicht") . " " . getLngt("Packstücke") . " " . getLngt("Preis") . " 
" . getLngt($parOutputArticlesHeadlineArray[$tmpVal]) . " 
" . substr($tratArray[$i][9], 0, 50) . " " . $tratArray[$i][8] . "" . $tratArray[$i][1] . "" . number_format(round($tratArray[$i][10], 2), 2, ",", ".") . "" . $tratArray[$i][3] . "" . number_format(round($tratArray[$i][7], 2), 2, ",", ".") . "" . substr($tratArray[$i][$tmpVal], 0, 50) . " " . $tratArray[$i][$tmpVal] . "" . number_format(round($tratArray[$i][$tmpVal], 2), 2, ",", ".") . "" . ($tratpState == "1" ? getLngt("OK") : getLngt("Nicht OK")) . "" . ($tratpState == "1" ? "  " . getLngt("OK") : "") . "" . $tratArray[$i][$tmpVal] . "
" . getLngt("Gesamtanzahl Packstücke") . " : " . $sumOfTratPackingPieces . "" . getLngt("Gesamtwarenwert") . " : " . number_format(round($sumOfTratPrice, 2), 2, ",", ".") . "
" . getLngt("Gesamtgewicht") . " : " . number_format(round($sumOfTratWeight,2), 2, ",", ".") . "


" . nl2br($gdcContentJbAddedInfo) . "
"; $outputTourarticle .= "
"; endif; $retVal = $outputTourarticle; endif; return $retVal; } // Gets calculator entries of a special station of a job in "jobcalculator" function getCalculatorData ($jbId, $trSort = "", $indexValue = "", $mode = "") { global $db, $PHP_SELF; $retArray = array(); if ($jbId != "" && is_numeric($jbId)) : $whereClause = ""; if ($trSort != "" && is_numeric($trSort)) : $whereClause .= " AND jbc.tr_sort = '" . $trSort . "' "; endif; $sqlquery = "SELECT jbc.srv_name, jbc.jbc_totalprice, jbc.jbc_amount, jbc.jbc_price, jbc.srv_id, jbc.srvt_name" . " FROM jobcalculator AS jbc" . " WHERE jbc.jb_id = '" . $jbId . "'" . $whereClause . " ORDER BY jbc.jb_id, jbc.tr_sort, jbc.srv_name"; $result = $db->query($sqlquery); if (DB::isError($result)) die ("$PHP_SELF: " . $result->getMessage()); $count = 0; while ($row = $result->fetch_assoc()): if ($indexValue == "" || (is_numeric($indexValue) && $indexValue == $count)) : if ($mode == "1") : $retArray["srv_name"] = $row["srv_name"]; $retArray["jbc_totalprice"] = $row["jbc_totalprice"]; $retArray["jbc_amount"] = $row["jbc_amount"]; $retArray["jbc_price"] = $row["jbc_price"]; $retArray["srv_id"] = $row["srv_id"]; $retArray["srvt_name"] = $row["srvt_name"]; else : $retArray[] = array($row["srv_name"], $row["jbc_totalprice"], $row["jbc_amount"], $row["jbc_price"], $row["srv_id"], $row["srvt_name"]); endif; endif; $count++; endwhile; $result->free(); endif; return $retArray; } // Gets calculator price function getCalculatorPrice ($calcArray, $mode = 0) { global $db, $PHP_SELF; $retVal = 0; if ($calcArray != "" && is_array($calcArray)) : $calcArrayLen = count($calcArray); for ($i = 0; $i < $calcArrayLen; $i++) : // Get price for this calculator entry $jbcTotalprice = $calcArray[$i][1]; $retVal += $jbcTotalprice; endfor; endif; return $retVal; } // Gets all price entries of a special job in "jobprice" function getJobPriceData ($jbId, $mtSort = "", $indexValue = "", $mode = "") { global $db, $PHP_SELF; $retArray = array(); if ($jbId != "" && is_numeric($jbId)) : $whereClause = ""; if ($mtSort != "" && is_numeric($mtSort)) : $whereClause .= " AND jbprc.mt_sort = '" . $mtSort . "' "; endif; $sqlquery = "SELECT jbprc.mt_sort, mt.mt_value, mt.mt_mapped_value, jbprc.jbprc_price, jbprc.jbprc_remark, jbprc.jbprc_reference" . " FROM jobprice AS jbprc, metatype AS mt" . " WHERE jbprc.jb_id = '" . $jbId . "'" . $whereClause . " AND jbprc.mt_sort = mt.mt_sort AND mt.mt_type = 'job_price'" . " ORDER BY jbprc.jb_id, jbprc.mt_sort"; $result = $db->query($sqlquery); if (DB::isError($result)) die ("$PHP_SELF: " . $result->getMessage()); $count = 0; while ($row = $result->fetch_assoc()): if ($indexValue == "" || (is_numeric($indexValue) && $indexValue == $count)) : if ($mode == "1") : $retArray["mt_sort"] = $row["mt_sort"]; $retArray["mt_value"] = $row["mt_value"]; $retArray["mt_mapped_value"] = $row["mt_mapped_value"]; $retArray["jbprc_price"] = $row["jbprc_price"]; $retArray["jbprc_remark"] = $row["jbprc_remark"]; $retArray["jbprc_reference"] = $row["jbprc_reference"]; else : $retArray[] = array($row["mt_sort"], $row["mt_value"], $row["mt_mapped_value"], $row["jbprc_price"], $row["jbprc_remark"], $row["jbprc_reference"]); endif; endif; $count++; endwhile; $result->free(); endif; return $retArray; } // Gets output of the job ID regarding the global mode of usage function getJobIdOutput ($jbId, $jbIdParent = "") { global $db, $PHP_SELF, $globalParUseRelatedCustomer; $retOut = ""; if ($jbId != "" && is_numeric($jbId)) : // Get global mode of usage if ($globalParUseRelatedCustomer == "") : $globalParUseRelatedCustomer = getParameterValue("0", "GLOBAL_USE_RELATED_CUSTOMER", "0"); endif; // Output of the job ID $retOut = $jbId; if ($globalParUseRelatedCustomer == "1") : if ($jbIdParent == "" || !is_numeric($jbIdParent)) : $jbIdParent = getFieldValueFromId("job", "jb_id", $jbId, "jb_id_parent"); endif; $retOut = $jbId . "/1"; if ($jbIdParent != "" && $jbIdParent > 0) : $retOut = $jbIdParent . "/2"; endif; endif; endif; return $retOut; } // Gets output of the job ID on the disposition drag bar // (E.g. "20123" => "2"."
") function getJobIdDragBarOutput ($jbIdOut, $stringLen = "", $delimiter = "
", $fontSize = "7", $fontCol = "blue") { $retOut = ""; $jbIdOut = trim($jbIdOut); if ($stringLen != "" && is_numeric($stringLen)) : $jbIdOut = substr($jbIdOut,0,$stringLen); endif; if ($jbIdOut != "") : $retOut .= ""; $jbIdOutLen = strlen($jbIdOut); for ($j = 0; $j < $jbIdOutLen; $j++) : $retOut .= substr($jbIdOut,$j,1) . $delimiter; endfor; $retOut .= ""; endif; return $retOut; } // Gets real job number regarding the search item function getJobIdSearchOutput ($searchItem) { global $db, $PHP_SELF, $globalParUseRelatedCustomer; $searchItem = trim($searchItem); if ($searchItem != "") : // Get global mode of usage if ($globalParUseRelatedCustomer == "") : $globalParUseRelatedCustomer = getParameterValue("0", "GLOBAL_USE_RELATED_CUSTOMER", "0"); endif; if ($globalParUseRelatedCustomer == "1") : if (substr($searchItem,-2) == "/1") : $searchItem = substr($searchItem,0,-2); endif; if (substr($searchItem,-2) == "/2") : $searchItem = substr($searchItem,0,-2); if (is_numeric($searchItem)) : $searchItem = getFieldValueFromId("job", "jb_id_parent", $searchItem, "jb_id"); endif; endif; endif; endif; $retVal = $searchItem; return $retVal; } // Gets parent cascade level function getJobParentCascadeLevel ($jbId, $retLevel = 0) { if ($jbId != "" && is_numeric($jbId)) : $jbIdParent = getFieldValueFromId("job", "jb_id", $jbId, "jb_id_parent"); if ($jbIdParent != "" && $jbIdParent > 0) : $retLevel = getJobParentCascadeLevel($jbId, ($retLevel + 1)); endif; endif; return $retLevel; } // Get an array of timeunit chunks according to parameters // E.g. getNumericChunksBySplit(120, 48) => array(48,48,24) function getNumericChunksBySplit ($value, $chunkLength) { global $hq_id; $retArray = array(); if ($value != "" && is_numeric($value) && $chunkLength != "" && is_numeric($chunkLength)) : $count = floor($value / $chunkLength); for ($i = 0; $i <= $count; $i++) : if ($value > $chunkLength) : $retArray[$i] = $chunkLength; $value -= $chunkLength; elseif ($value == $chunkLength) : $retArray[$i] = $value; break; else : $retArray[$i] = $value; endif; endfor; endif; return $retArray; } // Check job having more time units than the defined maximum from parameter of the related customer // Returns an array. If jb_timeunits of the job e.g. equals 116 than the array will be filled with: // Day 0 <=> Day of the begin of the job <=> retArray[0] = 48 (e.g. $csRelatedMaxTimeunitsService = 48) // Day 1 <=> Day of the begin of the job <=> retArray[1] = 48 (e.g. $csRelatedMaxTimeunitsService = 48) // Day 2 <=> Day of the begin of the job <=> retArray[2] = 20 (rest of example with 116) function getMultipleDayJobTimeUnitsPerDay ($jbId, $csId = "") { global $hq_id; $retArray = array(); if ($jbId != "" && is_numeric($jbId)) : // Get related customer if needed if ($csId == "" || $csId == "0") : $cscIdRelated = getFieldValueFromId("job", "jb_id", $jbId, "csc_id_related"); $csId = getFieldValueFromId("costcenter", "csc_id", $cscIdRelated, "cs_id"); endif; // Get number of maximum timeunits of the whole day // $numOfTimeUnitsOfTheSelectedDay = getNumOfTimeUnitsBetweenInterval($csId); // Get number of time units of the related customer $csRelatedMaxTimeunitsService = getObjectBasedParameterValue("JB_SERVICE_INSTALLAION_MAX_TIMEUNITS", $csId, $hq_id); if ($csRelatedMaxTimeunitsService == "") : $csRelatedMaxTimeunitsService = 48; endif; // Standard fallback // Get number of time units of the current job $jbTimeunits = getFieldValueFromId("job", "jb_id", $jbId, "jb_timeunits"); if ($jbTimeunits != "" && is_numeric($jbTimeunits)) : $retArray = getNumericChunksBySplit($jbTimeunits, $csRelatedMaxTimeunitsService); endif; endif; return $retArray; } // If job is an installation job AND at least one child job does exist, then the current job is a multiple day job /* function isMultipleDayJob ($jbId, $csId = "") { $retVal = "0"; if ($jbId != "" && is_numeric($jbId)) : // Get service of the job $jbService = getFieldValueFromId("job", "jb_id", $jbId, "jb_service"); if (($jbService & 2) == 2) : // Get child ID $jbIdChild = getFieldValueFromId("job", "jb_id_parent", $jbId, "jb_id"); if ($jbIdChild != "" && is_numeric($jbIdChild)) : $retVal = "1"; endif; endif; endif; return $retVal; } */ // Check job having more time units than the defined maximum from parameter of the related customer function isMultipleDayJob ($jbId, $csId = "") { global $hq_id; $retVal = "0"; if ($jbId != "" && is_numeric($jbId)) : // Get service of the job // $jbService = getFieldValueFromId("job", "jb_id", $jbId, "jb_service"); // if (($jbService & 2) == 2) : // [1.] Check for current representation in FDS being a job for multiple days $dayArray = getColVectorFromDB2ArrayByClause("vehicledisposition", "LEFT(vhd_timeslot,10) AS day", "jb_id = '" . $jbId . "'", "", "", "DISTINCT"); $dayArrayLen = count($dayArray); if ($dayArrayLen >= 2) : $retVal = "1"; endif; // [2.] Check for time units being a job for multiple days if ($retVal == "0") : $daysWithJobTimeUnitsArray = getMultipleDayJobTimeUnitsPerDay($jbId, $csId); $daysWithJobTimeUnitsArrayLen = count($daysWithJobTimeUnitsArray); if ($daysWithJobTimeUnitsArrayLen > 1) : // The array has more than one element and thefore the job involves more days $retVal = "1"; endif; endif; // endif; endif; return $retVal; } // Gets sales tax rate for a special job function getSalesTaxFactor ($jb_id) { global $db, $PHP_SELF; $taxFactor = 1.19; // Init if ($jb_id != "" && is_numeric($jb_id)) : // Get tax value associated to the job $jbTxId = getFieldValueFromId("job", "jb_id", $jb_id, "jb_sales_tax_rate"); if ($jbTxId != "" && $jbTxId != 0) : $jbTxValue = getFieldValueFromId("tax", "tx_id", $jbTxId, "tx_value"); if ($jbTxValue != "" && is_numeric($jbTxValue)) : $taxFactor = 1 + ($jbTxValue / 100); endif; endif; endif; return $taxFactor; } // Gets output of jobcalculator data for a sepecified job function getOutputJobCalculatorData ($jb_id, $noTitle = "") { global $db, $PHP_SELF; $retVal = ""; if ($jb_id != "" && is_numeric($jb_id)) : // Get tax value assotiated to the job $taxFactor = getSalesTaxFactor($jb_id); $jbcArray = getCalculatorData($jb_id, "2"); $jbcArrayLen = count($jbcArray); if ($jbcArrayLen > 0) : if ($noTitle == "") : $outputJobcalculator .= "" . getLngt("Rechnungsposten") . "
"; endif; $outputJobcalculator .= ""; $outputJobcalculator .= ""; $sumOfJbcTotalprice = 0; for ($i = 0; $i < $jbcArrayLen; $i++) : $outputJobcalculator .= ""; $outputJobcalculator .= ""; // jbc.srv_name $outputJobcalculator .= ""; // jbc.jbc_amount $outputJobcalculator .= ""; // jbc.jbc_price $outputJobcalculator .= ""; // jbc.jbc_totalprice $outputJobcalculator .= ""; $sumOfJbcTotalprice += $jbcArray[$i][1]; endfor; $outputJobcalculator .= ""; $outputJobcalculator .= ""; $outputJobcalculator .= ""; $outputJobcalculator .= "
" . getLngt("Posten") . " " . getLngt("Anzahl") . " " . getLngt("Preis") . " " . getLngt("Gesamtpreis") . " 
" . substr($jbcArray[$i][0], 0, 50) . "" . $jbcArray[$i][2] . "" . number_format(round(($jbcArray[$i][3] * $taxFactor), 2), 2, ",", ".") . "" . number_format(round(($jbcArray[$i][1] * $taxFactor), 2), 2, ",", ".") . "
" . getLngt("Gesamt") . " : " . number_format(round(($sumOfJbcTotalprice * $taxFactor), 2), 2, ",", ".") . "
"; $outputJobcalculator .= "
"; endif; $retVal = $outputJobcalculator; endif; return $retVal; } // Gets output of jobcalculator data for a sepecified job function getOutputJobPriceData ($jb_id, $noTitle = "", $showZeroPrice = "") { global $db, $PHP_SELF; $retVal = ""; if ($jb_id != "" && is_numeric($jb_id)) : // Get tax value assotiated to the job $taxFactor = getSalesTaxFactor($jb_id); $jbprcArray = getJobPriceData($jb_id); $jbprcArrayLen = count($jbprcArray); if ($jbprcArrayLen > 0) : if ($noTitle == "") : $outputJobcalculator .= "" . getLngt("Beträge zum Auftrag") . "
"; endif; $outputJobcalculator .= ""; $outputJobcalculator .= ""; $sumOfjbprcTotalprice = 0; $remMtSort = $jbprcArray[0][0]; for ($i = 0; $i < $jbprcArrayLen; $i++) : if ($jbprcArray[$i][3] != 0 || $showZeroPrice != "") : if ($remMtSort != $jbprcArray[$i][0]) : $outputJobcalculator .= ""; $remMtSort = $jbprcArray[$i][0]; $sumOfjbprcTotalprice = 0; endif; $outputJobcalculator .= ""; $outputJobcalculator .= ""; // mt.mt_mapped_value $outputJobcalculator .= ""; // jbprc.jbprc_remark $outputJobcalculator .= ""; // jbprc.jbprc_price $outputJobcalculator .= ""; $sumOfjbprcTotalprice += $jbprcArray[$i][3]; endif; endfor; $outputJobcalculator .= ""; // $outputJobcalculator .= ""; // $outputJobcalculator .= ""; // $outputJobcalculator .= ""; $outputJobcalculator .= "
" . getLngt("Preiskategorie") . " " . getLngt("Service") . " " . getLngt("Preis") . " 
" . getLngt("Summe") . "" . number_format(round(($sumOfjbprcTotalprice * $taxFactor), 2), 2, ",", ".") . "
" . $jbprcArray[$i][2] . "" . $jbprcArray[$i][4] . "" . number_format(round(($jbprcArray[$i][3] * $taxFactor), 2), 2, ",", ".") . "
" . getLngt("Summe") . "" . number_format(round(($sumOfjbprcTotalprice * $taxFactor), 2), 2, ",", ".") . "
" . getLngt("Gesamt") . " : " . number_format(round(($sumOfjbprcTotalprice * $taxFactor), 2), 2, ",", ".") . "
"; $outputJobcalculator .= "
"; endif; $retVal = $outputJobcalculator; endif; return $retVal; } // Output of sign image out of a given sign vector function getSignImageFromVectordata ($signVectorData, $mode = "") { $retData = ""; if ($signVectorData != "") : $rawCoord = splitRawCoordinates ($signVectorData); $maxCoord = checkMaxCoordinates($rawCoord); if ($mode == "1") : // Output for mail $tmpSignPath = "../temp/signs/"; if (SIGNS_PATH != "") : $tmpSignPath = SIGNS_PATH; endif; $imgFilename = $tmpSignPath . md5(rand(0,10000)) . ".png"; $im = createSignImage($rawCoord); imagepng ($im, $imgFilename); $retData = ""; else : // Output for web page $retData = ""; endif; endif; return $retData; } // Gets output of article acceptance data for a sepecified job function getOutputArticleAcceptanceData ($jb_id, $noTitle = "") { global $db, $PHP_SELF; $retVal = ""; if ($jb_id != "" && is_numeric($jb_id)) : $outputData = ""; $dataArray = getColVectorFromDB2ArrayByClause("genericdatacontainer", "gdc_content", "gdc_obj_type = 'jb' AND gdc_obj_id = '" . $jb_id . "' AND gdc_gen_fieldname = 'article_acceptance'", "", "gdc_content", ""); $dataArrayLen = count($dataArray); if ($dataArrayLen > 0) : if ($noTitle == "") : $outputData .= "" . getLngt("Gefahrenübergänge") . "
"; endif; $outputData .= ""; $outputData .= ""; for ($i = 0; $i < $dataArrayLen; $i++) : $contentString = trim($dataArray[$i]); if ($contentString != "") : $contentString = str_replace("|", "-,-", $dataArray[$i]); if (!(strpos($contentString, "-,-") === FALSE)) : $contentArray = spliti("-,-",$contentString); endif; $outputData .= ""; $tmpTime = $contentArray[0]; $tmpTime = substr($tmpTime,6,2) . "." . substr($tmpTime,4,2) . "." . substr($tmpTime,0,4) . " " . substr($tmpTime,8,2) . ":" . substr($tmpTime,10,2) . ":" . substr($tmpTime,12,2); $outputData .= ""; // Scan time $tmpUsrId = $contentArray[1]; $tmpUserData = ""; if ($tmpUsrId != "" && is_numeric($tmpUsrId) && $tmpUsrId > 0) : $tmpUserData = getFieldValueFromId("user", "usr_id", $tmpUsrId, "usr_name") . ",  " . getFieldValueFromId("user", "usr_id", $tmpUsrId, "usr_firstname"); endif; $outputData .= ""; // User data $outputData .= ""; // Scan code $outputData .= ""; // Sign image data $outputData .= ""; endif; endfor; $outputData .= "
" . getLngt("Scan-Zeitpunkt") . " " . getLngt("Verantwortlicher") . " " . getLngt("Scan-Code") . " " . getLngt("Unterschrift") . " 
" . $tmpTime . "" . $tmpUserData . "" . $contentArray[3] . "" . getSignImageFromVectordata($contentArray[2]) . "
"; endif; $retVal = $outputData; endif; return $retVal; } // Gets associated payments (of a special station) of a job in "jobpayment" function getPaymentsReceived ($jbId, $trSort = "") { global $db, $PHP_SELF; $retArray = array(); if ($jbId != "" && is_numeric($jbId)) : $whereClause = ""; if ($trSort != "" && is_numeric($trSort)) : $whereClause .= " AND jbp.tr_sort = '" . $trSort . "' "; endif; $sqlquery = "SELECT jbp.tr_sort, jbp.csc_id, jbp.jbp_mode, jbp.jbp_price, jbp.jbp_bookingtime, jbp.jbp_export_time, jbp.jbp_counter, jbp.jbp_id, jbp.jb_id, jbp.jbpc_id, jbp.jbp_tan" . " FROM jobpayment AS jbp" . " WHERE jbp.jb_id = '" . $jbId . "'" . $whereClause . " ORDER BY jbp.jbp_bookingtime, jbp.jbp_export_time"; $result = $db->query($sqlquery); if (DB::isError($result)) die ("$PHP_SELF: " . $result->getMessage()); while ($row = $result->fetch_assoc()): $retArray[] = array($row["tr_sort"], $row["csc_id"], $row["jbp_mode"], $row["jbp_price"], $row["jbp_bookingtime"], $row["jbp_export_time"], $row["jbp_counter"], $row["jbp_id"], $row["jb_id"], $row["jbpc_id"], $row["jbp_tan"]); endwhile; $result->free(); endif; return $retArray; } // Gets sum of associated payments (of a special station) of a job in "jobpayment" function getSumOfPaymentsReceived ($jbId, $trSort = "") { global $db, $PHP_SELF; $retVal = 0; if ($jbId != "" && is_numeric($jbId)) : $paymentsReceived = getPaymentsReceived($jbId, $trSort); $paymentsReceivedLen = count($paymentsReceived); for ($i = 0; $i < $paymentsReceivedLen; $i++) : $retVal += $paymentsReceived[$i][3]; endfor; endif; return $retVal; } // Gets open volume of a single job. Payments will be compared with the total volume required // Returns net or gross value function getOpenPaymentValue ($jbId, $trSort = "", $grossValue = "") { global $db, $PHP_SELF; $retVal = ""; if ($jbId != "" && is_numeric($jbId)) : $paymentsReceived = getSumOfPaymentsReceived($jbId, $trSort); $jbTotalPrice = getFieldValueFromId("job", "jb_id", $jbId, "jb_totalprice"); if ($paymentsReceived != "" && is_numeric($paymentsReceived) && $jbTotalPrice != "" && is_numeric($jbTotalPrice)) : $retVal = $jbTotalPrice - $paymentsReceived; if ($grossValue == "1") : $taxFactor = getSalesTaxFactor($jbId); $retVal *= $taxFactor; endif; $retVal = round($retVal,2); endif; endif; return $retVal; } // Gets daytime interval (e.g. daytime = "0" => "08:00 - 12:00") function getDaytimeTimeInterval ($timeStamp, $csId) { $retVal = ""; if ($timeStamp != "" && $csId != "" && is_numeric($csId)) : $daytimeTimeInterval = metatypeGetMappedValues("day_time", "", $csId, "cs", "1"); $daytimeTimeIntervalLen = count($daytimeTimeInterval); $currDay = substr($timeStamp,0,10); $currTime = substr($timeStamp,11); $dayTime = 0; for ($k = 0; $k < $daytimeTimeIntervalLen; $k++) : if ($daytimeTimeInterval[$k][0] <= $currTime && $currTime < $daytimeTimeInterval[$k][1]) : $dayTime = $k; break; endif; endfor; // Get mapped value of the day time (clock time) $retVal = getFieldValueFromClause("metatype","mt_mapped_value","mt_type = 'day_time' AND mt_objtype = 'cs' AND mt_objid = '" . $csId . "' AND mt_sort = '" . $dayTime . "'"); endif; return $retVal; } // Gets daytime interval for a special job (e.g. daytime = "0" => "08:00 - 12:00") function getJobDaytimeTimeInterval($timeStamp, $originaldaytimeText, $csId, $jbId) { $retVal = ""; if (($timeStamp != "" || $jbId != "") && $csId != "" && is_numeric($csId)) : if ($jbId != "") : $timeStamp = getFieldValueFromId("job", "jb_id", $jbId, "jb_ordertime"); $originaldaytimeText = getFieldValueFromId("job", "jb_id", $jbId, "jb_freetext_1"); endif; if (substr($timeStamp,-8) == "00:00:01") : $retVal = $originaldaytimeText; else : $retVal = getDaytimeTimeInterval($timeStamp, $csId); endif; endif; return $retVal; } // Gets computed time interval from timestamp function getComputedTimeInterval ($timeStamp, $csId, $minusOffsetInSec = "", $plusOffsetInSec = "") { $retArray = array(); if ($timeStamp != "" && $csId != "" && is_numeric($csId)) : if ($minusOffsetInSec == "" || !is_numeric($minusOffsetInSec)) : $minusOffsetInSec = 7200; endif; if ($plusOffsetInSec == "" || !is_numeric($plusOffsetInSec)) : $plusOffsetInSec = 7200; endif; // Get earlies clock time to start the interval $dayTimeMappedValues = getColVectorFromDB2ArrayByClause("metatype", "mt_mapped_value", "", "", "mt_sort", ""); $mtDaytimeMappedValue = getFieldValueFromClause("metatype", "mt_mapped_value", "mt_type = 'day_time' AND mt_objtype = 'cs' AND mt_objid = '" . $csId . "' AND mt_sort = '0'"); $mtDaytimeMinHour = substr($mtDaytimeMappedValue,0,2); $tmpHourFrom = substr($timeStamp,11,2); $jbUnixtimestamp = strtotime($timeStamp); $intervalStart = date("H:i", $jbUnixtimestamp - $minusOffsetInSec); $intervalEnd = date("H:i", $jbUnixtimestamp + $plusOffsetInSec); // Check for beginning of the work time of the day if (substr($intervalStart,0,2) < $mtDaytimeMinHour) : $intervalStart = $mtDaytimeMinHour . ":00"; endif; $retArray = array($intervalStart, $intervalEnd); endif; return $retArray; } // Get standard ECO service colour function getDispositionStandardColours ($ecoService) { global $parInstallationServiceArray, $parInstallationServiceArrayLen, $parDeliveryServiceArray, $parDeliveryServiceArrayLen, $serviceColourArray, $serviceColourArrayLen; if (($ecoService & 2) == 2) : $ecoBgCol = "background-color: #55BB55;"; // Init "Installation" if ($serviceColourArrayLen > 0 && $parInstallationServiceArrayLen > 0) : for ($j = 0; $j < $parInstallationServiceArrayLen; $j++) : $tmpService = $parInstallationServiceArray[$j]; if (is_numeric($tmpService) && $serviceColourArray[$tmpService] != "") : $decNumForService = pow(2,$tmpService); if (($ecoService & $decNumForService) == $decNumForService) : $ecoBgCol = "background-color: " . $serviceColourArray[$tmpService] . ";"; // E.g. "Küchen" break; endif; endif; endfor; endif; else : $ecoBgCol = "background-color: #88BB88;"; // Init "Delivery" if ($serviceColourArrayLen > 0 && $parDeliveryServiceArrayLen > 0) : for ($j = 0; $j < $parDeliveryServiceArrayLen; $j++) : $tmpService = $parDeliveryServiceArray[$j]; if (is_numeric($tmpService) && $serviceColourArray[$tmpService] != "") : $decNumForService = pow(2,$tmpService); if (($ecoService & $decNumForService) == $decNumForService) : $ecoBgCol = "background-color: " . $serviceColourArray[$tmpService] . ";"; // E.g. "Küchen" break; endif; endif; endfor; endif; endif; return $ecoBgCol; } // Gets open volume of a single job. Payments will be compared with the total volume required // Returns net or gross value function getManualEventsHtml ($jbId) { global $db, $PHP_SELF; $retVal = ""; if ($jbId != "" && is_numeric($jbId)) : // Get predecessor job $jbPredecessor = getFieldValueFromClause("genericdatacontainer", "gdc_content", "gdc_obj_type = 'jb' AND gdc_gen_fieldname = 'jb_storno' AND gdc_obj_id = '" . $jbId . "'"); if ($jbPredecessor != "" && is_numeric($jbPredecessor)) : $jbCurrentEvents = getFieldValueFromClause("genericdatacontainer", "gdc_content", "gdc_obj_type = 'jb' AND gdc_gen_fieldname = 'jb_events' AND gdc_obj_id = '" . $jbPredecessor . "'"); if ($jbCurrentEvents != "") : $retVal = str_replace(",", "
", $jbCurrentEvents); endif; endif; endif; return $retVal; } // Check for activation of survey functionality on PDA function checkJobForSurvey ($jbId, $category = "15", $gdcOpEnabled = "1") { global $db, $PHP_SELF, $hq_id, $usr_id; $retBool = false; $debug = false; // Check survey is enabled $parJobTriggerSurveyEnabled = getParameterValue("0", "JOB_SURVEY_TRIGGER_ENABLED", $hq_id); if ($parJobTriggerSurveyEnabled == "") : $parJobTriggerSurveyEnabled = getParameterValue("0", "JOB_SURVEY_TRIGGER_ENABLED", "0"); endif; if ($parJobTriggerSurveyEnabled == "1" || $gdcOpEnabled != "1") : if ($jbId != "" && is_numeric($jbId)) : if ($debug) : echo "

jbId : " . $jbId . "


"; endif; $jbStatus = getFieldValueFromId("job", "jb_id", $jbId, "jb_status"); if ($jbStatus == "0" || $jbStatus == "1" || $gdcOpEnabled != "1") : // Get object IDs for categogy "survey" $sqlquery = "SELECT DISTINCT mtfv.mtfv_id" . " FROM metafieldvalue AS mtfv, metafieldcategorykey AS mtfck, metafieldkey AS mtfk" . " WHERE mtfv.mtfck_id = mtfck.mtfck_id AND" . " mtfck.mtfc_id = '" . $category . "' AND" . " mtfck.mtfk_id = mtfk.mtfk_id"; $result = $db->query($sqlquery); if (DB::isError($result)) die ("$PHP_SELF: " . $result->getMessage()); $objIdArray = array(); while ($row = $result->fetch_assoc()): $objIdArray[] = $row["mtfv_id"]; endwhile; $result->free(); // Iterate survey trigger configurations // If at least one trigger does match then return "true" $objIdArrayLen = count($objIdArray); if ($objIdArrayLen > 0) : $objValues = array(); for ($i = 0; $i < $objIdArrayLen; $i++) : if ($debug) : echo "

[----" . $i . "----]


"; endif; $currObjId = $objIdArray[$i]; $sqlquery = "SELECT mtfv.mtfck_id, mtfv.mtfv_id, mtfv.mtfv_value, mtfk.mtfk_type, mtfk.mtfk_id" . " FROM metafieldvalue AS mtfv, metafieldcategorykey AS mtfck, metafieldkey AS mtfk" . " WHERE mtfv.mtfv_id = " . $currObjId . " AND" . " mtfck.mtfc_id = '" . $category . "' AND" . " mtfk.mtfk_id = mtfck.mtfk_id AND " . " mtfv.mtfck_id = mtfck.mtfck_id" . " ORDER BY mtfv.mtfv_id, mtfck.mtfck_sort"; $result = $db->query($sqlquery); if (DB::isError($result)) die ("$PHP_SELF: " . $result->getMessage()); while ($row = $result->fetch_assoc()): if ($debug) : echo $row["mtfk_type"] . "          "; endif; $objValues[$currObjId][$row["mtfk_type"]] = $row["mtfv_value"]; if ($debug) : echo $objValues[$currObjId][$row["mtfk_type"]] . "
"; endif; endwhile; $result->free(); $doContinue = true; if ($doContinue) : // [1.] Check date interval if ($doContinue) : if ($debug) : echo "
[1.] Check date interval
"; endif; $dateBegin = $objValues[$currObjId]["date_begin"]; $dateEnd = $objValues[$currObjId]["date_end"]; if ($debug) : echo "dateBeginPRE : " . $dateBegin . "
"; endif; if ($debug) : echo "dateEndPRE : " . $dateEnd . "
"; endif; if ($dateBegin != "" || $dateEnd != "") : $dateBegin = substr($dateBegin,6,4) . "-" . substr($dateBegin,3,2) . "-" . substr($dateBegin,0,2); $dateEnd = substr($dateEnd,6,4) . "-" . substr($dateEnd,3,2) . "-" . substr($dateEnd,0,2); if ($debug) : echo "dateBegin : " . $dateBegin . "
"; endif; if ($debug) : echo "dateEnd : " . $dateEnd . "
"; endif; // $currentDay = getDateTime("3"); // "Y-m-d" (today) $jobDay = getFieldValueFromId("job", "jb_id", $jbId, "jb_ordertime"); // "Y-m-d" (Ordertime of the job) $jobDay = substr($jobDay,0,10); if ($debug) : echo "jobDay : " . $jobDay . "
"; endif; if (($dateBegin != "" && $jobDay < $dateBegin) || ($dateEnd != "" && $jobDay > $dateEnd)) : $doContinue = false; // Date does not match date interval if ($debug) : echo "
DATE DOES NOT MATCH INTERVAL! => CHECK NEXT TRIGGER!
"; endif; endif; endif; endif; // [2.] Check HQ trigger being empy OR hq_id of the job being in current trigger headquarters list if ($doContinue) : if ($debug) : echo "
[2.] Check HQ trigger being empy OR hq_id of the job being in current trigger headquarters list
"; endif; if ($objValues[$currObjId]["checkboxes_hq"] != "") : $jbHqId = getFieldValueFromId("job", "jb_id", $jbId, "hq_id"); // Get hq_id of the job if ($debug) : echo "jbHqId : " . $jbHqId . "
"; endif; $tmpHqIdArray = spliti(",", $objValues[$currObjId]["checkboxes_hq"]); $j = array_search($jbHqId, $tmpHqIdArray); if ($j === FALSE) : $doContinue = false; // Not found, trigger does not match if ($debug) : echo "
NOT FOUND! => => CHECK NEXT TRIGGER!
"; endif; endif; endif; endif; // [3.] Check single customer if ($doContinue) : if ($debug) : echo "
[3.] Check single customer
"; endif; $csEid = $objValues[$currObjId]["button:cs:cs_eid"]; if ($csEid != "") : if ($debug) : echo "csEid : " . $csEid . "
"; endif; $jbCscIdPayer = getFieldValueFromId("job", "jb_id", $jbId, "csc_id_payer"); $jbCsIdPayer = getFieldValueFromId("costcenter", "csc_id", $jbCscIdPayer, "cs_id"); $jbCsEidPayer = getFieldValueFromId("customer", "cs_id", $jbCsIdPayer, "cs_eid"); if ($debug) : echo "jbCsEidPayer : " . $jbCsEidPayer . "
"; endif; if ($jbCsEidPayer != $csEid) : // $doContinue = false; // Not found, trigger does not match if ($debug) : echo "
SINGLE CUSTOMER DOES NOT MATCH! => CHECK NEXT TRIGGER!
"; endif; // [3.(a)] Check meta customer if ($debug) : echo "
[3.] Check meta customer
"; endif; // Get meta customer $jbCsIdParent = getFieldValueFromId("customer", "cs_id", $jbCsIdPayer, "cs_id_parent"); $jbCsEidParent = ""; if ($jbCsIdParent != "" && is_numeric($jbCsIdParent) && $jbCsIdParent > 0) : $jbCsEidParent = getFieldValueFromId("customer", "cs_id", $jbCsIdParent, "cs_eid"); endif; if ($debug) : echo "jbCsEidParent : " . $jbCsEidParent . "
"; endif; if ($jbCsEidParent != $csEid) : $doContinue = false; // Not found, trigger does not match if ($debug) : echo "
META CUSTOMER DOES NOT MATCH! => CHECK NEXT TRIGGER!
"; endif; endif; endif; endif; endif; // [3.(a)] Check meta customer /* if ($doContinue) : if ($debug) : echo "
[3.] Check meta customer
"; endif; $csEid = $objValues[$currObjId]["button:cs:cs_eid"]; if ($csEid != "" && $doCheckMetaCustomer) : if ($debug) : echo "csEid : " . $csEid . "
"; endif; $jbCscIdPayer = getFieldValueFromId("job", "jb_id", $jbId, "csc_id_payer"); $jbCsIdPayer = getFieldValueFromId("costcenter", "csc_id", $jbCscIdPayer, "cs_id"); // Get meta customer $jbCsIdParent = getFieldValueFromId("customer", "cs_id", $jbCsIdPayer, "cs_id_parent"); $jbCsEidParent = ""; if ($jbCsIdParent != "" && is_numeric($jbCsIdParent) && $jbCsIdParent > 0) : $jbCsEidParent = getFieldValueFromId("customer", "cs_id", $jbCsIdParent, "cs_eid"); endif; if ($debug) : echo "jbCsEidParent : " . $jbCsEidParent . "
"; endif; if ($jbCsEidParent != $csEid) : $doContinue = false; // Not found, trigger does not match if ($debug) : echo "
META CUSTOMER DOES NOT MATCH! => CHECK NEXT TRIGGER!
"; endif; endif; endif; endif; */ // [4.] Check single courier if ($doContinue) : if ($debug) : echo "
[4.] Check single courier
"; endif; $crEid = $objValues[$currObjId]["button:cr:cr_eid"]; if ($crEid != "") : if ($debug) : echo "crEid : " . $crEid . "
"; endif; $jbCrId = getFieldValueFromId("job", "jb_id", $jbId, "cr_id"); $jbCrEid = getFieldValueFromId("courier", "cr_id", $jbCrId, "cr_eid"); if ($debug) : echo "jbCrEid : " . $jbCrEid . "
"; endif; if ($jbCrEid != $crEid) : $doContinue = false; // Not found, trigger does not match if ($debug) : echo "
SINGLE COURIER DOES NOT MATCH! => CHECK NEXT TRIGGER!
"; endif; endif; endif; endif; // [5.] Check single couriervehicle if ($doContinue) : if ($debug) : echo "
[5.] Check single couriervehicle
"; endif; $crvhSid = $objValues[$currObjId]["select:crvh:crvh_sid"]; if ($crvhSid != "") : if ($debug) : echo "crvhSid : " . $crvhSid . "
"; endif; $jbCrSid = getFieldValueFromId("job", "jb_id", $jbId, "cr_sid"); if ($debug) : echo "jbCrSid : " . $jbCrSid . "
"; endif; if ($jbCrSid != $crvhSid) : $doContinue = false; // Not found, trigger does not match if ($debug) : echo "
SINGLE COURIERVEHICLE DOES NOT MATCH! => CHECK NEXT TRIGGER!
"; endif; endif; endif; endif; // [6.] Check couriervehicle class if ($doContinue) : if ($debug) : echo "
[6.] Check couriervehicle class
"; endif; $vhtId = $objValues[$currObjId]["select:vht"]; if ($vhtId != "") : if ($debug) : echo "vhtId : " . $vhtId . "
"; endif; // $jbVhtIdReal = getFieldValueFromId("job", "jb_id", $jbId, "vht_id_real"); $jbVhtId = getFieldValueFromId("job", "jb_id", $jbId, "vht_id"); // if ($debug) : echo "jbVhtIdReal : " . $jbVhtIdReal . "
"; endif; if ($debug) : echo "jbVhtId : " . $jbVhtId . "
"; endif; // if ($jbVhtIdReal != $vhtId) : if ($jbVhtId != $vhtId) : $doContinue = false; // Not found, trigger does not match if ($debug) : echo "
VEHICLE CLASS DOES NOT MATCH! => CHECK NEXT TRIGGER!
"; endif; endif; endif; endif; // [7.] Check customer group if ($doContinue) : if ($debug) : echo "
[7.] Check customer group
"; endif; $csGrpID = $objValues[$currObjId]["select:grp"]; if ($csGrpID != "") : if ($debug) : echo "csGrpID : " . $csGrpID . "
"; endif; // Get customer ID of the current job $jbCscIdPayer = getFieldValueFromId("job", "jb_id", $jbId, "csc_id_payer"); $jbCsIdPayer = getFieldValueFromId("costcenter", "csc_id", $jbCscIdPayer, "cs_id"); // Get members of the (customer) group $csGroupMemberIds = getGroupMemberIDs(array($csGrpID), "cs"); // Check customer of the job being member of the specified (customer) group $j = array_search($jbCsIdPayer, $csGroupMemberIds); if ($j === FALSE) : $doContinue = false; // Not found, trigger does not match if ($debug) : echo "
CUSTOMER NOT IN SPECIFIED GROUP! => CHECK NEXT TRIGGER!!
"; endif; endif; endif; endif; // [8.] Check branch if ($doContinue) : $brId = $objValues[$currObjId]["select:br"]; if ($brId != "") : if ($debug) : echo "brId : " . $brId . "
"; endif; $jbCscIdPayer = getFieldValueFromId("job", "jb_id", $jbId, "csc_id_payer"); $jbCsIdPayer = getFieldValueFromId("costcenter", "csc_id", $jbCscIdPayer, "cs_id"); $jbCmpIdPayer = getFieldValueFromId("customer", "cs_id", $jbCsIdPayer, "cmp_id"); $jbBrIdPayer = getFieldValueFromId("company", "cmp_id", $jbCsIdPayer, "br_id"); if ($debug) : echo "$jbBrIdPayer : " . $jbBrIdPayer . "
"; endif; if ($jbBrIdPayer != $brId) : $doContinue = false; // Not found, trigger does not match if ($debug) : echo "
BRANCH DOES NOT MATCH! => CHECK NEXT TRIGGER!
"; endif; endif; endif; endif; // If $doContinue == "true" at this place then all checks are matched for the // current trigger (object) and therefore condition is green to display survey in PDA !!!! if ($doContinue) : if ($debug) : echo "
TRIGGER FOUND!!!!!!!!!!!!!!!!!!!!!!!!!! => BREAK!
"; endif; $retBool = true; break; endif; if ($debug) : echo "--------------------------------------------------------------------------------

"; endif; endif; endfor; endif; endif; endif; // if (!$debug) : if ($gdcOpEnabled == "1") : $gdcContent = "0"; $logTriggerNo = ""; if ($retBool) : $gdcContent = "1"; $logTriggerNo = $currObjId; // Last object ID before breaking the loop endif; if (existsEntry("genericdatacontainer",array("gdc_obj_type","jb","gdc_gen_fieldname","jb_pda_survey","gdc_obj_id",$jbId))) : updateStmt("genericdatacontainer","gdc_obj_type","jb",array("gdc_content", $gdcContent, "gdc_context", ""),"gdc_obj_id = '" . $jbId . "' AND gdc_gen_fieldname = 'jb_pda_survey'"); else : insertStmt("genericdatacontainer", array("gdc_obj_type", "jb", "gdc_obj_id", $jbId, "gdc_gen_fieldname", "jb_pda_survey", "gdc_content", $gdcContent, "gdc_context", "")); endif; // Write logdata into log database if ($retBool) : // Remove check for "$retBool" to get negative cases, too! writeToLogDB("134",$hq_id,$jbId,$usr_id,$jbCrId,$jbCrSid,$jbCsIdPayer,"STATE=" . ($retBool ? "YES" : "NO") . "|MTFV_ID=" . $logTriggerNo); endif; endif; // endif; endif; return $retBool; } // Cancel a special job /* function cancelJob ($jb_id_cancellation, $jb_storno_costs = "2") { global $db; global $usr_id, $hq_id; if ($jb_id_cancellation != "" && is_numeric($jb_id_cancellation) && existsEntry("job",array("jb_id",$jb_id_cancellation))) : if ($jb_storno_costs != "1" && $jb_storno_costs != "2") : $jb_storno_costs = "2"; endif; $currentTime = getDateTime("0"); // Check headquarters to be set and get current job data (jb_status and cr_id of the job to be cancelled) $hqId = $hq_id; if ($hqId == "") : $hqId = getFieldValueFromId("job","jb_id",$jb_id_cancellation,"hq_id"); endif; $jbStatus = getFieldValueFromId("job","jb_id",$jb_id_cancellation,"jb_status"); $crId = getFieldValueFromId("job","jb_id",$jb_id_cancellation,"cr_id"); $crIdOrder = getFieldValueFromId("job","jb_id",$jb_id_cancellation,"cr_id_order"); $jbStatusString = " (jb_status = '8' OR jb_status = '9' OR jb_status = '0' OR jb_status = '1') "; if (is_numeric($jb_status)) : $jbStatusString = "jb_status = '" . $jb_status . "'"; endif; $res = updateStmt("job", "jb_id", $jb_id_cancellation, array("jb_storno", $jb_storno_costs, "usr_id_storno", $usr_id, "jb_status" , "2", "jb_finishtime", $currentTime), "(" . $jbStatusString . " AND (isnull(jb_storno) OR jb_storno = '0'))"); if ($db->affected_rows > 0) : // Insert PDA command to remove job (take cr_id/cr_id_order before changing) if ($crId != "" && $crId != "0") : insertPDACommand($hq_id, $crId, "3", "1", $jb_id_cancellation, $currentTime, ""); insertPDACommand($hq_id, $crId, "8", "1", $jb_id_cancellation, $currentTime, ""); endif; if ($crIdOrder != "" && $crIdOrder != "0" && $crIdOrder != $crId) : insertPDACommand($hq_id, $crIdOrder, "3", "1", $jb_id_cancellation, $currentTime, ""); insertPDACommand($hq_id, $crIdOrder, "8", "1", $jb_id_cancellation, $currentTime, ""); endif; // Check for storno-job has a standing order $jbPermanent = getFieldValueFromId("job","jb_id",$jb_id_cancellation,"jb_permanent"); if ($jbPermanent != "" && $jbPermanent > "0") : // Check for the continued existence of the standing order rule if ($jb_storno_rhythm == "2") : // Update row for termnination of the standing order updateStmt("job", "jb_id", $jb_id_cancellation, array("jb_permanent", "0")); endif; endif; // Remove payment entry/entries from table "jobpayment" for the job if not being exported $removedFromJbp = false; if ($jb_storno_jbp_id != "" && is_numeric($jb_storno_jbp_id)) : // Remove ALL payments if NOT be exported deleteStmt("jobpayment","jb_id = '" . $jb_id_cancellation . "' AND (jbpc_id = '' OR jbpc_id = '0')"); // Check for removal $jbpcJbId = getFieldValueFromId("jobpayment","jbp_id",$jb_storno_jbp_id,"jb_id"); if ($jbpcJbId == "") : $removedFromJbp = true; $statusMessage = getLngt("ACHTUNG: Die Einnahmenbuchung dieses stornierten Auftrags wurde gelöscht, da noch KEIN Export stattfand!"); else : $statusMessage = getLngt("ACHTUNG: Die Einnahmenbuchung dieses stornierten Auftrags wurde schon exportiert und kann deshalb NICHT gelöscht werden!"); endif; endif; // Remove reservation entry from table "vehicledisposition" if FDS is enabled $removedFromFDS = false; if ($fastDispositionStructureEnabled == "1") : $removedFromFDS = removeAssocCrvhJb($jb_id_cancellation); endif; // Storno "addmont" job $gdcContentIdAddMon = getFieldValueFromClause("genericdatacontainer", "gdc_content", "gdc_obj_type = 'jb' AND gdc_gen_fieldname = 'jb_id_addmont' AND gdc_obj_id = '" . $jb_id_cancellation . "'"); if ($gdcContentIdAddMon != "" && is_numeric($gdcContentIdAddMon)) : updateStmt("job", "jb_id", $gdcContentIdAddMon, array("jb_storno", "2", "jb_status", "2", "jb_incomplete", "1", "jb_finishtime", $currentTime)); endif; // Write logdata into log database writeToLogDB("10",$hq_id,$jb_id_cancellation,$currentSessionUsrId,"","","","COSTS=" . ($jb_storno_costs == "1" ? "YES" : "NO") . "|JBP_REMOVAL=" . ($removedFromJbp ? "YES" : "NO") . "|FDS_REMOVAL=" . ($removedFromFDS ? "YES" : "NO")); // Call for generation of a new job with negative invoice data if ($globalParUseRelatedCustomer != "1") : copy_job($jb_id_cancellation, $jb_storno_costs, $jbStatus, true); endif; endif; endif; } */ function addmontEdit($jb_id, $jb_paymenttype) { global $db; //echo "$jb_id, $jb_paymenttype
\n"; $jb_addmont = str_replace(",", ".", $db->getOne("SELECT gdc_content FROM genericdatacontainer WHERE gdc_obj_type = 'jb' AND gdc_obj_id = $jb_id AND gdc_gen_fieldname = 'jb_addmont'")); //echo "$jb_addmont
\n"; // if ($jb_addmont > 0): $csc_id_related = $db->getOne("SELECT csc_id_related FROM job WHERE jb_id = $jb_id"); $hq_id = $db->getOne("SELECT hq_id FROM job WHERE jb_id = $jb_id"); $csId = $db->getOne("SELECT cs_id FROM costcenter WHERE csc_id = $csc_id_related"); include_once ("../include/inc_mtf_func.inc.php"); $hqId = "0"; $jbp_tan = ''; // wenn aus dem order_request, dann Zahlart OShappy if ($db->getOne("SELECT gdc_content FROM genericdatacontainer WHERE gdc_obj_id = " . $jb_id . " AND gdc_gen_fieldname = 'acquisitiontime'") != ""): $jbp_tan = $jb_paymenttype; $jb_paymenttype = $db->getOne("SELECT mt_sort FROM metatype WHERE mt_type = 'payment_type' AND mt_value = 'OS happy'"); endif; // SAMS-Preise berücksichtigen! $category = "20"; $category_cr = "30"; if ($db->getOne("SELECT gdc_content FROM genericdatacontainer WHERE gdc_obj_type = 'jb' AND gdc_obj_id = $jb_id AND gdc_gen_fieldname = 'jb_service_job'") == 1): $category = "40"; $category_cr = "40"; // $jb_paymenttype = $db->getOne("SELECT mt_sort FROM metatype WHERE mt_type = 'payment_type' AND mt_objtype = 'grp' AND mt_objid = '$hq_id' AND mt_value = 'Serviceaufträge'"); $jb_paymenttype = 15; // wenn aus dem order_request, dann Zahlart OSsad if ($db->getOne("SELECT gdc_content FROM genericdatacontainer WHERE gdc_obj_id = " . $jb_id . " AND gdc_gen_fieldname = 'acquisitiontime'") != "") $jb_paymenttype = $db->getOne("SELECT mt_sort FROM metatype WHERE mt_type = 'payment_type' AND mt_value = 'OS sad'"); endif; $result = getMtfFunctionResult($hqId, $csId, $category, "ident_0001", $jb_addmont); if (is_array($result)) $result = $result[0]; $result = ($result * $jb_addmont) / 1.19; $result_crArr = getMtfFunctionResult($hqId, $csId, $category_cr, "ident_0001", $jb_addmont); if (is_array($result_crArr)): $result_cr = $result_crArr[0]; if ($hq_id == 1020) $result_cr = $result_crArr[0] - $result_crArr[1]; endif; $result_cr = ($result_cr * $jb_addmont) / 1.19; // // Fuhrlohn-Provisionss?tze Altona (CR_PROV_17093) in Prozent f?r SAP-Debitoren 69900 (Lieferungen), 69901 (Montagen) und 69902 (Küchenmontagen) // $serviceKueMont = $db->getOne("SELECT mt_sort FROM metatype WHERE mt_type = 'service' AND mt_mapped_value = 'KU'"); // $jb_service_num_mont = $db->getOne("SELECT jb_service FROM job WHERE jb_id = $jb_id"); // $jb_service_arr_mont = mcConvertNum2Sel($jb_service_num_mont); // $prov_idx_mont = 1; // if (in_array($serviceKueMont, $jb_service_arr_mont)): // $prov_idx_mont = 2; // endif; // $cr_prov_mont = 0; // $cr_provArr = array_filter(explode(",", getParameterValue("0", "CR_PROV_" . $csId, $hqId))); // if (count($cr_provArr) == 3): // $cr_prov_mont = $cr_provArr[$prov_idx_mont] / 100; // endif; // $result_cr = ($result_cr * (1 - $cr_prov_mont)); // $jb_subtotalprice = $db->getOne("SELECT jb_subtotalprice FROM job WHERE jb_id = $jb_id"); // $jb_cr_subprice = $db->getOne("SELECT jb_cr_subprice FROM job WHERE jb_id = $jb_id"); // $jb_totalprice = $jb_subtotalprice + $result; // $jb_cr_price = $jb_cr_subprice + $result_cr; ////echo("'$category, $category_cr, $result, $result_cr'\n"); // updateStmt("job", "jb_id", $jb_id, array("jb_fixprice", $jb_totalprice, "jb_totalprice", $jb_totalprice, "jb_cr_price", $jb_cr_price, "jb_incomplete", 0)); // $jbp_id = $db->getOne("SELECT gdc_content FROM genericdatacontainer WHERE gdc_obj_type = 'jb' AND gdc_obj_id = $jb_id AND gdc_gen_fieldname = 'jbp_id'"); // updateStmt("jobpayment", "jbp_id", $jbp_id, array("jbp_mode", $jb_paymenttype, "jbp_price", $result, "jbp_bookingtime", date("Y-m-d H:i:s"))); // updateStmt("jobcalculator", "jb_id", $jb_id, array("jbc_amount", $jb_addmont, "jbc_price", ($result / $jb_addmont), "jbc_totalprice", $result), "srvt_name = 'ident_9999:par_01'"); //// endif; $jb_id_addmont = $db->getOne("SELECT gdc_content FROM genericdatacontainer WHERE gdc_obj_type = 'jb' AND gdc_obj_id = $jb_id AND gdc_gen_fieldname = 'jb_id_addmont'"); if ($jb_id_addmont == ""): include_once("../include/copy_job.inc.php"); $jb_id_addmont = copy_job_flat($jb_id, $jb_id_addmont); insertStmt("genericdatacontainer", array("gdc_obj_type", "jb", "gdc_obj_id", $jb_id, "gdc_gen_fieldname", "jb_id_addmont", "gdc_content", $jb_id_addmont, "gdc_context", "")); insertStmt("genericdatacontainer", array("gdc_obj_type", "jb", "gdc_obj_id", $jb_id_addmont, "gdc_gen_fieldname", "jb_id_addmont_parent", "gdc_content", $jb_id, "gdc_context", "")); // if ($hq_id != 1020) // insertStmt("genericdatacontainer", array("gdc_obj_type", "jb", "gdc_obj_id", $jb_id_addmont, "gdc_gen_fieldname", "hide", "gdc_content", "", "gdc_context", "")); if ($jb_paymenttype == 15) insertStmt("genericdatacontainer", array("gdc_obj_type", "jb", "gdc_obj_id", $jb_id_addmont, "gdc_gen_fieldname", "jb_service_job", "gdc_content", "1", "gdc_context", "")); endif; updateStmt("job", "jb_id", $jb_id_addmont, array("jb_id_parent", 0, "jb_fixprice", $result, "jb_totalprice", $result, "jb_subtotalprice", $result, "jb_cr_price", $result_cr, "jb_cr_subprice", $result_cr, "jb_incomplete", 0, "jb_status", 2)); // ohne jb_finishtime kein Export: jb_finishtime updaten wenn NULL (d.h. vom "Elternauftrag" kopierte jb_finishtime ist NULL weil noch nicht erledigt; kann nur passieren, wenn Auftrag manuell abgeschlossen wird) updateStmt("job", "jb_id", $jb_id_addmont, array("jb_finishtime", date("Y-m-d H:i:s")), "jb_finishtime IS NULL"); updateStmt("job", "jb_id", $jb_id_addmont, array("jb_finishtime", date("Y-m-d H:i:s")), "jb_finishtime = '0000-00-00 00:00'"); updateStmt("tourservice", "jb_id", $jb_id_addmont, array("trs_price", $result)); $jbp_id = $db->getOne("SELECT jbp_id FROM jobpayment WHERE jb_id = $jb_id_addmont"); if ($jbp_id == ""): insertStmt("jobpayment", array("jb_id", $jb_id_addmont, "tr_sort", 2, "csc_id", $csc_id_related, "jbp_mode", $jb_paymenttype, "jbp_price", $result, "jbp_tan", $jbp_tan, "jbp_bookingtime", date("Y-m-d H:i:s"), "jbp_counter", "0")); else: updateStmt("jobpayment", "jbp_id", $jbp_id, array("jbp_mode", $jb_paymenttype, "jbp_price", $result, "jbp_tan", $jbp_tan, "jbp_bookingtime", date("Y-m-d H:i:s"))); endif; updateStmt("jobcalculator", "jb_id", $jb_id, array("jbc_amount", $jb_addmont, "jbc_price", ($result / $jb_addmont), "jbc_totalprice", $result), "srvt_name = 'ident_9999:par_01'"); } function mk_jb_tourdata($jb_id) { global $db; $jb_tourdata1 = ""; $jb_tourdata2 = ""; $jb_tourdata3 = ""; $sqlquery = "SELECT ad_zipcode, ad_city, ad_country FROM address, tour WHERE jb_id = " . $jb_id . " AND address.ad_id = tour.ad_id ORDER BY tr_sort"; $res = $db->query($sqlquery); if (DB::isError($res)) die ("$PHP_SELF: " . $res->getMessage()); while ($row = $res->fetch_assoc()): $jb_tourdata1 .= ($jb_tourdata1 == "" ? "" : ";") . $row['ad_zipcode']; $jb_tourdata2 .= ($jb_tourdata2 == "" ? "" : ";") . $row['ad_city']; $jb_tourdata3 .= ($jb_tourdata3 == "" ? "" : ";") . $row['ad_country']; endwhile; $res->free(); updateStmt("job", "jb_id", $jb_id, array("jb_tourdata", $jb_tourdata1 . "|" . $jb_tourdata2 . "|" . $jb_tourdata3)); } function getJobsByLocating($gpsLong, $gpsLat, $radius = 50) { global $db; //https://rechneronline.de/erdradius/ $r_equator = 6378.137; // Radius am Äquator in km $r_poles = 6356.752; // Radius an den Polen in km $r_local = sqrt( (pow(pow($r_equator, 2) * cos(deg2rad($gpsLat)), 2) + pow(pow($r_poles, 2) * sin(deg2rad($gpsLat)), 2)) / (pow($r_equator * cos(deg2rad($gpsLat)), 2) + pow($r_poles * sin(deg2rad($gpsLat)), 2)) ); $sqlquery = "SELECT job.jb_id, gc_lat, gc_long, tr_comp, ad_zipcode, ad_city, ad_street, tr_hsno " . "FROM job, tour, address, geocode " . "WHERE job.jb_id = tour.jb_id AND address.ad_id = tour.ad_id AND tour.tr_id = gc_obj_id AND tour.tr_sort = 1 AND gc_obj_type = 'tr' AND jb_status = 9 AND " . " ACOS(" . " SIN(RADIANS(" . $gpsLat . ")) * SIN(RADIANS(gc_lat)) +" . " COS(RADIANS(" . $gpsLat . ")) * COS(RADIANS(gc_lat)) *" . " COS(RADIANS(gc_long) - RADIANS(" . $gpsLong . "))" . " ) * " . $r_local . " <= " . $radius; $retArr = array(); $res = $db->query($sqlquery); if (DB::isError($res)) die ("$PHP_SELF: " . $res->getMessage()); while ($row = $res->fetch_assoc()): $retArr[] = array($row["jb_id"], $row["gc_lat"], $row["gc_long"], $row["tr_comp"], $row["ad_street"], $row["tr_hsno"], $row["ad_zipcode"], $row["ad_city"], round(acos( sin(deg2rad($gpsLat)) * sin(deg2rad($row['gc_lat'])) + cos(deg2rad($gpsLat)) * cos(deg2rad($row['gc_lat'])) * cos(deg2rad($row['gc_long']) - deg2rad($gpsLong)) ) * $r_local, 1)); endwhile; $res->free(); return($retArr); }; /* function addmontEdit($jb_id, $jb_paymenttype) { global $db; //echo "$jb_id, $jb_paymenttype
\n"; $jb_addmont = str_replace(",", ".", $db->getOne("SELECT gdc_content FROM genericdatacontainer WHERE gdc_obj_type = 'jb' AND gdc_obj_id = $jb_id AND gdc_gen_fieldname = 'jb_addmont'")); //echo "$jb_addmont
\n"; if ($jb_addmont > 0): $jb_id_addmont = $db->getOne("SELECT gdc_content FROM genericdatacontainer WHERE gdc_obj_type = 'jb' AND gdc_obj_id = $jb_id AND gdc_gen_fieldname = 'jb_id_addmont'"); //echo "$jb_id_addmont
\n"; // if ($jb_id_addmont == "") // $jb_id_addmont = $jb_id; $csc_id_related = $db->getOne("SELECT csc_id_related FROM job WHERE jb_id = $jb_id_addmont"); $csId = $db->getOne("SELECT cs_id FROM costcenter WHERE csc_id = $csc_id_related"); include_once ("../include/inc_mtf_func.inc.php"); $hqId = "0"; // SAMS-Preise berücksichtigen! $category = "20"; $category_cr = "30"; if ($db->getOne("SELECT gdc_content FROM genericdatacontainer WHERE gdc_obj_type = 'jb' AND gdc_obj_id = $jb_id AND gdc_gen_fieldname = 'jb_service_job'") == 1): $category = "40"; $category_cr = "40"; $jb_paymenttype = $db->getOne("SELECT mt_sort FROM metatype WHERE mt_type = 'payment_type' AND mt_objtype = 'grp' AND mt_objid = '$hq_id' AND mt_value = 'Serviceaufträge'"); endif; $result = round((getMtfFunctionResult($hqId, $csId, $category, "ident_0001", $jb_addmont) * $jb_addmont) / 1.19, 2); $result_cr = round((getMtfFunctionResult($hqId, $csId, $category_cr, "ident_0001", $jb_addmont) * $jb_addmont) / 1.19, 2); //echo("'$category, $category_cr, $result, $result_cr'\n"); updateStmt("job", "jb_id", $jb_id_addmont, array("jb_fixprice", $result, "jb_totalprice", $result, "jb_cr_price", $result_cr, "jb_cr_subprice", $result_cr, "jb_incomplete", 0, "jb_status", 2, "jb_finishtime", date("Y-m-d H:i:s"))); deleteStmt("jobpayment", "jb_id = $jb_id_addmont"); insertStmt("jobpayment", array("jb_id", $jb_id_addmont, "tr_sort", 2, "csc_id", $csc_id_related, "jbp_mode", $jb_paymenttype, "jbp_price", $result, "jbp_bookingtime", date("Y-m-d H:i:s"), "jbp_counter", "0")); endif; } */ // Gets internal remark items function getJobInternalRemarkItems ($jbId, $mode = "", $trId = "") { $retStr = ""; $retArray = array(); $retJsStr = ""; if ($jbId != "" && is_numeric($jbId)) : // Get tour IDs by jbId $trIdArray = getColVectorFromDB2ArrayByClause("tour", "tr_id", "jb_id = '" . $jbId . "'", "", "tr_sort", ""); $trIdArrayLen = count($trIdArray); // Get vector of metatype items regarding internal remark cases $mtIntRemItem = getColVectorFromDB2ArrayByClause("metatype", "mt_value", "mt_type = 'internal_remark' AND mt_objtype = '' AND mt_objid = '0'", "mt_sort", "mt_sort", ""); $mtIntRemItemLen = count($mtIntRemItem); // Put metatype data into javascript array for ($mt = 0; $mt < $mtIntRemItemLen; $mt++) : $retJsStr .= "mtIntRemItems[" . $mt . "] = '" . $mtIntRemItem[$mt] . "';\n"; for ($i = 0; $i < $trIdArrayLen; $i++) : $retJsStr .= " trIntRemItemTexts[" . $trIdArray[$i] . "] = new Array();\n"; endfor; endfor; // Get existing markers regarding internal remark $gdcIntRemItem = getFieldValueFromClause("genericdatacontainer", "gdc_content", "gdc_obj_type = 'jb' AND gdc_obj_id = '" . $jbId . "' AND gdc_gen_fieldname = 'int_rem_item'"); $gdcIntRemItemArr = getKeyValueArrayFromString($gdcIntRemItem); if ($mode == "1") : $retArray = $gdcIntRemItemArr; endif; $gdcIntRemItemKeysArr = array_keys($gdcIntRemItemArr); $gdcIntRemItemKeysArrLen = count($gdcIntRemItemKeysArr); // ATTENTION: View source code to understand.... ;-) // E.g.: 6535260=2,9|6535261=5|.... for ($i = 0; $i < $trIdArrayLen; $i++) : mcArrIsSet($trIdArray, $i); $gdcIntRemItemArr[$trIdArray[$i]] = mcArrIsSet($gdcIntRemItemArr, $trIdArray[$i]); if ($gdcIntRemItemArr[$trIdArray[$i]] != "") : $tmpArr = explode(",", $gdcIntRemItemArr[$trIdArray[$i]]); // Explode "0,9", "5", .... and set metatype texts $tmpArrLen = count($tmpArr); if ($mode == "2" && $trId == $trIdArray[$i]) : $retStr .= "
"; endif; for ($t = 0; $t < $tmpArrLen; $t++) : // trIntRemItemTexts[6535260][2] = mtIntRemItems[2] <=> Text for mt_sort = 2 // trIntRemItemTexts[6535260][9] = mtIntRemItems[9] <=> Text for mt_sort = 9 // trIntRemItemTexts[6535261][5] = mtIntRemItems[5] <=> Text for mt_sort = 5 // .... // $retJsStr .= "trIntRemItemTexts[" . $gdcIntRemItemKeysArr[$g] . "][" . $tmpArr[$t] . "] = '" . $mtIntRemItem[$tmpArr[$t]] . "';\n"; $retJsStr .= "trIntRemItemTexts[" . $trIdArray[$i] . "][" . $tmpArr[$t] . "] = '" . $mtIntRemItem[$tmpArr[$t]] . "';\n"; // Get active items for the requested station only (!!!!) if ($mode == "2" && $trId == $trIdArray[$i]) : $retStr .= $mtIntRemItem[$tmpArr[$t]] . "
"; endif; endfor; endif; if ($mode == "2" && $trId == $trIdArray[$i]) : $retStr .= "
"; $retStr .= getFieldValueFromClause("genericdatacontainer", "gdc_content", "gdc_obj_type = 'tr' AND gdc_obj_id = '" . $trId . "' AND gdc_gen_fieldname = 'tr_int_rem'"); $retStr .= "
"; endif; endfor; $retJsStr .= "\n\n"; endif; if ($mode == "1") : return $retArray; elseif ($mode == "2") : return $retStr; else : return $retJsStr; endif; } // Sets internal remark items function setJobInternalRemarkItems ($trId, $itemValues) { $retVal = "NOK"; if ($trId != "" && is_numeric($trId)) : // if ($itemValues != "") : $jbId = getFieldValueFromId("tour", "tr_id", $trId, "jb_id"); if ($jbId != "") : $gdcIntRemItem = getFieldValueFromClause("genericdatacontainer", "gdc_content", "gdc_obj_type = 'jb' AND gdc_obj_id = '" . $jbId . "' AND gdc_gen_fieldname = 'int_rem_item'"); $gdcIntRemItemArr = getKeyValueArrayFromString($gdcIntRemItem); $gdcIntRemItemArr[$trId] = $itemValues; $gdcStrToStore = getStringFromKeyValueArray($gdcIntRemItemArr); if (existsEntry("genericdatacontainer",array("gdc_obj_type","jb","gdc_gen_fieldname","int_rem_item","gdc_obj_id",$jbId))) : updateStmt("genericdatacontainer","gdc_obj_type","jb",array("gdc_content", $gdcStrToStore),"gdc_obj_id = '" . $jbId . "' AND gdc_gen_fieldname = 'int_rem_item' AND gdc_context = '" . "" . "'"); $retVal = "OK"; else : insertStmt("genericdatacontainer", array("gdc_obj_type", "jb", "gdc_obj_id", $jbId, "gdc_gen_fieldname", "int_rem_item", "gdc_content", $gdcStrToStore, "gdc_context", "")); $retVal = "OK"; endif; endif; // endif; endif; return $retVal; } // Sets internal remark items function setTourInternalRemark ($trId, $remarkText) { $retVal = "NOK"; if ($trId != "" && is_numeric($trId)) : if (existsEntry("genericdatacontainer",array("gdc_obj_type","tr","gdc_gen_fieldname","tr_int_rem","gdc_obj_id",$trId))) : updateStmt("genericdatacontainer","gdc_obj_type","tr",array("gdc_content", $remarkText),"gdc_obj_id = '" . $trId . "' AND gdc_gen_fieldname = 'tr_int_rem'"); $retVal = "OK"; else : $jbId = getFieldValueFromId("tour", "tr_id", $trId, "jb_id"); insertStmt("genericdatacontainer", array("gdc_obj_type", "tr", "gdc_obj_id", $trId, "gdc_gen_fieldname", "tr_int_rem", "gdc_content", $remarkText, "gdc_context", $jbId)); $retVal = "OK"; endif; endif; return $retVal; } // Proof of delivery by photo function getStationPhotos ($trId, $f_act = "mailsend", $parPodPath = "") { global $hq_id; $out = ""; if ($parPodPath == "") : // Get path for proof of delivery photo $parPodPath = getParameterValue("0", "JOB_DETAILS_PATH_POD_PHOTO", $hq_id); if ($parPodPath == "") : $parPodPath = getParameterValue("0", "JOB_DETAILS_PATH_POD_PHOTO", "0"); endif; endif; if ($parPodPath != "") : // Generate photos if ($f_act != "export") : global $jbMailAttachements; if (!isset($jbMailAttachements) || !is_array($jbMailAttachements)) : $jbMailAttachements = array(); endif; $jbMailAttachementsLen = count($jbMailAttachements); // Check existence in "pic" $podPhotoFilenames = getImagesFromPic($trId, $parPodPath); $podPhotoFilenamesLen = count($podPhotoFilenames); if ($podPhotoFilenamesLen == 0) : // Check existence in "b2b_objects" $podPhotoFilenames = getImagesFromB2bObjects($trId, $parPodPath); $podPhotoFilenamesLen = count($podPhotoFilenames); endif; for ($p = 0; $p < $podPhotoFilenamesLen; $p++) : if ($podPhotoFilenames[$p] != "") : if (file_exists($parPodPath . $podPhotoFilenames[$p])) : if ($f_act == "mailsend") : // $out = " "; if (file_exists($parPodPath . "pht_" . $podPhotoFilenames[$p])) : unlink($parPodPath . "pht_" . $podPhotoFilenames[$p]); endif; $im = imagecreatefromjpeg($parPodPath . $podPhotoFilenames[$p]); if ($im) : if (imagejpeg($im, $parPodPath . "pht_" . $podPhotoFilenames[$p])) : $out .= " "; endif; endif; // Attach each photo to the mail (!!!!) $jbMailAttachements[($p + $jbMailAttachementsLen)][0] = $parPodPath . $podPhotoFilenames[$p]; $jbMailAttachements[($p + $jbMailAttachementsLen)][1] = $podPhotoFilenames[$p]; else : $out .= " "; endif; endif; endif; endfor; endif; endif; return $out; } ?> Array ( [jb_id] => 17 [csc_id] => 1 [vht_id] => 2 [vht_id_real] => 0 [csc_id_payer] => 2 [jb_payment] => 0 [jb_outlay] => 0 [jb_weight] => 0 [jb_ordertime] => 2013-10-29 07:30:00 [jb_reserv] => 1 [jb_permanent] => [jb_permanent2] => 0000000 [jp_permenddat] => [jb_specials] => [cr_id] => 0 [cr_sid] => [cr_id_order] => 0 [cr_id_permanent] => [jb_cr_filter] => [jb_cr_filter_opt] => [jb_waitstorno] => 0 [jb_waittime] => [jb_taketime] => 0000-00-00 00:00:00 [jb_tourname] => [jb_status] => 9 [jb_type] => 0 [jb_incomplete] => 0 [jb_storno] => [jb_finishtime] => 0000-00-00 00:00:00 [jb_warningtime] => [emp_id] => 18098 [jb_fixprice] => 159.7900 [jb_serviceprice] => 0.0000 [jb_totalprice] => 0.0000 [jb_cr_price] => 0.0000 [jb_cr_subprice] => 0.0000 [jb_id_parent] => 0 [jb_booktime] => 0000-00-00 00:00:00 [jb_export_time] => [jb_postage] => 0.00 [jb_modify] => 2013-11-06 13:41:54 [jb_longhaul] => 0 [jb_dispoinfo] => [jb_offer] => 0 [jb_subtotalprice] => 0.0000 [jb_markup] => 0.00 [csc_id_related] => 1 [jb_timeunits] => 5 [jb_service] => 2 ) [tour] => Array ( [1] => Array ( [ad_id] => 432206 [tr_sort] => 1 [tr_comp] => Firma [tr_comp2] => [tr_hsno] => 132-134 [tr_remark] => [tr_person] => [tr_phone] => [csc_id] => 4 [tr_km_extra] => 0 [tr_srv_extra] => 0 [tr_status] => 0 [tr_sign] => [tr_signname] => [tr_ware_from_to] => 0 [tr_finishtime] => [tr_commission_no] => [ad_street] => Rothenbaumchaussee [ad_zipcode] => 20149 [ad_city] => Hamburg [ad_country] => DE [ad_modify] => 2013-08-15 13:16:25 ) [2] => Array ( [ad_id] => 432207 [tr_sort] => 2 [tr_comp] => dort [tr_comp2] => [tr_hsno] => 1 [tr_remark] =>
Bezahlart:1
Voucher:RE123456789
------------------------
FA INV
FA2 INV
FA INV
FA2 INV
Adresse:
Rechnungsstr. 111
22844 Rechnungsstadt
Frau Rechnung
040 12345678
rechnung@rechnung.de
Rechnungsbemerkung
------------------------
WARE AUSLIEFERN
NR.: AT1234567
Sofa XYZ
STK.: 1
PREIS: 1.299
WGRP: 1100
GEWICHT: 70
LxBxHxP: 2,5x1,2x0,9x4
------------------------
WARE RETOURE
Altes Sofa
STK.: 1
GEWICHT: 80
LxBxHxP: 2x1x1x3 [tr_person] => [tr_phone] => [csc_id] => 4 [tr_km_extra] => 0 [tr_srv_extra] => 0 [tr_status] => 0 [tr_sign] => A0,38;0,37;1,43;2,45;3,48;4,51;6,54;8,57;10,60;13,62;15,64;23,61;23,59;24,57;24,55;23,53;23,51;22,50;21,50;20,50;17,59;18,61;19,62;19,63;20,64;22,63;23,62;24,62;26,61;36,57;38,57;40,58;41,60;42,61;42,62;42,64;42,65;40,66;31,65;28,63;26,61;24,59;22,58;21,57;20,56;21,56;22,57;39,63;43,63;47,62;51,60;54,57;57,54;59,51;62,48;63,45;65,36;65,35;64,36;63,36;62,38;61,40;59,42;58,43;56,45;45,46;42,44;39,42;37,39;35,36;33,34;31,32;30,31;33,34;35,36;37,38;40,39;43,40;46,41;50,41;53,40;57,38;72,27;74,26;75,24;76,24;76,25;76,27;75,29;74,31;63,46;61,48;59,50;58,51;58,52;57,52;57,51;58,50;58,49;68,31;71,27;74,23;78,19;81,15;84,11;86,8;88,5;90,3;92,0 [tr_signname] => [tr_ware_from_to] => 1 [tr_finishtime] => [tr_commission_no] => 147258369 [ad_street] => Hugh-Greene-Weg und noch der Weg daneben [ad_zipcode] => 22529 [ad_city] => Hamburg [ad_country] => DE [ad_modify] => 2013-09-04 15:07:16 ) ) [tourservice] => Array ( [0] => Array ( [0] => Array ( [csc_id] => 1 [tr_sort] => 0 [srv_id] => 0 [trs_srv_name] => Grundpreis [srvt_id] => 0 [trs_srvt_name] => PKW [trs_price] => 0.0000 [trs_discount] => 0.0000 ) [1] => Array ( [csc_id] => 1 [tr_sort] => 0 [srv_id] => 0 [trs_srv_name] => PLZ 20149 nach PLZ 22529 [srvt_id] => 0 [trs_srvt_name] => [trs_price] => 0.0000 [trs_discount] => 0.0000 ) ) ) [tourarticle] => Array ( [2] => Array ( [0] => Array ( [trat_id] => 100 [tr_sort] => 2 [trat_sort] => 1 [at_id] => 65996 [trat_quantity] => 2 [trat_price] => 899.00 [trat_packingpieces] => 6 [trat_serialno] => [trat_state] => 0 [trat_remark] => Sofa-Mon. [trat_createtime] => 0000-00-00 00:00:00 [trat_modify] => 2013-11-05 18:04:05 [at_eid] => AT100001 [at_name] => 00103135 [at_match] => IKEA [at_description] => IKEA STHLM SO 3,5 GAMMELBO HBR [at_barcode] => 00103135 [at_bundlequantity] => 1 [at_bundlecode] => [at_stk_itemquantity] => 1 [at_stk_areaquantity] => 1 [at_serialno] => 0 [at_totalweight] => 94.0000 [at_packingpieces] => 2 [at_timeunits] => 2 ) [1] => Array ( [trat_id] => 101 [tr_sort] => 2 [trat_sort] => 2 [at_id] => 65997 [trat_quantity] => 3 [trat_packingpieces] => 12 [trat_serialno] => [trat_state] => 0 [trat_remark] => [trat_createtime] => 0000-00-00 00:00:00 [trat_modify] => 2013-11-05 18:04:10 [at_eid] => AT100002 [at_name] => 00118146 [at_match] => IKEA [at_description] => KARLSTAD RÉCAGEST WEIPO [at_barcode] => 00118146 [at_bundlequantity] => 1 [at_bundlecode] => [at_stk_itemquantity] => 1 [at_stk_areaquantity] => 1 [at_serialno] => 0 [at_totalweight] => 34.4000 [at_packingpieces] => 1 [at_timeunits] => 3 ) ) ) ) */ ?>