|
@@ -11,6 +11,11 @@ Lib::loadClass('UI');
|
|
|
class Route_UrlAction_ProjektyProNetMediaZamZlec extends RouteBase {// TODO: UrlActionBase @see Route_UrlAction
|
|
class Route_UrlAction_ProjektyProNetMediaZamZlec extends RouteBase {// TODO: UrlActionBase @see Route_UrlAction
|
|
|
|
|
|
|
|
public function handleAuth() {
|
|
public function handleAuth() {
|
|
|
|
|
+ if ('printZamowienie' == V::get('_task', '', $_GET)) {
|
|
|
|
|
+ session_write_close();
|
|
|
|
|
+ $this->printZamowieniePublicAction();
|
|
|
|
|
+ exit;
|
|
|
|
|
+ }
|
|
|
if (!User::logged()) {
|
|
if (!User::logged()) {
|
|
|
User::authByRequest();
|
|
User::authByRequest();
|
|
|
}
|
|
}
|
|
@@ -191,6 +196,37 @@ class Route_UrlAction_ProjektyProNetMediaZamZlec extends RouteBase {// TODO: Url
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+ public function printZamowieniePublicAction() {
|
|
|
|
|
+ $data = array();
|
|
|
|
|
+ {// auth by token
|
|
|
|
|
+ $id = V::get('id', 0, $_GET, 'int');
|
|
|
|
|
+ if ($id <= 0) die("Brak dostępu");
|
|
|
|
|
+ $token = V::get('token', '', $_GET);
|
|
|
|
|
+ if (empty($token)) die("Brak dostępu");
|
|
|
|
|
+ $email = V::get('email', '', $_GET);
|
|
|
|
|
+ if (empty($email)) die("Brak dostępu");
|
|
|
|
|
+
|
|
|
|
|
+ $data['id'] = $id;
|
|
|
|
|
+ $data = $this->setProps($data);
|
|
|
|
|
+ if (empty($data['id_project'])) die("Brak dostępu");
|
|
|
|
|
+
|
|
|
|
|
+ if ($this->generateOrderLinkToken($id, $email, $data['id_project']) != $token) die("Brak dostępu");
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ $_GET['_print'] = $_REQUEST['_print'] = 1;
|
|
|
|
|
+ UI::gora();
|
|
|
|
|
+ try {
|
|
|
|
|
+ $this->zamowienieView($data, $mode = 'print');
|
|
|
|
|
+ } catch (Exception $e) {
|
|
|
|
|
+ UI::alert('danger', "Error #" . $e->getCode() . "|" . $e->getLine() . ": " . $e->getMessage());
|
|
|
|
|
+ }
|
|
|
|
|
+ echo'</body></html>';
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ public function generateOrderLinkToken($id, $email, $id_project) {
|
|
|
|
|
+ return md5("pro-netmedia--{$id}--{$email}--{$id_project}");
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
public function zamowienieAction() {
|
|
public function zamowienieAction() {
|
|
|
UI::gora();
|
|
UI::gora();
|
|
|
if (1 != V::get('_print', '', $_GET)) UI::menu();
|
|
if (1 != V::get('_print', '', $_GET)) UI::menu();
|
|
@@ -263,6 +299,7 @@ class Route_UrlAction_ProjektyProNetMediaZamZlec extends RouteBase {// TODO: Url
|
|
|
$data['PAYMENT_TERM_DAYS_FV'] = V::get('PAYMENT_TERM_DAYS_FV', '60', $row);
|
|
$data['PAYMENT_TERM_DAYS_FV'] = V::get('PAYMENT_TERM_DAYS_FV', '60', $row);
|
|
|
$data['PAYMENT_METHOD'] = V::get('PAYMENT_METHOD', 'przelew', $row);
|
|
$data['PAYMENT_METHOD'] = V::get('PAYMENT_METHOD', 'przelew', $row);
|
|
|
$data['NOTES'] = V::get('NOTES', '', $row);
|
|
$data['NOTES'] = V::get('NOTES', '', $row);
|
|
|
|
|
+ $data['APPROVE_STATUS'] = V::get('APPROVE_STATUS', '', $row);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
$data['orderPosList'] = $this->fetchOrderPosList($sqlIdOrder);
|
|
$data['orderPosList'] = $this->fetchOrderPosList($sqlIdOrder);
|
|
@@ -307,7 +344,6 @@ class Route_UrlAction_ProjektyProNetMediaZamZlec extends RouteBase {// TODO: Url
|
|
|
}
|
|
}
|
|
|
if (!empty($data['id_company'])) $data['ID_COMPANIES'] = $data['id_company'];
|
|
if (!empty($data['id_company'])) $data['ID_COMPANIES'] = $data['id_company'];
|
|
|
if (!empty($data['id_project'])) $data['ID_PROJECT'] = $data['id_project'];
|
|
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;
|
|
return $data;
|
|
|
}
|
|
}
|
|
@@ -494,12 +530,12 @@ function submitZlecenie(fld) {
|
|
|
// }
|
|
// }
|
|
|
// })
|
|
// })
|
|
|
var orderNotes = jQuery(n).parent().find('.order-notes').text()
|
|
var orderNotes = jQuery(n).parent().find('.order-notes').text()
|
|
|
- zamZlec__editOrderNote(n, payload.props.idOrder, payload.props.label || '', orderNotes);
|
|
|
|
|
|
|
+ zamZlec__editOrderNote(n, payload.props.idOrder, payload.props.label || '', orderNotes)
|
|
|
});
|
|
});
|
|
|
|
|
|
|
|
function zamZlec__editOrderNote(n, idOrder, orderLabel, orderNotes) {
|
|
function zamZlec__editOrderNote(n, idOrder, orderLabel, orderNotes) {
|
|
|
var noteNode = n;
|
|
var noteNode = n;
|
|
|
- console.log('TODO: edit note for idOrder('+idOrder+') orderNotes', orderNotes);
|
|
|
|
|
|
|
+ console.log('TODO: edit note for idOrder('+idOrder+') orderNotes', orderNotes)
|
|
|
swal({
|
|
swal({
|
|
|
title: 'Uwagi do zamówienia',
|
|
title: 'Uwagi do zamówienia',
|
|
|
html: 'nr: "' + orderLabel + '" (id:'+idOrder+')',
|
|
html: 'nr: "' + orderLabel + '" (id:'+idOrder+')',
|
|
@@ -708,6 +744,60 @@ body { font-size:12px; line-height:1.3em }
|
|
|
exit;
|
|
exit;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+ public function sendToAjaxAction() {
|
|
|
|
|
+ Response::sendTryCatchJson(array($this, 'sendToAjax'), $args = 'JSON_FROM_REQUEST_BODY');
|
|
|
|
|
+ }
|
|
|
|
|
+ public function sendToAjax($args) {
|
|
|
|
|
+ $response = array();
|
|
|
|
|
+ $id = V::get('id', 0, $args, 'int');
|
|
|
|
|
+ if ($id <= 0) throw new Exception("Error Processing Request - missing id");
|
|
|
|
|
+ $email = V::get('email', '', $args, 'word');
|
|
|
|
|
+ if (empty($email)) throw new Exception("Error Processing Request - missing email");
|
|
|
|
|
+ // TODO: validate email address
|
|
|
|
|
+
|
|
|
|
|
+ $data['id'] = $id;
|
|
|
|
|
+ $data = $this->setProps($data);
|
|
|
|
|
+ if (empty($data['id_project'])) throw new Exception("Error Processing Request - missing project id");
|
|
|
|
|
+
|
|
|
|
|
+ $token = $this->generateOrderLinkToken($id, $email, $data['id_project']);
|
|
|
|
|
+
|
|
|
|
|
+ $orderStatus = '';
|
|
|
|
|
+ if ('ZATWIERDZONE' == $data['APPROVE_STATUS']) $orderStatus = 'Zatwierdzone';
|
|
|
|
|
+ else if ('ODRZUCONE' == $data['APPROVE_STATUS']) $orderStatus = 'Odrzucone';
|
|
|
|
|
+ else if ('OCZEKUJE_OSTATECZNEGO_ZATWIERDZENIA' == $data['APPROVE_STATUS']) $orderStatus = 'Oczekuje ostatecznego zatwierdzenia';
|
|
|
|
|
+ else if ('OCZEKUJE_ZATWIERDZENIA' == $data['APPROVE_STATUS']) $orderStatus = 'Oczekuje zatwierdzenia';
|
|
|
|
|
+ else if ('WERSJA_ROBOCZA' == $data['APPROVE_STATUS']) $orderStatus = 'Wersja robocza';
|
|
|
|
|
+
|
|
|
|
|
+ if (DBG::isActive()) $response['DBG__DATA'] = $data;
|
|
|
|
|
+ if (DBG::isActive()) $response['DBG__TOKEN'] = $token;
|
|
|
|
|
+ $link = Request::getPathUri() . "index.php?_route=UrlAction_ProjektyProNetMediaZamZlec";
|
|
|
|
|
+ $link .= "&_task=printZamowienie";
|
|
|
|
|
+ $link .= "&id={$id}";
|
|
|
|
|
+ $link .= "&email={$email}";
|
|
|
|
|
+ $link .= "&token={$token}";
|
|
|
|
|
+ if (DBG::isActive()) $response['DBG__LINK'] = $link;
|
|
|
|
|
+ $subject = "Zamówienie {$data['ORDER_LABEL']} - Pro-Net.Media S.A.";
|
|
|
|
|
+ $message = '<html><body>';
|
|
|
|
|
+ $message .= '<p><a href="'.$link.'">'."Zamówienie nr {$data['ORDER_LABEL']}".'</a></p>'."\n";
|
|
|
|
|
+ $message .= "<p>Status zamówienia: {$orderStatus}</p>\n";
|
|
|
|
|
+ $message .= "\n<p>Wiadomość została wygenerowana automatycznie, prosimy na nią nie odpowiadać.</p>";
|
|
|
|
|
+ $message .= "<p>Pro-Net.Media S.A.<br><a href=\"http://pro-netmedia.pl/\">pro-netmedia.pl</a></p>";
|
|
|
|
|
+ $message .= '</body></html>';
|
|
|
|
|
+ $headers = 'MIME-Version: 1.0' . "\r\n";
|
|
|
|
|
+ $headers .= "Content-Type: text/html; charset=UTF-8\r\n";
|
|
|
|
|
+ $headers .= 'From: "Pro-Net.Media S.A." <noreply@pro-netmedia.pl>' . "\r\n";
|
|
|
|
|
+ // $headers .= 'Bcc: piotrl86+zlecenie--pro-netmedia@gmail.com' . "\r\n";
|
|
|
|
|
+ // $email = 'piotrl86+dbg-orders-pro-netmedia@gmail.com';// TODO: RMME TEST
|
|
|
|
|
+ if (!mail($email, $subject, $message, $headers)) {
|
|
|
|
|
+ $response['msg'] = "Nie udało się wysłać wiadomości";
|
|
|
|
|
+ $response['type'] = "error";
|
|
|
|
|
+ } else {
|
|
|
|
|
+ $response['msg'] = "Wysłano wiadomość";
|
|
|
|
|
+ $response['type'] = "success";
|
|
|
|
|
+ }
|
|
|
|
|
+ return $response;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
public function updateOrderNoteAjaxAction() {
|
|
public function updateOrderNoteAjaxAction() {
|
|
|
Response::sendTryCatchJson(array($this, 'updateOrderNoteAjax'), $args = 'JSON_FROM_REQUEST_BODY');
|
|
Response::sendTryCatchJson(array($this, 'updateOrderNoteAjax'), $args = 'JSON_FROM_REQUEST_BODY');
|
|
|
}
|
|
}
|
|
@@ -728,7 +818,7 @@ body { font-size:12px; line-height:1.3em }
|
|
|
$response['order'] = array();
|
|
$response['order'] = array();
|
|
|
$response['order']['ID'] = $id;
|
|
$response['order']['ID'] = $id;
|
|
|
$response['order']['ORDER_NOTES'] = DB::getPDO()->fetchValue("select ORDER_NOTES from CRM_LISTA_ZASOBOW_ORDERS where ID = {$id}");
|
|
$response['order']['ORDER_NOTES'] = DB::getPDO()->fetchValue("select ORDER_NOTES from CRM_LISTA_ZASOBOW_ORDERS where ID = {$id}");
|
|
|
- $response['msg'] = "TODO: L." . __LINE__;
|
|
|
|
|
|
|
+ $response['msg'] = "Zmiany wprowadzono pomyślnie";
|
|
|
$response['type'] = "success";
|
|
$response['type'] = "success";
|
|
|
return $response;
|
|
return $response;
|
|
|
}
|
|
}
|
|
@@ -749,7 +839,7 @@ body { font-size:12px; line-height:1.3em }
|
|
|
$res->idOrder = V::get('idOrder', -1, $json, 'int');
|
|
$res->idOrder = V::get('idOrder', -1, $json, 'int');
|
|
|
$res->orderPosList = array();
|
|
$res->orderPosList = array();
|
|
|
$res->fields = new stdClass();
|
|
$res->fields = new stdClass();
|
|
|
- $res->DBG_DATA = $data;// TODO: DBG
|
|
|
|
|
|
|
+ if (DBG::isActive()) $res->DBG_DATA = $data;
|
|
|
if (!empty($json['fields'])) {
|
|
if (!empty($json['fields'])) {
|
|
|
$sqlFieldsList = array();
|
|
$sqlFieldsList = array();
|
|
|
$sqlFieldsList[] = 'ID_PROJECT';
|
|
$sqlFieldsList[] = 'ID_PROJECT';
|
|
@@ -979,8 +1069,9 @@ body { font-size:12px; line-height:1.3em }
|
|
|
}
|
|
}
|
|
|
// fetch from db - overwrite $orderPosList
|
|
// fetch from db - overwrite $orderPosList
|
|
|
DBG::_('DBG', '>1', 'data', $data, __CLASS_, __FUNCTION__, __LINE__);
|
|
DBG::_('DBG', '>1', 'data', $data, __CLASS_, __FUNCTION__, __LINE__);
|
|
|
|
|
+ $sendToLink = Request::getPathUri() . "index.php?_route=UrlAction_ProjektyProNetMediaZamZlec&_task=sendToAjax&id={$id_order}";
|
|
|
$saveLink = Request::getPathUri() . "index.php?_route=UrlAction_ProjektyProNetMediaZamZlec&_task=saveAjax&id={$id_order}";
|
|
$saveLink = Request::getPathUri() . "index.php?_route=UrlAction_ProjektyProNetMediaZamZlec&_task=saveAjax&id={$id_order}";
|
|
|
- $fields = $data;// TODO: only row fields?
|
|
|
|
|
|
|
+ $fields = $data;
|
|
|
?>
|
|
?>
|
|
|
<style type="text/css">
|
|
<style type="text/css">
|
|
|
body { font-size:12px; line-height:1.3em }
|
|
body { font-size:12px; line-height:1.3em }
|
|
@@ -1011,9 +1102,18 @@ body { font-size:12px; line-height:1.3em }
|
|
|
</div>
|
|
</div>
|
|
|
</div>
|
|
</div>
|
|
|
|
|
|
|
|
|
|
+<link rel="stylesheet" type="text/css" href="static/sweetalert2.min.css">
|
|
|
|
|
+<script src="static/sweetalert2.min.js"></script>
|
|
|
<script src="stuff/vendors.js"></script>
|
|
<script src="stuff/vendors.js"></script>
|
|
|
<script src="stuff/bundle.se_route_orders.js?_ver=0e59ff70<?php if (V::get('DBG_JS', '', $_GET)) : ?>&_ts=<?= time(); ?><?php endif; ?>"></script>
|
|
<script src="stuff/bundle.se_route_orders.js?_ver=0e59ff70<?php if (V::get('DBG_JS', '', $_GET)) : ?>&_ts=<?= time(); ?><?php endif; ?>"></script>
|
|
|
<script>
|
|
<script>
|
|
|
|
|
+(function() {
|
|
|
|
|
+
|
|
|
|
|
+var _showSendToLink = <?php echo ('ZATWIERDZONE' == $data['APPROVE_STATUS']) ? 'true' : 'false' ?>;
|
|
|
|
|
+var _sendToAutorEmail = '<?= DB::getPDO()->fetchValue("select u.EMAIL from CRM_LISTA_ZASOBOW_ORDERS o join ADMIN_USERS u on(u.ADM_ACCOUNT = o.A_RECORD_CREATE_AUTHOR) where o.ID={$id_order}"); ?>';
|
|
|
|
|
+var _sendToDealEmail = '<?= $data['COMPANY_CONTACT_MAIL']; ?>';
|
|
|
|
|
+var _sendToLinkLabel = "Wyślij";
|
|
|
|
|
+var _sendToLink = '<?= $sendToLink; ?>';
|
|
|
var _mode = '<?php echo $mode; ?>';
|
|
var _mode = '<?php echo $mode; ?>';
|
|
|
var _invoiceMessage = 'NA FAKTURZE VAT NALEŻY UMIESZCZAĆ CZYTELNY NR ZAMÓWIENIA';
|
|
var _invoiceMessage = 'NA FAKTURZE VAT NALEŻY UMIESZCZAĆ CZYTELNY NR ZAMÓWIENIA';
|
|
|
var _pos = <?php echo json_encode($orderPosList); ?>;
|
|
var _pos = <?php echo json_encode($orderPosList); ?>;
|
|
@@ -1115,7 +1215,7 @@ jQuery("#widget-orders").p5_Orders({
|
|
|
nr: 'ORDER_LABEL',
|
|
nr: 'ORDER_LABEL',
|
|
|
offerNr: 'OFFER_NR',
|
|
offerNr: 'OFFER_NR',
|
|
|
date: 'ORDER_DATE',
|
|
date: 'ORDER_DATE',
|
|
|
- targetName: '_nr_budowy'// TODO: nazwa budowy?
|
|
|
|
|
|
|
+ targetName: '_nr_budowy'
|
|
|
},
|
|
},
|
|
|
comB: {
|
|
comB: {
|
|
|
name: 'COMPANY_NAME',
|
|
name: 'COMPANY_NAME',
|
|
@@ -1197,9 +1297,75 @@ jQuery("#widget-orders").p5_Orders({
|
|
|
callback(e);
|
|
callback(e);
|
|
|
}
|
|
}
|
|
|
},
|
|
},
|
|
|
|
|
+ sendTo: orderView__sendTo
|
|
|
},
|
|
},
|
|
|
|
|
+ showSendToLink: _showSendToLink,
|
|
|
|
|
+ sendToLinkLabel: _sendToLinkLabel,
|
|
|
dbg: false
|
|
dbg: false
|
|
|
});
|
|
});
|
|
|
|
|
+
|
|
|
|
|
+function orderView__sendTo(idOrder) {
|
|
|
|
|
+ var htmlEmails = '<div style="text-align:left">';
|
|
|
|
|
+ var changeJs = "jQuery(this).parents('.swal2-content').next('.swal2-input').val(this.value)";
|
|
|
|
|
+ htmlEmails += '';
|
|
|
|
|
+ if (_sendToAutorEmail) htmlEmails += '<div class="radio"><label style="font-weight:normal"><input onclick="'+changeJs+'" type="radio" name="email" value="'+_sendToAutorEmail+'"> '+_sendToAutorEmail+' <i>(Autor)</i></label></div>';
|
|
|
|
|
+ if (_sendToDealEmail) htmlEmails += '<div class="radio"><label style="font-weight:normal"><input onclick="'+changeJs+'" type="radio" name="email" value="'+_sendToDealEmail+'"> '+_sendToDealEmail+' <i>(Dostawca)</i></label></div>';
|
|
|
|
|
+ htmlEmails += '<div class="radio"><label style="font-weight:normal"><input onclick="'+changeJs+'" type="radio" name="email" value=""> inny adres</label></div>';
|
|
|
|
|
+ htmlEmails += '</div>';
|
|
|
|
|
+ swal({
|
|
|
|
|
+ title: _sendToLinkLabel,
|
|
|
|
|
+ html: htmlEmails,
|
|
|
|
|
+ animation: false,
|
|
|
|
|
+ input: 'text',
|
|
|
|
|
+ inputPlaceholder: 'adres email',
|
|
|
|
|
+ inputValue: _sendToDealEmail,
|
|
|
|
|
+ showCancelButton: true,
|
|
|
|
|
+ confirmButtonText: 'Wyślij',
|
|
|
|
|
+ showLoaderOnConfirm: true,
|
|
|
|
|
+ showCloseButton: true,
|
|
|
|
|
+ preConfirm: function(email) {
|
|
|
|
|
+ <?php if(DBG::isActive()): ?>console.log('#widget-orders/Orders::sendTo: ...');<?php echo"\n";endif; ?>
|
|
|
|
|
+ return new Promise(function(resolve, reject) {
|
|
|
|
|
+ if (email.length > 255) reject('Przekroczono limit długości znaków')
|
|
|
|
|
+ var emailErrors = validate({email_value: email}, {email_value: {email: true, presence: true}});
|
|
|
|
|
+ if (emailErrors) {
|
|
|
|
|
+ <?php if(DBG::isActive()): ?>console.log('#widget-orders/Orders::sendTo: email validate errors:', emailErrors);<?php echo"\n";endif; ?>
|
|
|
|
|
+ reject("Błędny adres email")
|
|
|
|
|
+ return;
|
|
|
|
|
+ }
|
|
|
|
|
+ superagent
|
|
|
|
|
+ .post(_sendToLink)
|
|
|
|
|
+ .type('json') // header ĺapplication/x-www-form-urlencoded' requires type('form');
|
|
|
|
|
+ .send({
|
|
|
|
|
+ id: idOrder,
|
|
|
|
|
+ email: email
|
|
|
|
|
+ })
|
|
|
|
|
+ .set('Accept', 'application/json')
|
|
|
|
|
+ .end(function(err, res) {
|
|
|
|
|
+ <?php if(DBG::isActive()): ?>console.log('#widget-orders/Orders::sendTo: res:', res, 'res.body:', res.body);<?php echo"\n";endif; ?>
|
|
|
|
|
+ if (err || !res.ok) {
|
|
|
|
|
+ reject((res.body && res.body.msg) ? res.body.msg || "Request error" : "Request error")
|
|
|
|
|
+ } else {
|
|
|
|
|
+ if ('application/json' !== res.type) {
|
|
|
|
|
+ reject("Wrong response type - required json")
|
|
|
|
|
+ return
|
|
|
|
|
+ }
|
|
|
|
|
+ if (!res.body.msg) reject(res.body.msg || "Wystąpiły błędy")
|
|
|
|
|
+ resolve(res.body)
|
|
|
|
|
+ }
|
|
|
|
|
+ })
|
|
|
|
|
+ })
|
|
|
|
|
+ },
|
|
|
|
|
+ allowOutsideClick: false
|
|
|
|
|
+ }).then(function(body) {
|
|
|
|
|
+ <?php if(DBG::isActive()): ?>console.log('#widget-orders/Orders::sendTo: body:', body);<?php echo"\n";endif; ?>
|
|
|
|
|
+ // msg "wysłany pomyślnie"? (swal?)
|
|
|
|
|
+ }).catch(function(e) {
|
|
|
|
|
+ // eg. hit Cancel
|
|
|
|
|
+ })
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+})();
|
|
|
</script>
|
|
</script>
|
|
|
<script>
|
|
<script>
|
|
|
jQuery(document).ready(function() {
|
|
jQuery(document).ready(function() {
|