add contract started_at field

This commit is contained in:
Roland Schneider 2016-03-03 07:57:17 +01:00
parent b2c1cc0a6d
commit fd4122a983
13 changed files with 222 additions and 16 deletions

View File

@ -59,6 +59,7 @@ class ContractSearch extends Contract
'contract.part_count as contract_part_count', 'contract.part_count as contract_part_count',
'contract.created_at as contract_created_at', 'contract.created_at as contract_created_at',
'contract.expired_at as contract_expired_at', 'contract.expired_at as contract_expired_at',
'contract.started_at as contract_started_at',
]); ]);
$query->from('contract'); $query->from('contract');
@ -117,6 +118,10 @@ class ContractSearch extends Contract
'asc' => ['contract.expired_at' => SORT_ASC ], 'asc' => ['contract.expired_at' => SORT_ASC ],
'desc' => ['contract.expired_at' => SORT_DESC], 'desc' => ['contract.expired_at' => SORT_DESC],
], ],
'contract_started_at' => [
'asc' => ['contract.started_at' => SORT_ASC ],
'desc' => ['contract.started_at' => SORT_DESC],
],
] ]
], ],
]); ]);

View File

@ -75,6 +75,11 @@ $this->params['breadcrumbs'][] = $this->title;
'label' =>'Létrehozva', 'label' =>'Létrehozva',
'format' => 'date' 'format' => 'date'
], ],
[
'attribute' => 'contract_started_at' ,
'label' =>'Érvényes tól',
'format' => 'date'
],
[ [
'attribute' => 'contract_expired_at' , 'attribute' => 'contract_expired_at' ,
'label' =>'Lejárat', 'label' =>'Lejárat',

View File

@ -22,6 +22,7 @@ use common\components\Helper;
* @property string $expired_at * @property string $expired_at
* @property string $created_at * @property string $created_at
* @property string $updated_at * @property string $updated_at
* @property string $started_at
*/ */
class Contract extends \yii\db\ActiveRecord class Contract extends \yii\db\ActiveRecord
{ {
@ -82,6 +83,7 @@ class Contract extends \yii\db\ActiveRecord
'expired_at' => Yii::t('common/contract', 'Lejárati dátum'), 'expired_at' => Yii::t('common/contract', 'Lejárati dátum'),
'created_at' => Yii::t('common/contract', 'Létrehozva'), 'created_at' => Yii::t('common/contract', 'Létrehozva'),
'updated_at' => Yii::t('common/contract', 'Módosítva'), 'updated_at' => Yii::t('common/contract', 'Módosítva'),
'started_at' => Yii::t('common/contract', 'Érvényesség kezdete'),
]; ];
} }

View File

