Order: Save Voicenumber when saving Order and check if number exists
This commit is contained in:
@@ -32,6 +32,8 @@
|
|||||||
</div>
|
</div>
|
||||||
<!-- end page title -->
|
<!-- end page title -->
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-lg-12">
|
<div class="col-lg-12">
|
||||||
|
|
||||||
@@ -51,7 +53,19 @@
|
|||||||
|
|
||||||
<input type="hidden" name="id" value="<?=$order->id?>" />
|
<input type="hidden" name="id" value="<?=$order->id?>" />
|
||||||
|
|
||||||
|
<?php if(array_key_exists(MFAPPNAME."_orderproduct_warnings", $_SESSION) && count($_SESSION[MFAPPNAME."_orderproduct_warnings"])): ?>
|
||||||
|
<div class="row justify-content-center">
|
||||||
|
<div class="col-8">
|
||||||
|
<div class="alert alert-danger">
|
||||||
|
<strong>ACHTUNG:</strong> Bei einem oder mehreren Produkten ist ein Fehler aufgetreten!
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<?php endif; ?>
|
||||||
|
|
||||||
<div class="row">
|
<div class="row">
|
||||||
|
|
||||||
|
|
||||||
<div class="col-lg-6" id="owner-block">
|
<div class="col-lg-6" id="owner-block">
|
||||||
|
|
||||||
|
|
||||||
@@ -780,6 +794,18 @@
|
|||||||
<?php endif; ?>
|
<?php endif; ?>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
<?php if(array_key_exists(MFAPPNAME."_orderproduct_warnings", $_SESSION) && count($_SESSION[MFAPPNAME."_orderproduct_warnings"]) && array_key_exists($product->id, $_SESSION[MFAPPNAME."_orderproduct_warnings"])): ?>
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-10">
|
||||||
|
<div class="alert alert-danger">
|
||||||
|
<?=$_SESSION[MFAPPNAME."_orderproduct_warnings"][$product->id]?>
|
||||||
|
<?php unset($_SESSION[MFAPPNAME."_orderproduct_warnings"][$product->id]); ?>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
<?php endif; ?>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<?php $i++; ?>
|
<?php $i++; ?>
|
||||||
@@ -1431,14 +1457,26 @@
|
|||||||
|
|
||||||
if(("numbers" in success.result) && success.result.numbers.length) {
|
if(("numbers" in success.result) && success.result.numbers.length) {
|
||||||
$("#voicenumber-" + id + "-" + num).empty();
|
$("#voicenumber-" + id + "-" + num).empty();
|
||||||
|
var found_default = false;
|
||||||
success.result.numbers.forEach(function(number) {
|
success.result.numbers.forEach(function(number) {
|
||||||
if(number == default_value) {
|
if(number == default_value) {
|
||||||
$("#voicenumber-" + id + "-" + num).append("<option value='" + number + "' selected='selected'>+" + number + "</option>");
|
$("#voicenumber-" + id + "-" + num).append("<option value='" + number + "' selected='selected'>+" + number + "</option>");
|
||||||
|
found_default = true;
|
||||||
} else {
|
} else {
|
||||||
$("#voicenumber-" + id + "-" + num).append("<option value='" + number + "'>+" + number + "</option>");
|
$("#voicenumber-" + id + "-" + num).append("<option value='" + number + "'>+" + number + "</option>");
|
||||||
}
|
}
|
||||||
|
|
||||||
});
|
});
|
||||||
|
|
||||||
|
if(default_value && !found_default) {
|
||||||
|
// default value is the number saved in this OrderProduct, so it's not free anymore
|
||||||
|
// and needs to be added to the select element
|
||||||
|
$("#voicenumber-" + id + "-" + num).append("<option value='" + default_value + "' selected='selected'>+" + default_value + "</option>");
|
||||||
|
// sort number list
|
||||||
|
$("#voicenumber-" + id + "-" + num).html($("#voicenumber-" + id + "-" + num + " option").sort(function (a, b) {
|
||||||
|
return a.text == b.text ? 0 : a.text < b.text ? -1 : 1
|
||||||
|
}));
|
||||||
|
}
|
||||||
//$("#voicenumberblock-" + id + "-line-" + num).hide();
|
//$("#voicenumberblock-" + id + "-line-" + num).hide();
|
||||||
$("#voicenumber-custom-" + id + "-line-" + num).hide();
|
$("#voicenumber-custom-" + id + "-line-" + num).hide();
|
||||||
$("#voicenumber-custom-" + id + "-line-" + num + " input").val("");
|
$("#voicenumber-custom-" + id + "-line-" + num + " input").val("");
|
||||||
|
|||||||
@@ -322,6 +322,8 @@ class Contract extends mfBaseModel {
|
|||||||
|
|
||||||
foreach($voicenumbers as $vn) {
|
foreach($voicenumbers as $vn) {
|
||||||
$vn->contract_id = $this->id;
|
$vn->contract_id = $this->id;
|
||||||
|
$vn->active = 1;
|
||||||
|
$vn->activated_date = date("U");
|
||||||
$vn->save();
|
$vn->save();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -316,6 +316,34 @@ class ContractModel {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static function getFirstActive($filter) {
|
||||||
|
$db = FronkDB::singleton();
|
||||||
|
|
||||||
|
$where = self::getSqlFilter($filter);
|
||||||
|
$sql = "SELECT Contract.* FROM Contract
|
||||||
|
LEFT JOIN Address ON (Contract.owner_id = Address.id)
|
||||||
|
LEFT JOIN OrderProduct ON (Contract.orderproduct_id = OrderProduct.id)
|
||||||
|
LEFT JOIN `Order` ON (OrderProduct.order_id = `Order`.id)
|
||||||
|
LEFT JOIN Product ON (Contract.product_id = Product.id)
|
||||||
|
WHERE $where
|
||||||
|
AND (cancel_date IS NULL OR cancel_date > UNIX_TIMESTAMP())
|
||||||
|
GROUP BY Contract.id
|
||||||
|
ORDER BY Contract.`create`,Contract.id
|
||||||
|
LIMIT 1";
|
||||||
|
//var_dump($sql);exit;
|
||||||
|
$res = $db->query($sql);
|
||||||
|
if($db->num_rows($res)) {
|
||||||
|
$data = $db->fetch_object($res);
|
||||||
|
$item = new Contract($data);
|
||||||
|
if($item->id) {
|
||||||
|
return $item;
|
||||||
|
} else {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
public static function getFirst($filter) {
|
public static function getFirst($filter) {
|
||||||
$db = FronkDB::singleton();
|
$db = FronkDB::singleton();
|
||||||
|
|
||||||
|
|||||||
@@ -935,6 +935,7 @@ class OrderController extends mfBaseController {
|
|||||||
$ext_products_nbe = 0;
|
$ext_products_nbe = 0;
|
||||||
|
|
||||||
//var_dump($r->products);exit;
|
//var_dump($r->products);exit;
|
||||||
|
$orderproduct_warnings = [];
|
||||||
// validate and add products
|
// validate and add products
|
||||||
if(is_array($r->products) && count($r->products)) {
|
if(is_array($r->products) && count($r->products)) {
|
||||||
foreach($r->products as $pos => $p) {
|
foreach($r->products as $pos => $p) {
|
||||||
@@ -1026,8 +1027,48 @@ class OrderController extends mfBaseController {
|
|||||||
if(substr($number, 0, 1) != "+") $number = "+$number";
|
if(substr($number, 0, 1) != "+") $number = "+$number";
|
||||||
//if($number && !in_array($number, $voicenumbers)) $voicenumbers[] = $number;
|
//if($number && !in_array($number, $voicenumbers)) $voicenumbers[] = $number;
|
||||||
|
|
||||||
|
$sysnumber = preg_replace('/^\+/', '',$number);
|
||||||
|
// lookup Voicenumber and add orderproduct_id
|
||||||
|
$vn = VoicenumberModel::getFirst(["number" => $sysnumber]);
|
||||||
|
//var_dump($vn);exit;
|
||||||
|
if($vn && $vn->voicenumberblock_id) { // ignore ported numbers
|
||||||
|
if($vn->contract_id) {
|
||||||
|
$contract = ContractModel::getFirstActive(["id" => $vn->contract_id]);
|
||||||
|
if($contract && $contract->orderproduct_id != $orderproduct_id) {
|
||||||
|
$this->layout()->setFlash("Rufnummer $sysnumber ist bereits vergeben (Contract " . $contract->id . ")", "error");
|
||||||
|
$orderproduct_warnings[$orderproduct_id] = "Rufnummer $sysnumber wurde entfernt, da sie bereits in Contract " . $contract->id . " vegeben ist.";
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if($vn->orderproduct_id && $vn->orderproduct_id != $orderproduct_id) {
|
||||||
|
$vn_op = new OrderProduct($vn->orderproduct_id);
|
||||||
|
//var_dump($vn_op);exit;
|
||||||
|
if($vn_op->id) {
|
||||||
|
$this->layout()->setFlash("Rufnummer $sysnumber ist bereits vergeben (Bestellung " . $vn_op->order->id . "; " . $vn_op->order->owner->getCompanyOrName() . ")", "error");
|
||||||
|
$orderproduct_warnings[$orderproduct_id] = "Rufnummer $sysnumber wurde entfernt, da sie bereits für Bestellung " . $vn_op->order->id . " / ".$vn_op->order->owner->getCompanyOrName()." vergeben wurde.";
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
$vn->orderproduct_id = $orderproduct_id;
|
||||||
|
$vn->save();
|
||||||
|
|
||||||
|
$voicenumbers[] = $number;
|
||||||
|
} elseif(!$vn) {
|
||||||
|
$block = Voicenumberblock::findBlock($sysnumber);
|
||||||
|
//var_dump($number, $block);exit;
|
||||||
|
$vn = VoicenumberModel::create([
|
||||||
|
"number" => $sysnumber,
|
||||||
|
"voicenumberblock_id" => ($block) ? $block->id : null,
|
||||||
|
"orderproduct_id" => $orderproduct_id,
|
||||||
|
"ported_in" => ($block) ? 0 : 1,
|
||||||
|
]);
|
||||||
|
$vn->save();
|
||||||
|
$voicenumbers[] = $number;
|
||||||
|
} else {
|
||||||
$voicenumbers[] = $number;
|
$voicenumbers[] = $number;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
//var_dump($voicenumbers);exit;
|
||||||
|
|
||||||
if($voicenumbers) {
|
if($voicenumbers) {
|
||||||
$product_data['voicenumber'] = json_encode($voicenumbers);
|
$product_data['voicenumber'] = json_encode($voicenumbers);
|
||||||
@@ -1068,6 +1109,13 @@ class OrderController extends mfBaseController {
|
|||||||
$int_products = true;
|
$int_products = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if(count($orderproduct_warnings)) {
|
||||||
|
$_SESSION[MFAPPNAME."_orderproduct_warnings"] = [];
|
||||||
|
foreach($orderproduct_warnings as $orderproduct_id => $msg) {
|
||||||
|
$_SESSION[MFAPPNAME."_orderproduct_warnings"][$orderproduct_id] = $msg;
|
||||||
|
}
|
||||||
|
}
|
||||||
//exit;
|
//exit;
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -30,6 +30,8 @@ class Voicenumberblock extends mfBaseModel {
|
|||||||
// resolve number from right to left to find fitting block
|
// resolve number from right to left to find fitting block
|
||||||
$minLength = 4;
|
$minLength = 4;
|
||||||
|
|
||||||
|
$number = preg_replace('/^\+/', '',$number);
|
||||||
|
|
||||||
$try = $number;
|
$try = $number;
|
||||||
while(strlen($try) >= $minLength) {
|
while(strlen($try) >= $minLength) {
|
||||||
$block = VoicenumberblockModel::getFirst(['prefix' => $try]);
|
$block = VoicenumberblockModel::getFirst(['prefix' => $try]);
|
||||||
|
|||||||
@@ -167,6 +167,8 @@ class VoicenumberblockController extends mfBaseController {
|
|||||||
}
|
}
|
||||||
|
|
||||||
$free = $block->getFreeNumbers();
|
$free = $block->getFreeNumbers();
|
||||||
|
$free[] = "43 3476 41122";
|
||||||
|
$free[] = "43 316 413030";
|
||||||
|
|
||||||
return ["numbers" => $free];
|
return ["numbers" => $free];
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user