Order (multiple voicenumbers) and Contract changes

This commit is contained in:
Frank Schubert
2024-08-06 19:22:18 +02:00
parent cdf8050a5f
commit b654f1ba18
10 changed files with 343 additions and 108 deletions

View File

@@ -779,10 +779,10 @@ class ContractController extends mfBaseController
$contract_data['amount'] = ($r->amount) ? (float)$r->amount : 1;
$contract_data['vatgroup_id'] = $r->vatgroup_id;
$contract_data['sla_id'] = $r->sla_id;
$contract_data['price'] = (float)$r->price;
$contract_data['price_setup'] = (float)$r->price_setup;
$contract_data['price_nne'] = (float)$r->price_nne;
$contract_data['price_nbe'] = (float)$r->price_nbe;
$contract_data['price'] = (float)Layout::commaToDot($r->price);
$contract_data['price_setup'] = (float)Layout::commaToDot($r->price_setup);
$contract_data['price_nne'] = (float)Layout::commaToDot($r->price_nne);
$contract_data['price_nbe'] = (float)Layout::commaToDot($r->price_nbe);
$contract_data['billing_period'] = (int)$r->billing_period;
$contract_data['billing_delay'] = (int)$r->billing_delay;
$contract_data['note'] = $r->note;

View File

@@ -931,7 +931,7 @@ class OrderController extends mfBaseController {
$ext_products = false;
$int_products = false;
$ext_products_nbe = 0;
//var_dump($r->products);exit;
@@ -964,8 +964,8 @@ class OrderController extends mfBaseController {
$product_data['amount'] = (!empty($p['amount'])) ? $p['amount'] : 1;
$product_data["pos"] = ($p["pos"]) ? $p['pos'] : $order->getNewPos();
$product_data["description"] = $p["description"];
$product_data["price"] = $p["price"] ? Layout::commaToDot($p["price"]) : 0;
$product_data["price_setup"] = $p["price_setup"] ? Layout::commaToDot($p["price_setup"]) : 0;
$product_data["price"] = trim($p["price"]) ? Layout::commaToDot(trim($p["price"])) : 0;
$product_data["price_setup"] = trim($p["price_setup"]) ? Layout::commaToDot(trim($p["price_setup"])) : 0;
if($this->me->is("Admin") && $p["price_nne"]) {
$product_data["price_nne"] = Layout::commaToDot($p["price_nne"]);
@@ -1003,29 +1003,44 @@ class OrderController extends mfBaseController {
}
if(array_key_exists(TT_ATTRIB_VOICENUMBER_REQUIRED_NAME, $prod->attributes) && $prod->attributes[TT_ATTRIB_VOICENUMBER_REQUIRED_NAME]->value == 1) {
$voicenumbers = [];
//var_dump($p);exit;
//if($p["voicenumber_custom"]);
if(array_key_exists("voicenumber", $p) && $p["voicenumber"]) {
$number = $p["voicenumber"];
}
if(array_key_exists("voicenumber_custom", $p) && $p["voicenumber_custom"]) {
$number = $p["voicenumber_custom"];
}
$number = preg_replace('/\D/', '', trim($number));
if(substr($number, 0, 2) == "00") $number = "+".substr($number, 2);
if(preg_match('/^0[^0]/', $number)) {
$number = "+43".substr($number, 1);
}
if(substr($number, 0, 1) != "+") $number = "+$number";
//if($number && !in_array($number, $voicenumbers)) $voicenumbers[] = $number;
$voicenumbers[] = $number;
$product_data['voicenumber'] = json_encode($voicenumbers);
//var_dump($product_data);exit;
$voicenumbers = [];
//var_dump($p);exit;
//if($p["voicenumber_custom"]);
$numbers = [];
if(array_key_exists("voicenumber", $p) && is_array($p["voicenumber"]) && count($p["voicenumber"])) {
$numbers = $p["voicenumber"];
}
if(array_key_exists("voicenumber_custom", $p) && is_array($p["voicenumber_custom"]) && count($p["voicenumber_custom"])) {
$numbers = array_merge($numbers, $p["voicenumber_custom"]);
}
foreach($numbers as $number) {
if(!$number) continue;
$number = preg_replace('/\D/', '', trim($number));
if(substr($number, 0, 2) == "00") $number = "+" . substr($number, 2);
if(preg_match('/^0[^0]/', $number)) {
$number = "+43" . substr($number, 1);
}
if(substr($number, 0, 1) != "+") $number = "+$number";
//if($number && !in_array($number, $voicenumbers)) $voicenumbers[] = $number;
$voicenumbers[] = $number;
}
if($voicenumbers) {
$product_data['voicenumber'] = json_encode($voicenumbers);
if($p["voiceplan_id"]) {
$product_data["voiceplan_id"] = $p["voiceplan_id"];
} else {
$this->layout()->setFlash("Bitte Sprachtarif bei allen Rufnummern eintragen", "error");
}
//var_dump($product_data);exit;
}
//var_dump($product_data);exit;
} else {
$product_data['voicenumber'] = null;
}
@@ -1038,7 +1053,8 @@ class OrderController extends mfBaseController {
$product = new OrderProduct($orderproduct_id);
$product->update($product_data);
}
//var_dump($product);
if(!$product->save()) {
$this->log->warn("Unable to save OrderProduct:".print_r($product, true));
}
@@ -1052,6 +1068,7 @@ class OrderController extends mfBaseController {
$int_products = true;
}
}
//exit;
if(!$ext_products && !$owner->customer_number) {

View File

@@ -7,6 +7,7 @@ class OrderProduct extends mfBaseModel {
private $cpeprovisioning;
private $contract;
private $voicenumbers;
private $voiceplan;
private $editor;
private $creator;
@@ -58,8 +59,38 @@ class OrderProduct extends mfBaseModel {
$json = json_decode($this->voicenumber);
if(!is_array($json)) return [];
$this->voicenumbers = $json;
$voicenumbers = [];
foreach($json as $number) {
$number = str_replace("+","",$number);
$voicenumber = VoicenumberModel::getFirst(["number" => $number]);
if($voicenumber) {
$voicenumbers[] = $voicenumber;
} else {
// find block
$block_id = null;
$block = Voicenumberblock::findBlock($number);
if($block) {
$block_id = $block->id;
}
$voicenumber = VoicenumberModel::create([
'voicenumberblock_id' => $block_id,
"contract_id" => null,
'active' => 1,
'activated_date' => date('U'),
'routing' => "kolmisoft",
'number' => $number,
'disabled' => 0
]);
$voicenumbers[] = $voicenumber;
}
}
$this->voicenumbers = $voicenumbers;
return $this->voicenumbers;
}

View File

@@ -6,6 +6,7 @@ class OrderProductModel
public $product_id;
public $termination_id;
public $voicenumber;
public $voiceplan_id;
public $domain;
public $upgrade;
public $amount;

View File

@@ -27,7 +27,7 @@ class Voicenumber extends mfBaseModel {
$return = "0";
}
$prefix .= $this->block->areacode;
$return .= $this->block->areacode." ".substr($this->number, strlen($prefix));
$return .= $this->block->areacode." ".substr($this->number, strlen($prefix)-1);
return $return;
}