diff --git a/backend/views/inventory-item/index.php b/backend/views/inventory-item/index.php
index a5b2718..6139d9a 100644
--- a/backend/views/inventory-item/index.php
+++ b/backend/views/inventory-item/index.php
@@ -24,6 +24,7 @@ $this->registerJs('inventoryItemIndex.init( ' . json_encode($options) . ' );');
?>
+
= Html::encode($this->title) ?>
@@ -65,7 +79,7 @@ $this->registerJs('inventoryItemIndex.init( ' . json_encode($options) . ' );');
}
?>
render('_search', ['model' => $searchModel]); ?>
-
+
Magyarázat:
-
@@ -87,7 +101,7 @@ $this->registerJs('inventoryItemIndex.init( ' . json_encode($options) . ' );');
Különbség: = "Leltározott mennyiség - ( "Előző leltár" + "Beszerzett mennyiség" - "Eladott mennyiség" )
-
+
'xls']), ['class' => 'btn btn-primary']) ?>
@@ -100,7 +114,8 @@ $this->registerJs('inventoryItemIndex.init( ' . json_encode($options) . ' );');
],
[
'attribute' => 'inventory_prev_name',
- 'label' => 'Utolsó leltár'
+ 'label' => 'Utolsó leltár',
+ 'contentOptions' => ['class' => 'col-b']
],
[
'attribute' => 'item_count_system',
@@ -111,7 +126,7 @@ $this->registerJs('inventoryItemIndex.init( ' . json_encode($options) . ' );');
[
'attribute' => 'item_count',
'label' => 'Leltározott mennyiség (db)',
- 'contentOptions' => ['class' => 'numeric']
+ 'contentOptions' => ['class' => 'numeric col-b']
],
[
@@ -123,7 +138,7 @@ $this->registerJs('inventoryItemIndex.init( ' . json_encode($options) . ' );');
[
'attribute' => 'item_count_in',
'label' => 'Beszerzett mennyiség (db)',
- 'contentOptions' => ['class' => 'numeric']
+ 'contentOptions' => ['class' => 'numeric col-b' ]
],
[
@@ -135,7 +150,7 @@ $this->registerJs('inventoryItemIndex.init( ' . json_encode($options) . ' );');
[
'attribute' => 'item_difference',
'label' => 'Különbség (db)',
- 'contentOptions' => ['class' => 'numeric']
+ 'contentOptions' => ['class' => 'numeric col-b']
],
[
@@ -146,7 +161,7 @@ $this->registerJs('inventoryItemIndex.init( ' . json_encode($options) . ' );');
[
'attribute' => 'item_total_price_brutto',
'label' => 'Összeg (Ft)',
- 'contentOptions' => ['class' => 'numeric']
+ 'contentOptions' => ['class' => 'numeric col-b']
],
@@ -165,7 +180,7 @@ $this->registerJs('inventoryItemIndex.init( ' . json_encode($options) . ' );');
'urlCreator' => function ($action, $model) {
$result = "";
if ($action == 'update') {
- $result = Url::toRoute(['update-item', 'id' => $model['item_id_inventory_item']]);
+ $result = Url::toRoute(['update', 'id' => $model['item_id_inventory_item']]);
}
return $result;
}
diff --git a/backend/views/inventory-item/update.php b/backend/views/inventory-item/update.php
index a9ec386..7f15fa3 100644
--- a/backend/views/inventory-item/update.php
+++ b/backend/views/inventory-item/update.php
@@ -7,10 +7,11 @@ use yii\widgets\DetailView;
/* @var $model common\models\InventoryItem */
$this->title = Yii::t('common/inventory-item', 'Leltár termék');
-$this->params['breadcrumbs'][] = ['label' => Yii::t('common/inventory-item', 'Inventory Items'), 'url' => ['index']];
+$this->params['breadcrumbs'][] = ['label' => 'Leltár termékek', 'url' => ['index', 'id' => $model->id_inventory]];
$this->params['breadcrumbs'][] = ['label' => $model->id_inventory_item, 'url' => ['view', 'id' => $model->id_inventory_item]];
$this->params['breadcrumbs'][] = Yii::t('common/inventory-item', 'Update');
?>
+
= Html::encode($this->title) ?>
diff --git a/changelog.txt b/changelog.txt
index 4137da8..bcb4e38 100644
--- a/changelog.txt
+++ b/changelog.txt
@@ -1,3 +1,7 @@
+-0.0.86
+ - add inventory "load sold count" for item fix
+ - Detstat file > transfer type cash on failed
+ - add ticket installment dateutal/addDay changes
-0.0.85
- add key assign/unassign log
-0.0.84
diff --git a/common/components/DateUtil.php b/common/components/DateUtil.php
new file mode 100644
index 0000000..7cc9e58
--- /dev/null
+++ b/common/components/DateUtil.php
@@ -0,0 +1,68 @@
+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);
+ }
+
+}
\ No newline at end of file
diff --git a/common/components/DetStatTetelProcessor.php b/common/components/DetStatTetelProcessor.php
index 081a1ed..4c5e3fa 100644
--- a/common/components/DetStatTetelProcessor.php
+++ b/common/components/DetStatTetelProcessor.php
@@ -149,7 +149,8 @@ class DetStatTetelProcessor extends Object {
'discount'=> $discount,
'contract'=> $this->contract,
'ticketInstallmentRequest' => $megbizas,
- 'transferStatus' => Transfer::STATUS_NOT_PAID
+ 'transferStatus' => Transfer::STATUS_NOT_PAID,
+ 'paymentMethod' => Transfer::PAYMENT_METHOD_CASH
]
);
@@ -219,7 +220,7 @@ class DetStatTetelProcessor extends Object {
* Szerződés módosítása, ha a detsta üzenetben a megbízás el lett fogadva
* */
protected function updateContractOnSuccess(){
- \Yii::info('Szerződés frissítése - megbizás elfogadva ' );
+ \Yii::info('Szerződés frissítése - megbízás elfogadva ' );
$this->incRequiredParts();
$this->contract->part_paid = $this->contract->part_paid +1;
$this->updateContractPaidStatus();
@@ -232,7 +233,7 @@ class DetStatTetelProcessor extends Object {
}
protected function updateContractOnFail(){
- \Yii::info('Szerződés frissítése - megbizás visszautasítva ' );
+ \Yii::info('Szerződés frissítése - megbízás visszautasítva ' );
$this->incRequiredParts();
$this->updateContractPaidStatus();
// $this->contract->status = Contract::$STATUS_NOT_PAID;
diff --git a/common/config/params.php b/common/config/params.php
index 1fdaa81..db04e5d 100644
--- a/common/config/params.php
+++ b/common/config/params.php
@@ -5,7 +5,7 @@ return [
'supportEmail' => 'rocho02@gmail.com',
'infoEmail' => 'info@rocho-net.hu',
'user.passwordResetTokenExpire' => 3600,
- 'version' => 'v0.0.85',
+ 'version' => 'v0.0.86',
'company' => 'movar',//gyor
'company_name' => "Freimann Kft.",
'product_visiblity' => 'account',// on reception which products to display. account or global
diff --git a/common/models/Inventory.php b/common/models/Inventory.php
index 4e3c196..9a18b1d 100644
--- a/common/models/Inventory.php
+++ b/common/models/Inventory.php
@@ -20,6 +20,8 @@ use common\components\Helper;
* @property string $name
* @property string $created_at
* @property string $updated_at
+ * @property mixed userName
+ * @property mixed accountName
*/
class Inventory extends \common\models\BaseFitnessActiveRecord
{
diff --git a/common/models/InventoryItem.php b/common/models/InventoryItem.php
index c20442c..e1c496b 100644
--- a/common/models/InventoryItem.php
+++ b/common/models/InventoryItem.php
@@ -2,10 +2,12 @@
namespace common\models;
-use Yii;
+use /** @noinspection PhpMethodOrClassCallIsNotCaseSensitiveInspection */
+ Yii;
+use yii\db\Expression;
+use yii\db\Query;
use yii\helpers\ArrayHelper;
use common\components\UserAwareBehavior;
-use common\components\Helper;
use common\components\ProductAwareBehavior;
/**
@@ -28,6 +30,7 @@ use common\components\ProductAwareBehavior;
* @property string $created_at
* @property string $updated_at
* @property mixed productName
+ * @property mixed product
*/
class InventoryItem extends BaseFitnessActiveRecord
{
@@ -36,7 +39,8 @@ class InventoryItem extends BaseFitnessActiveRecord
public static $TYPE_INVENTORY_GROUP = 20;
- public static $UPDATE_COUNT = "
+ public static /** @noinspection SqlResolve */
+ $UPDATE_COUNT = "
UPDATE product as p1
inner JOIN ( select inventory_item.id_product as id_product , inventory_item.count as count
from inventory_item
@@ -113,7 +117,11 @@ class InventoryItem extends BaseFitnessActiveRecord
public function getInventoryGroup(){
return $this->hasOne( Product::className() , [ 'id_inventory_group' => 'id_inventory_group' ]);
}
-
+
+ public function getInventoryItemPrev(){
+ return $this->hasOne( InventoryItem::className(),['id_inventory_item' => 'id_inventory_item_prev'] );
+ }
+
public function getProductName(){
$result = "";
@@ -136,10 +144,12 @@ class InventoryItem extends BaseFitnessActiveRecord
return $result;
}
-
- public function getName(){
- $name = "";
-
+
+ /**
+ * @return string
+ */
+ public function getName(){
+
if ( isset($this->id_product )){
$name = $this->getProductName();
}else{
@@ -170,7 +180,54 @@ class InventoryItem extends BaseFitnessActiveRecord
$this->total_price_brutto = $price * $diff;
}
-
+
+
+
+
+
+ public static function findNextItemAlphabetical($id_inventory_item){
+
+ $inventoryItem = InventoryItem::findOne($id_inventory_item);
+ $id_inventory = $inventoryItem->id_inventory;
+ $currentItemId = $id_inventory_item;
+
+ $query = new Query();
+ $query->select([
+ 'inventory_item.id_inventory_item as inventory_item_id_inventory',
+ new Expression(
+ "case when inventory_item.type = " .InventoryItem::$TYPE_PRODUCT . " then product.name else inventory_group.name end as name"
+ )
+ ]);
+
+ $query->from('inventory_item');
+ $query->leftJoin("product", 'product.id_product = inventory_item.id_product and inventory_item.type =' .InventoryItem::$TYPE_PRODUCT);
+ $query->leftJoin("inventory_group", 'inventory_group.id_inventory_group = inventory_item.id_product and inventory_item.type =' .InventoryItem::$TYPE_INVENTORY_GROUP);
+ $query->andWhere(['id_inventory' => $id_inventory]);
+ $query->orderBy("name");
+ $result = $query->all();
+
+ $currentItemIndex = null;
+ $size = count($result);
+ for ( $i = 0; $i < $size; $i++ ){
+ $item = $result[$i];
+ $id = $item['inventory_item_id_inventory'];
+ if ( $id == $currentItemId ){
+ $currentItemIndex = $i;
+ break;
+ }
+ }
+
+ if ( isset( $currentItemIndex ) ){
+ $next = ($currentItemIndex +1 );
+ if ($size > $next){
+ return $result[$next]['inventory_item_id_inventory'];
+ }
+ }
+
+ return null;
+ }
+
+
public function afterSave($insert, $changedAttributes){
if ( !$insert ){
// if ( $this->type == 'product'){
diff --git a/common/models/TicketInstallmentRequest.php b/common/models/TicketInstallmentRequest.php
index 453d43d..8867389 100644
--- a/common/models/TicketInstallmentRequest.php
+++ b/common/models/TicketInstallmentRequest.php
@@ -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;
diff --git a/console/controllers/InventoryConsoleController.php b/console/controllers/InventoryConsoleController.php
new file mode 100644
index 0000000..9944594
--- /dev/null
+++ b/console/controllers/InventoryConsoleController.php
@@ -0,0 +1,74 @@
+andWhere(['id_inventory' => $inventory->id_inventory])->all();
+
+ /** @var /common/models/InventoryItem $item */
+ foreach ($items as $item ){
+
+ $prev = $item->inventoryItemPrev;
+
+ if ( !isset($prev)){
+ continue;
+ }
+ $start = $prev->created_at;
+ $end = $item->created_at;
+
+
+ $query = new Query();
+ $query->select([
+ new Expression(" coalesce( sum( transfer.count ),0)")
+ ]);
+ $query->from('transfer');
+ $query->innerJoin('sale','sale.id_sale = transfer.id_object');
+ $query->innerJoin('product','sale.id_product = product.id_product');
+
+ $query->andWhere(['transfer.type' => Transfer::TYPE_PRODUCT]);
+ $query->andWhere(['in', 'transfer.status', [Transfer::STATUS_NOT_PAID, Transfer::STATUS_PAID]]);
+ $query->andWhere(['product.id_product' => $prev->id_product]);
+
+ $query->andWhere([ '>','transfer.created_at',$start ]);
+ $query->andWhere([ '<','transfer.created_at',$end ]);
+
+ $products = $query->scalar();
+
+ $item->count_sold = $products;
+
+ $item->recalculateTotalPriceBrutto();
+
+ echo $item->price_brutto . " - ". $item->productName ."\n";
+
+ $item->save();
+
+
+
+ }
+
+
+ }
+
+
+
+}
+
diff --git a/frontend/web/js/ticket.sell.js b/frontend/web/js/ticket.sell.js
index 6930182..1962e0e 100644
--- a/frontend/web/js/ticket.sell.js
+++ b/frontend/web/js/ticket.sell.js
@@ -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;
}
}