add contract > ticket installment/ticket expiration date changes

This commit is contained in:
Roland Schneider 2016-09-12 07:53:11 +02:00
parent 2828a6f236
commit 5a562677c7
4 changed files with 166 additions and 65 deletions

View File

@ -2,27 +2,17 @@
namespace backend\controllers;
use common\models\City;
use yii\web\Controller;
use backend\models\GiroBeszedForm;
/**
* CityController implements the CRUD actions for City model.
*/
class TestController extends Controller
{
public function actionCreateBeszed(){
$model = new GiroBeszedForm();
if ($model->load(\Yii::$app->request->post()) ) {
$model->run();
}
return $this->render("_create_beszed",['model' => $model]);
public function actionIndex(){
return "ok";
}

View File

@ -0,0 +1,68 @@
<?php
/**
* Created by PhpStorm.
* User: rocho
* Date: 2016. 09. 08.
* Time: 7:01
*/
namespace common\components;
use yii\i18n\Formatter;
class DateUtil
{
public static function addMonth($timestamp, $monthCount = 1)
{
if ($timestamp instanceof \DateTime) {
$d1 = $timestamp;
} else {
$d1 = new \DateTime();
if (isset($timestamp)) {
$d1->setTimestamp($timestamp);
}
}
$monthToAdd = $monthCount;
$year = $d1->format('Y');
$month = $d1->format('n');
$day = $d1->format('d');
$year += floor($monthToAdd / 12);
$monthToAdd = $monthToAdd % 12;
$month += $monthToAdd;
if ($month > 12) {
$year++;
$month = $month % 12;
if ($month === 0)
$month = 12;
}
if (!checkdate($month, $day, $year)) {
$d2 = \DateTime::createFromFormat('Y-n-j', $year . '-' . $month . '-1');
$d2->modify('last day of');
} else {
$d2 = \DateTime::createFromFormat('Y-n-d', $year . '-' . $month . '-' . $day);
}
$d2->setTime(0, 0, 0);
return $d2;
}
public static function formatUtc($dateTimeObject)
{
$formatter = new Formatter;
$formatter->datetimeFormat = 'php:Y-m-d H:i:s';
$formatter->timeZone = 'UTC';
return $formatter->asDatetime($dateTimeObject);
}
}

View File

@ -2,7 +2,9 @@
namespace common\models;
use Yii;
use common\components\DateUtil;
use /** @noinspection PhpMethodOrClassCallIsNotCaseSensitiveInspection */
Yii;
use yii\helpers\ArrayHelper;
use yii\behaviors\TimestampBehavior;
use common\components\Helper;
@ -32,6 +34,9 @@ use common\components\Helper;
* @property \common\models\Contract contract
* @property \common\models\Customer customer
* @property string number
* @property mixed ticket
* @property integer id_contract
* @property mixed ugiro
*/
class TicketInstallmentRequest extends \yii\db\ActiveRecord
{
@ -125,9 +130,21 @@ class TicketInstallmentRequest extends \yii\db\ActiveRecord
}
public function getTicketExpirationDate(){
$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");
$contract = $this->contract;
$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);
return $date->getTimestamp();
@ -153,8 +170,11 @@ class TicketInstallmentRequest extends \yii\db\ActiveRecord
public function isStatusSent(){
return $this->status == static::$STATUS_SENT ;
}
public function getIdGiro(){
/**
* @return \common\models\Ugiro
*/
public function getIdGiro(){
$result = null;
$giro = $this->ugiro;
if ( isset($giro) ){
@ -162,15 +182,21 @@ class TicketInstallmentRequest extends \yii\db\ActiveRecord
}
return $result;
}
/**
* Megbízás státuszának beállítása
*
* Létrehozza a szükséges ticket/transfer objectumokat
*
* @param boolean $partRequired ha igaz, a bérleten a part mezőt változtatjuk
* */
public function applyStatus($status, $partRequired = false, $visszajelzes = "", $comment = ""){
/**
* Megbízás státuszának beállítása
*
* Létrehozza a szükséges ticket/transfer objectumokat
*
* @param $status
* @param boolean $partRequired ha igaz, a bérleten a part mezőt változtatjuk
*
* @param string $visszajelzes
* @param string $comment
* @return bool
*/
public function applyStatus($status, /** @noinspection PhpUnusedParameterInspection */
$partRequired = false, $visszajelzes = "", $comment = ""){
$contract = $this->contract;
$contract->part_required = $contract->part_required +1;
if ( $status == static::$STATUS_ACCEPTED || $status == static::$STATUS_ACCEPTED_MANUAL){
@ -218,36 +244,44 @@ class TicketInstallmentRequest extends \yii\db\ActiveRecord
// $this->ticket->applyTicketInstallmentRequest($this);
// $this->ticket->save(false);
// }
protected function addTransfer(){
$account = Account::findOne($this->ticket->id_account);
/**
* @return Transfer
*/
protected function addTransfer(){
/** @var \common\models\Account $account */
$account = Account::findOne($this->ticket->id_account);
$discount = null;
if ( isset($this->ticket->id_account)){
$discount = Discount::findOne( $this->ticket->id_discount );
}
$transfer = Transfer::createTicketTransfer($account, $discount, null, 1, $this->ticket);
/** @var \common\models\Account $account */
/** @noinspection PhpParamsInspection */
$transfer = Transfer::createTicketTransfer($account, $discount, null, 1, $this->ticket);
$transfer->status = Transfer::STATUS_PAID;
$transfer->paid_at = date('Y-m-d H:i:s' ) ;
$transfer->paid_by = \Yii::$app->user->id;
$transfer->payment_method = Transfer::PAYMENT_METHOD_TRANSFER;
$transfer->money = $this->money;
$transfer->comment = "Csoportos beszedes";
$transfer->comment = "Csoportos beszedés";
$transfer->id_user = \Yii::$app->user->id;
$transfer->id_customer = $this->ticket->card->customer->id_customer;
$transfer->save(false);
return $transfer;
}
/**
* @param \common\models\Ticket $ticket
* @param \common\models\TicketType $type
* @return \common\models\TicketInstallmentRequest[]
* */
/**
* @param \common\models\Ticket $ticket
* @param \common\models\TicketType $type
* @param $customer
* @param $contract
* @return TicketInstallmentRequest[]
*/
public static function createInstallments($ticket,$type,$customer,$contract){
$result = [];
if ( $type->isInstallment() ){
@ -257,26 +291,35 @@ class TicketInstallmentRequest extends \yii\db\ActiveRecord
if ( isset( $discount ) ){
$money = Discount::applyDiscount( $money, $discount );
}
for ( $i = 1; $i <= $count; $i++){
$request = TicketInstallmentRequest::createInstallment($ticket, $type, $customer, $contract, $money, null, $i);
$result[] = $request;
}
}
return $result;
}
public static function createInstallment($ticket,$type,$customer,$contract,$money,$ticketCreated,$index){
/**
* @param $ticket
* @param $type
* @param $customer
* @param $contract
* @param $money
* @param $ticketCreated
* @param $index
* @return TicketInstallmentRequest
*/
public static function createInstallment(/** @noinspection PhpUnusedParameterInspection */
$ticket, $type, $customer, $contract, $money, $ticketCreated, $index){
$request = new TicketInstallmentRequest();
// $request->id_ticket = $ticket->id_ticket;
$request->id_customer = $customer->id_customer;
$request->status = TicketInstallmentRequest::$STATUS_PENDING;
$request->priority = $index;
$date = \DateTime::createFromFormat("Y.m.d", $contract->started_at, new \DateTimeZone( 'UTC'));
$date->modify("+$index month");
$date = DateUtil::addMonth($date->getTimestamp(),$index);
// $date->modify("+$index month");
$date->setTime(0, 0, 0);
$request->request_target_time_at = $date->format ( 'Y-m-d H:i:s' );
$request->request_processed_at = null;

View File

@ -228,20 +228,20 @@ function TicketSell(o){
units = app.defaults.ticket_type.time_unit_count;
app.defaults.end_date = moment(app.defaults.start_date);
switch(app.defaults.ticket_type.time_unit_type){
case app.defaults.time_unit_day:
app.defaults.end_date.add( units, 'days');
app.defaults.end_date.subtract( 1, 'days');
break;
case app.defaults.time_unit_month:
app.defaults.end_date.add( units, 'month');
app.defaults.end_date.subtract( 1, 'days');
break;
case app.defaults.time_unit_month_reference:
if ( units > 1){
app.defaults.end_date.add( units -1, 'month');
}
app.defaults.end_date.endOf('month');
break;
case app.defaults.time_unit_day:
app.defaults.end_date.add( units, 'days');
app.defaults.end_date.subtract( 1, 'days');
break;
case app.defaults.time_unit_month:
app.defaults.end_date.add( units, 'month');
app.defaults.end_date.subtract( 1, 'days');
break;
case app.defaults.time_unit_month_reference:
if ( units > 1){
app.defaults.end_date.add( units -1, 'month');
}
app.defaults.end_date.endOf('month');
break;
}
}