fitness-web/console/controllers/ContractController.php

164 lines
6.2 KiB
PHP

<?php
namespace console\controllers;
use backend\components\ContractManager;
use common\models\Card;
use common\models\Contract;
use common\models\Customer;
use common\models\ShoppingCart;
use common\models\Ticket;
use common\models\TicketInstallmentRequest;
use common\models\Transfer;
use yii\console\Controller;
use yii\console\Exception;
class ContractController extends Controller
{
/**
* @param $requestId
* @throws \Throwable
* @throws \yii\web\NotFoundHttpException
*/
public function actionRequestToCart($requestId){
$contractManager = new ContractManager();
$contractManager->openRequestAndPutItItoCart($requestId);
}
/**
* @param $cardNumber
* @throws Exception
* @throws \yii\db\Exception
*/
public function actionRestoreCanceled($cardNumber)
{
$card = Card::findOne(['number' => $cardNumber]);
if (!isset($card)) {
throw new Exception("Card not found: " . $cardNumber);
}
$this->info("Card loaded");
$this->info($card->id_card);
$this->info($card->number);
$customer = Customer::findOne(['id_customer_card' => $card->id_card]);
if (!isset($customer)) {
throw new Exception("Customer not found for card: " . $cardNumber);
}
$this->info("Customer loaded");
$this->info($customer->id_customer);
$this->info($customer->name);
// find latest contract for customer
/** @var \common\models\Contract $contract */
$contract = Contract::find()
->andWhere(['id_customer' => $customer->id_customer])
->orderBy(['created_at' => SORT_DESC])
->limit(1)
->one();
if (!isset($contract)) {
throw new Exception("Contract not found for customer: " . $customer->id_customer);
}
$this->info("Contract loaded");
$this->info($contract->id_contract);
$this->info(Contract::toFlangName($contract->flag));
$parts = TicketInstallmentRequest::findAll(['id_contract' => $contract->id_contract]);
$this->info("Parts loaded");
$tx = \Yii::$app->db->beginTransaction();
try {
if (!$contract->isFlagActive()) {
$contract->flag = Contract::$FLAG_ACTIVE;
$I_CONTRACT = "Contract - change flag " . Contract::toStatusName($contract->flag) . "=>" .
Contract::toStatusName(Contract::$FLAG_ACTIVE);
$contract->save(false);
$this->info($I_CONTRACT);
}
foreach ($parts as $part) {
$this->info("Part #" . $part->priority . " ->" . TicketInstallmentRequest::toStatusName($part->status));
if ($part->status == TicketInstallmentRequest::$STATUS_CANCELED) {
$part->status = TicketInstallmentRequest::$STATUS_PENDING;
$part->request_processed_at = null;
$part->save(false);
$this->info("Change status: "
. TicketInstallmentRequest::toStatusName(TicketInstallmentRequest::$STATUS_CANCELED)
. "->"
. TicketInstallmentRequest::toStatusName(TicketInstallmentRequest::$STATUS_PENDING)
);
} else if ($part->isStatusAccepted()) {
$this->info("loading ticket: #" .$part->id_ticket);
/** @var \common\models\Ticket $ticket */
$ticket = null;
try {
$ticket = Ticket::findOne(['id_ticket' => $part->id_ticket]);
}catch (\Throwable $e){
\Yii::info("Failed to load ticket: " . $e->getMessage());
}
if (isset($ticket)) {
$this->info("Ticket found: " . $ticket->id_ticket . "/" . $ticket->ticketType->name);
if ($ticket->status == Ticket::STATUS_DELETED) {
$ticket->status = Ticket::STATUS_ACTIVE;
$ticket->save(false);
$this->info("Ticket restored: ");
$this->info($ticket->id_ticket);
$this->info(Ticket::toStatusName(Ticket::STATUS_DELETED)
. "->"
. Ticket::toStatusName(Ticket::STATUS_ACTIVE)
);
}
/** @var \common\models\Transfer $transfer */
$transfer = $ticket->transfer;
if ($transfer->status == Transfer::STATUS_STORNO) {
$transfer->status = Transfer::STATUS_PAID;
$transfer->save(false);
$this->info("Restore transfer: ");
$this->info($transfer->id_transfer);
$this->info(Transfer::toStatusName(Transfer::STATUS_STORNO)
. "->"
. Ticket::toStatusName(Transfer::STATUS_PAID)
);
if (!isset($transfer->paid_at)) {
$cart = new ShoppingCart();
$cart->id_customer = $contract->customer->id_customer;
$cart->id_transfer = $transfer->id_transfer;
if (!$cart->save(false)) {
/** @noinspection SpellCheckingInspection */
$E_FAILED_TO_SAVE = "Vendég kosár hozzárendelés sikertelen!";
\Yii::error($E_FAILED_TO_SAVE);
throw new \Exception($E_FAILED_TO_SAVE);
}
}
}
}else{
\Yii::info("Ticket not found");
}
}
}
$tx->commit();
$this->info("Ready");
} catch (\Throwable $e) {
$tx->rollBack();
}
}
private function info($msg)
{
echo $msg . "\n";
}
}