|
|
@@ -13,6 +13,24 @@ class Route_UrlAction_ProjektyProNetMediaZamZlec extends RouteBase {// TODO: Url
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+/*
|
|
|
+
|
|
|
+Kwota planowana
|
|
|
+Zamówienie
|
|
|
+zaliczki
|
|
|
+ilość pracowników / koszty pracownicze: powiązanie z raportami X współczynnik
|
|
|
+koszty sprzętu/ wynajmowany na budowie: rozdział na różne rodzaj sprzętu: koparka itp.
|
|
|
+koszty własne: naprawy sprzętu
|
|
|
+koszty materiałów
|
|
|
+osprzet
|
|
|
+dodatkowe koszty związane z nadwyżkami - rozbieżności odnośnie ustaleń
|
|
|
+
|
|
|
+
|
|
|
+podkład fv podkład fv
|
|
|
+dostęp dla zarządu i os. odp. kwota końcowa
|
|
|
+
|
|
|
+*/
|
|
|
+
|
|
|
public function typespecialAction() {
|
|
|
$DBG = ('1' == V::get('DBG', '', $_REQUEST));
|
|
|
header("Content-type: application/json");
|
|
|
@@ -60,6 +78,18 @@ class Route_UrlAction_ProjektyProNetMediaZamZlec extends RouteBase {// TODO: Url
|
|
|
SE_Layout::dol();
|
|
|
}
|
|
|
|
|
|
+ public function addZlecenieAction() {
|
|
|
+ die("TODO: add zlecenie and redirect");
|
|
|
+ }
|
|
|
+
|
|
|
+ public function rmOrdersDataAction() {// TODO: RMME only TEST
|
|
|
+ if ('diradmin' != User::getLogin()) die('access denied!');
|
|
|
+ if ('doRemove' != V::get('rm', '', $_GET)) die('confirmation required!');
|
|
|
+ DB::getPDO()->exec("TRUNCATE CRM_LISTA_ZASOBOW_ORDERS_HIST");
|
|
|
+ DB::getPDO()->exec("TRUNCATE CRM_LISTA_ZASOBOW_ORDERS");
|
|
|
+ die('orders data removed');
|
|
|
+ }
|
|
|
+
|
|
|
public function zlecenieAction() {
|
|
|
SE_Layout::gora();
|
|
|
if (1 != V::get('_print', '', $_GET)) SE_Layout::menu();
|
|
|
@@ -90,25 +120,87 @@ class Route_UrlAction_ProjektyProNetMediaZamZlec extends RouteBase {// TODO: Url
|
|
|
SE_Layout::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_TYPE';
|
|
|
+ $sqlFieldsList[] = 'DELIVERY_LOCATION';
|
|
|
+ $sqlFieldsList[] = 'CASH_PENALTY';
|
|
|
+ $sqlFieldsList[] = 'ORDER_CONTACT_PERSON';
|
|
|
+ $sqlFieldsList[] = 'ORDER_APPROVE_PERSON';
|
|
|
+ $sqlFieldsList[] = 'DELIVERY_CONTACT_PERSON';
|
|
|
+ $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;
|
|
|
+ }
|
|
|
+ $data['ORDER_LABEL'] = "{$idOrder}/{$inicjaly}/{$data['obcy_nr_sprawy']}/{$month}/{$year}";// TODO: nr zamówienia / inicjały zamawiającego / numer budowy / miesiąc / rok
|
|
|
+ }
|
|
|
+ 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 {
|
|
|
+ SE_Layout::gora();
|
|
|
+ SE_Layout::menu();
|
|
|
+ SE_Layout::alert('danger', 'Nie udało się utworzyć rekordu');
|
|
|
+ SE_Layout::dol();
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
public function zamowienieAction() {
|
|
|
SE_Layout::gora();
|
|
|
if (1 != V::get('_print', '', $_GET)) SE_Layout::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');
|
|
|
- if (1 != V::get('_print', '', $_GET)) {
|
|
|
- $basePrintUrl = "index.php?_route=UrlAction_ProjektyProNetMediaZamZlec&ID_PROJECT={$id_project}";
|
|
|
- $basePrintUrl .= "&id_company={$id_company}";
|
|
|
- $basePrintUrl .= "&items_count={$items_count}";
|
|
|
- ?>
|
|
|
- <div class="container" style="margin:2em auto; text-align:right">
|
|
|
- <a class="btn btn-default" href="<?php echo $basePrintUrl; ?>">Cofnij</a>
|
|
|
- <a class="btn btn-primary" href="<?php echo $basePrintUrl; ?>&_task=zamowienie&_print=1" target="_blank">Drukuj Zamówienie</a>
|
|
|
- </div>
|
|
|
- <?php
|
|
|
- }
|
|
|
$data = array();
|
|
|
+ $data['id'] = $id_order;
|
|
|
$data['ile_pozycji'] = $items_count;
|
|
|
$data['id_company'] = $id_company;
|
|
|
$data['id_project'] = $id_project;
|
|
|
@@ -121,34 +213,84 @@ class Route_UrlAction_ProjektyProNetMediaZamZlec extends RouteBase {// TODO: Url
|
|
|
}
|
|
|
|
|
|
public function setProps($data) {
|
|
|
+ $data['_nr_budowy'] = '';// TODO: 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);
|
|
|
+ $data['OFFER_NR'] = V::get('OFFER_NR', '', $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);
|
|
|
+ $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['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}
|
|
|
+ select c.*
|
|
|
+ from COMPANIES c
|
|
|
+ where c.ID = {$sqlIdCompany}
|
|
|
");
|
|
|
if (count($rows) > 0) {
|
|
|
$row = reset($rows);
|
|
|
- if (!empty($row['P_NAME'])) $data['dostawca_name'] = $row['P_NAME'];
|
|
|
- $data['dostawca_address'] = "{$row['P_ADDRESS_POST_CODE']} {$row['P_ADDRESS_CITY']}, ul. {$row['P_ADDRESS_STREET']} {$row['P_ADDRESS_HOUSE']}";
|
|
|
- if (!empty($row['P_ADDRESS_HOME'])) $data['dostawca_address'] .= "/{$row['P_ADDRESS_HOME']}";
|
|
|
- if (!empty($row['P_NIP'])) $data['dostawca_nip'] = $row['P_NIP'];
|
|
|
+ DBG::_('DBG', '>2', "company by id='{$sqlIdCompany}'", $row, __CLASS__, __FUNCTION__, __LINE__);
|
|
|
+ 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']}";// TODO: add P_ADDRESS_HOUSE
|
|
|
+ if (!empty($row['P_ADDRESS_HOME'])) $data['COMPANY_ADDRESS'] .= "/{$row['P_ADDRESS_HOME']}";// TODO: 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}
|
|
|
+ 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'];
|
|
|
// TODO: $data['obcy_nr_sprawy'] = 'zam./OSOBA/nr budowy/I/2016' lub 'zlec./OSOBA/nr budowy/I/2016'
|
|
|
+
|
|
|
return $data;
|
|
|
}
|
|
|
|
|
|
@@ -157,6 +299,20 @@ class Route_UrlAction_ProjektyProNetMediaZamZlec extends RouteBase {// TODO: Url
|
|
|
$id_company = V::get('id_company', 0, $data);
|
|
|
$items_count = V::get('items_count', 0, $data);
|
|
|
$widgetCompanies = V::get('widgetCompanies', array(), $data);
|
|
|
+
|
|
|
+ $sqlWhere = '';
|
|
|
+ if ($id_project > 0) $sqlWhere = "where o.ID_PROJECT = {$id_project}";
|
|
|
+ $projOrders = 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)
|
|
|
+ {$sqlWhere}
|
|
|
+ order by ID DESC
|
|
|
+ limit 100
|
|
|
+ ");
|
|
|
+
|
|
|
?>
|
|
|
<div class="container" style="margin-top:2em">
|
|
|
<form action="" method="get" class="form-horizontal">
|
|
|
@@ -191,29 +347,57 @@ class Route_UrlAction_ProjektyProNetMediaZamZlec extends RouteBase {// TODO: Url
|
|
|
<?php endif; ?>
|
|
|
</div>
|
|
|
</div>
|
|
|
+<!--
|
|
|
<div class="form-group">
|
|
|
<label for="items_count" class="col-sm-2 control-label">Ilość pozycji</label>
|
|
|
<div class="col-sm-4">
|
|
|
<input type="number" name="items_count" value="<?php echo $items_count; ?>" class="form-control">
|
|
|
</div>
|
|
|
</div>
|
|
|
+-->
|
|
|
<div class="form-group">
|
|
|
<div class="col-sm-offset-2 col-sm-10">
|
|
|
<input type="hidden" name="_task" value="">
|
|
|
- <button type="submit" class="btn btn-default" onclick="return submitZamowienie(this);">Zamówienie</button>
|
|
|
- <button type="submit" class="btn btn-default" onclick="return submitZlecenie(this);">Zlecenie</button>
|
|
|
+ <label>Dodaj nowe </label>
|
|
|
+ <button type="submit" class="btn btn-primary" onclick="return submitZamowienie(this);">Zamówienie</button>
|
|
|
+ <button type="submit" class="btn btn-primary" onclick="return submitZlecenie(this);">Zlecenie</button>
|
|
|
</div>
|
|
|
</div>
|
|
|
</form>
|
|
|
+
|
|
|
+ <hr>
|
|
|
+ <table class="table table-bordered table-hover">
|
|
|
+ <thead>
|
|
|
+ <tr>
|
|
|
+ <th>#</th>
|
|
|
+ <th>id</th>
|
|
|
+ <th>nr zlecenia</th>
|
|
|
+ <th>nr budowy</th>
|
|
|
+ </tr>
|
|
|
+ </thead>
|
|
|
+ <tbody>
|
|
|
+ <?php foreach ($projOrders as $order) : ?>
|
|
|
+ <tr>
|
|
|
+ <td>
|
|
|
+ <a href="index.php?_route=UrlAction_ProjektyProNetMediaZamZlec&_task=<?php echo $order['ORDER_TYPE']; ?>&id=<?php echo $order['ID']; ?>"
|
|
|
+ class="btn btn-link btn-xs">Edytuj <?php echo $order['ORDER_TYPE']; ?></a>
|
|
|
+ </td>
|
|
|
+ <td><?php echo $order['ID']; ?></td>
|
|
|
+ <td><?php echo $order['ORDER_LABEL']; ?></td>
|
|
|
+ <td><?php echo $order['obcy_nr_sprawy']; ?></td>
|
|
|
+ </tr>
|
|
|
+ <?php endforeach; ?>
|
|
|
+ </tbody>
|
|
|
+ </table>
|
|
|
</div>
|
|
|
<script>
|
|
|
function submitZamowienie(fld) {
|
|
|
var frm = fld.form;
|
|
|
- frm['_task'].value='zamowienie';
|
|
|
+ frm['_task'].value='addZamowienie';
|
|
|
}
|
|
|
function submitZlecenie(fld) {
|
|
|
var frm = fld.form;
|
|
|
- frm['_task'].value='zlecenie';
|
|
|
+ frm['_task'].value='addZlecenie';
|
|
|
}
|
|
|
</script>
|
|
|
<?php
|
|
|
@@ -335,104 +519,362 @@ body { font-size:12px; line-height:1.3em }
|
|
|
$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();
|
|
|
- if (!empty($json['orderPosList'])) {
|
|
|
+ $res->fields = new stdClass();
|
|
|
+ $res->DBG_DATA = $data;// TODO: DBG
|
|
|
+ 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_TYPE';
|
|
|
+ $sqlFieldsList[] = 'DELIVERY_LOCATION';
|
|
|
+ $sqlFieldsList[] = 'CASH_PENALTY';
|
|
|
+ $sqlFieldsList[] = 'ORDER_CONTACT_PERSON';
|
|
|
+ $sqlFieldsList[] = 'ORDER_APPROVE_PERSON';
|
|
|
+ $sqlFieldsList[] = 'DELIVERY_CONTACT_PERSON';
|
|
|
+ $sqlFieldsList[] = 'OFFER_NR';
|
|
|
+
|
|
|
+ $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 = (object)$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 = (object)$row;
|
|
|
+ } else {
|
|
|
+ $res->idOrder = -1;
|
|
|
+ $res->type = 'danger';
|
|
|
+ $res->msg = 'Nie udało się utworzyć rekordu';
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ $currentPosList = $this->fetchOrderPosList($res->idOrder);
|
|
|
+
|
|
|
+ $res->validateErrors = array();
|
|
|
+ if (!empty($json['orderPosList']) && $res->idOrder > 0) {
|
|
|
+ $idMap = array();// $idFrontEnd => $idBackEnd
|
|
|
foreach ($json['orderPosList'] as $item) {
|
|
|
- if ($item['id'] < 0) {// TODO: add new record
|
|
|
- $item['id'] = -1 * $item['id'] + 10000;
|
|
|
- } else {// TODO: update record
|
|
|
+ $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'] = $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->orderPosList[] = $item;
|
|
|
}
|
|
|
}
|
|
|
+ $res->validateErrors = (object)$res->validateErrors;
|
|
|
Response::sendJsonExit($res);
|
|
|
}
|
|
|
|
|
|
- public function zamowienieView($data) {
|
|
|
+ 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();
|
|
|
- $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;
|
|
|
+ $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;
|
|
|
}
|
|
|
- // fetch from db - overwrite $orderPosList
|
|
|
+ return $orderPosList;
|
|
|
+ }
|
|
|
|
|
|
- $saveLink = Request::getPathUri() . 'index.php?_route=UrlAction_ProjektyProNetMediaZamZlec&_task=saveAjax';
|
|
|
+ public function zamowienieView($data) {
|
|
|
+ $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__);
|
|
|
+ $saveLink = Request::getPathUri() . "index.php?_route=UrlAction_ProjektyProNetMediaZamZlec&_task=saveAjax&id={$id_order}";
|
|
|
+ $fields = $data;// TODO: only row fields?
|
|
|
?>
|
|
|
<style type="text/css">
|
|
|
body { font-size:12px; line-height:1.3em }
|
|
|
#tbl-items td { padding:3px !important }
|
|
|
@media print {
|
|
|
- body { font-size:9px; line-height:1.2em }
|
|
|
- table { page-break-inside:auto }
|
|
|
- tr { page-break-inside:avoid; page-break-after:auto }
|
|
|
- li { page-break-inside:avoid; page-break-after:auto }
|
|
|
- .page-break-block { page-break-inside:avoid; page-break-after:auto }
|
|
|
+ body { font-size:9px; line-height:1.2em }
|
|
|
+ h4 { font-size:1.1em; margin-top:8px; margin-bottom:6px }
|
|
|
+ h3 { font-size:1.2em; margin-top:8px; margin-bottom:6px }
|
|
|
+ h2 { font-size:1.3em; margin-top:8px; margin-bottom:6px }
|
|
|
+ h1 { font-size:1.4em; margin-top:8px; margin-bottom:6px }
|
|
|
+
|
|
|
+ table { page-break-inside:auto }
|
|
|
+ tr { page-break-inside:avoid; page-break-after:auto }
|
|
|
+ li { page-break-inside:avoid; page-break-after:auto }
|
|
|
+ .page-break-block { page-break-inside:avoid; page-break-after:auto }
|
|
|
+
|
|
|
+ td, th,
|
|
|
+ .table>tbody>tr>td,
|
|
|
+ .table>tbody>tr>th,
|
|
|
+ .table>thead>tr>th { padding:2px }
|
|
|
+
|
|
|
+ .order-panel { display:none }
|
|
|
}
|
|
|
</style>
|
|
|
<div class="container">
|
|
|
- <div id="tbl-items" style="margin-top:2em">
|
|
|
+ <div id="tbl-items">
|
|
|
<div id="widget-orders"></div>
|
|
|
</div>
|
|
|
-
|
|
|
- <h4 style="font-size:1.2em">WARUNKI REALIZACJI ZAMÓWIENIA:</h4>
|
|
|
- <ol>
|
|
|
- <li>Termin dostawy: …………………………, po tym terminie Zamawiający zastrzega sobie prawo do odmowy odbioru przedmiotu zamówienia.</li>
|
|
|
- <li>Forma dostawy: ………………………….</li>
|
|
|
- <li>Miejsce dostawy: ……………………………………..</li>
|
|
|
- <li>Warunki płatności zadatku: na podstawie faktury proforma.</li>
|
|
|
- <li>Forma płatności: przelew.</li>
|
|
|
- <li>Termin płatności: 30 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.</li>
|
|
|
- <li>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.</li>
|
|
|
- <li>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.</li>
|
|
|
- <li>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.</li>
|
|
|
- <li>Zamawiającemu przysługuje prawo do naliczenia Dostawcy kary umownej w wysokości ….% 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.</li>
|
|
|
- <li>Osoba do kontaktu ze strony Zamawiającego: ……………………………………..</li>
|
|
|
- <li>Osoba uprawniona do kontaktu ze strony Dostawcy: ………………………………</li>
|
|
|
- <li>Za datę zapłaty uważa się datę obciążenia rachunku bankowego Zamawiającego.</li>
|
|
|
- <li>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. Potwierdzenie pod rygorem nieważności winno być przesłane faksem do Zamawiającego pod numer ………… lub pocztą elektroniczną na adres email: ……….. 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.</li>
|
|
|
- <li>Wierzytelności wynikające z niniejszego zamówienia nie mogą być przenoszone przez Dostawcę na osoby trzecie bez uprzedniej, pisemnej zgody Zamawiającego.</li>
|
|
|
- </ol>
|
|
|
-
|
|
|
- <div style="padding-top:3em" class="page-break-block">
|
|
|
- (pieczęć i czytelny podpis Zamawiającego) …………………………………………………………….
|
|
|
- </div>
|
|
|
- <div class="page-break-block">
|
|
|
- <h4 style="font-size:1.2em">NINIEJSZYM OŚWIADCZAM, ŻE DOSTAWCA PRZYJMUJE ZAMÓWIENIE DO REALIZACJI NA POWYŻSZYCH WARUNKACH:</h4>
|
|
|
- <div style="padding-top:2em;">
|
|
|
- ………………………….,dnia………………………….………………………………………………..
|
|
|
- <br>(pieczęć i czytelny podpis Dostawcy zgodnie z zasadami reprezentacji)
|
|
|
- </div>
|
|
|
- </div>
|
|
|
</div>
|
|
|
|
|
|
<script src="stuff/vendors.js"></script>
|
|
|
<script src="stuff/bundle.se_route_orders.js"></script>
|
|
|
<script>
|
|
|
-var isPrint = false;// TODO: from request
|
|
|
var _mode = '<?php echo (V::get('_print', '', $_REQUEST))? 'print' : 'view'; ?>';
|
|
|
-var _projectInfo = {id: 5130};
|
|
|
+var _projectInfo = {id: 5130};// TODO: ID PROJECT - use only fields?
|
|
|
var _notes = 'NA FAKTURZE VAT NALEŻY UMIESZCZAĆ CZYTELNY NR ZAMÓWIENIA';
|
|
|
var _pos = <?php echo json_encode($orderPosList); ?>;
|
|
|
var _saveLink = '<?php echo $saveLink; ?>';
|
|
|
var _dbg = <?php echo (DBG::isActive())? 'true' : 'false'; ?>;
|
|
|
+var _fields = <?php echo json_encode($fields); ?>;
|
|
|
+var _conditions = [];
|
|
|
+_conditions.push([
|
|
|
+ ['bold', 'Termin wykonania usługi: '],
|
|
|
+ ['field', '', 'DELIVERY_DATE', 'date'],
|
|
|
+ ['text', ', po tym terminie Zamawiający zastrzega sobie prawo do odmowy odbioru przedmiotu zamówienia.']
|
|
|
+]);
|
|
|
+_conditions.push([
|
|
|
+ ['bold', 'Forma dostawy: '],
|
|
|
+ ['field', '', 'DELIVERY_TYPE', 'string']
|
|
|
+]);
|
|
|
+_conditions.push([
|
|
|
+ ['bold', 'Miejsce dostawy: '],
|
|
|
+ ['field', '', 'DELIVERY_LOCATION', 'string']
|
|
|
+]);
|
|
|
+_conditions.push([
|
|
|
+ ['bold', 'Warunki płatności: '],
|
|
|
+ ['text', 'przelew 60 dni po dostawie towaru']
|
|
|
+]);
|
|
|
+_conditions.push([
|
|
|
+ ['bold', 'Forma płatności: '],
|
|
|
+ ['text', 'przelew']
|
|
|
+]);
|
|
|
+_conditions.push([
|
|
|
+ ['bold', 'Termin płatności: '],
|
|
|
+ ['text', '60 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.push([
|
|
|
+ ['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.push([
|
|
|
+ ['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.']
|
|
|
+]);
|
|
|
+_conditions.push([
|
|
|
+ ['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.']
|
|
|
+]);
|
|
|
+_conditions.push([
|
|
|
+ ['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.push([
|
|
|
+ ['bold', 'Osoba do kontaktu ze strony Zamawiającego:'],
|
|
|
+ ['tag', 'newline'],
|
|
|
+ ['field', '', 'ORDER_CONTACT_PERSON', 'text']
|
|
|
+]);
|
|
|
+_conditions.push([
|
|
|
+ ['bold', 'Osoby upoważnione do odbioru towaru:'],
|
|
|
+ ['tag', 'newline'],
|
|
|
+ ['field', '', 'ORDER_APPROVE_PERSON', 'text']
|
|
|
+]);
|
|
|
+_conditions.push([
|
|
|
+ ['bold', 'Osoba uprawniona do kontaktu ze strony Dostawcy: '],
|
|
|
+ ['field', '', 'DELIVERY_CONTACT_PERSON', 'string']
|
|
|
+]);
|
|
|
+_conditions.push([
|
|
|
+ ['text', 'Za datę zapłaty uważa się datę obciążenia rachunku bankowego Zamawiającego.']
|
|
|
+]);
|
|
|
+_conditions.push([
|
|
|
+ ['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.push([
|
|
|
+ ['text', 'Wierzytelności wynikające z niniejszego zamówienia nie mogą być przenoszone przez Dostawcę na osoby trzecie bez uprzedniej, pisemnej zgody Zamawiającego.']
|
|
|
+]);
|
|
|
|
|
|
jQuery("#widget-orders").p5_Orders({
|
|
|
year: '2016',
|
|
|
- deal: {
|
|
|
+ idOrder: '<?php echo V::get('id', '', $data); ?>',
|
|
|
+ deal: {
|
|
|
+ type: 'zamowienie',
|
|
|
label: 'Zamówienie',
|
|
|
- nr: '<?php echo V::get('obcy_nr_sprawy', 'nr zamówienia / inicjały zamawiającego / numer budowy / miesiąc / rok', $data); ?>',
|
|
|
+ nr: '<?php echo V::get('ORDER_LABEL', 'nr zamówienia / inicjały zamawiającego / numer budowy / miesiąc / rok', $data); ?>',
|
|
|
showOfferLabel: true,
|
|
|
offerLabel: 'Zamawiający zleca Dostawcy dostawę poniższych materiałów na wskazanych poniżej warunkach. Zgodnie z ofertą',
|
|
|
- offerNr: '<?php echo V::get('nr_oferty', '..................', $data); ?>',
|
|
|
- offerDate: '<?php echo V::get('data_oferty', '..................', $data); ?>',
|
|
|
- date: '13-05-2016',
|
|
|
- city: 'Gdańsk'
|
|
|
+ offerNr: '',
|
|
|
+ targetName: '',
|
|
|
+ statement: 'NINIEJSZYM OŚWIADCZAM, ŻE DOSTAWCA PRZYJMUJE ZAMÓWIENIE DO REALIZACJI NA POWYŻSZYH WARUNKACH:',
|
|
|
+ conditions: _conditions,
|
|
|
+ condLabel: 'WARUNKI REALIZACJI ZAMÓWIENIA',
|
|
|
+ date: '<?php echo V::get('ORDER_DATE', date("Y-m-d"), $data); ?>',
|
|
|
+ city: '<?php echo V::get('ORDER_CITY', 'Gdańsk', $data); ?>'
|
|
|
+ },
|
|
|
+ fields: _fields,
|
|
|
+ mapFields: {
|
|
|
+ deal: {
|
|
|
+ nr: 'ORDER_LABEL',
|
|
|
+ offerNr: 'OFFER_NR',
|
|
|
+ targetName: '_nr_budowy'// TODO: nazwa budowy?
|
|
|
+ },
|
|
|
+ comB: {
|
|
|
+ name: 'COMPANY_NAME',
|
|
|
+ address: 'COMPANY_ADDRESS',
|
|
|
+ postCode: 'COMPANY_POST_CODE',
|
|
|
+ city: 'COMPANY_CITY',
|
|
|
+ nip: 'COMPANY_NIP',
|
|
|
+ contactPerson: 'COMPANY_CONTACT_PERSON',
|
|
|
+ contactTel: 'COMPANY_CONTACT_TEL',
|
|
|
+ contactMail: 'COMPANY_CONTACT_MAIL'
|
|
|
+ }
|
|
|
},
|
|
|
comA: {
|
|
|
label: 'Zamawiający',
|
|
|
@@ -442,52 +884,79 @@ jQuery("#widget-orders").p5_Orders({
|
|
|
city: 'Gdańsk',
|
|
|
nip: '583-315-47-35'
|
|
|
},
|
|
|
- comB: {
|
|
|
+ comB: {
|
|
|
label: 'Dostawca',
|
|
|
- name: '<?php echo V::get('dostawca_name', '.........................', $data); ?>',
|
|
|
- address: '<?php echo V::get('dostawca_address', '.........................', $data); ?>',
|
|
|
- postCode: '<?php echo V::get('dostawca_post_code', '......', $data); ?>',
|
|
|
- city: '<?php echo V::get('dostawca_city', '.........', $data); ?>',
|
|
|
- nip: '<?php echo V::get('dostawca_nip', '.........................', $data); ?>'
|
|
|
+ name: '',
|
|
|
+ address: '',
|
|
|
+ postCode: '',
|
|
|
+ city: '',
|
|
|
+ nip: ''
|
|
|
},
|
|
|
+ backLink: 'index.php?_route=UrlAction_ProjektyProNetMediaZamZlec',
|
|
|
+ printLink: 'index.php?_route=UrlAction_ProjektyProNetMediaZamZlec&_task=zamowienie&_print=1',
|
|
|
+ printIdOrderArg: 'id',
|
|
|
projectInfo: _projectInfo,
|
|
|
pos: _pos,
|
|
|
notes: _notes,
|
|
|
mode: _mode,
|
|
|
- save: function(data, callback) {
|
|
|
- var orderPosList, idOrder;
|
|
|
- try {
|
|
|
- console.log('#widget-orders/Orders::save: data:', data);
|
|
|
- if (!data || !('orderPosList' in data)) throw "Brak danych do zapisania";
|
|
|
- orderPosList = data.orderPosList || [];
|
|
|
- idOrder = data.idOrder || -1;
|
|
|
-
|
|
|
- var req = superagent
|
|
|
- .post(_saveLink)
|
|
|
- .type('json') // header ĺapplication/x-www-form-urlencoded' requires type('form');
|
|
|
- .send({orderPosList: orderPosList, idOrder: idOrder})
|
|
|
- .set('Accept', 'application/json')
|
|
|
- .end(function(err, res) {
|
|
|
- if(_dbg)console.log('#widget-orders/Orders::save: res:', res, 'res.body:', res.body);
|
|
|
- if (err || !res.ok) {
|
|
|
- jQuery(document).trigger('DBG:notify', {type: 'warning', msg: 'Req error', err: err});
|
|
|
- } else {
|
|
|
- if ('application/json' !== res.type) {
|
|
|
- jQuery(document).trigger('DBG:notify', {type: 'warning', msg: 'Wrong response type - required json. ' + res.text});
|
|
|
- return;
|
|
|
+ actions: {
|
|
|
+ save: function(data, callback) {
|
|
|
+ var orderPosList, idOrder;
|
|
|
+ try {
|
|
|
+ console.log('#widget-orders/Orders::save: data:', data);
|
|
|
+ if (!data || !('orderPosList' in data)) throw "Brak danych do zapisania";
|
|
|
+ var orderPosList = data.orderPosList || [];
|
|
|
+ var fields = data.fields || {};
|
|
|
+ var idOrder = data.idOrder || -1;
|
|
|
+
|
|
|
+ var req = superagent
|
|
|
+ .post(_saveLink)
|
|
|
+ .type('json') // header ĺapplication/x-www-form-urlencoded' requires type('form');
|
|
|
+ .send({
|
|
|
+ type: data.type || 'zamowienie',
|
|
|
+ orderPosList: orderPosList,
|
|
|
+ toDeletePosList: data.toDeletePosList || {},
|
|
|
+ fields: fields,
|
|
|
+ idOrder: idOrder
|
|
|
+ })
|
|
|
+ .set('Accept', 'application/json')
|
|
|
+ .end(function(err, res) {
|
|
|
+ if(_dbg)console.log('#widget-orders/Orders::save: res:', res, 'res.body:', res.body);
|
|
|
+ if (err || !res.ok) {
|
|
|
+ jQuery(document).trigger('DBG:notify', {type: 'warning', msg: 'Req error', err: err});
|
|
|
+ } else {
|
|
|
+ if ('application/json' !== res.type) {
|
|
|
+ jQuery(document).trigger('DBG:notify', {type: 'warning', msg: 'Wrong response type - required json. ' + res.text});
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ jQuery(document).trigger('DBG:notify', {type: 'success', msg: 'res.status:' + res.status + '. res.body:' + JSON.stringify(res.body)});
|
|
|
+ callback(null, {
|
|
|
+ message: 'Saved',
|
|
|
+ type: 'success',
|
|
|
+ orderPosList: res.body.orderPosList,
|
|
|
+ fields: res.body.fields,
|
|
|
+ idOrder: res.body.idOrder
|
|
|
+ });
|
|
|
}
|
|
|
- jQuery(document).trigger('DBG:notify', {type: 'success', msg: 'res.status:' + res.status + '. res.body:' + JSON.stringify(res.body)});
|
|
|
- callback(null, {message: 'Saved', type: 'success', orderPosList: res.body.orderPosList, idOrder: res.body.idOrder});
|
|
|
- }
|
|
|
- req = null;
|
|
|
- });
|
|
|
- } catch (e) {
|
|
|
- callback(e);
|
|
|
- }
|
|
|
+ req = null;
|
|
|
+ });
|
|
|
+ } catch (e) {
|
|
|
+ callback(e);
|
|
|
+ }
|
|
|
+ },
|
|
|
},
|
|
|
dbg: true
|
|
|
});
|
|
|
</script>
|
|
|
+<script>
|
|
|
+jQuery(document).ready(function() {
|
|
|
+ var _mode = '<?php echo (V::get('_print', '', $_REQUEST))? 'print' : 'view'; ?>';
|
|
|
+ document.title = 'zamowienie_nr_<?php echo V::get('ORDER_LABEL', 'nr zamówienia / inicjały zamawiającego / numer budowy / miesiąc / rok', $data); ?>';
|
|
|
+ if ('print' == _mode) {
|
|
|
+ window.print();
|
|
|
+ }
|
|
|
+})
|
|
|
+</script>
|
|
|
|
|
|
<?php
|
|
|
exit;
|
|
|
@@ -499,6 +968,17 @@ jQuery("#widget-orders").p5_Orders({
|
|
|
ALTER TABLE `CRM_LISTA_ZASOBOW_OFFERS` ADD `ID_ORDER` int(11) NOT NULL DEFAULT 0;
|
|
|
ALTER TABLE `CRM_LISTA_ZASOBOW_OFFERS_HIST` ADD `ID_ORDER` varchar(11) NOT NULL DEFAULT 'N/S;';
|
|
|
|
|
|
+ALTER TABLE `CRM_LISTA_ZASOBOW_ORDERS` ADD `ORDER_CONTACT_PERSON` varchar(255) NOT NULL DEFAULT '';
|
|
|
+ALTER TABLE `CRM_LISTA_ZASOBOW_ORDERS_HIST` ADD `ORDER_CONTACT_PERSON` varchar(255) NOT NULL DEFAULT 'N/S;';
|
|
|
+ALTER TABLE `CRM_LISTA_ZASOBOW_ORDERS` ADD `ORDER_APPROVE_PERSON` varchar(255) NOT NULL DEFAULT '';
|
|
|
+ALTER TABLE `CRM_LISTA_ZASOBOW_ORDERS_HIST` ADD `ORDER_APPROVE_PERSON` varchar(255) NOT NULL DEFAULT 'N/S;';
|
|
|
+ALTER TABLE `CRM_LISTA_ZASOBOW_ORDERS` ADD `DELIVERY_CONTACT_PERSON` varchar(255) NOT NULL DEFAULT '';
|
|
|
+ALTER TABLE `CRM_LISTA_ZASOBOW_ORDERS_HIST` ADD `DELIVERY_CONTACT_PERSON` varchar(255) NOT NULL DEFAULT 'N/S;';
|
|
|
+
|
|
|
+$sqlFieldsList[] = 'ORDER_CONTACT_PERSON';
|
|
|
+$sqlFieldsList[] = 'ORDER_APPROVE_PERSON';
|
|
|
+$sqlFieldsList[] = 'DELIVERY_CONTACT_PERSON';
|
|
|
+
|
|
|
CREATE TABLE IF NOT EXISTS `CRM_LISTA_ZASOBOW_ORDERS` (
|
|
|
`ID` int(11) NOT NULL AUTO_INCREMENT,
|
|
|
`ID_COMPANIES` int(11) NOT NULL DEFAULT 0,
|
|
|
@@ -519,16 +999,27 @@ CREATE TABLE IF NOT EXISTS `CRM_LISTA_ZASOBOW_ORDERS` (
|
|
|
`A_ADM_COMPANY` varchar(100) NOT NULL DEFAULT '',
|
|
|
`A_CLASSIFIED` varchar(100) NOT NULL DEFAULT '',
|
|
|
`NR` varchar(255) NOT NULL DEFAULT '',
|
|
|
- `COMPANY_NIP` varchar(32) NOT NULL DEFAULT '',
|
|
|
`COMPANY_NAME` varchar(255) NOT NULL DEFAULT '',
|
|
|
`COMPANY_ADDRESS` varchar(255) NOT NULL DEFAULT '',
|
|
|
+ `COMPANY_POST_CODE` varchar(6) NOT NULL DEFAULT '',
|
|
|
+ `COMPANY_CITY` varchar(255) NOT NULL DEFAULT '',
|
|
|
+ `COMPANY_NIP` varchar(32) NOT NULL DEFAULT '',
|
|
|
+ `COMPANY_CONTACT_PERSON` varchar(64) NOT NULL DEFAULT '',
|
|
|
+ `COMPANY_CONTACT_TEL` varchar(32) NOT NULL DEFAULT '',
|
|
|
+ `COMPANY_CONTACT_MAIL` varchar(64) NOT NULL DEFAULT '',
|
|
|
`OFFER_DATE` date DEFAULT NULL,
|
|
|
`OFFER_NR` varchar(255) NOT NULL DEFAULT '',
|
|
|
`ORDER_TYPE` varchar(255) NOT NULL DEFAULT '',
|
|
|
`DELIVERY_DATE` date DEFAULT NULL,
|
|
|
+ `DELIVERY_TYPE` varchar(255) DEFAULT '',
|
|
|
+ `DELIVERY_LOCATION` varchar(255) DEFAULT '',
|
|
|
`EXECUTION_START_DATE` date DEFAULT NULL,
|
|
|
`EXECUTION_END_DATE` date DEFAULT NULL,
|
|
|
`CASH_PENALTY` varchar(255) NOT NULL DEFAULT '',
|
|
|
+ `ORDER_CONTACT_PERSON` varchar(255) NOT NULL DEFAULT '',
|
|
|
+ `ORDER_APPROVE_PERSON` varchar(255) NOT NULL DEFAULT '',
|
|
|
+ `DELIVERY_CONTACT_PERSON` varchar(255) NOT NULL DEFAULT '',
|
|
|
+
|
|
|
`LOCATION` date DEFAULT NULL,
|
|
|
`NOTES` varchar(1000) NOT NULL DEFAULT '',
|
|
|
PRIMARY KEY (`ID`)
|
|
|
@@ -556,17 +1047,28 @@ CREATE TABLE IF NOT EXISTS `CRM_LISTA_ZASOBOW_ORDERS_HIST` (
|
|
|
`A_ADM_COMPANY` varchar(255) NOT NULL DEFAULT 'N/S;',
|
|
|
`A_CLASSIFIED` varchar(255) NOT NULL DEFAULT 'N/S;',
|
|
|
`NR` varchar(255) NOT NULL DEFAULT 'N/S;'
|
|
|
- `COMPANY_NIP` varchar(32) NOT NULL DEFAULT 'N/S;'
|
|
|
`COMPANY_NAME` varchar(255) NOT NULL DEFAULT 'N/S;'
|
|
|
`COMPANY_ADDRESS` varchar(255) NOT NULL DEFAULT 'N/S;'
|
|
|
+ `COMPANY_POST_CODE` varchar(6) NOT NULL DEFAULT 'N/S;'
|
|
|
+ `COMPANY_CITY` varchar(255) NOT NULL DEFAULT 'N/S;'
|
|
|
+ `COMPANY_NIP` varchar(32) NOT NULL DEFAULT 'N/S;'
|
|
|
+ `COMPANY_CONTACT_PERSON` varchar(64) NOT NULL DEFAULT 'N/S;'
|
|
|
+ `COMPANY_CONTACT_TEL` varchar(32) NOT NULL DEFAULT 'N/S;'
|
|
|
+ `COMPANY_CONTACT_MAIL` varchar(64) NOT NULL DEFAULT 'N/S;'
|
|
|
`OFFER_DATE` varchar(10) NOT NULL DEFAULT 'N/S;'
|
|
|
`OFFER_NR` varchar(255) NOT NULL DEFAULT 'N/S;'
|
|
|
`ORDER_TYPE` varchar(255) NOT NULL DEFAULT 'N/S;'
|
|
|
`DELIVERY_DATE` varchar(255) NOT NULL DEFAULT 'N/S;'
|
|
|
- `EXECUTION_START_DATE` varchar(10) NOT NULL DEFAULT 'N/S;'
|
|
|
- `EXECUTION_END_DATE` varchar(10) NOT NULL DEFAULT 'N/S;'
|
|
|
- `CASH_PENALTY` varchar(255) NOT NULL DEFAULT 'N/S;'
|
|
|
- `LOCATION` varchar(10) NOT NULL DEFAULT 'N/S;'
|
|
|
+ `DELIVERY_TYPE` varchar(255) DEFAULT 'N/S;',
|
|
|
+ `DELIVERY_LOCATION` varchar(255) DEFAULT 'N/S;',
|
|
|
+ `EXECUTION_START_DATE` varchar(10) NOT NULL DEFAULT 'N/S;',
|
|
|
+ `EXECUTION_END_DATE` varchar(10) NOT NULL DEFAULT 'N/S;',
|
|
|
+ `CASH_PENALTY` varchar(255) NOT NULL DEFAULT 'N/S;',
|
|
|
+ `ORDER_CONTACT_PERSON` varchar(255) NOT NULL DEFAULT 'N/S;',
|
|
|
+ `ORDER_APPROVE_PERSON` varchar(255) NOT NULL DEFAULT 'N/S;',
|
|
|
+ `DELIVERY_CONTACT_PERSON` varchar(255) NOT NULL DEFAULT 'N/S;',
|
|
|
+
|
|
|
+ `LOCATION` varchar(10) NOT NULL DEFAULT 'N/S;',
|
|
|
`NOTES` varchar(1000) NOT NULL DEFAULT 'N/S;',
|
|
|
PRIMARY KEY (`ID`),
|
|
|
KEY `ID_USERS2` (`ID_USERS2`)
|
|
|
@@ -610,4 +1112,41 @@ CREATE VIEW `CRM_LISTA_ZASOBOW_ORDERS_summary_view` AS SELECT o.`ID`
|
|
|
GROUP BY o.`ID`
|
|
|
;
|
|
|
|
|
|
+-- ADD ORDER_NR to KORESP
|
|
|
+ALTER TABLE `IN7_DZIENNIK_KORESP_HIST` ADD `ORDER_NR` VARCHAR(32) NOT NULL DEFAULT 'N/S;';
|
|
|
+ALTER TABLE `IN7_DZIENNIK_KORESP` ADD `ORDER_NR` VARCHAR(32) NOT NULL DEFAULT '';
|
|
|
+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;
|
|
|
+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;
|
|
|
+
|
|
|
+-- ADD missing fields in CRM_LISTA_ZASOBOW_OFFERS
|
|
|
+-- 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.';
|
|
|
+ALTER TABLE `CRM_LISTA_ZASOBOW_OFFERS_HIST` ADD `OFFER_NAME` VARCHAR(255) NOT NULL DEFAULT 'N/S;';
|
|
|
+ALTER TABLE `CRM_LISTA_ZASOBOW_OFFERS` ADD `OFFER_NAME` VARCHAR(255) NOT NULL DEFAULT '';
|
|
|
+ALTER TABLE `CRM_LISTA_ZASOBOW_OFFERS_HIST` ADD `OFFER_QUANTITY` VARCHAR(16) NOT NULL DEFAULT 'N/S;';
|
|
|
+ALTER TABLE `CRM_LISTA_ZASOBOW_OFFERS` ADD `OFFER_QUANTITY` decimal(10,4) NOT NULL DEFAULT 0;
|
|
|
+ALTER TABLE `CRM_LISTA_ZASOBOW_OFFERS_HIST` ADD `OFFER_UNIT` VARCHAR(16) NOT NULL DEFAULT 'N/S;';
|
|
|
+ALTER TABLE `CRM_LISTA_ZASOBOW_OFFERS` ADD `OFFER_UNIT` VARCHAR(16) NOT NULL DEFAULT '';
|
|
|
+
|
|
|
+-- ADD zatwierdzony przez
|
|
|
+ALTER TABLE `CRM_LISTA_ZASOBOW_ORDERS_HIST` ADD `APPROVED_BY` VARCHAR(64) NOT NULL DEFAULT 'N/S;';
|
|
|
+ALTER TABLE `CRM_LISTA_ZASOBOW_ORDERS` ADD `APPROVED_BY` VARCHAR(64) NOT NULL DEFAULT ''; -- ZATWIERDZONE PRZEZ
|
|
|
+ALTER TABLE `CRM_LISTA_ZASOBOW_ORDERS_HIST` ADD `APPROVE_STATUS` VARCHAR(32) NOT NULL DEFAULT 'N/S;';
|
|
|
+ALTER TABLE `CRM_LISTA_ZASOBOW_ORDERS` ADD `APPROVE_STATUS` enum('WERSJA_ROBOCZA', 'OCZEKUJE_ZATWIERDZENIA', 'ZATWIERDZONE', 'ODRZUCONE') NOT NULL DEFAULT 'WERSJA_ROBOCZA';
|
|
|
+
|
|
|
+
|
|
|
+1213 12 14/AS/13/SP/2014/IV/2016 14 / AS / 13/SP/2014 / IV / 2016
|
|
|
+1292 30 34/JL/16/SP/2015/V/2016 34 / JL / 16/SP/2015 / V / 2016
|
|
|
+1259 37 24/JT/23/SP/2015/V/2016 24 / JT / 23/SP/2015 / V / 2016
|
|
|
+1210 44 1/AS/2/2016/III/2016 1 / AS / 2/ 2016 / III / 2016
|
|
|
+1211 44 1/AS/2/2016/III/2016 1 / AS / 2/ 2016 / III / 2016
|
|
|
+1212 44 9/JT/2/SP/2016/IV/2016 9 / JT / 2/SP/2016 / IV / 2016
|
|
|
+1215 44 10/JT/2/SP/2016/IV/2016 10 / JT / 2/SP/2016 / IV / 2016
|
|
|
+1216 44 11/JT/2/SP/2016/V/2016 11 / JT / 2/SP/2016 / V / 2016
|
|
|
+1214 45 8/AS/3/SP/2016/IV/2016 8 / AS / 3/SP/2016 / IV / 2016
|
|
|
+1218 46 25/AS/04/SP/2016/V/2016 25 / AS / 04/SP/2016 / V / 2016
|
|
|
+1255 46 11/RG/04/SP/2016/III/2016 11 / RG / 04/SP/2016 / III / 2016
|
|
|
+1270 46 27/RG/04/SP/2016/V/2016 27 / RG / 04/SP/2016 / V / 2016
|
|
|
+1219 50 2/MK/8/SP/2016/V/2016 2 / MK / 8/SP/2016 / V / 2016
|
|
|
+1223 50 3/AS/8/SP/2016/V/2016 3 / AS / 8/SP/2016 / V / 2016
|
|
|
+
|
|
|
*/
|