@ -123,7 +123,12 @@ class TicketInstallmentRequest extends \yii\db\ActiveRecord
} }
public function getTicketExpirationDate(){ public function getTicketExpirationDate(){
return strtotime( $this->request_target_time_at . " +1 month -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();
} }
@ -246,9 +251,11 @@ class TicketInstallmentRequest extends \yii\db\ActiveRecord
if ( isset( $discount ) ){ if ( isset( $discount ) ){
$money = Discount::applyDiscount( $money, $discount ); $money = Discount::applyDiscount( $money, $discount );
} }
$ticketCreatedAt = time();
for ( $i = 1; $i <= $count; $i++){ for ( $i = 1; $i <= $count; $i++){
$request = TicketInstallmentRequest::createInstallment($ticket, $type, $customer, $contract, $money, $ticketCreatedAt, $i); $request = TicketInstallmentRequest::createInstallment($ticket, $type, $customer, $contract, $money, null, $i);
$result[] = $request; $result[] = $request;
} }
@ -262,7 +269,11 @@ class TicketInstallmentRequest extends \yii\db\ActiveRecord
$request->id_customer = $customer->id_customer; $request->id_customer = $customer->id_customer;
$request->status = TicketInstallmentRequest::$STATUS_PENDING; $request->status = TicketInstallmentRequest::$STATUS_PENDING;
$request->priority = $index; $request->priority = $index;
$request->request_target_time_at = date('Y-m-d H:i:s', strtotime("+".$index." month" )); $date = \DateTime::createFromFormat("Y.m.d", $contract->started_at, new \DateTimeZone( 'UTC'));
$date->modify("+$index month");
// $date->modify("-1 day");
$date->setTime(0, 0, 0);
$request->request_target_time_at = $date->format ( 'Y-m-d H:i:s' );
$request->request_processed_at = null; $request->request_processed_at = null;
$request->request_sent_at = null; $request->request_sent_at = null;
$request->money = $money; $request->money = $money;

View File

@ -672,8 +672,8 @@ class Transfer extends \common\models\BaseFitnessActiveRecord {
self::notInInterval ( $query, 'transfer.created_at', $start, $end ); self::notInInterval ( $query, 'transfer.created_at', $start, $end );
} }
echo "start date is: ". $start; // echo "start date is: ". $start;
echo "start date is: " . gettype( $start ); // echo "start date is: " . gettype( $start );
if ( !RoleDefinition::isAdmin() ){ if ( !RoleDefinition::isAdmin() ){
Helper::restrictIfNotAdminTheStartDate($query, $start); Helper::restrictIfNotAdminTheStartDate($query, $start);

View File

@ -0,0 +1,31 @@
<?php
use yii\db\Schema;
use yii\db\Migration;
class m160302_171507_alter__table__contract__add__column__started_at extends Migration
{
public function up()
{
$this->addColumn("contract", "started_at", "datetime");
$this->execute("update contract set started_at = created_at");
}
public function down()
{
echo "m160302_171507_alter__table__contract__add__column__started_at cannot be reverted.\n";
return false;
}
/*
// Use safeUp/safeDown to run migration code within a transaction
public function safeUp()
{
}
public function safeDown()
{
}
*/
}

View File

@ -0,0 +1,29 @@
<?php
/**
* @link http://www.yiiframework.com/
* @copyright Copyright (c) 2008 Yii Software LLC
* @license http://www.yiiframework.com/license/
*/
namespace frontend\assets;
use yii\web\AssetBundle;
/**
* @author Qiang Xue <qiang.xue@gmail.com>
* @since 2.0
*/
class ContractMakeAsset extends AssetBundle
{
public $basePath = '@webroot';
public $baseUrl = '@web';
public $css = [
];
public $js = [
'js/contract.make.js',
];
public $depends = [
'frontend\assets\AppAsset',
'yii\jui\JuiAsset',
];
}

View File

@ -284,9 +284,14 @@ class ContractController extends Controller {
throw new Exception ( "Az oldal nem található" ); throw new Exception ( "Az oldal nem található" );
} }
$model = new ContractForm ( [ $model = new ContractForm ( [
'customer' => $customer 'customer' => $customer
] ); ] );
$model->started_at = date(date('Y.m.d'));
$model->fillOut (); $model->fillOut ();
if ($model->load ( Yii::$app->request->post () ) && $model->validate ()) { if ($model->load ( Yii::$app->request->post () ) && $model->validate ()) {

View File

@ -39,6 +39,8 @@ class ContractForm extends Model {
private $ticketType; private $ticketType;
private $money; private $money;
private $discount; private $discount;
public $started_at;
public $timestampStart;
/** /**
* @inheritdoc * @inheritdoc
*/ */
@ -59,7 +61,9 @@ class ContractForm extends Model {
"bank_name", "bank_name",
'phone', 'phone',
'email', 'email',
'payment_method' 'payment_method' ,
'started_at',
'started_at'
], ],
'required' 'required'
], ],
@ -124,7 +128,8 @@ class ContractForm extends Model {
'ticket_type' 'ticket_type'
], ],
'validateTicketType' 'validateTicketType'
] ] ,
[[ 'started_at', ], 'date', 'format' =>Yii::$app->formatter->dateFormat , 'timestampAttribute' => 'timestampStart' ,'timestampAttributeFormat' => 'yyyy-MM-dd' ,'timeZone' => 'UTC' ],
]; ];
} }
public function validateTicketType($attribute, $params) { public function validateTicketType($attribute, $params) {
@ -162,6 +167,7 @@ class ContractForm extends Model {
'ticket_type' => 'Bérlet típus' , 'ticket_type' => 'Bérlet típus' ,
'payment_method' => 'Fizetési mód (első bérlet)' , 'payment_method' => 'Fizetési mód (első bérlet)' ,
'id_discount' => 'Kedvezmény' , 'id_discount' => 'Kedvezmény' ,
'started_at' => 'Érvényesség kezdete' ,
]; ];
} }
public function fillOut() { public function fillOut() {
@ -223,8 +229,8 @@ class ContractForm extends Model {
$ticket->id_user = \Yii::$app->user->id; $ticket->id_user = \Yii::$app->user->id;
$ticket->id_account = Account::readDefault (); $ticket->id_account = Account::readDefault ();
$ticket->id_discount = $this->id_discount; $ticket->id_discount = $this->id_discount;
$ticket->start = date ( 'Y-m-d' ); $ticket->start = $this->started_at;
$date = new \DateTime (); $date = new \DateTime ( $this->timestampStart);
$date->modify ( '+1 month' ); $date->modify ( '+1 month' );
$date->modify ( '-1 day' ); $date->modify ( '-1 day' );
$ticket->end = $date->format ( 'Y-m-d H:i:s' ); $ticket->end = $date->format ( 'Y-m-d H:i:s' );
@ -283,7 +289,12 @@ class ContractForm extends Model {
$contract->part_count = $this->ticketType->installment_count; $contract->part_count = $this->ticketType->installment_count;
$contract->part_paid = 0; $contract->part_paid = 0;
$contract->part_required = 0; $contract->part_required = 0;
$contract->expired_at = date ( 'Y-m-d', strtotime ( "today +12 month -1 day" ) ); $contract->started_at = $this->started_at;
$date = new \DateTime( $this->timestampStart );
$date->modify ( '+1 year' );
$date->modify ( '-1 day' );
$date->setTime(0, 0, 0);
$contract->expired_at = $date->format ( 'Y-m-d H:i:s' );
$contract->id_ticket_type = $this->ticketType->id_ticket_type; $contract->id_ticket_type = $this->ticketType->id_ticket_type;
if (! $contract->save ( false )) { if (! $contract->save ( false )) {

View File

@ -14,6 +14,11 @@ use common\components\Azaz;
$customerBankAccount = $customer->bank_account; $customerBankAccount = $customer->bank_account;
$customerIdCustomer = $customer->id_customer; $customerIdCustomer = $customer->id_customer;
// $dt = \DateTime::createFromFormat("Y-m-d H:i:s", $model->started_at);
// $contractStartAtDate = $dt->format("Y.m.d");
$contractStartAtDate = \Yii::$app->formatter->asDate($model->started_at);
$contractDate = date('Y.m.d'); $contractDate = date('Y.m.d');
$azaz = new Azaz(); $azaz = new Azaz();
@ -241,7 +246,7 @@ másrészről:
Teljesítés adatai: Teljesítés adatai:
</div> </div>
<div> <div>
Érvényesség kezdete: <?php echo $contractDate?> lejárata: Érvényesség kezdete: <?php echo $contractStartAtDate?> lejárata:
</div> </div>
<div> <div>
Teljesítés felső értékhatára: Teljesítés felső értékhatára:

View File

@ -8,6 +8,7 @@ use frontend\components\HtmlHelper;
use kartik\widgets\DatePicker; use kartik\widgets\DatePicker;
use common\models\Transfer; use common\models\Transfer;
use common\models\Discount; use common\models\Discount;
use frontend\assets\ContractMakeAsset;
/* @var $this yii\web\View */ /* @var $this yii\web\View */
/* @var $model common\models\Contract */ /* @var $model common\models\Contract */
@ -17,12 +18,26 @@ use common\models\Discount;
<?php <?php
ContractMakeAsset::register($this);
$types = TicketType::findAll(['status' => TicketType::STATUS_ACTIVE ,'installment_enabled' => '1']); $types = TicketType::findAll(['status' => TicketType::STATUS_ACTIVE ,'installment_enabled' => '1']);
$typeOptions = TicketType::modelsToArray($types);
$types = HtmlHelper::mkTicketTypeOptions($types); $types = HtmlHelper::mkTicketTypeOptions($types);
$discounts = Discount::readTicketDiscounts(); $discounts = Discount::readTicketDiscounts();
$discountOptions = Discount::modelsToArray($discounts,[]);
$discounts = ['' => ''] + HtmlHelper::mkDiscountOptions($discounts); $discounts = ['' => ''] + HtmlHelper::mkDiscountOptions($discounts);
$options = [];
$options['ticket_types'] = $typeOptions;
$options['discounts'] = $discountOptions;
$this->registerJs(' contract_make.init( '. json_encode($options) .' );');
?> ?>
<h1>Szerződés létrehozása</h1> <h1>Szerződés létrehozása</h1>
<div class="contract-form"> <div class="contract-form">
@ -92,7 +107,12 @@ use common\models\Discount;
<?= $form->field($model, 'ticket_type')->dropDownList($types) ?> <?= $form->field($model, 'ticket_type')->dropDownList($types) ?>
</div> </div>
<div class="col-md-6"> <div class="col-md-6">
<?= $form->field($model, 'started_at')->widget(\kartik\date\DatePicker::classname(), [
'pluginOptions' => [
'autoclose'=>true,
'format' => 'yyyy.mm.dd'
]
]) ?>
</div> </div>
</div> </div>
<div class="row"> <div class="row">
@ -106,8 +126,19 @@ use common\models\Discount;
<p>
Figyelem: A szerződés létrehozásakor a szerződés első bérlete bekerül a vásálró kosarába.
</p>
<table class="table table-striped">
<tr>
<td>Bérlet ára</td>
<td class="ticket-price"></td>
</tr>
<tr>
<td>Összesen</td>
<td class="ticket-total"></td>
</tr>
</table>
<div class="form-group"> <div class="form-group">

View File

@ -41,6 +41,7 @@ $this->params['breadcrumbs'][] = $this->title;
'part_paid', 'part_paid',
'part_required', 'part_required',
'part_count', 'part_count',
'started_at:datetime',
'expired_at:datetime', 'expired_at:datetime',
'created_at:datetime', 'created_at:datetime',
'updated_at:datetime', 'updated_at:datetime',

View File

@ -0,0 +1,70 @@
var contract_make ={
defaults :{
ticket_types : [],
discounts: [],
dd_types: '#contractform-ticket_type',
dd_discounts: '#contractform-id_discount',
},
init: function(o){
contract_make.defaults = $.extend(contract_make.defaults, o);
contract_make.update();
contract_make.getDDTypes().change(contract_make.update);
contract_make.getDDDiscounts().change(contract_make.update);
},
getDDTypes: function(){
return $(contract_make.defaults.dd_types);
},
getDDDiscounts: function(){
return $(contract_make.defaults.dd_discounts);
},
findType: function(id){
var type ;
var i;
type = null;
for ( i = 0; i<contract_make.defaults.ticket_types.length; i++ ){
if ( contract_make.defaults.ticket_types[i]['id_ticket_type'] == id ){
type = contract_make.defaults.ticket_types[i];
break;
}
}
return type;
},
findDiscount: function(id){
var type ;
var i;
type = null;
if ( id && !isNaN(id) ){
for ( i = 0; i < contract_make.defaults.discounts.length; i++ ){
if ( contract_make.defaults.discounts[i]['id_discount'] == id ){
type = contract_make.defaults.discounts[i];
break;
}
}
}
return type;
},
update: function(){
var type = contract_make.findType( +contract_make.getDDTypes().val());
var discount = contract_make.findDiscount( +contract_make.getDDDiscounts().val() );
var total = contract_make.calcPriceBrutto(type,discount);
$('.ticket-price').html(type.price_brutto);
$('.ticket-total').html(total);
},
calcPriceBrutto: function(type,discount){
var result;
result = type.price_brutto;
if ( discount!= null ){
var d = result* discount.value /100;
d = Math.floor( d );
result = result - d;
}
return result;
}
}