Отправка на почту
This commit is contained in:
parent
cb315a9fcf
commit
8c4ca42d3c
|
@ -1 +1,2 @@
|
||||||
/import
|
/import
|
||||||
|
/invoices
|
||||||
|
|
|
@ -0,0 +1,78 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
namespace app\commands;
|
||||||
|
|
||||||
|
use yii\console\Controller;
|
||||||
|
use yii\console\ExitCode;
|
||||||
|
|
||||||
|
use app\models\Invoice;
|
||||||
|
|
||||||
|
class TestController extends Controller
|
||||||
|
{
|
||||||
|
public function actionInvoice($buyer = 123123, $order = 0)
|
||||||
|
{
|
||||||
|
// Генерация счета
|
||||||
|
Invoice::generate($order, $this->renderPartial('/invoice/order/pattern', [
|
||||||
|
'buyer' => [
|
||||||
|
'id' => $buyer,
|
||||||
|
'info' => 'Неизвестно'
|
||||||
|
],
|
||||||
|
'order' => [
|
||||||
|
'id' => $order,
|
||||||
|
'date' => time(),
|
||||||
|
'entries' => [
|
||||||
|
[
|
||||||
|
'title' => 'Тестовое вхождение',
|
||||||
|
'amount' => [
|
||||||
|
'value' => 1,
|
||||||
|
'unit' => 'шт'
|
||||||
|
],
|
||||||
|
'cost' => [
|
||||||
|
'value' => 1000,
|
||||||
|
'unit' => 'руб'
|
||||||
|
],
|
||||||
|
'type' => 'supply'
|
||||||
|
],
|
||||||
|
[
|
||||||
|
'title' => 'Тестовое вхождение',
|
||||||
|
'amount' => [
|
||||||
|
'value' => 1,
|
||||||
|
'unit' => 'шт'
|
||||||
|
],
|
||||||
|
'cost' => [
|
||||||
|
'value' => 1000,
|
||||||
|
'unit' => 'руб'
|
||||||
|
],
|
||||||
|
'type' => 'supply'
|
||||||
|
],
|
||||||
|
[
|
||||||
|
'title' => 'Тестовое вхождение',
|
||||||
|
'amount' => [
|
||||||
|
'value' => 1,
|
||||||
|
'unit' => 'шт'
|
||||||
|
],
|
||||||
|
'cost' => [
|
||||||
|
'value' => 1000,
|
||||||
|
'unit' => 'руб'
|
||||||
|
],
|
||||||
|
'type' => 'supply'
|
||||||
|
],
|
||||||
|
[
|
||||||
|
'title' => 'Тестовое вхождение',
|
||||||
|
'amount' => [
|
||||||
|
'value' => 5,
|
||||||
|
'unit' => 'шт'
|
||||||
|
],
|
||||||
|
'cost' => [
|
||||||
|
'value' => 1000,
|
||||||
|
'unit' => 'руб'
|
||||||
|
],
|
||||||
|
'type' => 'supply'
|
||||||
|
]
|
||||||
|
]
|
||||||
|
]
|
||||||
|
]));
|
||||||
|
|
||||||
|
return ExitCode::OK;
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,9 +1,24 @@
|
||||||
<?php
|
<?php
|
||||||
|
|
||||||
return [
|
return [
|
||||||
|
'captcha' => [
|
||||||
|
'suppliers' => [
|
||||||
|
'public' => '',
|
||||||
|
'secret' => ''
|
||||||
|
]
|
||||||
|
],
|
||||||
|
'mail' => [
|
||||||
|
'system' => '',
|
||||||
|
'info' => ''
|
||||||
|
],
|
||||||
'dellin' => [
|
'dellin' => [
|
||||||
'nickname' => '',
|
'nickname' => '',
|
||||||
'password' => '',
|
'password' => '',
|
||||||
'key' => ''
|
'key' => ''
|
||||||
],
|
],
|
||||||
|
'cdek' => [
|
||||||
|
'nickname' => '',
|
||||||
|
'password' => '',
|
||||||
|
'key' => ''
|
||||||
|
],
|
||||||
];
|
];
|
||||||
|
|
|
@ -53,10 +53,15 @@ $config = [
|
||||||
],
|
],
|
||||||
'mailer' => [
|
'mailer' => [
|
||||||
'class' => 'yii\swiftmailer\Mailer',
|
'class' => 'yii\swiftmailer\Mailer',
|
||||||
// send all mails to a file by default. You have to set
|
'useFileTransport' => false,
|
||||||
// 'useFileTransport' to false and configure a transport
|
'transport' => [
|
||||||
// for the mailer to send real emails.
|
'class' => 'Swift_SmtpTransport',
|
||||||
'useFileTransport' => true,
|
'host' => 'ssl://smtp.yandex.com',
|
||||||
|
'username' => 'info@skillparts.ru',
|
||||||
|
'password' => 'SkillParts_1337',
|
||||||
|
'port' => '587',
|
||||||
|
'encryption' => 'ssl',
|
||||||
|
],
|
||||||
],
|
],
|
||||||
'log' => [
|
'log' => [
|
||||||
'traceLevel' => YII_DEBUG ? 3 : 0,
|
'traceLevel' => YII_DEBUG ? 3 : 0,
|
||||||
|
|
|
@ -4,7 +4,9 @@ declare(strict_types=1);
|
||||||
|
|
||||||
namespace app\controllers;
|
namespace app\controllers;
|
||||||
|
|
||||||
|
use yii;
|
||||||
use yii\web\Controller;
|
use yii\web\Controller;
|
||||||
|
use yii\web\UploadedFile;
|
||||||
|
|
||||||
use app\models\Request;
|
use app\models\Request;
|
||||||
|
|
||||||
|
@ -15,7 +17,26 @@ class SuppliersController extends Controller
|
||||||
return $this->renderPartial('/suppliers/index');
|
return $this->renderPartial('/suppliers/index');
|
||||||
}
|
}
|
||||||
|
|
||||||
public function actionRequest() {
|
public function actionRequest()
|
||||||
|
{
|
||||||
return $this->renderPartial('/suppliers/request');
|
return $this->renderPartial('/suppliers/request');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @todo Сделать отправку только назначенным модераторам
|
||||||
|
*/
|
||||||
|
public function actionRequestSend()
|
||||||
|
{
|
||||||
|
$request = yii::$app->request->post('Request') ?? yii::$app->request->get('Request');
|
||||||
|
|
||||||
|
yii::$app->mailer->compose()
|
||||||
|
->setFrom(yii::$app->params['mail']['system'])
|
||||||
|
->setTo(yii::$app->params['mail']['info'])
|
||||||
|
->setSubject('Регистрация поставщика')
|
||||||
|
->setHtmlBody($this->renderPartial('/mails/supplier', $request))
|
||||||
|
->attach(($file = UploadedFile::getInstance(new Request($request), 'file'))->tempName, ['fileName' => $file->name])
|
||||||
|
->send();
|
||||||
|
|
||||||
|
return $this->renderPartial('/suppliers/requested');
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -20,6 +20,11 @@ use Exception;
|
||||||
*/
|
*/
|
||||||
class Request extends Document
|
class Request extends Document
|
||||||
{
|
{
|
||||||
|
/**
|
||||||
|
* Файл с данными ("Карточка предприятия")
|
||||||
|
*/
|
||||||
|
public string|array|null $file = null;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Имя коллекции
|
* Имя коллекции
|
||||||
*/
|
*/
|
||||||
|
@ -36,7 +41,7 @@ class Request extends Document
|
||||||
return array_merge(
|
return array_merge(
|
||||||
parent::attributes(),
|
parent::attributes(),
|
||||||
[
|
[
|
||||||
'text',
|
'name',
|
||||||
'phon',
|
'phon',
|
||||||
'mail',
|
'mail',
|
||||||
'file'
|
'file'
|
||||||
|
@ -52,7 +57,7 @@ class Request extends Document
|
||||||
return array_merge(
|
return array_merge(
|
||||||
parent::attributeLabels(),
|
parent::attributeLabels(),
|
||||||
[
|
[
|
||||||
'text' => 'ФИО',
|
'name' => 'ФИО',
|
||||||
'phon' => 'Номер',
|
'phon' => 'Номер',
|
||||||
'mail' => 'Почта',
|
'mail' => 'Почта',
|
||||||
'file' => 'Карточка предприятия'
|
'file' => 'Карточка предприятия'
|
||||||
|
|
|
@ -9,7 +9,7 @@
|
||||||
<body>
|
<body>
|
||||||
<table style="height: 100vh;" cols="13" rows="50">
|
<table style="height: 100vh;" cols="13" rows="50">
|
||||||
<tr>
|
<tr>
|
||||||
<td style="text-align: center; outline: 2px solid;" colspan="13" rowspan="3" valign="center"><b>ВНИМАНИЕ! Уважаемые покупатели, просим вас указывать в назначении платежа: Аванс за запчасти по договору №<?= $account ?></b></td>
|
<td style="text-align: center; outline: 2px solid;" colspan="13" rowspan="3" valign="center"><b>ВНИМАНИЕ! Уважаемые покупатели, просим вас указывать в назначении платежа: Аванс за запчасти по договору №<?= $buyer['id'] ?></b></td>
|
||||||
</tr>
|
</tr>
|
||||||
|
|
||||||
<tr>
|
<tr>
|
||||||
|
@ -109,7 +109,7 @@
|
||||||
|
|
||||||
<tr>
|
<tr>
|
||||||
<td colspan="2" rowspan="2" valign="center">Покупатель</td>
|
<td colspan="2" rowspan="2" valign="center">Покупатель</td>
|
||||||
<td style="word-wrap: break-word;" colspan="11" rowspan="2" valign="left"><b></b></td>
|
<td style="word-wrap: break-word;" colspan="11" rowspan="2" valign="top"><b><?= $buyer['info'] ?></b></td>
|
||||||
</tr>
|
</tr>
|
||||||
|
|
||||||
<tr>
|
<tr>
|
||||||
|
@ -117,11 +117,72 @@
|
||||||
</tr>
|
</tr>
|
||||||
|
|
||||||
<tr>
|
<tr>
|
||||||
<td>Тест</td>
|
<td colspan="13"></td>
|
||||||
<td>Тест</td>
|
</tr>
|
||||||
<td>Тест</td>
|
|
||||||
<td>Тест</td>
|
<tr>
|
||||||
<td>Тест</td>
|
<td style="text-align: center; border: solid; border-top: thick; border-left: thick;" colspan="1" rowspan="2" valign="center"><b>№</b></td>
|
||||||
|
<td style="text-align: center; border: solid; border-top: thick;" colspan="6" rowspan="2" valign="center"><b>Товары (работы, услуги)</b></td>
|
||||||
|
<td style="text-align: center; border: solid; border-top: thick;" colspan="2" rowspan="2" valign="center"><b>Количество</b></td>
|
||||||
|
<td style="text-align: center; border: solid; border-top: thick;" colspan="2" rowspan="2" valign="center"><b>Цена</b></td>
|
||||||
|
<td style="text-align: center; border: solid; border-top: thick; border-right: thick;" colspan="2" rowspan="2" valign="center"><b>Сумма</b></td>
|
||||||
|
</tr>
|
||||||
|
|
||||||
|
<tr>
|
||||||
|
<td colspan="13"></td>
|
||||||
|
</tr>
|
||||||
|
|
||||||
|
<?php
|
||||||
|
// Инициализация счётчика строк
|
||||||
|
$row = 1;
|
||||||
|
|
||||||
|
// Инициализация итоговой цены
|
||||||
|
$cost = 0;
|
||||||
|
?>
|
||||||
|
|
||||||
|
<?php foreach ($order['entries'] as $entry) : ?>
|
||||||
|
<tr>
|
||||||
|
<td style="text-align: center; border: solid; border-left: thick;" colspan="1" valign="center"><?= $row++ ?></td>
|
||||||
|
<td style="text-align: left; border: solid;" colspan="6" valign="center"><?= $entry['title'] ?></td>
|
||||||
|
<td style="text-align: center; border: solid;" colspan="2" valign="center"><?= $entry['amount']['value'] ?></td>
|
||||||
|
<td style="text-align: center; border: solid;" valign="center"><?= $entry['cost']['value'] ?></td>
|
||||||
|
<td style="text-align: center; border: solid;" valign="center"><?= $entry['cost']['unit'] ?></td>
|
||||||
|
<td style="text-align: center; border: solid; border-right: thick;" colspan="2" valign="center"><?= $cost += $entry['cost']['value'] * $entry['amount']['value'] ?></td>
|
||||||
|
</tr>
|
||||||
|
<?php endforeach ?>
|
||||||
|
|
||||||
|
<tr>
|
||||||
|
<td style="border-top: thick;" colspan="13"></td>
|
||||||
|
</tr>
|
||||||
|
|
||||||
|
<tr>
|
||||||
|
<td colspan="9"></td>
|
||||||
|
<td style="text-align: right;" colspan="2" valign="center"><b>Итого:</b></td>
|
||||||
|
<td colspan="2" valign="center"><b><?= $cost - $tax = $cost * 0.2 ?></b></td>
|
||||||
|
</tr>
|
||||||
|
|
||||||
|
<tr>
|
||||||
|
<td colspan="9"></td>
|
||||||
|
<td style="text-align: right;" colspan="2" valign="center"><b>В т.ч. НДС (20%):</b></td>
|
||||||
|
<td colspan="2" valign="center"><b><?= $tax ?></b></td>
|
||||||
|
</tr>
|
||||||
|
|
||||||
|
<tr>
|
||||||
|
<td colspan="9"></td>
|
||||||
|
<td style="text-align: right;" colspan="2" valign="center"><b>Итого с НДС:</b></td>
|
||||||
|
<td colspan="2" valign="center"><b><?= $cost ?></b></td>
|
||||||
|
</tr>
|
||||||
|
|
||||||
|
<tr>
|
||||||
|
<td colspan="13" valign="center">Всего наименований <?= $row - 1 ?>, на сумму <?= $cost ?> руб.</td>
|
||||||
|
</tr>
|
||||||
|
|
||||||
|
<tr>
|
||||||
|
<td colspan="13" valign="center"><b><?= mb_strtoupper(mb_substr($text = mb_strtolower($text = (new NumberFormatter("ru", NumberFormatter::SPELLOUT))->format($cost), 'UTF-8'), 0, 1, 'UTF-8'), 'UTF-8') . mb_substr($text, 1, null, 'UTF-8') ?> рублей</b></td>
|
||||||
|
</tr>
|
||||||
|
|
||||||
|
<tr>
|
||||||
|
<td style="width: 8pt;" colspan="13"><img src="<?= YII_PATH_PUBLIC . '/img/invoices/signature.png'?>" /></td>
|
||||||
</tr>
|
</tr>
|
||||||
</table>
|
</table>
|
||||||
</body>
|
</body>
|
||||||
|
|
|
@ -0,0 +1,9 @@
|
||||||
|
<html>
|
||||||
|
|
||||||
|
<body>
|
||||||
|
<p>ФИО: <span style="margin-left: auto;"><?= $name ?></span></p>
|
||||||
|
<p>Номер: <span style="margin-left: auto;"><?= $phon ?></span></p>
|
||||||
|
<p>Почта: <span style="margin-left: auto;"><?= $mail ?></span></p>
|
||||||
|
</body>
|
||||||
|
|
||||||
|
</html>
|
|
@ -77,7 +77,7 @@ AppAsset::register($this);
|
||||||
<h3 class="py-3 mt-2 mb-4 text-center"><b>Заявка на подключение</b></h3>
|
<h3 class="py-3 mt-2 mb-4 text-center"><b>Заявка на подключение</b></h3>
|
||||||
<?php $form = ActiveForm::begin([
|
<?php $form = ActiveForm::begin([
|
||||||
'id' => 'form_suppliers_request',
|
'id' => 'form_suppliers_request',
|
||||||
'action' => false,
|
'action' => '/suppliers/request-send',
|
||||||
'fieldConfig' => [
|
'fieldConfig' => [
|
||||||
'template' => '{label}{input}',
|
'template' => '{label}{input}',
|
||||||
],
|
],
|
||||||
|
@ -93,7 +93,7 @@ AppAsset::register($this);
|
||||||
|
|
||||||
<div class="row mb-4">
|
<div class="row mb-4">
|
||||||
<div class="col-4 mx-auto">
|
<div class="col-4 mx-auto">
|
||||||
<?= $form->field($model_request, 'text', ['options' => ['class' => "mb-3"]])->input('text', ['placeholder' => 'Иванов Иван Иванович']) ?>
|
<?= $form->field($model_request, 'name', ['options' => ['class' => "mb-3"]])->input('text', ['placeholder' => 'Иванов Иван Иванович']) ?>
|
||||||
<?= $form->field($model_request, 'phon', ['options' => ['class' => "mb-3"]])->input('tel', ['aria-invalid' => false, 'aria-required' => true, 'pattern' => '7[0-9]{3}[0-9]{3}[0-9]{2}[0-9]{2}', 'placeholder' => '79091112233', 'title' => '79091112233']); ?>
|
<?= $form->field($model_request, 'phon', ['options' => ['class' => "mb-3"]])->input('tel', ['aria-invalid' => false, 'aria-required' => true, 'pattern' => '7[0-9]{3}[0-9]{3}[0-9]{2}[0-9]{2}', 'placeholder' => '79091112233', 'title' => '79091112233']); ?>
|
||||||
<?= $form->field($model_request, 'mail', ['options' => ['class' => "mb-3"]])->input('email', ['placeholder' => 'company@mail.ru']); ?>
|
<?= $form->field($model_request, 'mail', ['options' => ['class' => "mb-3"]])->input('email', ['placeholder' => 'company@mail.ru']); ?>
|
||||||
<?= $form->field($model_request, 'file', ['options' => ['class' => "mb-3 d-flex flex-column justify-content-center"]])->fileInput(['multiple' => true, 'class' => 'my-auto px-0']) ?>
|
<?= $form->field($model_request, 'file', ['options' => ['class' => "mb-3 d-flex flex-column justify-content-center"]])->fileInput(['multiple' => true, 'class' => 'my-auto px-0']) ?>
|
||||||
|
|
|
@ -0,0 +1,88 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
|
use yii\helpers\Html;
|
||||||
|
|
||||||
|
use yii;
|
||||||
|
use yii\bootstrap\ActiveForm;
|
||||||
|
|
||||||
|
use app\assets\AppAsset;
|
||||||
|
|
||||||
|
use app\models\Request;
|
||||||
|
|
||||||
|
AppAsset::register($this);
|
||||||
|
|
||||||
|
?>
|
||||||
|
|
||||||
|
<?php $this->beginPage() ?>
|
||||||
|
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="<?= yii::$app->language ?>">
|
||||||
|
|
||||||
|
<head>
|
||||||
|
<meta charset="<?= yii::$app->charset ?>">
|
||||||
|
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||||
|
|
||||||
|
<link href="/css/pages/suppliers.css" rel="stylesheet">
|
||||||
|
<link rel="apple-touch-icon" sizes="57x57" href="/favicons/apple-icon-57x57.png">
|
||||||
|
<link rel="apple-touch-icon" sizes="60x60" href="/favicons/apple-icon-60x60.png">
|
||||||
|
<link rel="apple-touch-icon" sizes="72x72" href="/favicons/apple-icon-72x72.png">
|
||||||
|
<link rel="apple-touch-icon" sizes="76x76" href="/favicons/apple-icon-76x76.png">
|
||||||
|
<link rel="apple-touch-icon" sizes="114x114" href="/favicons/apple-icon-114x114.png">
|
||||||
|
<link rel="apple-touch-icon" sizes="120x120" href="/favicons/apple-icon-120x120.png">
|
||||||
|
<link rel="apple-touch-icon" sizes="144x144" href="/favicons/apple-icon-144x144.png">
|
||||||
|
<link rel="apple-touch-icon" sizes="152x152" href="/favicons/apple-icon-152x152.png">
|
||||||
|
<link rel="apple-touch-icon" sizes="180x180" href="/favicons/apple-icon-180x180.png">
|
||||||
|
<link rel="icon" type="image/png" sizes="192x192" href="/favicons/android-icon-192x192.png">
|
||||||
|
<link rel="icon" type="image/png" sizes="32x32" href="/favicons/favicon-32x32.png">
|
||||||
|
<link rel="icon" type="image/png" sizes="96x96" href="/favicons/favicon-96x96.png">
|
||||||
|
<link rel="icon" type="image/png" sizes="16x16" href="/favicons/favicon-16x16.png">
|
||||||
|
<link rel="manifest" href="/favicons/manifest.json">
|
||||||
|
<meta name="msapplication-TileColor" content="#ffffff">
|
||||||
|
<meta name="msapplication-TileImage" content="/favicons/ms-icon-144x144.png">
|
||||||
|
<meta name="theme-color" content="#ffffff">
|
||||||
|
|
||||||
|
<script type="text/javascript">
|
||||||
|
var onloadCallback = function() {
|
||||||
|
grecaptcha.render('form_suppliers_request_recaptcha', {
|
||||||
|
'sitekey': '6LcTDSsbAAAAAF-KOY6azKzaIj6rOqyegJqNKRcc'
|
||||||
|
});
|
||||||
|
};
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<?php $this->registerCsrfMetaTags() ?>
|
||||||
|
|
||||||
|
<title><?= Html::encode($this->title ?? 'Поставщикам | SkillParts') ?></title>
|
||||||
|
|
||||||
|
<?php $this->head() ?>
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body class="d-flex flex-column">
|
||||||
|
<?php $this->beginBody() ?>
|
||||||
|
|
||||||
|
<header class="container pt-2 mt-1 mb-2 mb-sm-4">
|
||||||
|
<div class="row row h-100">
|
||||||
|
<div id="logo" class="col-3 col-md-4 h-100">
|
||||||
|
<a class="py-2 h-100 d-inline-flex" title="SkillParts" href="/">
|
||||||
|
<img class="img-fluid" src="/img/logos/skillparts.svg" alt="SkillParts">
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</header>
|
||||||
|
|
||||||
|
<main id="page_suppliers" class="container pb-5 flex-grow-1 d-flex justify-content-center">
|
||||||
|
<article class="col my-auto p-3 px-5 rounded overflow-hidden">
|
||||||
|
<h3 class="py-3 mt-2 mb-4 text-center"><b>Заявка на подключение</b></h3>
|
||||||
|
отсоси
|
||||||
|
</article>
|
||||||
|
</main>
|
||||||
|
|
||||||
|
<?php $this->endBody() ?>
|
||||||
|
|
||||||
|
</body>
|
||||||
|
|
||||||
|
</html>
|
||||||
|
|
||||||
|
<?php $this->endPage() ?>
|
Binary file not shown.
After Width: | Height: | Size: 87 KiB |
Reference in New Issue