WIP Contract 2024-06-11
This commit is contained in:
@@ -137,7 +137,7 @@
|
|||||||
biennal
|
biennal
|
||||||
<?php elseif($contract->billing_period == 36): ?>
|
<?php elseif($contract->billing_period == 36): ?>
|
||||||
triennal
|
triennal
|
||||||
<?php else: ?>
|
<?php elseif($contract->billing_period): ?>
|
||||||
<?=(12 / $contract->billing_period)?>x Jährlich
|
<?=(12 / $contract->billing_period)?>x Jährlich
|
||||||
<?php endif; ?>
|
<?php endif; ?>
|
||||||
</td>
|
</td>
|
||||||
|
|||||||
@@ -91,6 +91,9 @@ class Admin_IvtContractImport {
|
|||||||
$last_cid = 0;
|
$last_cid = 0;
|
||||||
|
|
||||||
$i = 0;
|
$i = 0;
|
||||||
|
$maxIvtContracts = IvtCustomerProductModel::count([]);
|
||||||
|
echo "Importing from $maxIvtContracts Ivt customer_products\n";
|
||||||
|
|
||||||
foreach(IvtCustomerProductModel::getAll() as $ivt_contract) {
|
foreach(IvtCustomerProductModel::getAll() as $ivt_contract) {
|
||||||
//if($ivt_contract->cid < 104200) continue;
|
//if($ivt_contract->cid < 104200) continue;
|
||||||
//if($i > 1000 && $ivt_contract->cid != $last_cid) break; // only break after the last ivtcontract of this customer
|
//if($i > 1000 && $ivt_contract->cid != $last_cid) break; // only break after the last ivtcontract of this customer
|
||||||
@@ -166,6 +169,9 @@ class Admin_IvtContractImport {
|
|||||||
$finish_date = new DateTime($ivt_contract->created);
|
$finish_date = new DateTime($ivt_contract->created);
|
||||||
$finish_date->modify("+2 hours");
|
$finish_date->modify("+2 hours");
|
||||||
|
|
||||||
|
$last_date = new DateTime($ivt_contract->lastdate);
|
||||||
|
$last_date->modify("+1 day");
|
||||||
|
$last_date->modify("+1 hours");
|
||||||
|
|
||||||
$contract_data = [];
|
$contract_data = [];
|
||||||
$contract_data['owner_id'] = $customer->id;
|
$contract_data['owner_id'] = $customer->id;
|
||||||
@@ -179,7 +185,7 @@ class Admin_IvtContractImport {
|
|||||||
$contract_data['price_nbe'] = 0;
|
$contract_data['price_nbe'] = 0;
|
||||||
$contract_data['sla_id'] = $this->getNewSlaId($ivt_contract->sid);
|
$contract_data['sla_id'] = $this->getNewSlaId($ivt_contract->sid);
|
||||||
$contract_data['order_date'] = $finish_date->getTimestamp();
|
$contract_data['order_date'] = $finish_date->getTimestamp();
|
||||||
$contract_data['finish_date'] = $finish_date->getTimestamp();
|
$contract_data['finish_date'] = $last_date->getTimestamp();
|
||||||
$contract_data['finish_date_by'] = 1;
|
$contract_data['finish_date_by'] = 1;
|
||||||
$contract_data['imported_from'] = "ivt";
|
$contract_data['imported_from'] = "ivt";
|
||||||
$contract_data['imported_data'] = $ivt_contract->id;
|
$contract_data['imported_data'] = $ivt_contract->id;
|
||||||
@@ -208,8 +214,9 @@ class Admin_IvtContractImport {
|
|||||||
$contract_data['price'] = 0;
|
$contract_data['price'] = 0;
|
||||||
$contract_data['price_setup'] = $ip->price;
|
$contract_data['price_setup'] = $ip->price;
|
||||||
$contract_data['billing_period'] = 0;
|
$contract_data['billing_period'] = 0;
|
||||||
$neu['action'] = "ignore";
|
//$neu['action'] = "ignore";
|
||||||
$ignore = true;
|
|
||||||
|
//$ignore = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
// filter cancelled products
|
// filter cancelled products
|
||||||
@@ -247,7 +254,7 @@ class Admin_IvtContractImport {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Create Contract (dont save yet)
|
* Create Contract (don't save yet)
|
||||||
*/
|
*/
|
||||||
$contract = ContractModel::create($contract_data);
|
$contract = ContractModel::create($contract_data);
|
||||||
if(trim($ivt_contract->comment)) {
|
if(trim($ivt_contract->comment)) {
|
||||||
|
|||||||
@@ -315,7 +315,7 @@ class ContractModel {
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static function search($filter, $limit = false) {
|
public static function search($filter = [], $limit = false) {
|
||||||
//var_dump($filter);exit;
|
//var_dump($filter);exit;
|
||||||
$items = [];
|
$items = [];
|
||||||
$db = FronkDB::singleton();
|
$db = FronkDB::singleton();
|
||||||
|
|||||||
@@ -59,13 +59,13 @@ class IvtBillModel {
|
|||||||
$db = FronkDB::singleton(IVT_DBHOST, IVT_DBUSER, IVT_DBPASS, IVT_DBNAME);
|
$db = FronkDB::singleton(IVT_DBHOST, IVT_DBUSER, IVT_DBPASS, IVT_DBNAME);
|
||||||
|
|
||||||
$where = self::getSqlFilter($filter);
|
$where = self::getSqlFilter($filter);
|
||||||
$sql = "SELECT * FROM bills $where ORDER by id";
|
$sql = "SELECT * FROM bills WHERE $where ORDER by id";
|
||||||
|
|
||||||
mfLoghandler::singleton()->debug($sql);
|
mfLoghandler::singleton()->debug($sql);
|
||||||
if(is_array($limit) && count($limit)) {
|
if(is_array($limit) && count($limit)) {
|
||||||
if(is_numeric($limit['start']) && is_numeric($limit['count'])) {
|
if(is_numeric($limit['start']) && is_numeric($limit['count'])) {
|
||||||
$sql .= " LIMIT ".$limit['start'].", ".$limit['count'];
|
$sql .= " LIMIT ".$limit['start'].", ".$limit['count'];
|
||||||
} elseif(is_numeric($count)) {
|
} elseif(is_numeric($limit['count'])) {
|
||||||
$sql .= " LIMIT ".$limit['count'];
|
$sql .= " LIMIT ".$limit['count'];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -89,6 +89,26 @@ class IvtBillModel {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if(array_key_exists("date_outgoing", $filter)) {
|
||||||
|
$date_outgoing = $filter['date_outgoing'];
|
||||||
|
if($date_outgoing) {
|
||||||
|
$where .= " AND bills.date_outgoing='$date_outgoing'";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if(array_key_exists("date_outgoing>", $filter)) {
|
||||||
|
$date_outgoing = $filter['date_outgoing>'];
|
||||||
|
if($date_outgoing) {
|
||||||
|
$where .= " AND bills.date_outgoing >= '$date_outgoing'";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if(array_key_exists("date_outgoing<", $filter)) {
|
||||||
|
$date_outgoing = $filter['date_outgoing<'];
|
||||||
|
if($date_outgoing) {
|
||||||
|
$where .= " AND bills.date_outgoing <= '$date_outgoing'";
|
||||||
|
}
|
||||||
|
}
|
||||||
/*
|
/*
|
||||||
if(array_key_exists("status_id", $filter)) {
|
if(array_key_exists("status_id", $filter)) {
|
||||||
$status_id = $filter['status_id'];
|
$status_id = $filter['status_id'];
|
||||||
|
|||||||
@@ -0,0 +1,5 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
class IvtBillPositionProduct extends mfBaseModel {
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,114 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
class IvtBillPositionProductModel {
|
||||||
|
|
||||||
|
public static function create(Array $data) {
|
||||||
|
throw new Exception("Please use IvtBillPositionProductController to create IvtBillPositionProducts");
|
||||||
|
}
|
||||||
|
|
||||||
|
public static function getAll() {
|
||||||
|
$items = [];
|
||||||
|
|
||||||
|
$db = FronkDB::singleton(IVT_DBHOST, IVT_DBUSER, IVT_DBPASS, IVT_DBNAME);
|
||||||
|
|
||||||
|
$res = $db->select("bills_positions_products", "*", "1=1 ORDER BY id");
|
||||||
|
if($db->num_rows($res)) {
|
||||||
|
while($data = $db->fetch_object($res)) {
|
||||||
|
$items[] = new IvtBillPositionProduct($data);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return $items;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static function getFirst($filter = []) {
|
||||||
|
$db = FronkDB::singleton(IVT_DBHOST, IVT_DBUSER, IVT_DBPASS, IVT_DBNAME);
|
||||||
|
|
||||||
|
$where = self::getSqlFilter($filter);
|
||||||
|
$res = $db->select("bills_positions_products", "*", "$where ORDER BY id LIMIT 1");
|
||||||
|
if($db->num_rows($res)) {
|
||||||
|
$data = $db->fetch_object($res);
|
||||||
|
$item = new IvtBillPositionProduct($data);
|
||||||
|
if($item->id) {
|
||||||
|
return $item;
|
||||||
|
} else {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static function getLast($filter = []) {
|
||||||
|
$db = FronkDB::singleton(IVT_DBHOST, IVT_DBUSER, IVT_DBPASS, IVT_DBNAME);
|
||||||
|
|
||||||
|
$where = self::getSqlFilter($filter);
|
||||||
|
$res = $db->select("bills_positions_products", "*", "$where ORDER BY id DESC LIMIT 1");
|
||||||
|
if($db->num_rows($res)) {
|
||||||
|
$data = $db->fetch_object($res);
|
||||||
|
$item = new IvtBillPositionProduct($data);
|
||||||
|
if($item->id) {
|
||||||
|
return $item;
|
||||||
|
} else {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static function search($filter, $limit = false) {
|
||||||
|
$items = [];
|
||||||
|
$db = FronkDB::singleton(IVT_DBHOST, IVT_DBUSER, IVT_DBPASS, IVT_DBNAME);
|
||||||
|
|
||||||
|
$where = self::getSqlFilter($filter);
|
||||||
|
$sql = "SELECT * FROM bills_positions_products WHERE $where ORDER by id";
|
||||||
|
|
||||||
|
mfLoghandler::singleton()->debug($sql);
|
||||||
|
if(is_array($limit) && count($limit)) {
|
||||||
|
if(is_numeric($limit['start']) && is_numeric($limit['count'])) {
|
||||||
|
$sql .= " LIMIT ".$limit['start'].", ".$limit['count'];
|
||||||
|
} elseif(is_numeric($limit['count'])) {
|
||||||
|
$sql .= " LIMIT ".$limit['count'];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
$res = $db->query($sql);
|
||||||
|
if($db->num_rows($res)) {
|
||||||
|
while($data = $db->fetch_object($res)) {
|
||||||
|
$items[] = new IvtBillPositionProduct($data);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return $items;
|
||||||
|
}
|
||||||
|
|
||||||
|
private static function getSqlFilter($filter) {
|
||||||
|
$where = "1=1 ";
|
||||||
|
|
||||||
|
if(array_key_exists("bid", $filter)) {
|
||||||
|
$bid = $filter['bid'];
|
||||||
|
if($bid) {
|
||||||
|
$where .= " AND bid='$bid'";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
if(array_key_exists("status_id", $filter)) {
|
||||||
|
$status_id = $filter['status_id'];
|
||||||
|
if(is_numeric($status_id)) {
|
||||||
|
$where .= " AND IvtBillPositionProduct.status_id=$status_id";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
if(array_key_exists("street", $filter)) {
|
||||||
|
$street = FronkDB::singleton()->escape($filter["street"]);
|
||||||
|
if($street) {
|
||||||
|
$where .= " AND street like '%$street%'";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
*/
|
||||||
|
|
||||||
|
//var_dump($filter, $where);exit;
|
||||||
|
return $where;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -14,26 +14,43 @@ $me = new User(1);
|
|||||||
define("INTERNAL_USER_ID", $me->id);
|
define("INTERNAL_USER_ID", $me->id);
|
||||||
|
|
||||||
$cms = 0;
|
$cms = 0;
|
||||||
|
$cmss = 0;
|
||||||
$cys = 0;
|
$cys = 0;
|
||||||
foreach(ContractModel::search(["billing_period" => 1]) as $contract) {
|
foreach(ContractModel::getAll() as $contract) {
|
||||||
|
if($contract->billing_period == 1 && $contract->price > 0.00000) {
|
||||||
$cms += $contract->price;
|
$cms += $contract->price;
|
||||||
}
|
}
|
||||||
|
if($contract->price_setup && $contract->price_setup > 0.00000) {
|
||||||
|
$cmss += $contract->price_setup;
|
||||||
|
}
|
||||||
|
|
||||||
$First = new DateTime("2024-04-10 00:00:00");
|
}
|
||||||
$Last = new DateTime("2024-05-10 23:59:59");
|
|
||||||
|
|
||||||
|
$First = new DateTime("2024-05-13 00:00:00");
|
||||||
|
//$First = new DateTime("2024-06-09 00:00:00");
|
||||||
|
$Last = new DateTime("2024-06-12 23:59:59");
|
||||||
|
|
||||||
foreach(ContractModel::search(["billing_period" => 12]) as $contract) {
|
foreach(ContractModel::search(["billing_period" => 12]) as $contract) {
|
||||||
|
$fdate = new DateTime("@".$contract->finish_date);
|
||||||
|
$y = $fdate->format("Y");
|
||||||
|
$m = $fdate->format("m");
|
||||||
|
$d = $fdate->format("d");
|
||||||
|
|
||||||
|
//if(($m == 5 && $d >= 11) || ($m == 6 && $d <= 10)) {
|
||||||
if($contract->finish_date >= $First->getTimestamp() && $contract->finish_date <= $Last->getTimestamp()) {
|
if($contract->finish_date >= $First->getTimestamp() && $contract->finish_date <= $Last->getTimestamp()) {
|
||||||
$cys += $contract->price;
|
$cys += $contract->price;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
$cts = $cms + $cys;
|
$cts = $cms + $cys + $cmss;
|
||||||
|
|
||||||
echo "Contract Monthly Sum: $cms\n";
|
echo "Contract Monthly Sum: $cms\n";
|
||||||
|
echo "Contract Setup Sum: $cmss\n";
|
||||||
echo "Contract Yearly Sum: $cys\n";
|
echo "Contract Yearly Sum: $cys\n";
|
||||||
|
echo "--------------------------------------\n";
|
||||||
echo "Contract Total Sum: $cts\n";
|
echo "Contract Total Sum: $cts\n";
|
||||||
|
echo "======================================\n";
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@ -42,15 +59,34 @@ $iys = 0;
|
|||||||
|
|
||||||
foreach(IvtCustomerProductModel::getAll() as $ivt_contract) {
|
foreach(IvtCustomerProductModel::getAll() as $ivt_contract) {
|
||||||
$product = $ivt_contract->product;
|
$product = $ivt_contract->product;
|
||||||
if($product->interval < 1) {
|
if($product->interval == 0) {
|
||||||
$ims += $product->price;
|
$ims += $product->price;
|
||||||
} elseif($product->interval == 1 && $ivt_contract->lastdate == "2023-06-06") {
|
} elseif($product->interval == 1 && $ivt_contract->lastdate == "2024-06-10") {
|
||||||
$iys += $product->price;
|
$iys += $product->price;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
$its = $ims + $iys;
|
$its = $ims + $iys;
|
||||||
|
|
||||||
echo "IvtContract Monthly Sum: $ims\n";
|
echo "\n";
|
||||||
echo "IvtContract Yearly Sum: $iys\n";
|
echo "Ivt product_customer Monthly Sum: $ims\n";
|
||||||
echo "IvtContract Total Sum: $its\n";
|
echo "Ivt product_customer Yearly Sum: $iys\n";
|
||||||
|
echo "--------------------------------------\n";
|
||||||
|
echo "Ivt product_customer Total Sum: $its\n";
|
||||||
|
echo "======================================\n";
|
||||||
|
|
||||||
|
$ibs = 0;
|
||||||
|
|
||||||
|
foreach(IvtBillModel::search(['date_outgoing>' => "2024-06-01"]) as $ivt_bill) {
|
||||||
|
$positions = IvtBillPositionProductModel::search(["bid" => $ivt_bill->id]);
|
||||||
|
foreach($positions as $position) {
|
||||||
|
$ibs += $position->price;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//echo "\n";
|
||||||
|
echo "Ivt Bills Total Sum: $ibs\n";
|
||||||
|
echo "======================================\n";
|
||||||
|
|
||||||
|
$cid = $ibs - $cts;
|
||||||
|
echo "Diff thetool <-> ivt Bills: $cid\n";
|
||||||
|
|||||||
Reference in New Issue
Block a user