diff --git a/Layout/default/Order/Form.php b/Layout/default/Order/Form.php
index 7da0a3d98..030e42b28 100644
--- a/Layout/default/Order/Form.php
+++ b/Layout/default/Order/Form.php
@@ -652,10 +652,38 @@
| =$number?> |
diff --git a/Layout/default/footer.php b/Layout/default/footer.php
index 58916a8d7..4a7c9b0bb 100644
--- a/Layout/default/footer.php
+++ b/Layout/default/footer.php
@@ -83,7 +83,7 @@
return;
}
- if(rest_duration < 60*5) {
+ if(rest_duration < 60) {
// show notification
if($("#se_notf").length) {
$("#se_notf .time").text(rest_duration);
diff --git a/application/Order/OrderController.php b/application/Order/OrderController.php
index 66f9dbb01..050ff4770 100644
--- a/application/Order/OrderController.php
+++ b/application/Order/OrderController.php
@@ -920,18 +920,28 @@ 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 = [];
- foreach(explode("\n", $p['voicenumber']) as $number) {
- $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;
-
+ //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;
} else {
$product_data['voicenumber'] = null;
}
diff --git a/application/OrderProduct/OrderProductModel.php b/application/OrderProduct/OrderProductModel.php
index bcfa395b3..f65059355 100644
--- a/application/OrderProduct/OrderProductModel.php
+++ b/application/OrderProduct/OrderProductModel.php
@@ -5,6 +5,8 @@ class OrderProductModel
public $order_id;
public $product_id;
public $termination_id;
+ public $voicenumber;
+ public $domain;
public $upgrade;
public $amount;
public $pos;
diff --git a/application/Voicenumber/Voicenumber.php b/application/Voicenumber/Voicenumber.php
index 7f6af4712..81decf54c 100644
--- a/application/Voicenumber/Voicenumber.php
+++ b/application/Voicenumber/Voicenumber.php
@@ -12,6 +12,18 @@ class Voicenumber extends mfBaseModel {
//$this->number_prepend_zero = $block->number_prepend_zero;
return true;
}
+
+ public function getPrettyNumber() {
+ if(!$this->voicenumberblock_id) return $this->number;
+ $block = $this->getProperty("block");
+
+ $prefix = $this->block->countrycode;
+ $prefix .= $this->block->areacode;
+
+ $return = $this->block->countrycode." ".$this->block->areacode." ".substr($this->number, strlen($prefix));
+
+ return $return;
+ }
public function beforeSave() {
if($this->ported_from && $this->port_in_date) {
diff --git a/application/Voicenumber/VoicenumberModel.php b/application/Voicenumber/VoicenumberModel.php
index 5f47118c1..afc618d86 100644
--- a/application/Voicenumber/VoicenumberModel.php
+++ b/application/Voicenumber/VoicenumberModel.php
@@ -97,14 +97,14 @@ class VoicenumberModel {
return 0;
}
- public static function search($filter, $limit = false) {
+ public static function search($filter, $limit = false, $key = false) {
$items = [];
$db = FronkDB::singleton();
$where = self::getSqlFilter($filter);
$sql = "SELECT * FROM Voicenumber
WHERE $where
- ORDER BY countrycode, areacode, first, last";
+ ORDER BY number";
if(is_array($limit) && count($limit)) {
if(is_numeric($limit['start']) && is_numeric($limit['count'])) {
@@ -120,7 +120,11 @@ class VoicenumberModel {
if($db->num_rows($res)) {
while($data = $db->fetch_object($res)) {
- $items[] = new Voicenumber($data);
+ if($key) {
+ $items[$data->$key] = new Voicenumber($data);
+ } else {
+ $items[] = new Voicenumber($data);
+ }
}
}
return $items;
diff --git a/application/Voicenumberblock/Voicenumberblock.php b/application/Voicenumberblock/Voicenumberblock.php
index 3053e1795..b40c60cba 100644
--- a/application/Voicenumberblock/Voicenumberblock.php
+++ b/application/Voicenumberblock/Voicenumberblock.php
@@ -35,6 +35,28 @@ class Voicenumberblock extends mfBaseModel {
return $block;
}
+ public function getFreeNumbers() {
+ if(!$this->id) return false;
+
+ $free = [];
+ $block_numbers = VoicenumberModel::search(["block_id" => $this->id], false, "number");
+
+ $pnumber = new Voicenumber();
+ $pnumber->voicenumberblock_id = $this->id;
+
+ foreach(range($this->first, $this->last) as $num) {
+ if(array_key_exists($num, $block_numbers)) {
+ $bn = $block_numbers[$num];
+ if($bn->active || $bn->disabled || $bn->ported_in || $bn->ported_out || $bn->orderproduct_id || $bn->contrat_id) {
+ continue;
+ }
+ }
+ $pnumber->number = $num;
+ $free[] = $pnumber->getPrettyNumber();
+ }
+ return $free;
+ }
+
public function getProperty($name) {
if($this->$name == null) {
diff --git a/application/Voicenumberblock/VoicenumberblockController.php b/application/Voicenumberblock/VoicenumberblockController.php
index deab9cf4a..d63d752e7 100644
--- a/application/Voicenumberblock/VoicenumberblockController.php
+++ b/application/Voicenumberblock/VoicenumberblockController.php
@@ -28,6 +28,15 @@ class VoicenumberblockController extends mfBaseController {
$filter = $this->getPreparedFilter($filter);
}
+ $num_from = [];
+ $num_from_start = $this->request->nf;
+ $num_from_block = $this->request->nfb;
+
+ if($num_from_start && $num_from_block) {
+ $num_from[$num_from_block] = $num_from_start;
+ }
+ $this->layout()->set("num_from", $num_from);
+
// pagination defaults
$pagination = [];
$pagination['start'] = 0;
@@ -124,4 +133,41 @@ class VoicenumberblockController extends mfBaseController {
$this->redirect("Voicenumberblock");
}
+
+ protected function apiAction() {
+ $do = $this->request->do;
+ $data = [];
+
+ switch($do) {
+ case "getFreeNumbers":
+ $return = $this->getFreeNumbersApi();
+ break;
+ default:
+ $return = false;
+ }
+
+ if(!is_array($return) || !count($return)) {
+ $data = ["status" => "error"];
+ $this->returnJson($data);
+ }
+ $data['status'] = "OK";
+ $data['result'] = $return;
+ $this->returnJson($data);
+ }
+
+ private function getFreeNumbersApi() {
+ $block_id = $this->request->id;
+ if(!is_numeric($block_id) || $block_id < 1) {
+ return false;
+ }
+
+ $block = new Voicenumberblock($block_id);
+ if(!$block->id) {
+ return false;
+ }
+
+ $free = $block->getFreeNumbers();
+
+ return ["numbers" => $free];
+ }
}
\ No newline at end of file
diff --git a/application/Voicenumberblock/VoicenumberblockModel.php b/application/Voicenumberblock/VoicenumberblockModel.php
index eb4a4389d..912d30359 100644
--- a/application/Voicenumberblock/VoicenumberblockModel.php
+++ b/application/Voicenumberblock/VoicenumberblockModel.php
@@ -37,12 +37,18 @@ class VoicenumberblockModel {
return $model;
}
- public static function getAll() {
+ public static function getAll($order = "countrycode,areacode,first,last") {
$items = [];
$db = FronkDB::singleton();
- $res = $db->select("Voicenumberblock", "*");
+ $order_by = "";
+
+ if($order) {
+ $order_by = $order;
+ }
+
+ $res = $db->select("Voicenumberblock", "*", "1=1 ORDER BY $order_by");
if($db->num_rows($res)) {
while($data = $db->fetch_object($res)) {
$items[] = new Voicenumberblock($data);
diff --git a/db/migrations/20231004143109_add_voicenumber_tables.php b/db/migrations/20231004143109_add_voicenumber_tables.php
index ea62bbdb3..8829f9ce5 100644
--- a/db/migrations/20231004143109_add_voicenumber_tables.php
+++ b/db/migrations/20231004143109_add_voicenumber_tables.php
@@ -34,6 +34,8 @@ final class AddVoicenumberTables extends AbstractMigration
$table->addColumn("port_out_date", "integer", ["null" => true, "default" => null]);
$table->addColumn("ported_in", "integer", ["null" => true, "default" => null]);
$table->addColumn("ported_out", "integer", ["null" => true, "default" => null]);
+ $table->addColumn("ported_from", "string", ["null" => true, "default" => null, "limit" => 64]);
+ $table->addColumn("ported_to", "string", ["null" => true, "default" => null, "limit" => 64]);
$table->addColumn("disabled", "integer", ["null" => false, "default" => 0, "limit" => \Phinx\Db\Adapter\MysqlAdapter::INT_TINY]);
$table->addColumn("disabled_reason", "enum", ["values" => "ported_out,ported_back,reserved,legacy,damaged", "null" => true, "default" => null]);
$table->addColumn("enable_on_date", "integer", ["null" => true, "default" => null]);
diff --git a/scripts/test.php b/scripts/test.php
index faf2a0396..bf97dec6c 100644
--- a/scripts/test.php
+++ b/scripts/test.php
@@ -15,5 +15,8 @@ $me = new User(1);
define("INTERNAL_USER_ID", $me->id);
define("INTERNAL_USER_USERNAME", $me->username);
-$netzgebiet = new ADBNetzgebiet(45);
-var_dump($netzgebiet->getOption("hausnummer_dont_overwrite_netzgebiet"));
\ No newline at end of file
+$block = new Voicenumberblock(2);
+$free = $block->getFreeNumbers();
+
+echo implode("\n", $free);
+echo "\n";
\ No newline at end of file
|