Просмотр исходного кода

added notify mail in Orders for pro-netmedia

Piotr Labudda 9 лет назад
Родитель
Сommit
b3dbae328d
2 измененных файлов с 173 добавлено и 7 удалено
  1. 173 7
      SE/se-lib/Route/UrlAction/ProjektyProNetMediaZamZlec.php
  2. 0 0
      SE/stuff/bundle.se_route_orders.js

+ 173 - 7
SE/se-lib/Route/UrlAction/ProjektyProNetMediaZamZlec.php

@@ -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() {

Разница между файлами не показана из-за своего большого размера
+ 0 - 0
SE/stuff/bundle.se_route_orders.js


Некоторые файлы не были показаны из-за большого количества измененных файлов