diff --git a/backend/controllers/ContractController.php b/backend/controllers/ContractController.php index c363b4e..090a8e2 100644 --- a/backend/controllers/ContractController.php +++ b/backend/controllers/ContractController.php @@ -60,11 +60,13 @@ class ContractController extends Controller { 'dataProvider' => $dataProvider ] ); } - /** - * Lists all Contract models. - * - * @return mixed - */ + + /** + * Lists all Contract models. + * + * @return mixed + * @throws NotFoundHttpException + */ public function actionIndexCustomer($id) { $model = Customer::findOne ( $id ); @@ -82,13 +84,14 @@ class ContractController extends Controller { 'dataProvider' => $dataProvider ] ); } - - /** - * Displays a single Contract model. - * - * @param integer $id - * @return mixed - */ + + /** + * Displays a single Contract model. + * + * @param integer $id + * @return mixed + * @throws NotFoundHttpException + */ public function actionView($id) { return $this->render ( 'view', [ 'model' => $this->findModel ( $id ) @@ -115,14 +118,15 @@ class ContractController extends Controller { ] ); } } - - /** - * Updates an existing Contract model. - * If update is successful, the browser will be redirected to the 'view' page. - * - * @param integer $id - * @return mixed - */ + + /** + * Updates an existing Contract model. + * If update is successful, the browser will be redirected to the 'view' page. + * + * @param integer $id + * @return mixed + * @throws NotFoundHttpException + */ public function actionUpdate($id) { $model = $this->findModel ( $id ); @@ -217,7 +221,13 @@ class ContractController extends Controller { 'index' ] ); } - public function actionDetails($id) { + + /** + * @param $id + * @return string + * @throws NotFoundHttpException + */ + public function actionDetails($id) { $contract = Contract::findOne ( $id ); // ticket_installment_request diff --git a/backend/models/ContractSearch.php b/backend/models/ContractSearch.php index 43408c4..1a977ce 100644 --- a/backend/models/ContractSearch.php +++ b/backend/models/ContractSearch.php @@ -2,6 +2,7 @@ namespace backend\models; +use common\components\Helper; use Yii; use yii\base\Model; use yii\data\ActiveDataProvider; @@ -15,6 +16,7 @@ class ContractSearch extends Contract { public $customer_name; + public $card_number; /** * @inheritdoc @@ -23,7 +25,7 @@ class ContractSearch extends Contract { return [ [['id_contract', 'id_customer', 'status', 'flag', 'part_paid', 'part_count', 'part_required', 'id_ticket_type'], 'integer'], - [['customer_name' ], 'safe'], + [['customer_name' ,'card_number'], 'safe'], ]; } @@ -65,7 +67,8 @@ class ContractSearch extends Contract $query->from('contract'); $query->innerJoin('user' ,'user.id = contract.id_user'); $query->innerJoin('customer' ,'customer.id_customer = contract.id_customer'); - + $query->leftJoin('card as card' ,'card.id_card = customer.id_customer_card'); + $dataProvider = new ActiveDataProvider([ 'query' => $query, @@ -133,6 +136,9 @@ class ContractSearch extends Contract // $query->where('0=1'); return $dataProvider; } + if ( isset($this->card_number)){ + $this->card_number = Helper::fixAsciiChars($this->card_number); + } $query->andFilterWhere([ 'contract.id_contract' => $this->id_contract, @@ -147,6 +153,7 @@ class ContractSearch extends Contract 'contract.created_at' => $this->created_at, 'contract.updated_at' => $this->updated_at, 'contract.id_ticket_type' => $this->id_ticket_type, + 'card.number' => $this->card_number, ]); $query->andFilterWhere(['like', 'customer.name', $this->customer_name]); diff --git a/backend/views/contract/_search.php b/backend/views/contract/_search.php index 1d77246..395ca2b 100644 --- a/backend/views/contract/_search.php +++ b/backend/views/contract/_search.php @@ -26,6 +26,7 @@ use yii\widgets\ActiveForm; field($model, 'customer_name')->label('Vendég neve') ?>
+ field($model, 'card_number')->label('Kártyaszám') ?>
diff --git a/common/models/Ticket.php b/common/models/Ticket.php index d564a9b..9c65928 100644 --- a/common/models/Ticket.php +++ b/common/models/Ticket.php @@ -35,6 +35,7 @@ use common\components\Helper; * @property string $original_end; * * @property \common\models\Card card + * @property \common\models\Ticket transfer */ class Ticket extends \common\models\BaseFitnessActiveRecord { diff --git a/common/models/TicketInstallmentRequest.php b/common/models/TicketInstallmentRequest.php index 152b1af..ffacd06 100644 --- a/common/models/TicketInstallmentRequest.php +++ b/common/models/TicketInstallmentRequest.php @@ -135,14 +135,6 @@ class TicketInstallmentRequest extends \yii\db\ActiveRecord $started_at = $contract->started_at; $date = \DateTime::createFromFormat("Y-m-d H:i:s", $started_at, new \DateTimeZone( 'UTC')); $date = DateUtil::addMonth( $date,$this->priority + 1 ); -// $date = \DateTime::createFromFormat("Y-m-d H:i:s", $this->request_target_time_at, new \DateTimeZone( 'UTC')); -// $date = DateUtil::addMonth( $date, 1 ); -// $date->modify("+1 month"); -// $date->modify("-1 day"); - -// $date = \DateTime::createFromFormat("Y-m-d H:i:s", $this->request_target_time_at, new \DateTimeZone( 'UTC')); -// $date->modify("+1 month"); -// $date->modify("-1 day"); $date->setTime(0, 0, 0); @@ -201,7 +193,6 @@ class TicketInstallmentRequest extends \yii\db\ActiveRecord if ( $status == static::$STATUS_ACCEPTED || $status == static::$STATUS_ACCEPTED_MANUAL){ if ( !$this->isStatusAccepted() ){ $contract->part_paid = $contract->part_paid +1; -// $tranfer = $this->addTransfer(); $result = Transfer::sellContractTicket($contract, $this, Account::findOne(1), Transfer::STATUS_PAID, Transfer::PAYMENT_METHOD_TRANSFER); $transfer = $result[0]; $ticket = $result[1]; @@ -236,15 +227,6 @@ class TicketInstallmentRequest extends \yii\db\ActiveRecord } } -// protected function applyNewTicketState($partRequired = false){ -// if ( $partRequired ){ -// $this->ticket->setPartRequired($this); -// } -// $this->ticket->applyTicketInstallmentRequest($this); -// $this->ticket->save(false); -// } - - /** * @return Transfer */ @@ -340,7 +322,11 @@ class TicketInstallmentRequest extends \yii\db\ActiveRecord TicketInstallmentRequest::$STATUS_ACCEPTED_MANUAL=> 'Személyesen fizetve', ]; } - + + /** + * @param $id_status + * @return mixed|string + */ public static function toStatusName($id_status){ $result = "Ismeretlen"; $statuses = TicketInstallmentRequest::statuses(); @@ -349,7 +335,10 @@ class TicketInstallmentRequest extends \yii\db\ActiveRecord } return $result; } - + + /** + * @return mixed|string + */ public function getStatusName(){ return static::toStatusName($this->status); } diff --git a/console/controllers/ContractController.php b/console/controllers/ContractController.php new file mode 100644 index 0000000..0a0b467 --- /dev/null +++ b/console/controllers/ContractController.php @@ -0,0 +1,164 @@ + $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); + 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()) { + /** @var \common\models\Ticket $ticket */ + $ticket = $part->ticket; + 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); + } + } + } + } + } + $tx->commit(); + $this->info("Ready"); + } catch (\Throwable $e) { + $tx->rollBack(); + } + + } + + + private function info($msg) + { + echo $msg . "\n"; + } + + /** + * @param \common\models\Contract $contract + * @param \common\models\TicketInstallmentRequest[] $parts + */ + private function log($contract, $parts) + { + + echo "++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\n"; + echo "++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\n"; + + foreach ($contract->getAttributes() as $key => $value) { + echo $key . "=" . $value . ";"; + } + echo "\n"; + echo "++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\n"; + foreach ($parts as $part) { + echo "----------------------------------------------------------------------\n"; + foreach ($part->getAttributes() as $key => $value) { + echo $key . "=" . $value . ";"; + } + echo "\n"; + } + } + +} \ No newline at end of file diff --git a/frontend/controllers/ContractController.php b/frontend/controllers/ContractController.php index 8970686..cf45042 100644 --- a/frontend/controllers/ContractController.php +++ b/frontend/controllers/ContractController.php @@ -65,13 +65,14 @@ class ContractController extends Controller { 'dataProvider' => $dataProvider ] ); } - - /** - * Displays a single Contract model. - * - * @param integer $id - * @return mixed - */ + + /** + * Displays a single Contract model. + * + * @param integer $id + * @return mixed + * @throws NotFoundHttpException + */ public function actionView($id) { $model = $this->findModel ( $id ); $customer = $model->customer; @@ -110,14 +111,15 @@ class ContractController extends Controller { ] ); } } - - /** - * Updates an existing Contract model. - * If update is successful, the browser will be redirected to the 'view' page. - * - * @param integer $id - * @return mixed - */ + + /** + * Updates an existing Contract model. + * If update is successful, the browser will be redirected to the 'view' page. + * + * @param integer $id + * @return mixed + * @throws NotFoundHttpException + */ public function actionUpdate($id) { $model = $this->findModel ( $id ); @@ -132,14 +134,16 @@ class ContractController extends Controller { ] ); } } - - /** - * Deletes an existing Contract model. - * If deletion is successful, the browser will be redirected to the 'index' page. - * - * @param integer $id - * @return mixed - */ + + /** + * Deletes an existing Contract model. + * If deletion is successful, the browser will be redirected to the 'index' page. + * + * @param integer $id + * @return mixed + * @throws NotFoundHttpException + * @throws \yii\db\StaleObjectException + */ public function actionDelete($id) { $this->findModel ( $id )->delete (); @@ -196,10 +200,15 @@ class ContractController extends Controller { 'id' => $contract->id_contract ] ); } - - /** - * EGY RÉSZLET KIFIZETÉSE - */ + + /** + * Cancel contract. + * @param $id + * @param $flag + * @return \yii\web\Response + * @throws NotFoundHttpException + * @throws \yii\db\Exception + */ public function actionCancel($id,$flag) { $contract = $this->findModel ( $id ); @@ -235,7 +244,8 @@ class ContractController extends Controller { $productBuntetes = Product::find ()->andWhere ( [ 'product_number' => Product::$BUNTETES ] )->one (); - + + // if there is a fee , generate fee and put it to the shopping cart if (isset ( $productBuntetes )) { if ($buntetes > 0) { @@ -286,7 +296,12 @@ class ContractController extends Controller { ] ); } - public function actionMake($id) { + /** + * @param $id + * @return string|\yii\web\Response + * @throws \yii\db\Exception + */ + public function actionMake($id) { $customer = Customer::findOne ( $id ); if (! isset ( $customer )) { @@ -326,8 +341,13 @@ class ContractController extends Controller { 'model' => $model ] ); } - - public function actionContract($id){ + + /** + * @param $id + * @throws NotFoundHttpException + * @throws \yii\base\InvalidConfigException + */ + public function actionContract($id){ $model = $this->findModel($id); //$mpdf=new \mPDF('utf-8', 'A4');