ProjektyProNetMediaZamZlec.php 56 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280
  1. <?php
  2. Lib::loadClass('RouteBase');
  3. Lib::loadClass('TypespecialVariable');
  4. Lib::loadClass('Request');
  5. Lib::loadClass('Response');
  6. Lib::loadClass('ProcesHelper');
  7. Lib::loadClass('Route_UrlAction');
  8. class Route_UrlAction_ProjektyProNetMediaZamZlec extends RouteBase {// TODO: UrlActionBase @see Route_UrlAction
  9. public function handleAuth() {
  10. if (!User::logged()) {
  11. User::authByRequest();
  12. }
  13. }
  14. public function typespecialAction() {
  15. $DBG = ('1' == V::get('DBG', '', $_REQUEST));
  16. header("Content-type: application/json");
  17. $fld = V::get('fld', '', $_GET);
  18. switch ($fld) {
  19. case 'id_company': {
  20. $typeSpecialCompanies = TypespecialVariable::getInstance(-1, '__COMPANIES');
  21. $query = V::get('q', '', $_REQUEST);
  22. $rawRows = null;
  23. $rows = $typeSpecialCompanies->getValuesWithExports($query);
  24. if($DBG){echo'<pre style="max-height:200px;overflow:auto;border:1px solid red;text-align:left;">rows('.$query.') (' . __CLASS__ . '::' . __FUNCTION__ . ':' . __LINE__ . '): ';print_r($rows);echo'</pre>';}
  25. foreach ($rows as $kID => $vItem) {
  26. $itemJson = new stdClass();
  27. $itemJson->id = $vItem->id;
  28. $itemJson->name = $vItem->param_out;
  29. if (!empty($vItem->exports)) {
  30. $itemJson->exports = $vItem->exports;
  31. }
  32. $jsonData[] = $itemJson;
  33. }
  34. echo json_encode($jsonData);
  35. }
  36. break;
  37. }
  38. }
  39. public function defaultAction() {
  40. SE_Layout::gora();
  41. if (1 != V::get('_print', '', $_GET)) SE_Layout::menu();
  42. try {
  43. $data = array();
  44. $data['id_project'] = V::get('ID_PROJECT', 0, $_REQUEST, 'int');
  45. $data['id_company'] = V::get('id_company', 0, $_REQUEST, 'int');
  46. $data['items_count'] = V::get('items_count', 10, $_REQUEST, 'int');
  47. $data['widgetCompanies'] = array();
  48. $data['widgetCompanies']['fieldName'] = 'id_company';
  49. $data['widgetCompanies']['dataUrl'] = "index.php?_route=UrlAction_ProjektyProNetMediaZamZlec&_task=typespecial&fld={$data['widgetCompanies']['fieldName']}";
  50. $data['widgetCompanies']['typeSpecial'] = TypespecialVariable::getInstance(-1, '__COMPANIES');
  51. $this->zamZlecFormView($data);
  52. } catch (Exception $e) {
  53. SE_Layout::alert('danger', "Error #" . $e->getCode() . "|" . $e->getLine() . ": " . $e->getMessage());
  54. }
  55. if (1 != V::get('_print', '', $_GET)) SE_Layout::dol();
  56. }
  57. public function addZlecenieAction() {
  58. die("TODO: add zlecenie and redirect");
  59. }
  60. public function rmOrdersDataAction() {// TODO: RMME only TEST
  61. if ('diradmin' != User::getLogin()) die('access denied!');
  62. if ('doRemove' != V::get('rm', '', $_GET)) die('confirmation required!');
  63. DB::getPDO()->exec("TRUNCATE CRM_LISTA_ZASOBOW_ORDERS_HIST");
  64. DB::getPDO()->exec("TRUNCATE CRM_LISTA_ZASOBOW_ORDERS");
  65. die('orders data removed');
  66. }
  67. public function zlecenieAction() {
  68. SE_Layout::gora();
  69. if (1 != V::get('_print', '', $_GET)) SE_Layout::menu();
  70. try {
  71. $id_project = V::get('ID_PROJECT', 0, $_REQUEST, 'int');
  72. $id_company = V::get('id_company', 0, $_REQUEST, 'int');
  73. $items_count = V::get('items_count', 10, $_REQUEST, 'int');
  74. if (1 != V::get('_print', '', $_GET)) {
  75. $basePrintUrl = "index.php?_route=UrlAction_ProjektyProNetMediaZamZlec&ID_PROJECT={$id_project}";
  76. $basePrintUrl .= "&id_company={$id_company}";
  77. $basePrintUrl .= "&items_count={$items_count}";
  78. ?>
  79. <div class="container" style="margin:2em auto; text-align:right">
  80. <a class="btn btn-default" href="<?php echo $basePrintUrl; ?>">Cofnij</a>
  81. <a class="btn btn-primary" href="<?php echo $basePrintUrl; ?>&_task=zlecenie&_print=1" target="_blank">Drukuj Zlecenie</a>
  82. </div>
  83. <?php
  84. }
  85. $data = array();
  86. $data['ile_pozycji'] = $items_count;
  87. $data['id_company'] = $id_company;
  88. $data['id_project'] = $id_project;
  89. $data = $this->setProps($data);
  90. $this->zlecenieView($data);
  91. } catch (Exception $e) {
  92. SE_Layout::alert('danger', "Error #" . $e->getCode() . "|" . $e->getLine() . ": " . $e->getMessage());
  93. }
  94. if (1 != V::get('_print', '', $_GET)) SE_Layout::dol();
  95. }
  96. public function addZamowienieAction() {
  97. $id_company = V::get('id_company', 0, $_REQUEST, 'int');
  98. $id_project = V::get('ID_PROJECT', 0, $_REQUEST, 'int');
  99. $orderType = 'zamowienie';
  100. $data = array();
  101. $data['id_company'] = $id_company;
  102. $data['id_project'] = $id_project;
  103. $data = $this->setProps($data);
  104. $sqlFieldsList = array();
  105. $sqlFieldsList[] = 'ID_PROJECT';
  106. $sqlFieldsList[] = 'ID_COMPANIES';
  107. $sqlFieldsList[] = 'COMPANY_NAME';
  108. $sqlFieldsList[] = 'COMPANY_ADDRESS';
  109. $sqlFieldsList[] = 'COMPANY_POST_CODE';
  110. $sqlFieldsList[] = 'COMPANY_CITY';
  111. $sqlFieldsList[] = 'COMPANY_NIP';
  112. $sqlFieldsList[] = 'COMPANY_CONTACT_PERSON';
  113. $sqlFieldsList[] = 'COMPANY_CONTACT_TEL';
  114. $sqlFieldsList[] = 'COMPANY_CONTACT_MAIL';
  115. $sqlFieldsList[] = 'DELIVERY_DATE';
  116. $sqlFieldsList[] = 'DELIVERY_TYPE';
  117. $sqlFieldsList[] = 'DELIVERY_LOCATION';
  118. $sqlFieldsList[] = 'CASH_PENALTY';
  119. $sqlFieldsList[] = 'ORDER_CONTACT_PERSON';
  120. $sqlFieldsList[] = 'ORDER_APPROVE_PERSON';
  121. $sqlFieldsList[] = 'DELIVERY_CONTACT_PERSON';
  122. $sqlFieldsList[] = 'PAYMENT_TERM_DAYS_FV';
  123. $sqlFieldsList[] = 'PAYMENT_METHOD';
  124. $sqlObj = array();
  125. $sqlObj['ORDER_TYPE'] = $orderType;
  126. foreach ($data as $fldName => $val) {
  127. if (!in_array($fldName, $sqlFieldsList)) continue;
  128. $sqlObj[$fldName] = $val;
  129. }
  130. $idOrder = DB::getDB()->ADD_NEW_OBJ('CRM_LISTA_ZASOBOW_ORDERS', (object)$sqlObj);
  131. if ($idOrder > 0) {
  132. {// update `ORDER_LABEL`: nr zamówienia / inicjały zamawiającego / numer budowy / miesiąc / rok
  133. if (!empty($data['obcy_nr_sprawy'])) {
  134. $inicjaly = User::getInicjaly();
  135. $year = date('Y');
  136. $month = '';// n Liczbowa forma miesiąca, bez zer wiodących 1 aż do 12
  137. switch (date('n')) {
  138. case 1: $month = 'I'; break;
  139. case 2: $month = 'II'; break;
  140. case 3: $month = 'III'; break;
  141. case 4: $month = 'IV'; break;
  142. case 5: $month = 'V'; break;
  143. case 6: $month = 'VI'; break;
  144. case 7: $month = 'VII'; break;
  145. case 8: $month = 'VIII'; break;
  146. case 9: $month = 'IX'; break;
  147. case 10: $month = 'X'; break;
  148. case 11: $month = 'XI'; break;
  149. case 12: $month = 'XII'; break;
  150. }
  151. // 58/MŁ/13/2016/10/VII/2016
  152. // 58 - nr rekordu
  153. // MŁ - inicjały
  154. // 13/2016 - nr budowy (obcy_nr_sprawy)
  155. // 10 - nr kolejny zamówienia w odniesieniu do danej budowy
  156. // VII - miesiąc
  157. // 2016 - rok
  158. $lpOrder = '';
  159. if ($data['id_project'] > 0) {
  160. $sqlIdProject = DB::getPDO()->quote($data['id_project'], PDO::PARAM_INT);
  161. $lpOrder = DB::getPDO()->fetchValue("select count(*) as cnt from CRM_LISTA_ZASOBOW_ORDERS where ID_PROJECT = {$sqlIdProject}");
  162. if ($lpOrder < 1) $lpOrder = 1;
  163. }
  164. $data['ORDER_LABEL'] = "{$idOrder}/{$inicjaly}/{$data['obcy_nr_sprawy']}/{$lpOrder}/{$month}/{$year}";
  165. }
  166. DB::getPDO()->exec("update CRM_LISTA_ZASOBOW_ORDERS set ORDER_LABEL = '{$data['ORDER_LABEL']}' where ID = '{$idOrder}'");
  167. }
  168. $urlZam = Request::getPathUri() . "index.php?_route=UrlAction_ProjektyProNetMediaZamZlec&_task={$orderType}&id={$idOrder}";
  169. header("Location: {$urlZam}");
  170. exit;
  171. } else {
  172. SE_Layout::gora();
  173. SE_Layout::menu();
  174. SE_Layout::alert('danger', 'Nie udało się utworzyć rekordu');
  175. SE_Layout::dol();
  176. }
  177. }
  178. public function zamowienieAction() {
  179. SE_Layout::gora();
  180. if (1 != V::get('_print', '', $_GET)) SE_Layout::menu();
  181. try {
  182. $id_order = V::get('id', 0, $_REQUEST, 'int');
  183. $id_project = V::get('ID_PROJECT', 0, $_REQUEST, 'int');
  184. $id_company = V::get('id_company', 0, $_REQUEST, 'int');
  185. $items_count = V::get('items_count', 10, $_REQUEST, 'int');
  186. $data = array();
  187. $data['id'] = $id_order;
  188. $data['ile_pozycji'] = $items_count;
  189. $data['id_company'] = $id_company;
  190. $data['id_project'] = $id_project;
  191. $data = $this->setProps($data);
  192. $mode = (V::get('_print', '', $_REQUEST))? 'print' : 'view';
  193. $this->zamowienieView($data, $mode);
  194. } catch (Exception $e) {
  195. SE_Layout::alert('danger', "Error #" . $e->getCode() . "|" . $e->getLine() . ": " . $e->getMessage());
  196. }
  197. if (1 != V::get('_print', '', $_GET)) SE_Layout::dol();
  198. }
  199. public function previewOrder($idOrder) {
  200. try {
  201. $id_order = $idOrder;
  202. $data = array();
  203. $data['id'] = $id_order;
  204. $data = $this->setProps($data);
  205. $this->zamowienieView($data, $mode = 'preview');
  206. } catch (Exception $e) {
  207. SE_Layout::alert('danger', "Error #" . $e->getCode() . "|" . $e->getLine() . ": " . $e->getMessage());
  208. }
  209. }
  210. public function setProps($data) {
  211. $data['_nr_budowy'] = '';// fetch from project - field M_DIST_DESC
  212. $sqlIdOrder = V::get('id', 0, $data, 'int');
  213. if ($sqlIdOrder > 0) {
  214. $rows = DB::getPDO()->fetchAll("
  215. select t.*
  216. from CRM_LISTA_ZASOBOW_ORDERS t
  217. where t.ID = {$sqlIdOrder}
  218. ");
  219. if (count($rows) > 0) {
  220. $row = reset($rows);
  221. if (!empty($row['ID_COMPANIES'])) $data['id_company'] = $row['ID_COMPANIES'];
  222. if (!empty($row['ID_PROJECT'])) $data['id_project'] = $row['ID_PROJECT'];
  223. $data['ORDER_TYPE'] = V::get('ORDER_TYPE', '', $row);
  224. $data['ORDER_LABEL'] = V::get('ORDER_LABEL', '', $row);
  225. $defaultOrderDate = substr(V::get('A_RECORD_CREATE_DATE', date("Y-m-d"), $row), 0, 10);
  226. $data['ORDER_DATE'] = V::get('ORDER_DATE', $defaultOrderDate, $row);
  227. $data['OFFER_NR'] = V::get('OFFER_NR', '', $row);
  228. $data['COMPANY_NAME'] = V::get('COMPANY_NAME', '', $row);
  229. $data['COMPANY_ADDRESS'] = V::get('COMPANY_ADDRESS', '', $row);
  230. $data['COMPANY_POST_CODE'] = V::get('COMPANY_POST_CODE', '', $row);
  231. $data['COMPANY_CITY'] = V::get('COMPANY_CITY', '', $row);
  232. $data['COMPANY_NIP'] = V::get('COMPANY_NIP', '', $row);
  233. $data['COMPANY_CONTACT_PERSON'] = V::get('COMPANY_CONTACT_PERSON', '', $row);
  234. $data['COMPANY_CONTACT_TEL'] = V::get('COMPANY_CONTACT_TEL', '', $row);
  235. $data['COMPANY_CONTACT_MAIL'] = V::get('COMPANY_CONTACT_MAIL', '', $row);
  236. $data['DELIVERY_DATE'] = V::get('DELIVERY_DATE', '', $row);
  237. $data['DELIVERY_TYPE'] = V::get('DELIVERY_TYPE', '', $row);
  238. $data['DELIVERY_LOCATION'] = V::get('DELIVERY_LOCATION', '', $row);
  239. $data['CASH_PENALTY'] = V::get('CASH_PENALTY', '', $row);
  240. $data['ORDER_CONTACT_PERSON'] = V::get('ORDER_CONTACT_PERSON', '', $row);
  241. $data['ORDER_APPROVE_PERSON'] = V::get('ORDER_APPROVE_PERSON', '', $row);
  242. $data['DELIVERY_CONTACT_PERSON'] = V::get('DELIVERY_CONTACT_PERSON', '', $row);
  243. $data['PAYMENT_TERM_DAYS_FV'] = V::get('PAYMENT_TERM_DAYS_FV', '60', $row);
  244. $data['PAYMENT_METHOD'] = V::get('PAYMENT_METHOD', 'przelew', $row);
  245. }
  246. $data['orderPosList'] = $this->fetchOrderPosList($sqlIdOrder);
  247. }
  248. $sqlIdCompany = V::get('id_company', 0, $data, 'int');
  249. if ($sqlIdCompany > 0) {
  250. $rows = DB::getPDO()->fetchAll("
  251. select c.*
  252. from COMPANIES c
  253. where c.ID = {$sqlIdCompany}
  254. ");
  255. if (count($rows) > 0) {
  256. $row = reset($rows);
  257. DBG::_('DBG', '>2', "company by id='{$sqlIdCompany}'", $row, __CLASS__, __FUNCTION__, __LINE__);
  258. if (empty($data['COMPANY_NAME'])) $data['COMPANY_NAME'] = V::get('P_NAME', '', $row);
  259. if (empty($data['COMPANY_ADDRESS'])) {
  260. $data['COMPANY_ADDRESS'] = V::get('P_ADDRESS_STREET', '', $row);
  261. if (!empty($row['P_ADDRESS_HOUSE'])) $data['COMPANY_ADDRESS'] .= " {$row['P_ADDRESS_HOUSE']}";// TODO: add P_ADDRESS_HOUSE
  262. if (!empty($row['P_ADDRESS_HOME'])) $data['COMPANY_ADDRESS'] .= "/{$row['P_ADDRESS_HOME']}";// TODO: add '/' P_ADDRESS_HOME
  263. }
  264. if (empty($data['COMPANY_POST_CODE'])) $data['COMPANY_POST_CODE'] = V::get('P_ADDRESS_POST_CODE', '', $row);
  265. if (empty($data['COMPANY_CITY'])) $data['COMPANY_CITY'] = V::get('P_ADDRESS_CITY', '', $row);
  266. if (empty($data['COMPANY_NIP'])) $data['COMPANY_NIP'] = V::get('P_NIP', '', $row);
  267. if (empty($data['COMPANY_CONTACT_PERSON'])) $data['COMPANY_CONTACT_PERSON'] = V::get('P_CONTACT_PERSON', '', $row);
  268. if (empty($data['COMPANY_CONTACT_TEL'])) $data['COMPANY_CONTACT_TEL'] = V::get('P_PHONE', '', $row);
  269. if (empty($data['COMPANY_CONTACT_MAIL'])) $data['COMPANY_CONTACT_MAIL'] = V::get('user_mail_contact', '', $row);
  270. }
  271. }
  272. $sqlIdProject = V::get('id_project', 0, $data, 'int');
  273. if ($sqlIdProject > 0) {
  274. $rows = DB::getPDO()->fetchAll("
  275. select p.*
  276. from IN7_MK_BAZA_DYSTRYBUCJI p
  277. where p.ID = {$sqlIdProject}
  278. limit 1
  279. ");
  280. if (count($rows) > 0) {
  281. $row = reset($rows);
  282. if (!empty($row['M_DIST_DEALNUM'])) $data['obcy_nr_sprawy'] = $row['M_DIST_DEALNUM'];
  283. if (!empty($row['M_DIST_DESC'])) $data['_nr_budowy'] = $row['M_DIST_DESC'];
  284. }
  285. }
  286. if (!empty($data['id_company'])) $data['ID_COMPANIES'] = $data['id_company'];
  287. if (!empty($data['id_project'])) $data['ID_PROJECT'] = $data['id_project'];
  288. // TODO: $data['obcy_nr_sprawy'] = 'zam./OSOBA/nr budowy/I/2016' lub 'zlec./OSOBA/nr budowy/I/2016'
  289. return $data;
  290. }
  291. public function zamZlecFormView($data) {
  292. $id_project = V::get('id_project', 0, $data);
  293. $id_company = V::get('id_company', 0, $data);
  294. $items_count = V::get('items_count', 0, $data);
  295. $widgetCompanies = V::get('widgetCompanies', array(), $data);
  296. $sqlWhere = '';
  297. if ($id_project > 0) $sqlWhere = "where o.ID_PROJECT = {$id_project}";
  298. $projOrders = DB::getPDO()->fetchAll("
  299. select o.*
  300. , p.M_DIST_DEALNUM as obcy_nr_sprawy
  301. from CRM_LISTA_ZASOBOW_ORDERS o
  302. left join IN7_MK_BAZA_DYSTRYBUCJI p on(p.ID = o.ID_PROJECT)
  303. left join COMPANIES c on(c.ID = o.ID_COMPANIES)
  304. {$sqlWhere}
  305. order by ID DESC
  306. limit 100
  307. ");
  308. ?>
  309. <div class="container" style="margin-top:2em">
  310. <form action="" method="get" class="form-horizontal">
  311. <input type="hidden" name="_route" value="UrlAction_ProjektyProNetMediaZamZlec">
  312. <div class="form-group">
  313. <label for="id_project" class="col-sm-2 control-label">Projekt</label>
  314. <div class="col-sm-4">
  315. <input type="number" name="ID_PROJECT" value="<?php echo $id_project; ?>" class="form-control">
  316. </div>
  317. </div>
  318. <div class="form-group">
  319. <label for="id_company" class="col-sm-2 control-label">Dostawca</label>
  320. <div class="col-sm-10">
  321. <?php if ($widgetCompanies['typeSpecial']) : ?>
  322. <?php
  323. $fName = $widgetCompanies['fieldName'];
  324. $fldParams = array();
  325. $fldParams['allowCreate'] = false;
  326. $fldParams['ajaxDataUrlBase'] = $widgetCompanies['dataUrl'];
  327. if ($id_company > 0) {
  328. $tsValues = $widgetCompanies['typeSpecial']->getEditSelectedValuesByIds(-1, $id = $id_company, $fName, $fieldValue = $id_company);
  329. if (1 == count($tsValues)) {
  330. $fldParams['typespecialValue'] = array_values($tsValues);
  331. $fldParams['typespecialValue'] = reset($fldParams['typespecialValue']);
  332. }
  333. }
  334. //$fldParams['ajaxDataUrlBase'] .= "&DBG_TS=3";
  335. echo $widgetCompanies['typeSpecial']->showFormItem($tblID = -1, $fName, $selValue = $id_company, $fldParams);
  336. ?>
  337. <?php else : ?>
  338. <input type="number" name="id_company" value="<?php echo $id_company; ?>" class="form-control">
  339. <?php endif; ?>
  340. </div>
  341. </div>
  342. <!--
  343. <div class="form-group">
  344. <label for="items_count" class="col-sm-2 control-label">Ilość pozycji</label>
  345. <div class="col-sm-4">
  346. <input type="number" name="items_count" value="<?php echo $items_count; ?>" class="form-control">
  347. </div>
  348. </div>
  349. -->
  350. <div class="form-group">
  351. <div class="col-sm-offset-2 col-sm-10">
  352. <input type="hidden" name="_task" value="">
  353. <label>Dodaj nowe </label>
  354. <button type="submit" class="btn btn-primary" onclick="return submitZamowienie(this);">Zamówienie</button>
  355. <!-- <button type="submit" class="btn btn-primary" onclick="return submitZlecenie(this);">Zlecenie</button> -->
  356. </div>
  357. </div>
  358. </form>
  359. <hr>
  360. <table class="table table-bordered table-hover">
  361. <thead>
  362. <tr>
  363. <th>#</th>
  364. <th>status</th>
  365. <th>nr zlecenia</th>
  366. <th>nr budowy</th>
  367. </tr>
  368. </thead>
  369. <tbody>
  370. <?php foreach ($projOrders as $order) : ?>
  371. <?php
  372. $changeState = array();
  373. $idTableOrders = ProcesHelper::getZasobTableID('CRM_LISTA_ZASOBOW_ORDERS');
  374. $urlFunctions = Route_UrlAction::getTableFunctions($idTableOrders, $order['ID'], 'CRM_LISTA_ZASOBOW_ORDERS', User::getLogin());
  375. //DBG::_(true, true, 'urlFunctions', $urlFunctions);
  376. if ('WERSJA_ROBOCZA' == $order['APPROVE_STATUS']) {
  377. foreach ($urlFunctions as $fun) {
  378. if ('ProjektyProNetMediaRequestApproveZam' == $fun['name']) {
  379. $changeState['OCZEKUJE_ZATWIERDZENIA'] = $fun;
  380. }
  381. }
  382. }
  383. else if ('OCZEKUJE_ZATWIERDZENIA' == $order['APPROVE_STATUS']) {
  384. foreach ($urlFunctions as $fun) {
  385. if ('ProjektyProNetMediaApproveZam' == $fun['name']) {
  386. $changeState['OCZEKUJE_OSTATECZNEGO_ZATWIERDZENIA'] = $fun;
  387. }
  388. }
  389. }
  390. else if ('OCZEKUJE_OSTATECZNEGO_ZATWIERDZENIA' == $order['APPROVE_STATUS']) {
  391. foreach ($urlFunctions as $fun) {
  392. if ('ProjektyProNetMediaFinalApproveZam' == $fun['name']) {
  393. $changeState['ZATWIERDZONE'] = $fun;
  394. }
  395. }
  396. }
  397. ?>
  398. <tr>
  399. <td>
  400. <?php echo $order['ID']; ?>
  401. <a href="index.php?_route=UrlAction_ProjektyProNetMediaZamZlec&_task=<?php echo $order['ORDER_TYPE']; ?>&id=<?php echo $order['ID']; ?>"
  402. class="btn btn-link btn-xs">Edytuj <?php echo $order['ORDER_TYPE']; ?></a>
  403. </td>
  404. <td><?php echo $order['APPROVE_STATUS']; ?>
  405. <?php if (!empty($changeState)) : ?>
  406. <?php foreach ($changeState as $key => $fun) : ?>
  407. <a href="<?php echo $this->generateFunctionLink($fun, $idTableOrders, $order['ID'], $order); ?>" class="btn btn-xs btn-default">Zmień na: <?php echo $key; ?></a>
  408. <?php endforeach; ?>
  409. <?php endif; ?>
  410. </td>
  411. <td><?php echo $order['ORDER_LABEL']; ?></td>
  412. <td><?php echo $order['obcy_nr_sprawy']; ?></td>
  413. </tr>
  414. <?php endforeach; ?>
  415. </tbody>
  416. </table>
  417. </div>
  418. <script>
  419. function submitZamowienie(fld) {
  420. var frm = fld.form;
  421. frm['_task'].value='addZamowienie';
  422. }
  423. function submitZlecenie(fld) {
  424. var frm = fld.form;
  425. frm['_task'].value='addZlecenie';
  426. }
  427. </script>
  428. <?php
  429. }
  430. public function generateFunctionLink($fun, $idTableOrders, $idOrder, $order) {
  431. $link = $fun['baseLink'];
  432. if (empty($fun['cell_id_params'])) return $link;
  433. $fieldMap = array();
  434. {
  435. $rows = DB::getPDO()->fetchAll("
  436. select z.ID, z.`DESC`
  437. from CRM_LISTA_ZASOBOW z
  438. where z.PARENT_ID = '{$idTableOrders}'
  439. and z.`TYPE` = 'KOMORKA'
  440. ");
  441. if (empty($rows)) return '#';
  442. foreach ($rows as $row) {
  443. $fieldMap[ $row['ID'] ] = $row['DESC'];
  444. }
  445. if (empty($fieldMap)) return '#';
  446. }
  447. $record = null;
  448. {
  449. $rows = DB::getPDO()->fetchAll("
  450. select r.*
  451. from CRM_LISTA_ZASOBOW_ORDERS r
  452. where r.ID = '{$idOrder}'
  453. ");
  454. if (empty($rows)) return '#';
  455. $record = $rows[0];
  456. }
  457. if (!$record) return '#';
  458. $urlParams = array();// [ "{$urlParamName}={$paramValue}" ]
  459. foreach ($fun['cell_id_params'] as $idField => $urlParamName) {
  460. $paramValue = '';
  461. if (array_key_exists($idField, $fieldMap)) {
  462. $paramValue = V::get($fieldMap[$idField], '', $record);
  463. $urlParams[] = "{$urlParamName}={$paramValue}";
  464. }
  465. }
  466. if (!empty($urlParams)) $link .= "&" . implode("&", $urlParams);
  467. return $link;
  468. }
  469. public function zlecenieView($data) {
  470. $ile_pozycji = V::get('ile_pozycji', 10, $data);
  471. ?>
  472. <style type="text/css">
  473. body { font-size:12px; line-height:1.3em }
  474. #tbl-items td { padding:3px !important }
  475. @media print {
  476. body { font-size:9px; line-height:1.2em }
  477. table { page-break-inside:auto }
  478. tr { page-break-inside:avoid; page-break-after:auto }
  479. li { page-break-inside:avoid; page-break-after:auto }
  480. .page-break-block { page-break-inside:avoid; page-break-after:auto }
  481. }
  482. </style>
  483. <div class="container">
  484. <div style="text-align:right">
  485. Gdańsk, dnia ____ _____ 2016 roku
  486. </div>
  487. <table style="width:100%">
  488. <tr>
  489. <td style="width:50%"></td>
  490. <td style="width:50%; padding:1em 0">
  491. <b>Zleceniodawca:</b>
  492. <br>PRO-NET.MEDIA S.A.
  493. <br>80-557 Gdańsk, ul. Narwicka 21
  494. <br>NIP 583-315-47-35
  495. <br>
  496. <br><b>Zleceniobiorca:</b>
  497. <br><?php echo V::get('dostawca_name', '.........................', $data); ?>
  498. <br><?php echo V::get('dostawca_address', '.........................', $data); ?>
  499. <br>NIP <?php echo V::get('dostawca_nip', '..................', $data); ?>
  500. </td>
  501. </tr>
  502. </table>
  503. <p>Zlecenie nr: <?php echo V::get('obcy_nr_sprawy', '.........................', $data);//zam./OSOBA/nr budowy/I/2016 ?></p>
  504. <p style="font-weight:bold">Zleceniodawca niniejszym składa zlecenie na wskazanych poniżej warunkach zgodnie z ofertą Zleceniobiorcy z dnia <?php echo V::get('data_oferty', '..................', $data); ?>.</p>
  505. <table id="tbl-items" style="width:100%; margin-top:2em" class="table table-bordered page-break-before">
  506. <tr>
  507. <th style="text-align:center">Lp.</th>
  508. <th style="text-align:center">Przedmiot zlecenia</th>
  509. <th style="text-align:center">J.M.</th>
  510. <th style="text-align:center">Ilość</th>
  511. <th style="text-align:center">Cena jednostkowa netto<br>[pln]</th>
  512. <th style="text-align:center">Wartość brutto<br>[pln]</th>
  513. </tr>
  514. <?php for ($i = 0; $i < $ile_pozycji; $i++) : ?>
  515. <tr class="page-break-before">
  516. <td><?php echo $i + 1; ?>.</td>
  517. <td></td>
  518. <td></td>
  519. <td></td>
  520. <td></td>
  521. <td></td>
  522. </tr>
  523. <?php endfor; ?>
  524. <tr>
  525. <td colspan="5">
  526. <div style="text-align:right"><b>RAZEM:</b></div>
  527. <b>Słownie:</b> <?php echo $suma_slownie; ?>
  528. </td>
  529. <td></td>
  530. </tr>
  531. <tr>
  532. <td colspan="5"><b>UWAGI: NA FAKTURZE VAT NALEŻY UMIESZCZAĆ CZYTELNY NR ZLECENIA</b></td>
  533. <td></td>
  534. </tr>
  535. </table>
  536. <h4 style="font-size:1.2em">WARUNKI REALIZACJI ZLECENIA:</h4>
  537. <ol>
  538. <li>Termin wykonania zlecenia: od dnia ………. ……………. 2016 roku do dnia ……… ……….2016 roku, 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 ……….. złotych (słownie: …………. złotych 00/100) za każdy rozpoczęty dzień opóźnienia z terminem płatności tej kary – 7 dni od jej naliczenia. 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.</li>
  539. <li>Miejsce wykonania zlecenia: ……………………………………..</li>
  540. <li>Forma płatności: przelew.</li>
  541. <li>Wynagrodzenie objęte niniejszym zleceniem jest wynagrodzeniem ryczałtowym.</li>
  542. <li>Termin płatności: 30 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.</li>
  543. <li>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.</li>
  544. <li>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.</li>
  545. <li>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.</li>
  546. <li>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.</li>
  547. <li>Osoba do kontaktu ze strony Zleceniodawcy: ……………………………………..</li>
  548. <li>Osoba uprawniona do kontaktu ze strony Zleceniobiorcy: ………………………………</li>
  549. <li>Za datę zapłaty uważa się datę obciążenia rachunku bankowego Zleceniodawcy.</li>
  550. <li>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ę. Potwierdzenie pod rygorem nieważności winno być przesłane faksem do Zleceniodawcy pod numer ………… lub pocztą elektroniczną na adres email: ……….. 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.</li>
  551. <li>Wierzytelności wynikające z niniejszego zlecenia nie mogą być przenoszone przez Zleceniobiorcę na osoby trzecie bez uprzedniej, pisemnej zgody Zleceniodawcy.</li>
  552. <li>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:
  553. <ol style="list-style-type:lower-alpha">
  554. <li>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,</li>
  555. <li>powzięcia przez Zleceniodawcę informacji, iż sytuacja finansowa Zleceniobiorcy nie pozwala na wykonanie prac zleconych na mocy niniejszego zlecenia,</li>
  556. <li>powzięcia przez Zleceniodawcę informacji, iż Zleceniobiorca nie przestrzega przepisów BHP oraz przeciwpożarowych,</li>
  557. <li>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.</li>
  558. </ol>
  559. </li>
  560. <li>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.</li>
  561. <li style="padding-bottom:2em">Ustalenia dodatkowe: ……………………………….</li>
  562. </ol>
  563. <div style="padding-top:3em" class="page-break-block">
  564. (pieczęć i czytelny podpis Zamawiającego) …………………………………………………………….
  565. </div>
  566. <div class="page-break-block">
  567. <h4 style="font-size:1.2em">NINIEJSZYM OŚWIADCZAM, ŻE ZLECENIOBIORCA PRZYJMUJE ZLECENIE DO REALIZACJI NA POWYŻSZYCH WARUNKACH:</h4>
  568. <div style="padding-top:2em;">
  569. ………………………….,dnia………………………….………………………………………………..
  570. <br>(pieczęć i czytelny podpis Zleceniobiorcy zgodnie z zasadami reprezentacji)
  571. </div>
  572. </div>
  573. </div>
  574. <?php
  575. exit;
  576. }
  577. public function saveAjaxAction() {
  578. $body = Request::getRequestBody();
  579. $json = json_decode($body, $assoc = true);
  580. $data = array();
  581. $data['id'] = V::get('id', 0, $_REQUEST, 'int');
  582. $data['id_company'] = V::get('id_company', 0, $_REQUEST, 'int');
  583. $data['id_project'] = V::get('id_project', 0, $_REQUEST, 'int');
  584. $data = $this->setProps($data);
  585. $res = new stdClass();
  586. $res->type = 'success';
  587. $res->msg = 'OK';
  588. $res->idOrder = V::get('idOrder', -1, $json, 'int');
  589. $res->orderPosList = array();
  590. $res->fields = new stdClass();
  591. $res->DBG_DATA = $data;// TODO: DBG
  592. if (!empty($json['fields'])) {
  593. $sqlFieldsList = array();
  594. $sqlFieldsList[] = 'ID_PROJECT';
  595. $sqlFieldsList[] = 'ID_COMPANIES';
  596. $sqlFieldsList[] = 'COMPANY_NAME';
  597. $sqlFieldsList[] = 'COMPANY_ADDRESS';
  598. $sqlFieldsList[] = 'COMPANY_POST_CODE';
  599. $sqlFieldsList[] = 'COMPANY_CITY';
  600. $sqlFieldsList[] = 'COMPANY_NIP';
  601. $sqlFieldsList[] = 'COMPANY_CONTACT_PERSON';
  602. $sqlFieldsList[] = 'COMPANY_CONTACT_TEL';
  603. $sqlFieldsList[] = 'COMPANY_CONTACT_MAIL';
  604. $sqlFieldsList[] = 'DELIVERY_DATE';
  605. $sqlFieldsList[] = 'DELIVERY_TYPE';
  606. $sqlFieldsList[] = 'DELIVERY_LOCATION';
  607. $sqlFieldsList[] = 'CASH_PENALTY';
  608. $sqlFieldsList[] = 'ORDER_CONTACT_PERSON';
  609. $sqlFieldsList[] = 'ORDER_APPROVE_PERSON';
  610. $sqlFieldsList[] = 'DELIVERY_CONTACT_PERSON';
  611. $sqlFieldsList[] = 'OFFER_NR';
  612. $sqlFieldsList[] = 'ORDER_DATE';
  613. $sqlFieldsList[] = 'PAYMENT_TERM_DAYS_FV';
  614. $sqlFieldsList[] = 'PAYMENT_METHOD';
  615. $sqlObj = array();
  616. //$sqlObj['ORDER_TYPE'] = $json['type'];
  617. foreach ($data as $fldName => $val) {
  618. if (!in_array($fldName, $sqlFieldsList)) continue;
  619. $sqlObj[$fldName] = $val;
  620. }
  621. foreach ($json['fields'] as $fldName => $val) {
  622. if (!in_array($fldName, $sqlFieldsList)) continue;
  623. $sqlObj[$fldName] = $val;
  624. }
  625. $res->TODO_SQL_OBJ = $sqlObj;
  626. $res->fields = $sqlObj;
  627. if ($res->idOrder > 0) {
  628. $sqlObj['ID'] = $res->idOrder;
  629. $affected = DB::getDB()->UPDATE_OBJ('CRM_LISTA_ZASOBOW_ORDERS', (object)$sqlObj);
  630. if ($affected > 0) {
  631. $res->type = 'success';
  632. $res->msg = "Zaktualizowano rekord '{$res->idOrder}'";
  633. $rows = DB::getPDO()->fetchAll("select * from CRM_LISTA_ZASOBOW_ORDERS where ID = '{$res->idOrder}'");
  634. $row = reset($rows);
  635. $res->fields = $row;
  636. } else if ($affected < 0) {
  637. $res->type = 'danger';
  638. $res->msg = 'Nie udało się wprowadzić zmian';
  639. }
  640. } else {
  641. $idOrder = DB::getDB()->ADD_NEW_OBJ('CRM_LISTA_ZASOBOW_ORDERS', (object)$sqlObj);
  642. if ($idOrder > 0) {
  643. $res->idOrder = $idOrder;
  644. $res->type = 'success';
  645. $res->msg = "Utworzono rekord nr '{$res->idOrder}'";
  646. $rows = DB::getPDO()->fetchAll("select * from CRM_LISTA_ZASOBOW_ORDERS where ID = '{$res->idOrder}'");
  647. $row = reset($rows);
  648. $res->fields = $row;
  649. } else {
  650. $res->idOrder = -1;
  651. $res->type = 'danger';
  652. $res->msg = 'Nie udało się utworzyć rekordu';
  653. }
  654. }
  655. {// try to add new company
  656. if (empty($res->fields['ID_COMPANIES'])) {
  657. $comObj = array();
  658. $comObj['P_NAME'] = V::get('COMPANY_NAME', '', $sqlObj);
  659. $comObj['P_ADDRESS_STREET'] = V::get('COMPANY_ADDRESS', '', $sqlObj);
  660. $comObj['P_ADDRESS_POST_CODE'] = V::get('COMPANY_POST_CODE', '', $sqlObj);
  661. $comObj['P_ADDRESS_CITY'] = V::get('COMPANY_CITY', '', $sqlObj);
  662. $comObj['P_NIP'] = V::get('COMPANY_NIP', '', $sqlObj);
  663. $comObj['P_CONTACT_PERSON'] = V::get('COMPANY_CONTACT_PERSON', '', $sqlObj);
  664. $comObj['P_PHONE'] = V::get('COMPANY_CONTACT_TEL', '', $sqlObj);
  665. $comObj['user_mail_contact'] = V::get('COMPANY_CONTACT_MAIL', '', $sqlObj);
  666. if (!empty($comObj['P_NIP']) && !empty($comObj['P_NAME']) && !empty($comObj['P_ADDRESS_STREET']) && !empty($comObj['P_PHONE'])) {
  667. $res->TODO_ADD_COM = $comObj;
  668. $idCompany = DB::getDB()->ADD_NEW_OBJ('COMPANIES', (object)$comObj);
  669. if ($idCompany > 0) {
  670. $orderObj['ID'] = $res->idOrder;
  671. $orderObj['ID_COMPANIES'] = $idCompany;
  672. $affected = DB::getDB()->UPDATE_OBJ('CRM_LISTA_ZASOBOW_ORDERS', (object)$orderObj);
  673. $rows = DB::getPDO()->fetchAll("select * from CRM_LISTA_ZASOBOW_ORDERS where ID = '{$res->idOrder}'");
  674. $row = reset($rows);
  675. $res->fields = $row;
  676. }
  677. }
  678. }
  679. }
  680. }
  681. $currentPosList = $this->fetchOrderPosList($res->idOrder);
  682. $res->validateErrors = array();
  683. if (!empty($json['orderPosList']) && $res->idOrder > 0) {
  684. $idMap = array();// $idFrontEnd => $idBackEnd
  685. foreach ($json['orderPosList'] as $item) {
  686. $sqlObj = array();
  687. $sqlObj['ID_ORDER'] = $res->idOrder;
  688. if ($item['id'] <= 0
  689. && empty($item['name'])
  690. && empty($item['price'])
  691. && empty($item['quantity'])
  692. && empty($item['unit'])) {// skip empty pos
  693. continue;
  694. }
  695. $validatePosErrors = $this->validatePos($item);
  696. if (!empty($validatePosErrors)) {
  697. $res->validateErrors[ $item['id'] ] = $validatePosErrors;
  698. } else {
  699. $sqlObj['OFFER_NAME'] = $item['name'];
  700. $sqlObj['OFFER_PRICE_PER_UNIT'] = $item['price'];
  701. $sqlObj['OFFER_QUANTITY'] = $item['quantity'];
  702. $sqlObj['OFFER_UNIT'] = $item['unit'];
  703. if ($item['id'] > 0) {
  704. $sqlObj['ID'] = $item['id'];
  705. }
  706. if ($sqlObj['ID'] > 0) {
  707. DB::getDB()->UPDATE_OBJ('CRM_LISTA_ZASOBOW_OFFERS', (object)$sqlObj);
  708. } else {
  709. $idPos = DB::getDB()->ADD_NEW_OBJ('CRM_LISTA_ZASOBOW_OFFERS', (object)$sqlObj);
  710. $idMap[ $item['id'] ] = $idPos;
  711. }
  712. }
  713. }
  714. if (!empty($json['toDeletePosList']) && $res->idOrder > 0) {
  715. $res->DELETE_LOG = array();
  716. foreach ($json['toDeletePosList'] as $idFrontEnd => $bool) {
  717. if (!$bool) continue;
  718. if ($idFrontEnd <= 0) continue;
  719. if (array_key_exists($idFrontEnd, $currentPosList)) {
  720. $sqlObj = array();
  721. $sqlObj['ID'] = $idFrontEnd;
  722. $sqlObj['A_STATUS'] = 'DELETED';
  723. $res->DELETE_LOG[$idFrontEnd] = DB::getDB()->UPDATE_OBJ('CRM_LISTA_ZASOBOW_OFFERS', (object)$sqlObj);
  724. }
  725. }
  726. }
  727. $orderPoslist = array();
  728. {// fix state frontEnd <--> backEnd
  729. $updatedPosList = $this->fetchOrderPosList($res->idOrder);
  730. foreach ($json['orderPosList'] as $item) {
  731. $idFrontEnd = $item['id'];
  732. $idBackEnd = 0;
  733. if ($idFrontEnd <= 0 && array_key_exists($idFrontEnd, $idMap)) {
  734. $idBackEnd = $idMap[$idFrontEnd];
  735. } else {// $item['id'] > 0
  736. $idBackEnd = $idFrontEnd;
  737. }
  738. if (!array_key_exists($idBackEnd, $updatedPosList)) $idBackEnd = 0;
  739. if ($idBackEnd) {
  740. $orderPoslist[] = $updatedPosList[ $idBackEnd ];
  741. } else {
  742. $orderPoslist[] = $item;
  743. $res->validateErrors[ $item['id'] ][ 'name' ] = true;
  744. $res->validateErrors[ $item['id'] ][ 'price' ] = true;
  745. $res->validateErrors[ $item['id'] ][ 'quantity' ] = true;
  746. $res->validateErrors[ $item['id'] ][ 'unit' ] = true;
  747. }
  748. }
  749. $res->orderPosList = $orderPoslist;
  750. }
  751. foreach ($idMap as $idFrontEnd => $idBackEnd) {
  752. if (array_key_exists($idFrontEnd, $res->validateErrors)) {
  753. }
  754. }
  755. }
  756. $res->validateErrors = (object)$res->validateErrors;
  757. Response::sendJsonExit($res);
  758. }
  759. public function validatePos($item) {
  760. $validatePosErrors = array();
  761. if (empty($item['name'])) $validatePosErrors['name'] = 'Brak nazwy';
  762. if (empty($item['unit'])) $validatePosErrors['unit'] = 'Brak jednostki';
  763. if (empty($item['quantity'])) $validatePosErrors['quantity'] = 'Brak ilości';
  764. if (empty($item['price'])) $validatePosErrors['price'] = 'Brak ceny jednostkowej';
  765. return $validatePosErrors;
  766. }
  767. public function fetchOrderPosList($idOrder) {
  768. $orderPosList = array();
  769. $rows = DB::getPDO()->fetchAll("
  770. select o.*
  771. from CRM_LISTA_ZASOBOW_OFFERS o
  772. where o.ID_ORDER = {$idOrder}
  773. and (o.A_STATUS != 'DELETED' or o.A_STATUS is null)
  774. ");
  775. foreach ($rows as $row) {
  776. $price = number_format($row['OFFER_PRICE_PER_UNIT'], 4, '.', '');
  777. $price_f2 = number_format($row['OFFER_PRICE_PER_UNIT'], 2, '.', '');
  778. if ($price_f2 . "00" == $price) $price = $price_f2;
  779. $quantity = number_format($row['OFFER_QUANTITY'], 4, '.', '');
  780. $quantity_f2 = number_format($row['OFFER_QUANTITY'], 2, '.', '');
  781. $quantity_int = intval($row['OFFER_QUANTITY']);
  782. if ($quantity_int . ".0000" == $quantity) $quantity = $quantity_int;
  783. else if ($quantity_f2 . "00" == $quantity) $quantity = $quantity_f2;
  784. $posItem = array('id' => $row['ID'], 'name' => $row['OFFER_NAME'], 'price' => $price, 'quantity' => $quantity, 'unit' => $row['OFFER_UNIT']);
  785. $orderPosList[ $row['ID'] ] = (object)$posItem;
  786. }
  787. return $orderPosList;
  788. }
  789. public function zamowienieView($data, $mode = 'view') {
  790. $id_order = V::get('id', 0, $data);
  791. $id_company = V::get('id_company', 0, $data);
  792. $id_project = V::get('id_project', 0, $data);
  793. $orderPosList = array();
  794. if ($id_order > 0) {
  795. $orderPosList = V::get('orderPosList', array(), $data);
  796. $orderPosList = array_values($orderPosList);
  797. }
  798. if (empty($orderPosList)) {
  799. $ile_pozycji = V::get('ile_pozycji', 10, $data);
  800. for ($i = 1; $i <= $ile_pozycji; $i++) {
  801. $posItem = array('id' => -1 * $i, 'name' => '', 'price' => '', 'quantity' => '', 'unit' => '');
  802. $orderPosList[] = (object)$posItem;
  803. }
  804. }
  805. // fetch from db - overwrite $orderPosList
  806. DBG::_('DBG', '>1', 'data', $data, __CLASS_, __FUNCTION__, __LINE__);
  807. $saveLink = Request::getPathUri() . "index.php?_route=UrlAction_ProjektyProNetMediaZamZlec&_task=saveAjax&id={$id_order}";
  808. $fields = $data;// TODO: only row fields?
  809. ?>
  810. <style type="text/css">
  811. body { font-size:12px; line-height:1.3em }
  812. #tbl-items td { padding:3px !important }
  813. @media print {
  814. body { font-size:9px; line-height:1.2em }
  815. h4 { font-size:1.3em; margin-top:8px; margin-bottom:6px }
  816. h3 { font-size:1.5em; margin-top:8px; margin-bottom:6px }
  817. h2 { font-size:1.6em; margin-top:8px; margin-bottom:6px }
  818. h1 { font-size:1.8em; margin-top:8px; margin-bottom:6px }
  819. table { page-break-inside:auto }
  820. tr { page-break-inside:avoid; page-break-after:auto }
  821. li { page-break-inside:avoid; page-break-after:auto }
  822. .page-break-block { page-break-inside:avoid; page-break-after:auto }
  823. td, th,
  824. .table>tbody>tr>td,
  825. .table>tbody>tr>th,
  826. .table>thead>tr>th { padding:2px }
  827. .order-panel { display:none }
  828. }
  829. </style>
  830. <div class="container">
  831. <div id="tbl-items">
  832. <div id="widget-orders"></div>
  833. </div>
  834. </div>
  835. <script src="stuff/vendors.js"></script>
  836. <script src="stuff/bundle.se_route_orders.js?_ver=722cae68"></script>
  837. <script>
  838. var _mode = '<?php echo $mode; ?>';
  839. var _notes = 'NA FAKTURZE VAT NALEŻY UMIESZCZAĆ CZYTELNY NR ZAMÓWIENIA';
  840. var _pos = <?php echo json_encode($orderPosList); ?>;
  841. var _saveLink = '<?php echo $saveLink; ?>';
  842. var _dbg = <?php echo (DBG::isActive())? 'true' : 'false'; ?>;
  843. var _fields = <?php echo json_encode($fields); ?>;
  844. var _conditions = [];
  845. _conditions.push([
  846. ['bold', 'Termin wykonania usługi: '],
  847. ['field', '', 'DELIVERY_DATE', 'date'],
  848. ['text', ', po tym terminie Zamawiający zastrzega sobie prawo do odmowy odbioru przedmiotu zamówienia.']
  849. ]);
  850. _conditions.push([
  851. ['bold', 'Forma dostawy: '],
  852. ['field', '', 'DELIVERY_TYPE', 'string']
  853. ]);
  854. _conditions.push([
  855. ['bold', 'Miejsce dostawy: '],
  856. ['field', '', 'DELIVERY_LOCATION', 'string']
  857. ]);
  858. _conditions.push([
  859. ['bold', 'Warunki płatności: '],
  860. ['field_readonly', 'przelew', 'PAYMENT_METHOD'],
  861. ['text', ' '],
  862. ['field', '', 'PAYMENT_TERM_DAYS_FV', 'int'],
  863. ['text', ' dni po dostawie towaru']
  864. ]);
  865. _conditions.push([
  866. ['bold', 'Forma płatności: '],
  867. ['field', 'przelew', 'PAYMENT_METHOD', 'string']
  868. ]);
  869. _conditions.push([
  870. ['bold', 'Termin płatności: '],
  871. ['field', '', 'PAYMENT_TERM_DAYS_FV', 'int'],
  872. ['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.']
  873. ]);
  874. _conditions.push([
  875. ['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.']
  876. ]);
  877. _conditions.push([
  878. ['text', '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.']
  879. ]);
  880. _conditions.push([
  881. ['text', '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.']
  882. ]);
  883. _conditions.push([
  884. ['text', 'Zamawiającemu przysługuje prawo do naliczenia Dostawcy kary umownej w wysokości '],
  885. ['field', '', 'CASH_PENALTY', 'price'],
  886. ['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.']
  887. ]);
  888. _conditions.push([
  889. ['bold', 'Osoba do kontaktu ze strony Zamawiającego:'],
  890. ['tag', 'newline'],
  891. ['field', '', 'ORDER_CONTACT_PERSON', 'text']
  892. ]);
  893. _conditions.push([
  894. ['bold', 'Osoby upoważnione do odbioru towaru:'],
  895. ['tag', 'newline'],
  896. ['field', '', 'ORDER_APPROVE_PERSON', 'text']
  897. ]);
  898. _conditions.push([
  899. ['bold', 'Osoba uprawniona do kontaktu ze strony Dostawcy: '],
  900. ['field', '', 'DELIVERY_CONTACT_PERSON', 'string']
  901. ]);
  902. _conditions.push([
  903. ['text', 'Za datę zapłaty uważa się datę obciążenia rachunku bankowego Zamawiającego.']
  904. ]);
  905. _conditions.push([
  906. ['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.'],
  907. ['tag', 'newline'],
  908. ['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: '],
  909. ['tag', 'u', 'asmentoch@pro-netmedia.pl'],
  910. ['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.']
  911. ]);
  912. _conditions.push([
  913. ['text', 'Wierzytelności wynikające z niniejszego zamówienia nie mogą być przenoszone przez Dostawcę na osoby trzecie bez uprzedniej, pisemnej zgody Zamawiającego.']
  914. ]);
  915. jQuery("#widget-orders").p5_Orders({
  916. year: '2016',
  917. idOrder: '<?php echo V::get('id', '', $data); ?>',
  918. deal: {
  919. type: 'zamowienie',
  920. label: 'Zamówienie',
  921. nr: '<?php echo V::get('ORDER_LABEL', 'nr zamówienia / inicjały zamawiającego / numer budowy / miesiąc / rok', $data); ?>',
  922. showOfferLabel: true,
  923. offerLabel: 'Zamawiający zleca Dostawcy dostawę poniższych materiałów na wskazanych poniżej warunkach. Zgodnie z ofertą',
  924. offerNr: '',
  925. targetName: '',
  926. statement: 'NINIEJSZYM OŚWIADCZAM, ŻE DOSTAWCA PRZYJMUJE ZAMÓWIENIE DO REALIZACJI NA POWYŻSZYCH WARUNKACH:',
  927. conditions: _conditions,
  928. condLabel: 'WARUNKI REALIZACJI ZAMÓWIENIA',
  929. date: '<?php echo V::get('ORDER_DATE', date("Y-m-d"), $data); ?>',
  930. city: '<?php echo V::get('ORDER_CITY', 'Gdańsk', $data); ?>'
  931. },
  932. fields: _fields,
  933. mapFields: {
  934. deal: {
  935. nr: 'ORDER_LABEL',
  936. offerNr: 'OFFER_NR',
  937. date: 'ORDER_DATE',
  938. targetName: '_nr_budowy'// TODO: nazwa budowy?
  939. },
  940. comB: {
  941. name: 'COMPANY_NAME',
  942. address: 'COMPANY_ADDRESS',
  943. postCode: 'COMPANY_POST_CODE',
  944. city: 'COMPANY_CITY',
  945. nip: 'COMPANY_NIP',
  946. contactPerson: 'COMPANY_CONTACT_PERSON',
  947. contactTel: 'COMPANY_CONTACT_TEL',
  948. contactMail: 'COMPANY_CONTACT_MAIL'
  949. }
  950. },
  951. comA: {
  952. label: 'Zamawiający',
  953. name: 'PRO-NET.MEDIA S.A.',
  954. address: 'ul. Narwicka 21',
  955. postCode: '80-557',
  956. city: 'Gdańsk',
  957. nip: '583-315-47-35'
  958. },
  959. comB: {
  960. label: 'Dostawca',
  961. name: '',
  962. address: '',
  963. postCode: '',
  964. city: '',
  965. nip: ''
  966. },
  967. backLink: 'index.php?_route=UrlAction_ProjektyProNetMediaZamZlec&ID_PROJECT=<?php echo $id_project; ?>',
  968. printLink: 'index.php?_route=UrlAction_ProjektyProNetMediaZamZlec&_task=zamowienie&_print=1',
  969. printIdOrderArg: 'id',
  970. pos: _pos,
  971. notes: _notes,
  972. mode: _mode,
  973. actions: {
  974. save: function(data, callback) {
  975. var orderPosList, idOrder;
  976. try {
  977. console.log('#widget-orders/Orders::save: data:', data);
  978. if (!data || !('orderPosList' in data)) throw "Brak danych do zapisania";
  979. var orderPosList = data.orderPosList || [];
  980. var fields = data.fields || {};
  981. var idOrder = data.idOrder || -1;
  982. var req = superagent
  983. .post(_saveLink)
  984. .type('json') // header ĺapplication/x-www-form-urlencoded' requires type('form');
  985. .send({
  986. type: data.type || 'zamowienie',
  987. orderPosList: orderPosList,
  988. toDeletePosList: data.toDeletePosList || {},
  989. fields: fields,
  990. idOrder: idOrder
  991. })
  992. .set('Accept', 'application/json')
  993. .end(function(err, res) {
  994. if(_dbg)console.log('#widget-orders/Orders::save: res:', res, 'res.body:', res.body);
  995. if (err || !res.ok) {
  996. jQuery(document).trigger('DBG:notify', {type: 'warning', msg: 'Req error', err: err});
  997. } else {
  998. if ('application/json' !== res.type) {
  999. jQuery(document).trigger('DBG:notify', {type: 'warning', msg: 'Wrong response type - required json. ' + res.text});
  1000. return;
  1001. }
  1002. jQuery(document).trigger('DBG:notify', {type: 'success', msg: 'res.status:' + res.status + '. res.body:' + JSON.stringify(res.body)});
  1003. callback(null, {
  1004. message: 'Saved',
  1005. type: 'success',
  1006. orderPosList: res.body.orderPosList,
  1007. fields: res.body.fields,
  1008. idOrder: res.body.idOrder
  1009. });
  1010. }
  1011. req = null;
  1012. });
  1013. } catch (e) {
  1014. callback(e);
  1015. }
  1016. },
  1017. },
  1018. dbg: false
  1019. });
  1020. </script>
  1021. <script>
  1022. jQuery(document).ready(function() {
  1023. var _mode = '<?php echo $mode; ?>';
  1024. document.title = 'zamowienie_nr_<?php echo V::get('ORDER_LABEL', 'nr zamówienia / inicjały zamawiającego / numer budowy / miesiąc / rok', $data); ?>';
  1025. if ('print' == _mode) {
  1026. window.print();
  1027. }
  1028. })
  1029. </script>
  1030. <?php
  1031. }
  1032. }
  1033. /*
  1034. ALTER TABLE `CRM_LISTA_ZASOBOW_OFFERS` ADD `ID_ORDER` int(11) NOT NULL DEFAULT 0;
  1035. ALTER TABLE `CRM_LISTA_ZASOBOW_OFFERS_HIST` ADD `ID_ORDER` varchar(11) NOT NULL DEFAULT 'N/S;';
  1036. ALTER TABLE `CRM_LISTA_ZASOBOW_ORDERS` ADD `ORDER_CONTACT_PERSON` varchar(255) NOT NULL DEFAULT '';
  1037. ALTER TABLE `CRM_LISTA_ZASOBOW_ORDERS_HIST` ADD `ORDER_CONTACT_PERSON` varchar(255) NOT NULL DEFAULT 'N/S;';
  1038. ALTER TABLE `CRM_LISTA_ZASOBOW_ORDERS` ADD `ORDER_APPROVE_PERSON` varchar(255) NOT NULL DEFAULT '';
  1039. ALTER TABLE `CRM_LISTA_ZASOBOW_ORDERS_HIST` ADD `ORDER_APPROVE_PERSON` varchar(255) NOT NULL DEFAULT 'N/S;';
  1040. ALTER TABLE `CRM_LISTA_ZASOBOW_ORDERS` ADD `DELIVERY_CONTACT_PERSON` varchar(255) NOT NULL DEFAULT '';
  1041. ALTER TABLE `CRM_LISTA_ZASOBOW_ORDERS_HIST` ADD `DELIVERY_CONTACT_PERSON` varchar(255) NOT NULL DEFAULT 'N/S;';
  1042. $sqlFieldsList[] = 'ORDER_CONTACT_PERSON';
  1043. $sqlFieldsList[] = 'ORDER_APPROVE_PERSON';
  1044. $sqlFieldsList[] = 'DELIVERY_CONTACT_PERSON';
  1045. CREATE TABLE IF NOT EXISTS `CRM_LISTA_ZASOBOW_ORDERS` (
  1046. `ID` int(11) NOT NULL AUTO_INCREMENT,
  1047. `ID_COMPANIES` int(11) NOT NULL DEFAULT 0,
  1048. `ID_PROJECT` int(11) NOT NULL DEFAULT 0,
  1049. `ID_PROJECT_path` varchar(255) NOT NULL COMMENT 'wyliczalna dynamicznie sciezka sprawy',
  1050. `A_RECORD_CREATE_DATE` datetime DEFAULT NULL,
  1051. `A_RECORD_CREATE_AUTHOR` varchar(100) DEFAULT NULL,
  1052. `SYNC_SQIX_STATUS` varchar(100) NOT NULL DEFAULT '',
  1053. `A_RECORD_UPDATE_DATE` datetime DEFAULT NULL,
  1054. `A_RECORD_UPDATE_AUTHOR` varchar(100) NOT NULL DEFAULT '',
  1055. `L_APPOITMENT_DATE` varchar(30) NOT NULL DEFAULT '',
  1056. `L_APPOITMENT_USER` varchar(100) NOT NULL DEFAULT '',
  1057. `L_APPOITMENT_PERIOD` varchar(4) NOT NULL DEFAULT '',
  1058. `L_APPOITMENT_INFO` varchar(255) NOT NULL DEFAULT '',
  1059. `L_APPOITMENT_TYPE` enum('','ARRANGED','TO_ARRANGE','CANCELLED','TO_CANCEL','RELATE','WAIT') DEFAULT NULL,
  1060. `A_STATUS` enum('WAITING','NORMAL','MONITOR','WARNING','OFF_SOFT','OFF_HARD','DELETED') DEFAULT NULL,
  1061. `A_STATUS_INFO` varchar(255) NOT NULL DEFAULT '',
  1062. `A_ADM_COMPANY` varchar(100) NOT NULL DEFAULT '',
  1063. `A_CLASSIFIED` varchar(100) NOT NULL DEFAULT '',
  1064. `NR` varchar(255) NOT NULL DEFAULT '',
  1065. `COMPANY_NAME` varchar(255) NOT NULL DEFAULT '',
  1066. `COMPANY_ADDRESS` varchar(255) NOT NULL DEFAULT '',
  1067. `COMPANY_POST_CODE` varchar(6) NOT NULL DEFAULT '',
  1068. `COMPANY_CITY` varchar(255) NOT NULL DEFAULT '',
  1069. `COMPANY_NIP` varchar(32) NOT NULL DEFAULT '',
  1070. `COMPANY_CONTACT_PERSON` varchar(64) NOT NULL DEFAULT '',
  1071. `COMPANY_CONTACT_TEL` varchar(32) NOT NULL DEFAULT '',
  1072. `COMPANY_CONTACT_MAIL` varchar(64) NOT NULL DEFAULT '',
  1073. `OFFER_DATE` date DEFAULT NULL,
  1074. `OFFER_NR` varchar(255) NOT NULL DEFAULT '',
  1075. `ORDER_TYPE` varchar(255) NOT NULL DEFAULT '',
  1076. `DELIVERY_DATE` date DEFAULT NULL,
  1077. `DELIVERY_TYPE` varchar(255) DEFAULT '',
  1078. `DELIVERY_LOCATION` varchar(255) DEFAULT '',
  1079. `EXECUTION_START_DATE` date DEFAULT NULL,
  1080. `EXECUTION_END_DATE` date DEFAULT NULL,
  1081. `CASH_PENALTY` varchar(255) NOT NULL DEFAULT '',
  1082. `ORDER_CONTACT_PERSON` varchar(255) NOT NULL DEFAULT '',
  1083. `ORDER_APPROVE_PERSON` varchar(255) NOT NULL DEFAULT '',
  1084. `DELIVERY_CONTACT_PERSON` varchar(255) NOT NULL DEFAULT '',
  1085. `LOCATION` date DEFAULT NULL,
  1086. `NOTES` varchar(1000) NOT NULL DEFAULT '',
  1087. PRIMARY KEY (`ID`)
  1088. ) ENGINE=MyISAM DEFAULT CHARSET=latin2;
  1089. CREATE TABLE IF NOT EXISTS `CRM_LISTA_ZASOBOW_ORDERS_HIST` (
  1090. `ID` int(11) NOT NULL AUTO_INCREMENT,
  1091. `ID_USERS2` int(11) NOT NULL,
  1092. `ID_COMPANIES` varchar(255) NOT NULL DEFAULT 'N/S;',
  1093. `ID_PROJECT` varchar(255) NOT NULL DEFAULT 'N/S;',
  1094. `ID_PROJECT_path` varchar(255) NOT NULL DEFAULT 'N/S;',
  1095. `A_RECORD_CREATE_DATE` varchar(255) NOT NULL DEFAULT 'N/S;',
  1096. `A_RECORD_CREATE_AUTHOR` varchar(255) NOT NULL DEFAULT 'N/S;',
  1097. `SYNC_SQIX_STATUS` varchar(255) NOT NULL DEFAULT 'N/S;',
  1098. `A_RECORD_UPDATE_DATE` varchar(255) NOT NULL DEFAULT 'N/S;',
  1099. `A_RECORD_UPDATE_AUTHOR` varchar(255) NOT NULL DEFAULT 'N/S;',
  1100. `L_APPOITMENT_DATE` varchar(255) NOT NULL DEFAULT 'N/S;',
  1101. `L_APPOITMENT_USER` varchar(255) NOT NULL DEFAULT 'N/S;',
  1102. `L_APPOITMENT_PERIOD` varchar(255) NOT NULL DEFAULT 'N/S;',
  1103. `L_APPOITMENT_INFO` varchar(255) NOT NULL DEFAULT 'N/S;',
  1104. `L_APPOITMENT_TYPE` varchar(255) NOT NULL DEFAULT 'N/S;',
  1105. `A_STATUS` varchar(255) NOT NULL DEFAULT 'N/S;',
  1106. `A_STATUS_INFO` varchar(255) NOT NULL DEFAULT 'N/S;',
  1107. `A_ADM_COMPANY` varchar(255) NOT NULL DEFAULT 'N/S;',
  1108. `A_CLASSIFIED` varchar(255) NOT NULL DEFAULT 'N/S;',
  1109. `NR` varchar(255) NOT NULL DEFAULT 'N/S;'
  1110. `COMPANY_NAME` varchar(255) NOT NULL DEFAULT 'N/S;'
  1111. `COMPANY_ADDRESS` varchar(255) NOT NULL DEFAULT 'N/S;'
  1112. `COMPANY_POST_CODE` varchar(6) NOT NULL DEFAULT 'N/S;'
  1113. `COMPANY_CITY` varchar(255) NOT NULL DEFAULT 'N/S;'
  1114. `COMPANY_NIP` varchar(32) NOT NULL DEFAULT 'N/S;'
  1115. `COMPANY_CONTACT_PERSON` varchar(64) NOT NULL DEFAULT 'N/S;'
  1116. `COMPANY_CONTACT_TEL` varchar(32) NOT NULL DEFAULT 'N/S;'
  1117. `COMPANY_CONTACT_MAIL` varchar(64) NOT NULL DEFAULT 'N/S;'
  1118. `OFFER_DATE` varchar(10) NOT NULL DEFAULT 'N/S;'
  1119. `OFFER_NR` varchar(255) NOT NULL DEFAULT 'N/S;'
  1120. `ORDER_TYPE` varchar(255) NOT NULL DEFAULT 'N/S;'
  1121. `DELIVERY_DATE` varchar(255) NOT NULL DEFAULT 'N/S;'
  1122. `DELIVERY_TYPE` varchar(255) DEFAULT 'N/S;',
  1123. `DELIVERY_LOCATION` varchar(255) DEFAULT 'N/S;',
  1124. `EXECUTION_START_DATE` varchar(10) NOT NULL DEFAULT 'N/S;',
  1125. `EXECUTION_END_DATE` varchar(10) NOT NULL DEFAULT 'N/S;',
  1126. `CASH_PENALTY` varchar(255) NOT NULL DEFAULT 'N/S;',
  1127. `ORDER_CONTACT_PERSON` varchar(255) NOT NULL DEFAULT 'N/S;',
  1128. `ORDER_APPROVE_PERSON` varchar(255) NOT NULL DEFAULT 'N/S;',
  1129. `DELIVERY_CONTACT_PERSON` varchar(255) NOT NULL DEFAULT 'N/S;',
  1130. `LOCATION` varchar(10) NOT NULL DEFAULT 'N/S;',
  1131. `NOTES` varchar(1000) NOT NULL DEFAULT 'N/S;',
  1132. PRIMARY KEY (`ID`),
  1133. KEY `ID_USERS2` (`ID_USERS2`)
  1134. ) ENGINE=MyISAM DEFAULT CHARSET=latin2;
  1135. CREATE VIEW `CRM_LISTA_ZASOBOW_ORDERS_summary_view` AS
  1136. SELECT o.`ID`
  1137. , o.`ID_COMPANIES`
  1138. , o.`ID_PROJECT`
  1139. , o.`ID_PROJECT_path`
  1140. , o.`A_RECORD_CREATE_DATE`
  1141. , o.`A_RECORD_CREATE_AUTHOR`
  1142. , o.`SYNC_SQIX_STATUS`
  1143. , o.`A_RECORD_UPDATE_DATE`
  1144. , o.`A_RECORD_UPDATE_AUTHOR`
  1145. , o.`L_APPOITMENT_DATE`
  1146. , o.`L_APPOITMENT_USER`
  1147. , o.`L_APPOITMENT_PERIOD`
  1148. , o.`L_APPOITMENT_INFO`
  1149. , o.`L_APPOITMENT_TYPE`
  1150. , o.`A_STATUS`
  1151. , o.`A_STATUS_INFO`
  1152. , o.`A_ADM_COMPANY`
  1153. , o.`A_CLASSIFIED`
  1154. , o.`NR`
  1155. , o.`COMPANY_NIP`
  1156. , o.`COMPANY_NAME`
  1157. , o.`COMPANY_ADDRESS`
  1158. , o.`OFFER_DATE`
  1159. , o.`OFFER_NR`
  1160. , o.`ORDER_TYPE`
  1161. , o.`DELIVERY_DATE`
  1162. , o.`EXECUTION_START_DATE`
  1163. , o.`EXECUTION_END_DATE`
  1164. , o.`CASH_PENALTY`
  1165. , o.`LOCATION`
  1166. , o.`NOTES`
  1167. , SUM(NETTO_VALUE_TO_PAY) as SUM_POS
  1168. , COUNT(1) as COUNT_POS
  1169. FROM `CRM_LISTA_ZASOBOW_ORDERS` o
  1170. LEFT JOIN `CRM_LISTA_ZASOBOW_OFFERS` f on(f.ID_ORDER = o.ID)
  1171. GROUP BY o.`ID`
  1172. ;
  1173. -- ADD ORDER_NR to KORESP
  1174. ALTER TABLE `IN7_DZIENNIK_KORESP_HIST` ADD `ORDER_NR` VARCHAR(32) NOT NULL DEFAULT 'N/S;';
  1175. ALTER TABLE `IN7_DZIENNIK_KORESP` ADD `ORDER_NR` VARCHAR(32) NOT NULL DEFAULT '';
  1176. SELECT ID,ID_PROJECT,ORDER_NR FROM `IN7_DZIENNIK_KORESP` where ID_PROJECT is not null or ORDER_NR != '' ORDER BY `IN7_DZIENNIK_KORESP`.`ID` DESC limit 500;
  1177. SELECT ID,ID_PROJECT,ORDER_NR FROM `IN7_DZIENNIK_KORESP` where ID_PROJECT is not null and ORDER_NR != '' ORDER BY `IN7_DZIENNIK_KORESP`.`ID` DESC limit 500;
  1178. -- ADD missing fields in CRM_LISTA_ZASOBOW_OFFERS
  1179. -- ALTER TABLE `CRM_LISTA_ZASOBOW_OFFERS` CHANGE `OFFER_UNIT_TYPE` `OFFER_UNIT_TYPE` VARCHAR(16) CHARACTER SET latin2 COLLATE latin2_general_ci NULL DEFAULT 'szt.';
  1180. ALTER TABLE `CRM_LISTA_ZASOBOW_OFFERS_HIST` ADD `OFFER_NAME` VARCHAR(255) NOT NULL DEFAULT 'N/S;';
  1181. ALTER TABLE `CRM_LISTA_ZASOBOW_OFFERS` ADD `OFFER_NAME` VARCHAR(255) NOT NULL DEFAULT '';
  1182. ALTER TABLE `CRM_LISTA_ZASOBOW_OFFERS_HIST` ADD `OFFER_QUANTITY` VARCHAR(16) NOT NULL DEFAULT 'N/S;';
  1183. ALTER TABLE `CRM_LISTA_ZASOBOW_OFFERS` ADD `OFFER_QUANTITY` decimal(10,4) NOT NULL DEFAULT 0;
  1184. ALTER TABLE `CRM_LISTA_ZASOBOW_OFFERS_HIST` ADD `OFFER_UNIT` VARCHAR(16) NOT NULL DEFAULT 'N/S;';
  1185. ALTER TABLE `CRM_LISTA_ZASOBOW_OFFERS` ADD `OFFER_UNIT` VARCHAR(16) NOT NULL DEFAULT '';
  1186. -- ADD zatwierdzony przez
  1187. ALTER TABLE `CRM_LISTA_ZASOBOW_ORDERS_HIST` ADD `APPROVED_BY` VARCHAR(64) NOT NULL DEFAULT 'N/S;';
  1188. ALTER TABLE `CRM_LISTA_ZASOBOW_ORDERS` ADD `APPROVED_BY` VARCHAR(64) NOT NULL DEFAULT ''; -- ZATWIERDZONE PRZEZ
  1189. ALTER TABLE `CRM_LISTA_ZASOBOW_ORDERS_HIST` ADD `APPROVE_STATUS` VARCHAR(32) NOT NULL DEFAULT 'N/S;';
  1190. ALTER TABLE `CRM_LISTA_ZASOBOW_ORDERS` ADD `APPROVE_STATUS` enum('WERSJA_ROBOCZA', 'OCZEKUJE_ZATWIERDZENIA', 'ZATWIERDZONE', 'ODRZUCONE') NOT NULL DEFAULT 'WERSJA_ROBOCZA';
  1191. -- ADD payment term days after fv
  1192. ALTER TABLE `CRM_LISTA_ZASOBOW_ORDERS_HIST` ADD `PAYMENT_TERM_DAYS_FV` VARCHAR(11) NOT NULL DEFAULT 'N/S;';
  1193. ALTER TABLE `CRM_LISTA_ZASOBOW_ORDERS` ADD `PAYMENT_TERM_DAYS_FV` int(11) NOT NULL DEFAULT '0';
  1194. -- ADD payment method
  1195. ALTER TABLE `CRM_LISTA_ZASOBOW_ORDERS_HIST` ADD `PAYMENT_METHOD` VARCHAR(32) NOT NULL DEFAULT 'N/S;';
  1196. ALTER TABLE `CRM_LISTA_ZASOBOW_ORDERS` ADD `PAYMENT_METHOD` VARCHAR(32) NOT NULL DEFAULT '';
  1197. -- 2016-07-13 - ADD 'OCZEKUJE_OSTATECZNEGO_ZATWIERDZENIA' to `APPROVE_STATUS`
  1198. ALTER TABLE `CRM_LISTA_ZASOBOW_ORDERS` CHANGE `APPROVE_STATUS` `APPROVE_STATUS` ENUM('WERSJA_ROBOCZA','OCZEKUJE_ZATWIERDZENIA','ZATWIERDZONE','ODRZUCONE','OCZEKUJE_OSTATECZNEGO_ZATWIERDZENIA') CHARACTER SET latin2 COLLATE latin2_general_ci NOT NULL DEFAULT 'WERSJA_ROBOCZA';
  1199. 1213 12 14/AS/13/SP/2014/IV/2016 14 / AS / 13/SP/2014 / IV / 2016
  1200. 1292 30 34/JL/16/SP/2015/V/2016 34 / JL / 16/SP/2015 / V / 2016
  1201. 1259 37 24/JT/23/SP/2015/V/2016 24 / JT / 23/SP/2015 / V / 2016
  1202. 1210 44 1/AS/2/2016/III/2016 1 / AS / 2/ 2016 / III / 2016
  1203. 1211 44 1/AS/2/2016/III/2016 1 / AS / 2/ 2016 / III / 2016
  1204. 1212 44 9/JT/2/SP/2016/IV/2016 9 / JT / 2/SP/2016 / IV / 2016
  1205. 1215 44 10/JT/2/SP/2016/IV/2016 10 / JT / 2/SP/2016 / IV / 2016
  1206. 1216 44 11/JT/2/SP/2016/V/2016 11 / JT / 2/SP/2016 / V / 2016
  1207. 1214 45 8/AS/3/SP/2016/IV/2016 8 / AS / 3/SP/2016 / IV / 2016
  1208. 1218 46 25/AS/04/SP/2016/V/2016 25 / AS / 04/SP/2016 / V / 2016
  1209. 1255 46 11/RG/04/SP/2016/III/2016 11 / RG / 04/SP/2016 / III / 2016
  1210. 1270 46 27/RG/04/SP/2016/V/2016 27 / RG / 04/SP/2016 / V / 2016
  1211. 1219 50 2/MK/8/SP/2016/V/2016 2 / MK / 8/SP/2016 / V / 2016
  1212. 1223 50 3/AS/8/SP/2016/V/2016 3 / AS / 8/SP/2016 / V / 2016
  1213. */