Order: Save Voicenumber when saving Order and check if number exists
This commit is contained in:
@@ -31,7 +31,9 @@
|
||||
</div>
|
||||
</div>
|
||||
<!-- end page title -->
|
||||
|
||||
|
||||
|
||||
|
||||
<div class="row">
|
||||
<div class="col-lg-12">
|
||||
|
||||
@@ -50,8 +52,20 @@
|
||||
<div class="card-body">
|
||||
|
||||
<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="col-lg-6" id="owner-block">
|
||||
|
||||
|
||||
@@ -780,7 +794,19 @@
|
||||
<?php endif; ?>
|
||||
|
||||
</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>
|
||||
<?php $i++; ?>
|
||||
<?php endforeach; ?>
|
||||
@@ -1431,14 +1457,26 @@
|
||||
|
||||
if(("numbers" in success.result) && success.result.numbers.length) {
|
||||
$("#voicenumber-" + id + "-" + num).empty();
|
||||
var found_default = false;
|
||||
success.result.numbers.forEach(function(number) {
|
||||
if(number == default_value) {
|
||||
$("#voicenumber-" + id + "-" + num).append("<option value='" + number + "' selected='selected'>+" + number + "</option>");
|
||||
found_default = true;
|
||||
} else {
|
||||
$("#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();
|
||||
$("#voicenumber-custom-" + id + "-line-" + num).hide();
|
||||
$("#voicenumber-custom-" + id + "-line-" + num + " input").val("");
|
||||
|
||||
@@ -322,6 +322,8 @@ class Contract extends mfBaseModel {
|
||||
|
||||
foreach($voicenumbers as $vn) {
|
||||
$vn->contract_id = $this->id;
|
||||
$vn->active = 1;
|
||||
$vn->activated_date = date("U");
|
||||
$vn->save();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -315,7 +315,35 @@ class ContractModel {
|
||||
return $items;
|
||||
|
||||
}
|
||||
|
||||
|
||||
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) {
|
||||
$db = FronkDB::singleton();
|
||||
|
||||
|
||||
@@ -935,6 +935,7 @@ class OrderController extends mfBaseController {
|
||||
$ext_products_nbe = 0;
|
||||
|
||||
//var_dump($r->products);exit;
|
||||
$orderproduct_warnings = [];
|
||||
// validate and add products
|
||||
if(is_array($r->products) && count($r->products)) {
|
||||
foreach($r->products as $pos => $p) {
|
||||
@@ -1026,8 +1027,48 @@ class OrderController extends mfBaseController {
|
||||
if(substr($number, 0, 1) != "+") $number = "+$number";
|
||||
//if($number && !in_array($number, $voicenumbers)) $voicenumbers[] = $number;
|
||||
|
||||
$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;
|
||||
}
|
||||
}
|
||||
//var_dump($voicenumbers);exit;
|
||||
|
||||
if($voicenumbers) {
|
||||
$product_data['voicenumber'] = json_encode($voicenumbers);
|
||||
@@ -1068,6 +1109,13 @@ class OrderController extends mfBaseController {
|
||||
$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;
|
||||
|
||||
|
||||
|
||||
@@ -29,6 +29,8 @@ class Voicenumberblock extends mfBaseModel {
|
||||
public static function findBlock($number) {
|
||||
// resolve number from right to left to find fitting block
|
||||
$minLength = 4;
|
||||
|
||||
$number = preg_replace('/^\+/', '',$number);
|
||||
|
||||
$try = $number;
|
||||
while(strlen($try) >= $minLength) {
|
||||
|
||||
@@ -167,6 +167,8 @@ class VoicenumberblockController extends mfBaseController {
|
||||
}
|
||||
|
||||
$free = $block->getFreeNumbers();
|
||||
$free[] = "43 3476 41122";
|
||||
$free[] = "43 316 413030";
|
||||
|
||||
return ["numbers" => $free];
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user