setTable('order_payment'); } public function importOrdersInfoFromXml($sourceFile, $origFilename = null, $domain = "apps.supersamsev.ru") { $result = [ 'count' => 0, 'reason' => '' ]; if (!empty($sourceFile) && is_file($sourceFile) && file_exists($sourceFile)) { $sheetsTable = TableRegistry::getTableLocator()->get('CutSheets'); $orderPaymentTable = TableRegistry::getTableLocator()->get('OrderPayment'); $xml = @simplexml_load_file($sourceFile, 'SimpleXMLIterator'); if (!empty($xml)) { $isErrorOccurred = false; if (!isset($xml->orderid) || !isset($xml->orderid->invoice_no)) { $result['reason'] = 'Неверный формат файла.'; $isErrorOccurred = true; } else { $orderYear = date('Y'); if (!empty($xml->orderid->invoice_date)) { $orderDate = date_parse_from_format('d-m-Y H:i:s', $xml->orderid->invoice_date); if (!empty($orderDate) && !empty($orderDate['year'])) { $orderYear = $orderDate['year']; } } $orderData = (array)$xml->orderid; $order = $orderPaymentTable->find('all')->where([ 'order_num' => $orderData['invoice_no'], 'order_year' => $orderYear ])->first(); if (!empty($order) && !empty($order['payment'])) { //не принимаем обновления для уже оплаченных счетов $settingsTable = TableRegistry::getTableLocator()->get('Settings'); $smsRuApiKey = $settingsTable->find()->where([ 'key' => 'smsRuApiKey', 'group' => 'global' ])->first(); if (!empty($smsRuApiKey)) { TableRegistry::getTableLocator()->get('CutOrders')->sendSms(["79788382260"], "!!!Счёт " . $orderData['invoice_no'] . " выставлен после оплаты", $smsRuApiKey->value, ""); } } else { if (!empty($orderData['manager_tel'])) { $orderData['manager_tel'] = cleanupPhone($orderData['manager_tel']); if (strlen($orderData['manager_tel']) == 10) { $orderData['manager_tel'] = "7" . $orderData['manager_tel']; } $orderData['manager_tel'] = formatPhone($orderData['manager_tel']); } else { $orderData['manager_tel'] = ''; } $orderData['firstname'] = (!empty($orderData['firstname']) ? $orderData['firstname'] : ''); $orderData['lastname'] = (!empty($orderData['lastname']) ? $orderData['lastname'] : ''); $name = []; if (!empty($orderData['firstname'])) { $name[] = $orderData['firstname']; } if (!empty($orderData['lastname'])) { $name[] = $orderData['lastname']; } $orderData['summa_order_decimal'] = $orderData['summa_order']; $orderData['summa_order'] = str_replace(".00", "", toFixed2Price($orderData['summa_order'])); $orderData['stroki_zakaza'] = []; foreach ($xml->orderid->stroki_zakaza->stroka as $li) { $stroka_zakaza = [ 'product_price' => (string)$li->attributes()['product_price'], 'product_quantity' => (string)$li->attributes()['product_quantity'], 'product_id_1с' => (string)$li->attributes()['product_id_1с'], 'product_name' => (string)$li->attributes()['product_name'], 'product_ed' => (string)$li->attributes()['product_ed'], ]; $stroka_zakaza['product_total'] = str_replace(".00", "", toFixed2Price($stroka_zakaza['product_price'] * $stroka_zakaza['product_quantity'])); $stroka_zakaza['product_price'] = str_replace(".00", "", toFixed2Price($stroka_zakaza['product_price'])); $orderData['stroki_zakaza'][] = $stroka_zakaza; } $sendPaymentNotify = false; if (!empty($order)) { if (empty($order['paid_date'])) { $sendPaymentNotify = true; } if (!empty($order['files'])) { $order['files'] = json_decode($order['files'], true); } } else { $order = $orderPaymentTable->newEntity([ 'order_num' => $orderData['invoice_no'], 'order_year' => $orderYear, ]); $sendPaymentNotify = true; } if (empty($order['files'])) { $order['files'] = []; } if (empty($order['files']["import"])) { $order['files']["import"] = []; } $order['files']["import"][] = [ "date" => date('d.m.Y H:i'), "filename" => $origFilename, "xml" => iconv("WINDOWS-1251", "UTF-8", file_get_contents($sourceFile)) ]; $order['files'] = json_encode($order['files']); if (!empty($orderData['telephone'])) { $order->telephone = cleanupPhone($orderData['telephone']); if (strlen($order->telephone) == 10) { $order->telephone = "7" . $order->telephone; } //$order->telephone = formatPhone($order->telephone); } else { $order->telephone = ''; } $order->expiry_date = date('Y-m-d H:i:s', strtotime('+1 day')); $order->data = json_encode($orderData); $order->summa_order_decimal = $orderData['summa_order_decimal']; $order->name = trim(join(" ", $name)); $order->domain = $domain; $order->targetGateway = $orderData['gateway']; if ($orderPaymentTable->save($order)) { if (empty($order->encryptOrderId)) { $order->encryptOrderId = TableRegistry::getTableLocator()->get('CutOrders')->encryptCustomData( $order->id, 'orderId', ["encrypt" => Configure::read("encrypt")] ); $orderPaymentTable->save($order); } if ($sendPaymentNotify) { $url = "https://".$domain."/order-payment/" . $order->encryptOrderId; $mailBody = ''; $subjectCompanyName = "СуперСам"; $bodyManagerCompanyName = "компании СуперСам"; switch ($domain) { case "apps.prometeysev.ru": $subjectCompanyName = "ООО ТЦ \"Прометей\""; $bodyManagerCompanyName = "ООО ТЦ \"Прометей\""; break; } $mailBody .= "

Добрый день, " . $orderData['firstname'] . " " . $orderData['lastname'] . "

Менеджером " . $orderData['invoice_manager'] . " " . $bodyManagerCompanyName . " сформированы счета на оплату " . htmlentities($orderData['invoice_no']) . "

Посмотреть детали счета и произвости оплату можно по ссылке:
" . htmlentities($url) . ""; $mailBodyFooter = ''; $mail = TableRegistry::getTableLocator()->get('CutOrders')->configurePHPMailer([], $subjectCompanyName . " " . $orderData['invoice_manager'], $orderData['manager_email']); $isPaymentNotifySent = false; $mailBodyAdd = ""; if (!empty($orderData['email'])) { $orderData['email'] = trim(cleanupEmail($orderData['email'])); if (filter_var($orderData['email'], FILTER_VALIDATE_EMAIL)) { $mail->addAddress(trim($orderData['email'])); //$mail->addBCC(trim($orderData['manager_email'])); //$mail->addBCC("sbtestemail789@gmail.com"); $mail->Subject = "Счет на оплату " . htmlentities($orderData['invoice_no']); $mail->Body = $mailBody . $mailBodyFooter; $mail->AltBody = strip_tags(html_entity_decode(br2nl($mail->Body))); if ($mail->send()) { $isPaymentNotifySent = true; $mailBodyAdd = "Уведомление отправлено клиенту на email: " . $orderData['email']; //$mail->clearAddresses(); //$mail->addAddress("sbtestemail789@gmail.com"); //$mail->send(); } } } if (!$isPaymentNotifySent && !empty($order->telephone)) { $settingsTable = TableRegistry::getTableLocator()->get('Settings'); $smsRuApiKey = $settingsTable->find()->where([ 'key' => 'smsRuApiKey', 'group' => 'global' ])->first(); if (!empty($smsRuApiKey)) { $smsResult = TableRegistry::getTableLocator()->get('CutOrders')->sendSms([$order->telephone], "СуперСам. Счёт " . $orderData['invoice_no'] . ", оплата " . $url, $smsRuApiKey->value, ""); if (!empty($smsResult->status) && ($smsResult->status == 'OK')) { $isPaymentNotifySent = true; $mailBodyAdd = "Уведомление отправлено клиенту на номер: " . formatPhone($order->telephone); } } //} } if ($isPaymentNotifySent) { $mail->Body = $mailBody . (!empty($mailBodyAdd) ? "

------------------

" . $mailBodyAdd : "") . $mailBodyFooter; $mail->AltBody = strip_tags(html_entity_decode(br2nl($mail->Body))); $mail->clearAddresses(); $mail->Subject = "счет из 1с " . htmlentities($orderData['invoice_no']) . ", " . $orderData['summa_order'] . "р."; $mail->addAddress("direktor@mail.supersamsev.ru"); $mail->addBCC("admin@mail.supersamsev.ru"); //$mail->addAddress("sbtestemail789@gmail.com"); $mail->addBCC("sbtestemail789@gmail.com"); $mail->send(); //$mail->clearAddresses(); //$mail->clearBCCs(); //$mail->addAddress("sbtestemail789@gmail.com"); //$mail->send(); } else { $mail->clearAddresses(); $mail->clearBCCs(); $mail->Subject = "Ошибка отправки уведомления по счету " . htmlentities($orderData['invoice_no']) . ", " . $orderData['summa_order'] . "р."; $mail->addAddress("sbtestemail789@gmail.com"); $mailBodyAdd = "Файл: " . $origFilename; $mail->Body = $mailBody . "

------------------

" . $mailBodyAdd . "

" . file_get_contents($sourceFile) ; if (!empty($smsResult->status)) { $mail->Body .= "

------------------

" . "sms код ошибки: " . $smsResult->status_code. "
"; $mail->Body .= "sms текст ошибки: " . $smsResult->status_text; } $mail->Body .= $mailBodyFooter; $mail->AltBody = strip_tags(html_entity_decode(br2nl($mail->Body))); $mail->send(); } } $result['count']++; } } } if (!$isErrorOccurred) { $sheetsTable->putImportFileToArchive($sourceFile, true, $origFilename); $result['deleteFtpFile'] = true; $result['count'] = 1; } } else { $result['reason'] = 'Файл импорта пустой.'; $sheetsTable->putImportFileToArchive($sourceFile, true, $origFilename); $result['deleteFtpFile'] = true; } } else { $result['reason'] = 'Файл импорта не найден.'; } return $result; } public function ftpOrderPaymentUploadErrorNotify($sourceFileContent, $origFilename = null, $orderData, $paymentType = "payment", $reason = "оплаты счета") { $mailBody = ''; $subjectCompanyName = "СуперСам"; switch ($orderData['domain']) { case "apps.prometeysev.ru": $subjectCompanyName = "ООО ТЦ \"Прометей\""; break; } $mailBody .= "
"; $mailBodyFooter = ''; $mail = TableRegistry::getTableLocator()->get('CutOrders')->configurePHPMailer([], $subjectCompanyName); $mail->clearAddresses(); $mail->clearBCCs(); $mail->Subject = "Ошибка выгрузки на фтп ".$reason." " . htmlentities($orderData['order_num']) . ", " . $orderData['summa_order_decimal'] . "р."; $mail->addAddress("yulya@mail.supersamsev.ru"); $mail->addCC("admin@mail.supersamsev.ru"); $mail->addBCC("sbtestemail789@gmail.com"); $mailBody .= '

Ссылка на оплату счета

Папка на фтп: /' . str_replace("apps.", "", $orderData['domain']) . '/' . ($paymentType == "payment" ? "acquiring-in" : "refund"). '

------------------

Файл: ' . $origFilename . "

" . htmlentities($sourceFileContent) ; $mailBody .= $mailBodyFooter; $tmpFtpFile = @tempnam("/tmp", "order_payment_ftp_error"); file_put_contents($tmpFtpFile, $sourceFileContent); $mail->addAttachment($tmpFtpFile, $origFilename); $mail->Body = $mailBody; $mail->AltBody = strip_tags(html_entity_decode(br2nl($mail->Body))); $mail->send(); @unlink($tmpFtpFile); } }