printZamowieniePublicAction(); exit; } if (!User::logged()) { User::authByRequest(); } } public function typespecialAction() { $DBG = ('1' == V::get('DBG', '', $_REQUEST)); header("Content-type: application/json"); $fld = V::get('fld', '', $_GET); switch ($fld) { case 'id_company': { $typeSpecialCompanies = TypespecialVariable::getInstance(-1, '__COMPANIES'); $query = V::get('q', '', $_REQUEST); $rawRows = null; $rows = $typeSpecialCompanies->getValuesWithExports($query); if($DBG){echo'
rows('.$query.') (' . __CLASS__ . '::' . __FUNCTION__ . ':' . __LINE__ . '): ';print_r($rows);echo'
';} foreach ($rows as $kID => $vItem) { $itemJson = new stdClass(); $itemJson->id = $vItem->id; $itemJson->name = $vItem->param_out; if (!empty($vItem->exports)) { $itemJson->exports = $vItem->exports; } $jsonData[] = $itemJson; } echo json_encode($jsonData); } break; case 'ID_PROJECT': { $widgetProject = $this->getWidgetProject(); $typeSpecialIdProject = Typespecial::getInstance($widgetProject['idKomorka'], $colName = $widgetProject['fieldName']); $query = V::get('q', '', $_REQUEST); $rawRows = null; $rows = $typeSpecialIdProject->getValuesWithExports($query); if($DBG){echo'
rows('.$query.') (' . __CLASS__ . '::' . __FUNCTION__ . ':' . __LINE__ . '): ';print_r($rows);echo'
';} foreach ($rows as $kID => $vItem) { $itemJson = new stdClass(); $itemJson->id = $vItem->id; $itemJson->name = $vItem->param_out; if (!empty($vItem->exports)) { $itemJson->exports = $vItem->exports; } $jsonData[] = $itemJson; } echo json_encode($jsonData); } break; } } public function defaultAction() { UI::gora(); if (1 != V::get('_print', '', $_GET)) UI::menu(); try { $data = array(); $data['id_project'] = V::get('ID_PROJECT', 0, $_REQUEST, 'int'); $data['id_company'] = V::get('id_company', 0, $_REQUEST, 'int'); $data['items_count'] = V::get('items_count', 10, $_REQUEST, 'int'); $data['widgetCompanies'] = array(); $data['widgetCompanies']['fieldName'] = 'id_company'; $data['widgetCompanies']['dataUrl'] = "index.php?_route=UrlAction_ProjektyProNetMediaZamZlec&_task=typespecial&fld={$data['widgetCompanies']['fieldName']}"; $data['widgetCompanies']['typeSpecial'] = TypespecialVariable::getInstance(-1, '__COMPANIES'); $data['widgetProject'] = $this->getWidgetProject(); $this->zamZlecFormView($data); } catch (Exception $e) { UI::alert('danger', "Error #" . $e->getCode() . "|" . $e->getLine() . ": " . $e->getMessage()); } if (1 != V::get('_print', '', $_GET)) UI::dol(); } public function reinstallAction() { UI::gora(); try { DB::getPDO()->execSql(" alter table CRM_LISTA_ZASOBOW_ORDERS add INVOICE enum('0','1') NOT NULL DEFAULT '0' "); DB::getPDO()->execSql(" alter table CRM_LISTA_ZASOBOW_ORDERS_HIST add INVOICE varchar(6) NOT NULL DEFAULT 'N/S;' "); } catch (Exception $e) { if (fales !== strpos($e->getMessage(), 'Duplicate column name')) { UI::alert('warning', $e->getMessage()); } else { UI::alert('danger', $e->getMessage()); DBG::log($e); } } try { DB::getPDO()->execSql(" alter table CRM_LISTA_ZASOBOW_ORDERS add PAYMENT enum('0','1') NOT NULL DEFAULT '0' "); DB::getPDO()->execSql(" alter table CRM_LISTA_ZASOBOW_ORDERS_HIST add PAYMENT varchar(6) NOT NULL DEFAULT 'N/S;' "); } catch (Exception $e) { if (fales !== strpos($e->getMessage(), 'Duplicate column name')) { UI::alert('warning', $e->getMessage()); } else { UI::alert('danger', $e->getMessage()); DBG::log($e); } } try { DB::getPDO()->execSql(" alter table CRM_LISTA_ZASOBOW_ORDERS add NR_PKWIU varchar(255) NOT NULL DEFAULT '' "); DB::getPDO()->execSql(" alter table CRM_LISTA_ZASOBOW_ORDERS_HIST add NR_PKWIU varchar(255) NOT NULL DEFAULT 'N/S;' "); } catch (Exception $e) { if (fales !== strpos($e->getMessage(), 'Duplicate column name')) { UI::alert('warning', $e->getMessage()); } else { UI::alert('danger', $e->getMessage()); DBG::log($e); } } try { DB::getPDO()->execSql(" CREATE OR REPLACE DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `CRM_LISTA_ZASOBOW_ORDERS_summary_view` AS SELECT o.ID , SUM( COALESCE(f.OFFER_QUANTITY, 0) * COALESCE(f.OFFER_PRICE_PER_UNIT, 0) ) as SUM_POS , COUNT(1) as COUNT_POS , o.`ID_COMPANIES` , IF(o.`ID_COMPANIES` > 0, (select c.P_NAME from COMPANIES c where c.ID = o.ID_COMPANIES limit 1) , '') as Kontrahent , o.`ID_PROJECT` , o.`ID_PROJECT_path` , o.`A_RECORD_CREATE_DATE` , o.`A_RECORD_CREATE_AUTHOR` , o.`SYNC_SQIX_STATUS` , o.`A_RECORD_UPDATE_DATE` , o.`A_RECORD_UPDATE_AUTHOR` , o.`L_APPOITMENT_DATE` , o.`L_APPOITMENT_USER` , o.`L_APPOITMENT_PERIOD` , o.`L_APPOITMENT_INFO` , o.`L_APPOITMENT_TYPE` , o.`A_STATUS` , o.`A_STATUS_INFO` , o.`A_ADM_COMPANY` , o.`A_CLASSIFIED` -- , o.`NR` , o.`COMPANY_NIP` , o.`COMPANY_NAME` , o.`COMPANY_ADDRESS` , o.`OFFER_DATE` , o.`OFFER_NR` , o.`ORDER_TYPE` , o.`DELIVERY_DATE` , o.`DELIVERY_DATE_NOTES` , o.`EXECUTION_START_DATE` , o.`EXECUTION_END_DATE` , o.`CASH_PENALTY` , o.`LOCATION` , o.`NOTES` FROM `CRM_LISTA_ZASOBOW_ORDERS` o LEFT JOIN `CRM_LISTA_ZASOBOW_OFFERS` f on(f.ID_ORDER = o.ID and (f.A_STATUS is null or f.A_STATUS != 'DELETED')) GROUP BY o.`ID` "); } catch (Exception $e) { UI::alert('danger', $e->getMessage()); DBG::log($e); } UI::alert('info', "Koniec"); UI::dol(); } public function getWidgetProject() { $widgetProject = array(); $widgetProject['idTabela'] = 1656;// TODO: idZasob for TABELA Projekty $widgetProject['idKomorka'] = 1658;// TODO: idZasob for KOMORKA Projekty.P_ID $widgetProject['fieldName'] = 'ID_PROJECT'; $widgetProject['dataUrl'] = "index.php?_route=UrlAction_ProjektyProNetMediaZamZlec&_task=typespecial&fld={$widgetProject['fieldName']}"; $widgetProject['typeSpecial'] = null; try { $acl = User::getAcl()->getObjectAcl('default_db', 'IN7_MK_BAZA_DYSTRYBUCJI'); $acl->init($force = true); $acl->getFields(); $widgetProject['typeSpecial'] = Typespecial::getInstance($widgetProject['idKomorka'], $colName = $widgetProject['fieldName']); } catch (Exception $e) { } return $widgetProject; } public function addZlecenieAction() { $id_company = V::get('id_company', 0, $_REQUEST, 'int'); $id_project = V::get('ID_PROJECT', 0, $_REQUEST, 'int'); $orderType = 'zlecenie'; $data = array(); $data['id_company'] = $id_company; $data['id_project'] = $id_project; $data = $this->setProps($data); $sqlFieldsList = array(); $sqlFieldsList[] = 'ID_PROJECT'; $sqlFieldsList[] = 'ID_COMPANIES'; $sqlFieldsList[] = 'COMPANY_NAME'; $sqlFieldsList[] = 'COMPANY_ADDRESS'; $sqlFieldsList[] = 'COMPANY_POST_CODE'; $sqlFieldsList[] = 'COMPANY_CITY'; $sqlFieldsList[] = 'COMPANY_NIP'; $sqlFieldsList[] = 'COMPANY_CONTACT_PERSON'; $sqlFieldsList[] = 'COMPANY_CONTACT_TEL'; $sqlFieldsList[] = 'COMPANY_CONTACT_MAIL'; $sqlFieldsList[] = 'DELIVERY_DATE'; $sqlFieldsList[] = 'DELIVERY_DATE_NOTES'; $sqlFieldsList[] = 'DELIVERY_TYPE'; $sqlFieldsList[] = 'DELIVERY_LOCATION'; $sqlFieldsList[] = 'CASH_PENALTY'; $sqlFieldsList[] = 'ORDER_CONTACT_PERSON'; $sqlFieldsList[] = 'ORDER_APPROVE_PERSON'; $sqlFieldsList[] = 'DELIVERY_CONTACT_PERSON'; $sqlFieldsList[] = 'PAYMENT_TERM_DAYS_FV'; $sqlFieldsList[] = 'PAYMENT_METHOD'; $sqlObj = array(); $sqlObj['ORDER_TYPE'] = $orderType; foreach ($data as $fldName => $val) { if (!in_array($fldName, $sqlFieldsList)) continue; $sqlObj[$fldName] = $val; } $idOrder = DB::getDB()->ADD_NEW_OBJ('CRM_LISTA_ZASOBOW_ORDERS', (object)$sqlObj); if ($idOrder > 0) { {// update `ORDER_LABEL`: nr zamówienia / inicjały zamawiającego / numer budowy / miesiąc / rok if (!empty($data['obcy_nr_sprawy'])) { $inicjaly = User::getInicjaly(); $year = date('Y'); $month = '';// n Liczbowa forma miesiąca, bez zer wiodących 1 aż do 12 switch (date('n')) { case 1: $month = 'I'; break; case 2: $month = 'II'; break; case 3: $month = 'III'; break; case 4: $month = 'IV'; break; case 5: $month = 'V'; break; case 6: $month = 'VI'; break; case 7: $month = 'VII'; break; case 8: $month = 'VIII'; break; case 9: $month = 'IX'; break; case 10: $month = 'X'; break; case 11: $month = 'XI'; break; case 12: $month = 'XII'; break; } // 58/MŁ/13/2016/10/VII/2016 // 58 - nr rekordu // MŁ - inicjały // 13/2016 - nr budowy (obcy_nr_sprawy) // 10 - nr kolejny zamówienia w odniesieniu do danej budowy // VII - miesiąc // 2016 - rok $lpOrder = ''; if ($data['id_project'] > 0) { $sqlIdProject = DB::getPDO()->quote($data['id_project'], PDO::PARAM_INT); $lpOrder = DB::getPDO()->fetchValue("select count(*) as cnt from CRM_LISTA_ZASOBOW_ORDERS where ID_PROJECT = {$sqlIdProject}"); if ($lpOrder < 1) $lpOrder = 1; } $data['ORDER_LABEL'] = "{$idOrder}/{$inicjaly}/{$data['obcy_nr_sprawy']}/{$lpOrder}/{$month}/{$year}"; } DB::getPDO()->exec("update CRM_LISTA_ZASOBOW_ORDERS set ORDER_LABEL = '{$data['ORDER_LABEL']}' where ID = '{$idOrder}'"); } $urlZam = Request::getPathUri() . "index.php?_route=UrlAction_ProjektyProNetMediaZamZlec&_task={$orderType}&id={$idOrder}"; header("Location: {$urlZam}"); exit; } else { UI::gora(); UI::menu(); UI::alert('danger', 'Nie udało się utworzyć rekordu'); UI::dol(); } } public function zlecenieAction() { UI::gora(); if (1 != V::get('_print', '', $_GET)) UI::menu(); try { $id_order = V::get('id', 0, $_REQUEST, 'int'); $id_project = V::get('ID_PROJECT', 0, $_REQUEST, 'int'); $id_company = V::get('id_company', 0, $_REQUEST, 'int'); $items_count = V::get('items_count', 10, $_REQUEST, 'int'); $data = array(); $data['id'] = $id_order; $data['ile_pozycji'] = $items_count; $data['id_company'] = $id_company; $data['id_project'] = $id_project; $data = $this->setProps($data); DBG::log($data, 'array', "\$data"); $mode = (V::get('_print', '', $_REQUEST))? 'print' : 'view'; $this->zamowienieView($data, $mode); } catch (Exception $e) { UI::alert('danger', "Error #" . $e->getCode() . "|" . $e->getLine() . ": " . $e->getMessage()); } if (1 != V::get('_print', '', $_GET)) UI::dol(); } public function addZamowienieAction() { $id_company = V::get('id_company', 0, $_REQUEST, 'int'); $id_project = V::get('ID_PROJECT', 0, $_REQUEST, 'int'); $orderType = 'zamowienie'; $data = array(); $data['id_company'] = $id_company; $data['id_project'] = $id_project; $data = $this->setProps($data); $sqlFieldsList = array(); $sqlFieldsList[] = 'ID_PROJECT'; $sqlFieldsList[] = 'ID_COMPANIES'; $sqlFieldsList[] = 'COMPANY_NAME'; $sqlFieldsList[] = 'COMPANY_ADDRESS'; $sqlFieldsList[] = 'COMPANY_POST_CODE'; $sqlFieldsList[] = 'COMPANY_CITY'; $sqlFieldsList[] = 'COMPANY_NIP'; $sqlFieldsList[] = 'COMPANY_CONTACT_PERSON'; $sqlFieldsList[] = 'COMPANY_CONTACT_TEL'; $sqlFieldsList[] = 'COMPANY_CONTACT_MAIL'; $sqlFieldsList[] = 'DELIVERY_DATE'; $sqlFieldsList[] = 'DELIVERY_DATE_NOTES'; $sqlFieldsList[] = 'DELIVERY_TYPE'; $sqlFieldsList[] = 'DELIVERY_LOCATION'; $sqlFieldsList[] = 'CASH_PENALTY'; $sqlFieldsList[] = 'ORDER_CONTACT_PERSON'; $sqlFieldsList[] = 'ORDER_APPROVE_PERSON'; $sqlFieldsList[] = 'DELIVERY_CONTACT_PERSON'; $sqlFieldsList[] = 'PAYMENT_TERM_DAYS_FV'; $sqlFieldsList[] = 'PAYMENT_METHOD'; $sqlObj = array(); $sqlObj['ORDER_TYPE'] = $orderType; foreach ($data as $fldName => $val) { if (!in_array($fldName, $sqlFieldsList)) continue; $sqlObj[$fldName] = $val; } $idOrder = DB::getDB()->ADD_NEW_OBJ('CRM_LISTA_ZASOBOW_ORDERS', (object)$sqlObj); if ($idOrder > 0) { {// update `ORDER_LABEL`: nr zamówienia / inicjały zamawiającego / numer budowy / miesiąc / rok if (!empty($data['obcy_nr_sprawy'])) { $inicjaly = User::getInicjaly(); $year = date('Y'); $month = '';// n Liczbowa forma miesiąca, bez zer wiodących 1 aż do 12 switch (date('n')) { case 1: $month = 'I'; break; case 2: $month = 'II'; break; case 3: $month = 'III'; break; case 4: $month = 'IV'; break; case 5: $month = 'V'; break; case 6: $month = 'VI'; break; case 7: $month = 'VII'; break; case 8: $month = 'VIII'; break; case 9: $month = 'IX'; break; case 10: $month = 'X'; break; case 11: $month = 'XI'; break; case 12: $month = 'XII'; break; } // 58/MŁ/13/2016/10/VII/2016 // 58 - nr rekordu // MŁ - inicjały // 13/2016 - nr budowy (obcy_nr_sprawy) // 10 - nr kolejny zamówienia w odniesieniu do danej budowy // VII - miesiąc // 2016 - rok $lpOrder = ''; if ($data['id_project'] > 0) { $sqlIdProject = DB::getPDO()->quote($data['id_project'], PDO::PARAM_INT); $lpOrder = DB::getPDO()->fetchValue("select count(*) as cnt from CRM_LISTA_ZASOBOW_ORDERS where ID_PROJECT = {$sqlIdProject}"); if ($lpOrder < 1) $lpOrder = 1; } $data['ORDER_LABEL'] = "{$idOrder}/{$inicjaly}/{$data['obcy_nr_sprawy']}/{$lpOrder}/{$month}/{$year}"; } DB::getPDO()->exec("update CRM_LISTA_ZASOBOW_ORDERS set ORDER_LABEL = '{$data['ORDER_LABEL']}' where ID = '{$idOrder}'"); } $urlZam = Request::getPathUri() . "index.php?_route=UrlAction_ProjektyProNetMediaZamZlec&_task={$orderType}&id={$idOrder}"; header("Location: {$urlZam}"); exit; } else { UI::gora(); UI::menu(); UI::alert('danger', 'Nie udało się utworzyć rekordu'); UI::dol(); } } public function printZamowieniePublicAction() { $data = array(); {// auth by token $id = V::get('id', 0, $_GET, 'int'); if ($id <= 0) die("Brak dostępu"); $token = V::get('token', '', $_GET); if (empty($token)) die("Brak dostępu"); $email = V::get('email', '', $_GET); if (empty($email)) die("Brak dostępu"); $data['id'] = $id; $data = $this->setProps($data); if (empty($data['id_project'])) die("Brak dostępu"); if ($this->generateOrderLinkToken($id, $email, $data['id_project']) != $token) die("Brak dostępu"); } $_GET['_print'] = $_REQUEST['_print'] = 1; UI::gora(); try { $this->zamowienieView($data, $mode = 'print'); } catch (Exception $e) { UI::alert('danger', "Error #" . $e->getCode() . "|" . $e->getLine() . ": " . $e->getMessage()); } echo''; } public function generateOrderLinkToken($id, $email, $id_project) { return md5("pro-netmedia--{$id}--{$email}--{$id_project}"); } public function zamowienieAction() { UI::gora(); if (1 != V::get('_print', '', $_GET)) UI::menu(); try { $id_order = V::get('id', 0, $_REQUEST, 'int'); $id_project = V::get('ID_PROJECT', 0, $_REQUEST, 'int'); $id_company = V::get('id_company', 0, $_REQUEST, 'int'); $items_count = V::get('items_count', 10, $_REQUEST, 'int'); $data = array(); $data['id'] = $id_order; $data['ile_pozycji'] = $items_count; $data['id_company'] = $id_company; $data['id_project'] = $id_project; $data = $this->setProps($data); if (1 == V::get('DBG_TYPE_ZLECENIE', '', $_GET)) $data['ORDER_TYPE'] = 'zlecenie'; else if (1 == V::get('DBG_TYPE_UNDEFINED', '', $_GET)) $data['ORDER_TYPE'] = 'unknown'; DBG::log($data, 'array', 'data'); $mode = (V::get('_print', '', $_REQUEST))? 'print' : 'view'; $this->zamowienieView($data, $mode); } catch (Exception $e) { UI::alert('danger', "Error #" . $e->getCode() . "|" . $e->getLine() . ": " . $e->getMessage()); } if (1 != V::get('_print', '', $_GET)) UI::dol(); } public function previewOrder($idOrder) { try { $id_order = $idOrder; $data = array(); $data['id'] = $id_order; $data = $this->setProps($data); $this->zamowienieView($data, $mode = 'preview'); } catch (Exception $e) { UI::alert('danger', "Error #" . $e->getCode() . "|" . $e->getLine() . ": " . $e->getMessage()); } } public function setProps($data) { $data['_nr_budowy'] = '';// fetch from project - field M_DIST_DESC $sqlIdOrder = V::get('id', 0, $data, 'int'); if ($sqlIdOrder > 0) { $rows = DB::getPDO()->fetchAll(" select t.* from CRM_LISTA_ZASOBOW_ORDERS t where t.ID = {$sqlIdOrder} "); if (count($rows) > 0) { $row = reset($rows); if (!empty($row['ID_COMPANIES'])) $data['id_company'] = $row['ID_COMPANIES']; if (!empty($row['ID_PROJECT'])) $data['id_project'] = $row['ID_PROJECT']; $data['ORDER_TYPE'] = V::get('ORDER_TYPE', '', $row); $data['ORDER_LABEL'] = V::get('ORDER_LABEL', '', $row); $defaultOrderDate = substr(V::get('A_RECORD_CREATE_DATE', date("Y-m-d"), $row), 0, 10); $data['ORDER_DATE'] = V::get('ORDER_DATE', $defaultOrderDate, $row); $data['OFFER_NR'] = V::get('OFFER_NR', '', $row); $data['OFFER_DATE'] = V::get('OFFER_DATE', '', $row); $data['COMPANY_NAME'] = V::get('COMPANY_NAME', '', $row); $data['COMPANY_ADDRESS'] = V::get('COMPANY_ADDRESS', '', $row); $data['COMPANY_POST_CODE'] = V::get('COMPANY_POST_CODE', '', $row); $data['COMPANY_CITY'] = V::get('COMPANY_CITY', '', $row); $data['COMPANY_NIP'] = V::get('COMPANY_NIP', '', $row); $data['COMPANY_CONTACT_PERSON'] = V::get('COMPANY_CONTACT_PERSON', '', $row); $data['COMPANY_CONTACT_TEL'] = V::get('COMPANY_CONTACT_TEL', '', $row); $data['COMPANY_CONTACT_MAIL'] = V::get('COMPANY_CONTACT_MAIL', '', $row); $data['DELIVERY_DATE'] = V::get('DELIVERY_DATE', '', $row); if (!empty($data['DELIVERY_DATE'])) { $data['DELIVERY_DATE'] = (strlen($data['DELIVERY_DATE']) < 10) ? '' : substr($data['DELIVERY_DATE'], 0, 10); $dateEx = explode('-', $data['DELIVERY_DATE']); if (count($dateEx) != 3) $data['DELIVERY_DATE'] = ''; else if (strlen($dateEx[0]) != 4 || strlen($dateEx[1]) != 2) $data['DELIVERY_DATE'] = ''; } $data['DELIVERY_DATE_NOTES'] = V::get('DELIVERY_DATE_NOTES', '', $row); $data['DELIVERY_START_DATE'] = V::get('DELIVERY_START_DATE', '', $row); $data['DELIVERY_TYPE'] = V::get('DELIVERY_TYPE', '', $row); $data['DELIVERY_LOCATION'] = V::get('DELIVERY_LOCATION', '', $row); $data['CASH_PENALTY'] = V::get('CASH_PENALTY', '', $row); $data['ORDER_CONTACT_PERSON'] = V::get('ORDER_CONTACT_PERSON', '', $row); $data['ORDER_APPROVE_PERSON'] = V::get('ORDER_APPROVE_PERSON', '', $row); $data['DELIVERY_CONTACT_PERSON'] = V::get('DELIVERY_CONTACT_PERSON', '', $row); $data['PAYMENT_TERM_DAYS_FV'] = V::get('PAYMENT_TERM_DAYS_FV', '60', $row); $data['PAYMENT_METHOD'] = V::get('PAYMENT_METHOD', 'przelew', $row); $data['NOTES'] = V::get('NOTES', '', $row); $data['APPROVE_STATUS'] = V::get('APPROVE_STATUS', '', $row); $data['ORDER_CONTACT_FAX'] = V::get('ORDER_CONTACT_FAX', '', $row); $data['ORDER_CONTACT_EMAIL'] = V::get('ORDER_CONTACT_EMAIL', '', $row); $data['ADDITIONAL_CONDITIONS'] = V::get('ADDITIONAL_CONDITIONS', '', $row); $data['NR_PKWIU'] = V::get('NR_PKWIU', '', $row); } $data['orderPosList'] = $this->fetchOrderPosList($sqlIdOrder); } $sqlIdCompany = V::get('id_company', 0, $data, 'int'); if ($sqlIdCompany > 0) { $rows = DB::getPDO()->fetchAll(" select c.* from COMPANIES c where c.ID = {$sqlIdCompany} "); if (count($rows) > 0) { $row = reset($rows); DBG::log($row, 'array', "company by id='{$sqlIdCompany}'"); if (empty($data['COMPANY_NAME'])) $data['COMPANY_NAME'] = V::get('P_NAME', '', $row); if (empty($data['COMPANY_ADDRESS'])) { $data['COMPANY_ADDRESS'] = V::get('P_ADDRESS_STREET', '', $row); if (!empty($row['P_ADDRESS_HOUSE'])) $data['COMPANY_ADDRESS'] .= " {$row['P_ADDRESS_HOUSE']}";// add P_ADDRESS_HOUSE if (!empty($row['P_ADDRESS_HOME'])) $data['COMPANY_ADDRESS'] .= "/{$row['P_ADDRESS_HOME']}";// add '/' P_ADDRESS_HOME } if (empty($data['COMPANY_POST_CODE'])) $data['COMPANY_POST_CODE'] = V::get('P_ADDRESS_POST_CODE', '', $row); if (empty($data['COMPANY_CITY'])) $data['COMPANY_CITY'] = V::get('P_ADDRESS_CITY', '', $row); if (empty($data['COMPANY_NIP'])) $data['COMPANY_NIP'] = V::get('P_NIP', '', $row); if (empty($data['COMPANY_CONTACT_PERSON'])) $data['COMPANY_CONTACT_PERSON'] = V::get('P_CONTACT_PERSON', '', $row); if (empty($data['COMPANY_CONTACT_TEL'])) $data['COMPANY_CONTACT_TEL'] = V::get('P_PHONE', '', $row); if (empty($data['COMPANY_CONTACT_MAIL'])) $data['COMPANY_CONTACT_MAIL'] = V::get('user_mail_contact', '', $row); } } $sqlIdProject = V::get('id_project', 0, $data, 'int'); if ($sqlIdProject > 0) { $rows = DB::getPDO()->fetchAll(" select p.* from IN7_MK_BAZA_DYSTRYBUCJI p where p.ID = {$sqlIdProject} limit 1 "); if (count($rows) > 0) { $row = reset($rows); if (!empty($row['M_DIST_DEALNUM'])) $data['obcy_nr_sprawy'] = $row['M_DIST_DEALNUM']; if (!empty($row['M_DIST_DESC'])) $data['_nr_budowy'] = $row['M_DIST_DESC']; } } if (!empty($data['id_company'])) $data['ID_COMPANIES'] = $data['id_company']; if (!empty($data['id_project'])) $data['ID_PROJECT'] = $data['id_project']; return $data; } public function zamZlecFormView($data) { $id_project = V::get('id_project', 0, $data); $id_company = V::get('id_company', 0, $data); $items_count = V::get('items_count', 0, $data); $widgetCompanies = V::get('widgetCompanies', array(), $data); $widgetProject = V::get('widgetProject', array(), $data); $projOrders = ($id_project > 0) ? DB::getPDO()->fetchAll(" select o.* , p.M_DIST_DEALNUM as obcy_nr_sprawy from CRM_LISTA_ZASOBOW_ORDERS o left join IN7_MK_BAZA_DYSTRYBUCJI p on(p.ID = o.ID_PROJECT) left join COMPANIES c on(c.ID = o.ID_COMPANIES) where o.ID_PROJECT = {$id_project} order by ID DESC -- limit 100 ") : array(); UI::startContainer(['style'=>"margin-top:2em"]); UI::startTag('form', ['action'=>"", 'method'=>"get", 'class'=>"form-horizontal"]); echo UI::h('input', ['type'=>"hidden", 'name'=>"_route", 'value'=>"UrlAction_ProjektyProNetMediaZamZlec"]); UI::startTag('div', ['class'=>"form-group"]); echo UI::h('label', ['for'=>"id_project", 'class'=>"col-sm-2 control-label"], "Projekt"); UI::startTag('div', ['class'=>"col-sm-4"]); if ($widgetProject['typeSpecial']) { $fName = $widgetProject['fieldName']; $fldParams = array(); $fldParams['allowCreate'] = false; $fldParams['ajaxDataUrlBase'] = $widgetProject['dataUrl']; if ($data['id_project'] > 0) { $tsValues = $widgetProject['typeSpecial']->getValuesWithExports($q = $data['id_project']); if (!empty($tsValues[ $data['id_project'] ])) { $fldParams['typespecialValue'] = $tsValues[ $data['id_project'] ]->param_out; } } //$fldParams['ajaxDataUrlBase'] .= "&DBG_TS=3"; echo $widgetProject['typeSpecial']->showFormItem($idTbl = $widgetProject['idTabela'], $fName, $selValue = $data['id_project'], $fldParams); } else { echo UI::h('input', ['type'=>"number", 'name'=>$widgetProject['fieldName'], 'value'=>$data['id_project'], 'class'=>"form-control"]); } UI::endTag('div');// .col-sm-4 UI::endTag('div');// .form-group UI::startTag('div', ['class'=>"form-group"]); echo UI::h('label', ['for'=>"id_company", 'class'=>"col-sm-2 control-label"], "Dostawca"); UI::startTag('div', ['class'=>"col-sm-10"]); if ($widgetCompanies['typeSpecial']) { $fName = $widgetCompanies['fieldName']; $fldParams = array(); $fldParams['allowCreate'] = false; $fldParams['ajaxDataUrlBase'] = $widgetCompanies['dataUrl']; if ($id_company > 0) { $tsValues = $widgetCompanies['typeSpecial']->getEditSelectedValuesByIds(-1, $id = $id_company, $fName, $fieldValue = $id_company); if (1 == count($tsValues)) { $fldParams['typespecialValue'] = array_values($tsValues); $fldParams['typespecialValue'] = reset($fldParams['typespecialValue']); } } //$fldParams['ajaxDataUrlBase'] .= "&DBG_TS=3"; echo $widgetCompanies['typeSpecial']->showFormItem($tblID = -1, $fName, $selValue = $id_company, $fldParams); } else { echo UI::h('input', ['type'=>"number", 'name'=>"id_company", 'value'=>$id_company, 'class'=>"form-control"]); } UI::endTag('div');// .col-sm-10 UI::endTag('div');// .form-group echo UI::h('div', ['class'=>"form-group"], [ UI::h('div', ['class'=>"col-sm-offset-2 col-sm-10"], [ UI::h('input', ['type'=>"hidden", 'name'=>"_task", 'value'=>""]), " ", UI::h('label', [], "Dodaj nowe"), " ", UI::h('button', ['type'=>"submit", 'class'=>"btn btn-primary", 'onclick'=>"return submitZamowienie(this);"], "Zamówienie"), " ", UI::h('button', ['type'=>"submit", 'class'=>"btn btn-primary", 'onclick'=>"return submitZlecenie(this);"], "Zlecenie") ]) ]); UI::endTag('form'); UI::endContainer(); echo UI::h('hr'); echo UI::h('style', ['type' => "text/css"], " .orders_cell__order_notes .edit_note_btn { opacity:0.1; cursor:pointer } .orders_cell__order_notes:hover .edit_note_btn { opacity:1; color:#337AB7 } "); if ($id_project > 0) { // !empty($projOrders)) { UI::startContainer(['style'=>"margin-top:2em"]); $idTableOrders = ProcesHelper::getZasobTableID('CRM_LISTA_ZASOBOW_ORDERS'); UI::table([ 'disable_lp' => true, 'cell_padding' => 6, 'cols' => [ '#', 'status', 'uwagi', 'nr zlecenia', 'nr budowy', ], 'rows' => array_map(function ($order) use ($idTableOrders) { $changeState = array(); $urlFunctions = Route_UrlAction::getTableFunctions($idTableOrders, $order['ID'], 'CRM_LISTA_ZASOBOW_ORDERS', User::getLogin()); //DBG::_(true, true, 'urlFunctions', $urlFunctions); if ('WERSJA_ROBOCZA' == $order['APPROVE_STATUS']) { foreach ($urlFunctions as $fun) { if ('ProjektyProNetMediaRequestApproveZam' == $fun['name']) { $changeState['OCZEKUJE_ZATWIERDZENIA'] = $fun; } } } else if ('OCZEKUJE_ZATWIERDZENIA' == $order['APPROVE_STATUS']) { foreach ($urlFunctions as $fun) { if ('ProjektyProNetMediaApproveZam' == $fun['name']) { $changeState['OCZEKUJE_OSTATECZNEGO_ZATWIERDZENIA'] = $fun; } } } else if ('OCZEKUJE_OSTATECZNEGO_ZATWIERDZENIA' == $order['APPROVE_STATUS']) { foreach ($urlFunctions as $fun) { if ('ProjektyProNetMediaFinalApproveZam' == $fun['name']) { $changeState['ZATWIERDZONE'] = $fun; } } } $changeStateOut = ""; if (!empty($changeState)) { foreach ($changeState as $key => $fun) { $changeStateOut .= UI::h('a', [ 'href' => $this->generateFunctionLink($fun, $idTableOrders, $order['ID'], $order), 'class' => "btn btn-xs btn-default" ], "Zmień na: {$key}"); $changeStateOut .= " "; } } return [ '#' => $order['ID'] . UI::h('a', [ 'href' => "index.php?_route=UrlAction_ProjektyProNetMediaZamZlec&_task={$order['ORDER_TYPE']}&id={$order['ID']}", 'class' => "btn btn-link btn-xs" ], "Edytuj {$order['ORDER_TYPE']}"), 'status' => $order['APPROVE_STATUS'] . " " . $changeStateOut, '@class[uwagi]' => 'orders_cell__order_notes', 'uwagi' => UI::h('span', ['class'=>"order-notes"], $order['ORDER_NOTES']) . " " . UI::h('i', [ 'onClick' => "return p5UI__Clickable(this, 'p5:ZamZlec:editNote', {idOrder: '{$order['ID']}', label: '{$order['ORDER_LABEL']}'})", 'class' => "glyphicon glyphicon-pencil edit_note_btn", 'title' => "Edytuj" ]), 'nr zlecenia' => $order['ORDER_LABEL'], 'nr budowy' => $order['obcy_nr_sprawy'], ]; }, $projOrders) ]); UI::endContainer(); } else { $filterInit = []; $forceFilterInit = []; $acl = Core_AclHelper::getAclByNamespace('default_db/CRM_LISTA_ZASOBOW_ORDERS'); $syncUrl = Request::getPathUri() . 'index.php?_route=ViewTableAjax&namespace=' . $acl->getNamespace(); $tbl = new TableAjax($acl); $tblLabel = $acl->getNamespace(); if ('default_db' == $acl->getSourceName()) { $tblLabel = array(); $zasobObj = ProcesHelper::getZasobTableInfo($acl->getID()); if (!$zasobObj) throw new Exception("Zasob TABELA ID=" . $acl->getID() . " nie istnieje"); if (!empty($zasobObj->DESC_PL)) $tblLabel []= $zasobObj->DESC_PL; if (!empty($zasobObj->OPIS)) $tblLabel []= $zasobObj->OPIS; $tblLabel = implode(" - ", $tblLabel); } $tbl->setSyncUrl($syncUrl); $tbl->setLabel($tblLabel); $tbl->addRowFunction('edit'); // $tbl->addRowFunction('hist'); // $tbl->addRowFunction('files'); $tbl->addRowFunction('msgs'); $tbl->setFilterInit($filterInit); if (!empty($forceFilterInit)) $tbl->setForceFilterInit($forceFilterInit); echo $tbl->render(); } echo UI::h('link', ['rel'=>"stylesheet", 'type'=>"text/css", 'href'=>"static/sweetalert2.min.css"]); echo UI::h('script', ['src'=>'static/sweetalert2.min.js']); UI::inlineJS(__FILE__ . ".zam-zlec-list.js", [ 'SAVE_ORDER_NOTES_URL' => "index.php?_route=UrlAction_ProjektyProNetMediaZamZlec&_task=updateOrderNoteAjax", 'DBG' => (DBG::isActive()) ? "1" : "0" ]); } public function generateFunctionLink($fun, $idTableOrders, $idOrder, $order) { $link = $fun['baseLink']; if (empty($fun['cell_id_params'])) return $link; $fieldMap = array(); { $rows = DB::getPDO()->fetchAll(" select z.ID, z.`DESC` from CRM_LISTA_ZASOBOW z where z.PARENT_ID = '{$idTableOrders}' and z.`TYPE` = 'KOMORKA' "); if (empty($rows)) return '#'; foreach ($rows as $row) { $fieldMap[ $row['ID'] ] = $row['DESC']; } if (empty($fieldMap)) return '#'; } $record = null; { $rows = DB::getPDO()->fetchAll(" select r.* from CRM_LISTA_ZASOBOW_ORDERS r where r.ID = '{$idOrder}' "); if (empty($rows)) return '#'; $record = $rows[0]; } if (!$record) return '#'; $urlParams = array();// [ "{$urlParamName}={$paramValue}" ] foreach ($fun['cell_id_params'] as $idField => $urlParamName) { $paramValue = ''; if (array_key_exists($idField, $fieldMap)) { $paramValue = V::get($fieldMap[$idField], '', $record); $urlParams[] = "{$urlParamName}={$paramValue}"; } } if (!empty($urlParams)) $link .= "&" . implode("&", $urlParams); return $link; } public function sendToAjaxAction() { Response::sendTryCatchJson(array($this, 'sendToAjax'), $args = 'JSON_FROM_REQUEST_BODY'); } public function sendToAjax($args) { $response = array(); $id = V::get('id', 0, $args, 'int'); if ($id <= 0) throw new Exception("Error Processing Request - missing id"); $email = V::get('email', '', $args, 'word'); if (empty($email)) throw new Exception("Error Processing Request - missing email"); // TODO: validate email address $data['id'] = $id; $data = $this->setProps($data); if (empty($data['id_project'])) throw new Exception("Error Processing Request - missing project id"); $token = $this->generateOrderLinkToken($id, $email, $data['id_project']); $orderStatus = ''; if ('ZATWIERDZONE' == $data['APPROVE_STATUS']) $orderStatus = 'Zatwierdzone'; else if ('ODRZUCONE' == $data['APPROVE_STATUS']) $orderStatus = 'Odrzucone'; else if ('OCZEKUJE_OSTATECZNEGO_ZATWIERDZENIA' == $data['APPROVE_STATUS']) $orderStatus = 'Oczekuje ostatecznego zatwierdzenia'; else if ('OCZEKUJE_ZATWIERDZENIA' == $data['APPROVE_STATUS']) $orderStatus = 'Oczekuje zatwierdzenia'; else if ('WERSJA_ROBOCZA' == $data['APPROVE_STATUS']) $orderStatus = 'Wersja robocza'; if (DBG::isActive()) $response['DBG__DATA'] = $data; if (DBG::isActive()) $response['DBG__TOKEN'] = $token; $link = Request::getPathUri() . "index.php?_route=UrlAction_ProjektyProNetMediaZamZlec"; $link .= "&_task=printZamowienie"; $link .= "&id={$id}"; $link .= "&email={$email}"; $link .= "&token={$token}"; if (DBG::isActive()) $response['DBG__LINK'] = $link; $subject = "Zamówienie {$data['ORDER_LABEL']} - Pro-Net.Media S.A."; $message = ''; $message .= '

'."Zamówienie nr {$data['ORDER_LABEL']}".'

'."\n"; $message .= "

Status zamówienia: {$orderStatus}

\n"; $message .= "\n

Wiadomość została wygenerowana automatycznie, prosimy na nią nie odpowiadać.

"; $message .= "

Pro-Net.Media S.A.
pro-netmedia.pl

"; $message .= ''; $headers = 'MIME-Version: 1.0' . "\r\n"; $headers .= "Content-Type: text/html; charset=UTF-8\r\n"; $headers .= 'From: "Pro-Net.Media S.A." ' . "\r\n"; // $headers .= 'Bcc: piotrl86+zlecenie--pro-netmedia@gmail.com' . "\r\n"; // $email = 'piotrl86+dbg-orders-pro-netmedia@gmail.com';// TODO: RMME TEST if (!mail($email, $subject, $message, $headers)) { $response['msg'] = "Nie udało się wysłać wiadomości"; $response['type'] = "error"; } else { $response['msg'] = "Wysłano wiadomość"; $response['type'] = "success"; } return $response; } public function updateOrderNoteAjaxAction() { Response::sendTryCatchJson(array($this, 'updateOrderNoteAjax'), $args = 'JSON_FROM_REQUEST_BODY'); } public function updateOrderNoteAjax($args) { $response = array(); $response['type'] = "error"; if (DBG::isActive()) $response['DBG__ARGS'] = $args; $id = V::get('id', 0, $args, 'int'); if ($id <= 0) throw new Exception("Error Processing Request - wrong id format"); $notes = V::get('notes', '', $args); if (strlen($notes) > 255) throw new Exception("Przekroczono limit długości znaków"); $sqlObj = array(); $sqlObj['ID'] = $id; $sqlObj['ORDER_NOTES'] = $notes; $affected = DB::getDB()->UPDATE_OBJ('CRM_LISTA_ZASOBOW_ORDERS', (object)$sqlObj); if (DBG::isActive()) $response['DBG__DB_affected'] = $affected; if ($affected < 0) throw new Exception("Wystąpiły błędy podczas wprowadzania zmian"); $response['order'] = array(); $response['order']['ID'] = $id; $response['order']['ORDER_NOTES'] = DB::getPDO()->fetchValue("select ORDER_NOTES from CRM_LISTA_ZASOBOW_ORDERS where ID = {$id}"); $response['msg'] = "Zmiany wprowadzono pomyślnie"; $response['type'] = "success"; return $response; } public function saveAjaxAction() { $body = Request::getRequestBody(); $json = json_decode($body, $assoc = true); $data = array(); $data['id'] = V::get('id', 0, $_REQUEST, 'int'); $data['id_company'] = V::get('id_company', 0, $_REQUEST, 'int'); $data['id_project'] = V::get('id_project', 0, $_REQUEST, 'int'); $data = $this->setProps($data); $res = new stdClass(); $res->type = 'success'; $res->msg = 'OK'; $res->idOrder = V::get('idOrder', -1, $json, 'int'); $res->orderPosList = array(); $res->fields = new stdClass(); if (DBG::isActive()) $res->DBG_DATA = $data; if (!empty($json['fields'])) { $sqlFieldsList = array(); $sqlFieldsList[] = 'ID_PROJECT'; $sqlFieldsList[] = 'ID_COMPANIES'; $sqlFieldsList[] = 'COMPANY_NAME'; $sqlFieldsList[] = 'COMPANY_ADDRESS'; $sqlFieldsList[] = 'COMPANY_POST_CODE'; $sqlFieldsList[] = 'COMPANY_CITY'; $sqlFieldsList[] = 'COMPANY_NIP'; $sqlFieldsList[] = 'COMPANY_CONTACT_PERSON'; $sqlFieldsList[] = 'COMPANY_CONTACT_TEL'; $sqlFieldsList[] = 'COMPANY_CONTACT_MAIL'; $sqlFieldsList[] = 'DELIVERY_DATE'; $sqlFieldsList[] = 'DELIVERY_DATE_NOTES'; $sqlFieldsList[] = 'DELIVERY_TYPE'; $sqlFieldsList[] = 'DELIVERY_LOCATION'; $sqlFieldsList[] = 'CASH_PENALTY'; $sqlFieldsList[] = 'ORDER_CONTACT_PERSON'; $sqlFieldsList[] = 'ORDER_APPROVE_PERSON'; $sqlFieldsList[] = 'DELIVERY_CONTACT_PERSON'; $sqlFieldsList[] = 'OFFER_NR'; $sqlFieldsList[] = 'ORDER_DATE'; $sqlFieldsList[] = 'PAYMENT_TERM_DAYS_FV'; $sqlFieldsList[] = 'PAYMENT_METHOD'; $sqlFieldsList[] = 'NOTES'; $sqlFieldsList[] = 'DELIVERY_START_DATE'; $sqlFieldsList[] = 'ORDER_CONTACT_FAX'; $sqlFieldsList[] = 'ORDER_CONTACT_EMAIL'; $sqlFieldsList[] = 'ADDITIONAL_CONDITIONS'; $sqlFieldsList[] = 'NR_PKWIU'; $sqlObj = array(); //$sqlObj['ORDER_TYPE'] = $json['type']; foreach ($data as $fldName => $val) { if (!in_array($fldName, $sqlFieldsList)) continue; $sqlObj[$fldName] = $val; } foreach ($json['fields'] as $fldName => $val) { if (!in_array($fldName, $sqlFieldsList)) continue; $sqlObj[$fldName] = $val; } $res->TODO_SQL_OBJ = $sqlObj; $res->fields = $sqlObj; if ($res->idOrder > 0) { $sqlObj['ID'] = $res->idOrder; $affected = DB::getDB()->UPDATE_OBJ('CRM_LISTA_ZASOBOW_ORDERS', (object)$sqlObj); if ($affected > 0) { $res->type = 'success'; $res->msg = "Zaktualizowano rekord '{$res->idOrder}'"; $rows = DB::getPDO()->fetchAll("select * from CRM_LISTA_ZASOBOW_ORDERS where ID = '{$res->idOrder}'"); $row = reset($rows); $res->fields = $row; } else if ($affected < 0) { $res->type = 'danger'; $res->msg = 'Nie udało się wprowadzić zmian'; } } else { $idOrder = DB::getDB()->ADD_NEW_OBJ('CRM_LISTA_ZASOBOW_ORDERS', (object)$sqlObj); if ($idOrder > 0) { $res->idOrder = $idOrder; $res->type = 'success'; $res->msg = "Utworzono rekord nr '{$res->idOrder}'"; $rows = DB::getPDO()->fetchAll("select * from CRM_LISTA_ZASOBOW_ORDERS where ID = '{$res->idOrder}'"); $row = reset($rows); $res->fields = $row; } else { $res->idOrder = -1; $res->type = 'danger'; $res->msg = 'Nie udało się utworzyć rekordu'; } } {// try to add new company if (empty($res->fields['ID_COMPANIES'])) { $comObj = array(); $comObj['P_NAME'] = V::get('COMPANY_NAME', '', $sqlObj); $comObj['P_ADDRESS_STREET'] = V::get('COMPANY_ADDRESS', '', $sqlObj); $comObj['P_ADDRESS_POST_CODE'] = V::get('COMPANY_POST_CODE', '', $sqlObj); $comObj['P_ADDRESS_CITY'] = V::get('COMPANY_CITY', '', $sqlObj); $comObj['P_NIP'] = V::get('COMPANY_NIP', '', $sqlObj); $comObj['P_CONTACT_PERSON'] = V::get('COMPANY_CONTACT_PERSON', '', $sqlObj); $comObj['P_PHONE'] = V::get('COMPANY_CONTACT_TEL', '', $sqlObj); $comObj['user_mail_contact'] = V::get('COMPANY_CONTACT_MAIL', '', $sqlObj); if (!empty($comObj['P_NIP']) && !empty($comObj['P_NAME']) && !empty($comObj['P_ADDRESS_STREET']) && !empty($comObj['P_PHONE'])) { $res->TODO_ADD_COM = $comObj; $idCompany = DB::getDB()->ADD_NEW_OBJ('COMPANIES', (object)$comObj); if ($idCompany > 0) { $orderObj['ID'] = $res->idOrder; $orderObj['ID_COMPANIES'] = $idCompany; $affected = DB::getDB()->UPDATE_OBJ('CRM_LISTA_ZASOBOW_ORDERS', (object)$orderObj); $rows = DB::getPDO()->fetchAll("select * from CRM_LISTA_ZASOBOW_ORDERS where ID = '{$res->idOrder}'"); $row = reset($rows); $res->fields = $row; } } } } } $currentPosList = $this->fetchOrderPosList($res->idOrder); $res->validateErrors = array(); if (!empty($json['orderPosList']) && $res->idOrder > 0) { $idMap = array();// $idFrontEnd => $idBackEnd foreach ($json['orderPosList'] as $item) { $sqlObj = array(); $sqlObj['ID_ORDER'] = $res->idOrder; if ($item['id'] <= 0 && empty($item['name']) && empty($item['price']) && empty($item['quantity']) && empty($item['unit'])) {// skip empty pos continue; } $validatePosErrors = $this->validatePos($item); if (!empty($validatePosErrors)) { $res->validateErrors[ $item['id'] ] = $validatePosErrors; } else { $sqlObj['OFFER_NAME'] = $item['name']; $sqlObj['OFFER_PRICE_PER_UNIT'] = str_replace(',', '.', $item['price']); $sqlObj['OFFER_QUANTITY'] = $item['quantity']; $sqlObj['OFFER_UNIT'] = $item['unit']; if ($item['id'] > 0) { $sqlObj['ID'] = $item['id']; } if ($sqlObj['ID'] > 0) { DB::getDB()->UPDATE_OBJ('CRM_LISTA_ZASOBOW_OFFERS', (object)$sqlObj); } else { $idPos = DB::getDB()->ADD_NEW_OBJ('CRM_LISTA_ZASOBOW_OFFERS', (object)$sqlObj); $idMap[ $item['id'] ] = $idPos; } } } if (!empty($json['toDeletePosList']) && $res->idOrder > 0) { $res->DELETE_LOG = array(); foreach ($json['toDeletePosList'] as $idFrontEnd => $bool) { if (!$bool) continue; if ($idFrontEnd <= 0) continue; if (array_key_exists($idFrontEnd, $currentPosList)) { $sqlObj = array(); $sqlObj['ID'] = $idFrontEnd; $sqlObj['A_STATUS'] = 'DELETED'; $res->DELETE_LOG[$idFrontEnd] = DB::getDB()->UPDATE_OBJ('CRM_LISTA_ZASOBOW_OFFERS', (object)$sqlObj); } } } $orderPoslist = array(); {// fix state frontEnd <--> backEnd $updatedPosList = $this->fetchOrderPosList($res->idOrder); foreach ($json['orderPosList'] as $item) { $idFrontEnd = $item['id']; $idBackEnd = 0; if ($idFrontEnd <= 0 && array_key_exists($idFrontEnd, $idMap)) { $idBackEnd = $idMap[$idFrontEnd]; } else {// $item['id'] > 0 $idBackEnd = $idFrontEnd; } if (!array_key_exists($idBackEnd, $updatedPosList)) $idBackEnd = 0; if ($idBackEnd) { $orderPoslist[] = $updatedPosList[ $idBackEnd ]; } else { $orderPoslist[] = $item; $res->validateErrors[ $item['id'] ][ 'name' ] = true; $res->validateErrors[ $item['id'] ][ 'price' ] = true; $res->validateErrors[ $item['id'] ][ 'quantity' ] = true; $res->validateErrors[ $item['id'] ][ 'unit' ] = true; } } $res->orderPosList = $orderPoslist; } foreach ($idMap as $idFrontEnd => $idBackEnd) { if (array_key_exists($idFrontEnd, $res->validateErrors)) { } } } $res->validateErrors = (object)$res->validateErrors; Response::sendJsonExit($res); } public function validatePos($item) { $validatePosErrors = array(); if (empty($item['name'])) $validatePosErrors['name'] = 'Brak nazwy'; if (empty($item['unit'])) $validatePosErrors['unit'] = 'Brak jednostki'; if (empty($item['quantity'])) $validatePosErrors['quantity'] = 'Brak ilości'; if (empty($item['price'])) $validatePosErrors['price'] = 'Brak ceny jednostkowej'; return $validatePosErrors; } public function fetchOrderPosList($idOrder) { $orderPosList = array(); $rows = DB::getPDO()->fetchAll(" select o.* from CRM_LISTA_ZASOBOW_OFFERS o where o.ID_ORDER = {$idOrder} and (o.A_STATUS != 'DELETED' or o.A_STATUS is null) "); foreach ($rows as $row) { $price = number_format($row['OFFER_PRICE_PER_UNIT'], 4, '.', ''); $price_f2 = number_format($row['OFFER_PRICE_PER_UNIT'], 2, '.', ''); if ($price_f2 . "00" == $price) $price = $price_f2; $quantity = number_format($row['OFFER_QUANTITY'], 4, '.', ''); $quantity_f2 = number_format($row['OFFER_QUANTITY'], 2, '.', ''); $quantity_int = intval($row['OFFER_QUANTITY']); if ($quantity_int . ".0000" == $quantity) $quantity = $quantity_int; else if ($quantity_f2 . "00" == $quantity) $quantity = $quantity_f2; $posItem = array('id' => $row['ID'], 'name' => $row['OFFER_NAME'], 'price' => $price, 'quantity' => $quantity, 'unit' => $row['OFFER_UNIT']); $orderPosList[ $row['ID'] ] = (object)$posItem; } return $orderPosList; } public function zamowienieView($data, $mode = 'view') { $id_order = V::get('id', 0, $data); $id_company = V::get('id_company', 0, $data); $id_project = V::get('id_project', 0, $data); $orderPosList = array(); if ($id_order > 0) { $orderPosList = V::get('orderPosList', array(), $data); $orderPosList = array_values($orderPosList); } if (empty($orderPosList)) { $ile_pozycji = V::get('ile_pozycji', 10, $data); for ($i = 1; $i <= $ile_pozycji; $i++) { $posItem = array('id' => -1 * $i, 'name' => '', 'price' => '', 'quantity' => '', 'unit' => ''); $orderPosList[] = (object)$posItem; } } // fetch from db - overwrite $orderPosList DBG::_('DBG', '>1', 'data', $data, __CLASS_, __FUNCTION__, __LINE__); $sendToLink = Request::getPathUri() . "index.php?_route=UrlAction_ProjektyProNetMediaZamZlec&_task=sendToAjax&id={$id_order}"; $saveLink = Request::getPathUri() . "index.php?_route=UrlAction_ProjektyProNetMediaZamZlec&_task=saveAjax&id={$id_order}"; $fields = $data; $labels = array();// $data['ORDER_TYPE']: zamowienie, zlecenie $isTypeZlecenie = ('zlecenie' == $data['ORDER_TYPE']); $labels['main'] = ($isTypeZlecenie) ? "Zlecenie" : "Zamówienie"; $labels['comA'] = ($isTypeZlecenie) ? "Zleceniodawca" : "Zamawiający"; $labels['comB'] = ($isTypeZlecenie) ? "Zleceniobiorca" : "Dostawca"; $labels['invoiceMessage'] = "NA FAKTURZE VAT NALEŻY UMIEŚCIĆ CZYTELNY NR " . (($isTypeZlecenie) ? "ZLECENIA" : "ZAMÓWIENIA"); $labels['offer'] = "Zamawiający zleca Dostawcy dostawę poniższych materiałów na wskazanych poniżej warunkach. Zgodnie z ofertą "; if ($isTypeZlecenie) $labels['offer'] = "Zleceniodawca niniejszym składa zlecenie na wskazanych poniżej warunkach zgodnie z ofertą Zleceniobiorcy z dnia "; $labels['firstPosFieldLabel'] = ($isTypeZlecenie)? 'Przedmiot zlecenia' : 'Wyszczególnienie'; $labels['conditions'] = "WARUNKI REALIZACJI " . (($isTypeZlecenie) ? "ZLECENIA" : "ZAMÓWIENIA"); $labels['signatureComA'] = "pieczęć i czytelny podpis " . (($isTypeZlecenie) ? "Zleceniodawcy" : "Zamawiającego"); $labels['signatureComB'] = "pieczęć i czytelny podpis " . (($isTypeZlecenie) ? "Zleceniobiorcy" : "Dostawcy") . " zgodnie z zasadami reprezentacji"; $labels['statement'] = "NINIEJSZYM OŚWIADCZAM, ŻE " . (($isTypeZlecenie) ? "ZLECENIOBIORCA" : "DOSTAWCA") . " PRZYJMUJE ZAMÓWIENIE DO REALIZACJI NA POWYŻSZYCH WARUNKACH:"; $conditions = array(); if ($isTypeZlecenie) { $conditions[] = [ ['text', 'Termin wykonania zlecenia: od dnia '], ['field', '', 'DELIVERY_START_DATE', 'string'], ['text', ' do dnia '], ['field', '', 'DELIVERY_DATE', 'date'], ['text', ' '], ['field', '', 'DELIVERY_DATE_NOTES', 'text'], ['text', ' , po tym terminie będzie naliczana przez Zleceniodawcę kara umowna odpowiednio za opóźnienie Zleceniobiorcy w rozpoczęciu / zakończeniu przedmiotu zlecenia w wysokości '], ['field', '', 'CASH_PENALTY', 'string'], // "……….. złotych (słownie: …………. złotych 00/100) ['text', ' za każdy rozpoczęty dzień opóźnienia z terminem płatności tej kary – 7 dni od jej naliczenia. '], ['text', ' Zleceniodawca może potrącić wskazaną karę umowną z wynagrodzenia Zleceniobiorcy. Zleceniodawca zastrzega sobie prawo dochodzenia odszkodowania na zasadach ogólnych, przekraczającego wysokość zastrzeżonej w niniejszym punkcie kary umownej.'] ]; $conditions[] = [ ['text', 'Miejsce wykonania zlecenia: '], ['field', '', 'DELIVERY_LOCATION', 'string'] ]; $conditions[] = [ ['text', 'Forma płatności: '], ['field', 'przelew', 'PAYMENT_METHOD', 'string'] ]; $conditions[] = [ ['text', 'Wynagrodzenie objęte niniejszym zleceniem jest wynagrodzeniem ryczałtowym.'] ]; $conditions[] = [ ['text', 'Termin płatności: '], ['field', '', 'PAYMENT_TERM_DAYS_FV', 'int'], ['text', ' dni od daty wpływu do siedziby Zleceniodawcy wszystkich prawidłowych i kompletnych dokumentów, o których mowa w pkt 6 i 7 poniżej w trybie zgodnym z pkt 8 poniżej.'] ]; $conditions[] = [ ['text', 'Podstawą do wystawienia przez Zleceniobiorcę na rzecz Zleceniodawcy faktury VAT jest podpisany przez obie strony bezusterkowy protokół odbioru przez Zleceniodawcę przedmiotu zlecenia oraz dostarczenie Zleceniodawcy przez Zleceniobiorcę wszelkich niezbędnych dokumentów związanych z przedmiotem zlecenia, a także w razie gdy przedmiotem zlecenia jest wynajem sprzętu – podpisana i zaakceptowana przez obie strony karta pracy sprzętu.'] ]; $conditions[] = [ ['text', 'Płatność dokonana będzie wyłącznie na podstawie prawidłowo wystawionej i doręczonej Zleceniodawcy przez Zleceniobiorcę faktury VAT z dołączonym oryginałem dokumentu potwierdzającego bezusterkowy odbiór przez Zleceniodawcę przedmiotu zlecenia wraz ze wszystkimi niezbędnymi dokumentami przez osoby wymienione w pkt 10 i 11 poniżej, a także w przypadku gdy przedmiotem zlecenia jest wynajem sprzętu – w oparciu o podpisaną przez osoby wymienione w pkt 10 i 11 poniżej i zaakceptowaną przez obie strony kartę pracy sprzętu, a także kopią niniejszego zlecenia podpisaną przez Zleceniodawcę i Zleceniobiorcę zgodnie z zasadami reprezentacji, poświadczoną przez Zleceniobiorcę za zgodność z oryginałem.'] ]; $conditions[] = [ ['bold', 'Zleceniobiorca przekaże Zleceniodawcy fakturę VAT wraz z wymaganymi załącznikami, o których mowa w pkt 5-7 powyżej wyłącznie przesyłką poleconą Poczty Polskiej za potwierdzeniem odbioru.'] ]; $conditions[] = [ ['bold', 'W przypadku gdy Zleceniobiorca otrzyma dokumenty, o których mowa w pkt 5-7 powyżej, niespełniające warunków wskazanych w niniejszym zleceniu lub zostaną one wysłane niezgodnie z trybem określonym w pkt 8 powyżej, wówczas Zleceniodawca zastrzega sobie prawo do odmowy realizacji płatności i odesłania ich na adres Zleceniobiorcy celem skorygowania.'] ]; $conditions[] = [ ['text', 'Osoba do kontaktu ze strony Zleceniodawcy: '], ['tag', 'newline'], ['field', '', 'ORDER_CONTACT_PERSON', 'text'] ]; $conditions[] = [ ['text', 'Osoba uprawniona do kontaktu ze strony Zleceniobiorcy: '], ['field', '', 'DELIVERY_CONTACT_PERSON', 'string'] ]; $conditions[] = [ ['text', 'Za datę zapłaty uważa się datę obciążenia rachunku bankowego Zleceniodawcy.'] ]; $conditions[] = [ ['text', 'Niniejsze zlecenie jest ważne po potwierdzeniu przez Zleceniobiorcę przyjęcia do realizacji niniejszego zlecenia w terminie 2 dni roboczych od daty jego przekazania Zleceniobiorcy przez Zleceniodawcę.'], ['text', ' Potwierdzenie pod rygorem nieważności winno być przesłane faksem do Zleceniodawcy pod numer '], ['field', '', 'ORDER_CONTACT_FAX', 'string'], ['text', ' lub pocztą elektroniczną na adres email: '], ['field', '', 'ORDER_CONTACT_EMAIL', 'string'], ['text', ' Brak potwierdzenia jest uznawany jako odmowa przyjęcia przez Zleceniobiorcę do realizacji niniejszego zlecenia. Każda proponowana zamiana warunków zlecenia określonych w niniejszym zleceniu oznacza złożenie nowej oferty i winna być pod rygorem nieważności potwierdzona w formie pisemnej przez Zleceniodawcę. Nie dopuszcza się akceptu milczącego.'] ]; $conditions[] = [ ['text', 'Wierzytelności wynikające z niniejszego zlecenia nie mogą być przenoszone przez Zleceniobiorcę na osoby trzecie bez uprzedniej, pisemnej zgody Zleceniodawcy.'] ]; $conditions[] = [ ['text', 'Zleceniodawca ma prawo odstąpić od umowy objętej niniejszym zleceniem w terminie 30 dni od dnia wystąpienia jednej z następujących okoliczności:'], ['tag', 'newline'], ['text', 'a) Zleceniobiorca nie wykonuje lub nienależycie wykonuje jakiekolwiek ze zobowiązań Zleceniobiorcy wynikających z umowy objętej niniejszym zleceniem, pomimo wezwania Zleceniobiorcy przez Zleceniodawcę do usunięcia naruszeń w terminie 3 dni roboczych od dnia tego wezwania,'], ['tag', 'newline'], ['text', 'b) powzięcia przez Zleceniodawcę informacji, iż sytuacja finansowa Zleceniobiorcy nie pozwala na wykonanie prac zleconych na mocy niniejszego zlecenia,'], ['tag', 'newline'], ['text', 'c) powzięcia przez Zleceniodawcę informacji, iż Zleceniobiorca nie przestrzega przepisów BHP oraz przeciwpożarowych,'], ['tag', 'newline'], ['text', 'd) Zleceniobiorca zaprzestał wykonywania zlecenia na okres dłuższy niż 2 dni robocze lub przerwał prace na okres dłuższy niż 2 dni robocze.'] ]; $conditions[] = [ ['text', 'Zleceniobiorca ma prawo korzystać z osób trzecich do wykonywania przez niego przedmiotu zlecenia wyłącznie po uzyskaniu uprzedniej, pisemnej zgody Zleceniodawcy. Zleceniobiorca odpowiada za działania i zaniechania osób trzecich jak za własne.'] ]; $conditions[] = [ ['bold', 'Zleceniobiorca usługi potwierdza / nie potwierdza iż jest podwykonawcą zlecanej usługi, objęty numerem PKWiU: '], ['field', '', 'NR_PKWIU', 'string'] ]; $conditions[] = [ ['bold', 'Zleceniobiorca oświadcza, że jest / nie jest czynnym podatnikiem VAT'], ]; $conditions[] = [ ['text', 'Ustalenia dodatkowe: '], ['field', '', 'ADDITIONAL_CONDITIONS', 'string'] ]; } else { $conditions[] = [ ['bold', 'Termin wykonania usługi: '], ['field', '', 'DELIVERY_DATE', 'date'], ['text', ' '], ['field', '', 'DELIVERY_DATE_NOTES', 'text'], ['text', ', po tym terminie Zamawiający zastrzega sobie prawo do odmowy odbioru przedmiotu zamówienia.'] ]; $conditions[] = [ ['bold', 'Forma dostawy: '], ['field', '', 'DELIVERY_TYPE', 'string'] ]; $conditions[] = [ ['bold', 'Miejsce dostawy: '], ['field', '', 'DELIVERY_LOCATION', 'string'] ]; $conditions[] = [ ['bold', 'Warunki płatności: '], ['field_readonly', 'przelew', 'PAYMENT_METHOD'], ['text', ' '], ['field', '', 'PAYMENT_TERM_DAYS_FV', 'int'], ['text', ' dni po dostawie towaru'] ]; $conditions[] = [ ['bold', 'Forma płatności: '], ['field', 'przelew', 'PAYMENT_METHOD', 'string'] ]; $conditions[] = [ ['bold', 'Termin płatności: '], ['field', '', 'PAYMENT_TERM_DAYS_FV', 'int'], ['text', ' dni od daty wpływu do siedziby Zamawiającego prawidłowych i kompletnych dokumentów, o których mowa w pkt 7 poniżej w trybie zgodnym z pkt 8 poniżej.'] ]; $conditions[] = [ ['text', 'Płatność dokonana będzie wyłącznie na podstawie prawidłowo wystawionej i doręczonej Zamawiającemu przez Dostawcę faktury VAT z dołączonym oryginałem dokumentu potwierdzającego bezusterkowy odbiór przez Zamawiającego przedmiotu zamówienia wraz ze wszystkimi niezbędnymi dokumentami, gwarancjami, atestami, testami, etc. przez osoby wymienione w pkt 11-12 poniżej, a także kopią niniejszego zamówienia podpisaną przez Zamawiającego i Dostawcę zgodnie z zasadami reprezentacji, poświadczoną przez Dostawcę za zgodność z oryginałem.'] ]; $conditions[] = [ ['bold', 'Dostawca przekaże Zamawiającemu fakturę VAT wraz z wymaganymi załącznikami, o których mowa w pkt 7 powyżej wyłącznie przesyłką poleconą Poczty Polskiej za potwierdzeniem odbioru.'] ]; $conditions[] = [ ['bold', 'W przypadku gdy Zamawiający otrzyma dokumenty, o których mowa w pkt 7 i 8 powyżej, niespełniające warunków wskazanych w niniejszym zamówieniu lub zostaną one wysłane niezgodnie z trybem określonym w pkt 8 powyżej, wówczas Zamawiający zastrzega sobie prawo do odmowy realizacji płatności i odesłania ich na adres Dostawcy celem skorygowania.'] ]; $conditions[] = [ ['text', 'Zamawiającemu przysługuje prawo do naliczenia Dostawcy kary umownej w wysokości '], ['field', '', 'CASH_PENALTY', 'price'], ['text', '% wartości zamówienia netto za każdy rozpoczęty dzień opóźnienia w dostawie przedmiotu zamówienia z terminem płatności tej kary - 7 dni od dnia jej naliczenia. Zamawiający może potrącić wskazaną karę umowną z wynagrodzenia Dostawcy. Zamawiający zastrzega sobie prawo do dochodzenia odszkodowania na zasadach ogólnych, przekraczającego wysokość kary umownej zastrzeżonej w niniejszym punkcie.'] ]; $conditions[] = [ ['bold', 'Osoba do kontaktu ze strony Zamawiającego:'], ['tag', 'newline'], ['field', '', 'ORDER_CONTACT_PERSON', 'text'] ]; $conditions[] = [ ['bold', 'Osoby upoważnione do odbioru towaru:'], ['tag', 'newline'], ['field', '', 'ORDER_APPROVE_PERSON', 'text'] ]; $conditions[] = [ ['bold', 'Osoba uprawniona do kontaktu ze strony Dostawcy: '], ['field', '', 'DELIVERY_CONTACT_PERSON', 'string'] ]; $conditions[] = [ ['text', 'Za datę zapłaty uważa się datę obciążenia rachunku bankowego Zamawiającego.'] ]; $conditions[] = [ ['text', 'Niniejsze zamówienie jest ważne po potwierdzeniu przez Dostawcę przyjęcia do realizacji niniejszego zamówienia w terminie 2 dni roboczych od daty jego złożenia Dostawcy przez Zamawiającego.'], ['tag', 'newline'], ['text', 'Potwierdzenie pod rygorem nieważności winno być przesłane faksem do Zamawiającego pod numer (58) 347 51 02 lub pocztą elektroniczną na adres email: '], ['tag', 'u', 'asmentoch@pro-netmedia.pl'], ['text', ' Brak potwierdzenia jest uznawany jako odmowa przyjęcia przez Dostawcę do realizacji niniejszego zamówienia. Każda proponowana zamiana warunków dostawy określonych w niniejszym zamówieniu oznacza złożenie nowej oferty i winna być pod rygorem nieważności potwierdzona przez Zamawiającego. Nie dopuszcza się akceptu milczącego.'] ]; $conditions[] = [ ['text', 'Wierzytelności wynikające z niniejszego zamówienia nie mogą być przenoszone przez Dostawcę na osoby trzecie bez uprzedniej, pisemnej zgody Zamawiającego.'] ]; } ?>