added Voicenumber form and save

This commit is contained in:
Frank Schubert
2022-01-18 22:23:01 +01:00
parent f2a33a02ef
commit 39d07f948e
7 changed files with 440 additions and 1 deletions

View File

@@ -0,0 +1,178 @@
<?php include(realpath(dirname(__FILE__)."/../")."/header.php"); ?>
<!-- start page title -->
<div class="row">
<div class="col-12">
<div class="page-title-box">
<div class="page-title-right">
<ol class="breadcrumb m-0">
<li class="breadcrumb-item"><a href="<?=self::getUrl("Dashboard")?>">the-tool</a></li>
<li class="breadcrumb-item"><a href="<?=self::getUrl("Voicenumberblock")?>">Rufnummernblöcke</a></li>
<li class="breadcrumb-item"><a href="<?=self::getUrl("Voicenumberblock")?>#block_id=<?=$number->block->id?>"><?=$number->block->number_first?> - <?=$number->block->number_last?></a></li>
<li class="breadcrumb-item active"><?=$number->getFullNumber()?> bearbeiten</li>
</ol>
</div>
<h4 class="page-title">Rufnummer <?=$number->getFullNumber()?></h4>
</div>
</div>
</div>
<!-- end page title -->
<div class="row">
<div class="col-lg-12">
<div class="card">
<div class="card-body">
<form class="form-horizontal" method="post" action="<?=self::getUrl("Voicenumber", "save")?>">
<h4 class="header-title mb-2">Allgemein</h4>
<div class="card">
<div class="card-body">
<input type="hidden" name="block_id" value="<?=$number->block->id?>" />
<input type="hidden" name="number" value="<?=$number->number?>" />
<div class="form-group row">
<label class="col-lg-2 col-form-label" for="name">Status</label>
<div class="col-lg-10">
<select name="active" class="form-control">
<option value="1" <?=($number->active) ? "selected='selected'" : ""?>>Aktiv</option>
<option value="0" <?=(!$number->active) ? "selected='selected'" : ""?>>Inaktiv</option>
</select>
</div>
</div>
<div class="form-group row">
<label class="col-lg-2 col-form-label" for="name">Contract ID</label>
<div class="col-lg-10">
<input type="text" class="form-control" name="contract_id" value="<?=$number->contract_id?>" />
</div>
</div>
<div class="form-group row">
<label class="col-lg-2 col-form-label" for="routing">Routing</label>
<div class="col-lg-10">
<select name="routing" class="form-control">
<option value="kolmisoft" <?=($number->routing == "kolmisoft") ? "selected='selected'" : ""?>>kolmisoft</option>
<option value="sipit" <?=($number->routing == "sipit") ? "selected='selected'" : ""?>>sipit</option>
</select>
</div>
</div>
</div>
</div>
<h4 class="header-title mb-2">Portierung</h4>
<div class="card">
<div class="card-body">
<div class="form-group row">
<label class="col-lg-2 col-form-label" for="ported_from">Portiert von</label>
<div class="col-lg-10">
<input type="text" class="form-control" name="ported_from" value="<?=$number->ported_from?>" />
</div>
</div>
<div class="form-group row">
<label class="col-lg-2 col-form-label" for="port_in_date">am</label>
<div class="col-lg-10">
<input type="text" class="form-control datepicker" name="port_in_date" value="<?=($number->port_in_date) ? date("d.m.Y",$number->port_in_date) : ""?>" />
</div>
</div>
<div class="form-group row">
<label class="col-lg-2 col-form-label" for="ported_to">Portiert nach</label>
<div class="col-lg-10">
<input type="text" class="form-control" name="ported_to" value="<?=$number->ported_to?>" />
</div>
</div>
<div class="form-group row">
<label class="col-lg-2 col-form-label" for="port_out_date">am</label>
<div class="col-lg-10">
<input type="text" class="form-control datepicker" name="port_out_date" value="<?=($number->port_out_date) ? date("d.m.Y", $number->port_out_date) : ""?>" />
</div>
</div>
</div>
</div>
<h4 class="header-title mb-2">Sperre</h4>
<div class="card">
<div class="card-body">
<div class="form-group row">
<label class="col-lg-2 col-form-label" for="disabled">Sperre</label>
<div class="col-lg-10">
<select name="disabled" class="form-control">
<option value="0" <?=(!$number->disabled) ? "selected='selected'" : ""?>>Entsperrt</option>
<option value="1" <?=($number->disabled) ? "selected='selected'" : ""?>>Gesperrt</option>
</select>
</div>
</div>
<div class="form-group row">
<label class="col-lg-2 col-form-label" for="disabled_reason">Sperrgrund</label>
<div class="col-lg-10">
<select name="disabled_reason" class="form-control">
<option></option>
<option value="ported_out" <?=($number->disabled_reason == "ported_out") ? "selected='selected'" : ""?>>Zu neuem Provider portiert</option>
<option value="ported_back">Zum Anker zurückportiert</option>
<option value="reserved">Reserviert</option>
<option value="legacy">Legacy</option>
<option value="damaged">Kaputt</option>
</select>
</div>
</div>
<div class="form-group row">
<label class="col-lg-2 col-form-label" for="enable_on_date">Automatische Entsperrung</label>
<div class="col-lg-10">
<input type="text" class="form-control datepicker" name="enable_on_date" value="<?=($number->enable_on_date) ? date("d.m.Y",$number->enable_on_date) : ""?>" />
</div>
</div>
</div>
</div>
<h4 class="header-title mb-2">Kommentar</h4>
<div class="card">
<div class="card-body">
<div class="form-group row">
<label class="col-lg-2 col-form-label" for="comment">Kommentar</label>
<div class="col-lg-10">
<textarea class="form-control" style="height:120px;" name="comment"><?=$number->comment?></textarea>
</div>
</div>
</div>
</div>
<div class="form-group row">
<label class="col-lg-2"></label>
<div class="col-lg-10">
<button type="submit" class="btn btn-primary">Speichern</button>
</div>
</div>
</form>
</div>
</div>
</div>
</div>
<script type="text/javascript">
$('.datepicker').datepicker({
language: 'de',
format: "dd.mm.yyyy",
showWeekDays: true,
todayBtn: 'linked',
autoclose: true
});
</script>
<?php include(realpath(dirname(__FILE__)."/../")."/footer.php"); ?>

View File

@@ -192,5 +192,15 @@
$('#block-' + id).addClass("table-info");
}
}
var block;
var hash = window.location.hash.substr(1);
var match = hash.match(/block=(\d+)/);
if(match && match[1]) {
block = match[1]
toggleBlock(block);
}
</script>
<?php include(realpath(dirname(__FILE__)."/../")."/footer.php"); ?>

View File

@@ -12,6 +12,7 @@
<th>Portierungsstatus</th>
<th>Sperre</th>
<th>Entsperrung</th>
<th></th>
</tr>
<?php $i = 0; foreach(range($block->getFirst(), $block->getLast()) as $number): ?>
<?php $num = null; $num = VoicenumberModel::getFirst(['voicenumberblock_id' => $block_id, 'number' => ($block->number_prepend_zero) ? "0$number" : $number]) ?>
@@ -29,13 +30,19 @@
<td>
<?php if($num->ported_out): ?>
Exportiert
<small class="text-monospace">(<?=($num->id) ? date("d.m.Y H:i:s", $num->port_out_date) : ""?>)</small>
<small class="text-monospace">(<?=($num->id) ? date("d.m.Y", $num->port_out_date) : ""?>)</small>
<?php elseif($num->ported_in): ?>
Importiert
<small class="text-monospace">(<?=($num->id) ? date("d.m.Y", $num->port_in_date) : ""?>)</small>
<?php else: ?>
Lokal
<?php endif; ?>
</td>
<td><?=$num->disabled_reason?></td>
<td><?=($num->id && $num->enable_on_date) ? date("d.m.Y", $num->enable_on_date) : ""?></td>
<td>
<a href="<?=self::getUrl("Voicenumber", "edit", ["block_id" => $block->id, "number" => $number])?>"><i class="fas fa-edit"></i></a>
</td>
</tr>
<?php $i++; if($i >= 100) break; ?>
<?php endforeach; ?>

View File

@@ -1,5 +1,72 @@
<?php
class Voicenumber extends mfBaseModel {
private $block;
private $orderproduct;
private $contract;
public function loadFromBlock(Voicenumberblock $block) {
$this->voicenumberblock_id = $block->id;
$this->countrycode = $block->countrycode;
$this->areacode = $block->areacode;
$this->number_prepend_zero = $block->number_prepend_zero;
return true;
}
public function getFullNumber() {
$number = $this->countrycode.$this->areacode.$this->number;
return $number;
}
public function beforeSave() {
if($this->ported_from && $this->port_in_date) {
$this->ported_in = 1;
} else {
$this->ported_in = 0;
}
if($this->ported_to && $this->port_out_date) {
$this->ported_out = 1;
} else {
$this->ported_out = 0;
}
if($this->active == 1 && !$this->_old_data->active) {
$this->activated_date = date("U");
}
}
public function getProperty($name) {
if($this->$name == null) {
if($name == "block") {
$this->block = new Voicenumberblock($this->voicenumberblock_id);
return $this->block;
}
if($name == "orderproduct") {
$this->orderproduct = new Orderproduct($this->orderproduct_id);
return $this->orderproduct;
}
if($name == "contract") {
$this->contract = new Contract($this->contract_id);
return $this->contract;
}
$classname = ucfirst($name);
$idfield = $name."_id";
$this->$name = new $classname($this->$idfield);
if($this->$name->id) {
return $this->$name;
} else {
return null;
}
}
return $this->$name;
}
}

View File

@@ -0,0 +1,166 @@
<?php
class VoicenumberController extends mfBaseController {
protected function init() {
$this->needlogin=true;
$me = new User();
$me->loadMe();
$this->me = $me;
$this->layout()->set("me",$me);
if(!$me->isAdmin()) {
$this->redirect("Dashboard");
}
}
protected function editAction() {
$block_id = $this->request->block_id;
if(!is_numeric($block_id) || !$block_id) {
$this->layout()->setFlash("Rufnummer nicht gefunden1", "error");
$this->redirect("Voicenumberblock");
}
$block = new Voicenumberblock($block_id);
if(!$block->id) {
$this->layout()->setFlash("Rufnummer nicht gefunden2", "error");
$this->redirect("Voicenumberblock");
}
$num = (string)$this->request->number;
if(!strlen($num)) {
$this->layout()->setFlash("Rufnummer nicht gefunden3", "error");
$this->redirect("Voicenumberblock", "Index", null, ["block" => $block->id]);
}
if(!$block->isNumberInBlock($num)) {
$this->layout()->setFlash("Rufnummer nicht gefunden4", "error");
$this->redirect("Voicenumberblock", "Index", null, ["block" => $block->id]);
}
$number = VoicenumberModel::getFirst(["block_id" => $block_id, "number" => (string)$num]);
$mode = "edit";
if(!$number) {
$number = new Voicenumber();
$number->loadFromBlock($block);
$number->number = $num;
$mode = "add";
}
//var_dump($number);exit;
$this->layout()->setTemplate("Voicenumber/Form");
$this->layout()->set("number", $number);
}
protected function saveAction() {
$r = $this->request;
//var_dump($r);
$block_id = $r->block_id;
if(!is_numeric($block_id) || !$block_id) {
$this->layout()->setFlash("Rufnummer nicht gefunden1", "error");
$this->redirect("Voicenumberblock");
}
$block = new Voicenumberblock($block_id);
if(!$block->id) {
$this->layout()->setFlash("Rufnummer nicht gefunden2", "error");
$this->redirect("Voicenumberblock");
}
$num = (string)$r->number;
if(!strlen($num)) {
$this->layout()->setFlash("Rufnummer nicht gefunden3", "error");
$this->redirect("Voicenumberblock", "Index", null, ["block" => $block->id]);
}
if(!$block->isNumberInBlock($num)) {
$this->layout()->setFlash("Rufnummer nicht gefunden4", "error");
$this->redirect("Voicenumberblock", "Index", null, ["block" => $block->id]);
}
$number = VoicenumberModel::getFirst(["block_id" => $block_id, "number" => (string)$num]);
$mode = "edit";
if(!$number) {
$number = new Voicenumber();
$number->loadFromBlock($block);
$number->number = $num;
$number->create_by = $this->me->id;
$mode = "add";
}
//var_dump($number);
$number_data = [];
$number_data['contract_id'] = $r->contract_id;
if($r->active === "1") {
$number_data['active'] = 1;
} else {
$number_data['active'] = 0;
}
switch($r->routing) {
case "sipit":
$number_data['routing'] = "sipit";
break;
default:
$number_data['routing'] = "kolmisoft";
}
$number_data['ported_from'] = $r->ported_from;
if($r->port_in_date) {
$number_data['port_in_date'] = self::dateToTimestamp($r->port_in_date);
}
$number_data['ported_to'] = $r->ported_to;
if($r->port_out_date) {
$number_data['port_out_date'] = self::dateToTimestamp($r->port_out_date);
}
if($r->disabled === "1") {
$number_data['disabled'] = 1;
switch($r->disabled_reason) {
case "ported_out":
$number_data['disabled_reason'] = "ported_out";
break;
case "ported_back":
$number_data['disabled_reason'] = "ported_back";
break;
case "legacy":
$number_data['disabled_reason'] = "legacy";
break;
case "damaged":
$number_data['disabled_reason'] = "damaged";
break;
default:
$number_data['disabled_reason'] = "reserved";
}
}
if($r->enable_on_date) {
$number_data['enable_on_date'] = self::dateToTimestamp($r->enable_on_date);
}
$number_data['comment'] = $r->comment;
$number_data['edit_by'] = $this->me->id;
$number->update($number_data);
$number_id = $number->save();
if(!$number_id) {
$this->layout()->setFlash("Fehler beim Speichern", "error");
$this->redirect("Voicenumber", "edit", ["block_id" => $block_id, "number" => $num]);
}
$this->layout()->setFlash("Rufnummer erfolgreich gespeichert", "success");
$this->redirect("Voicenumberblock", "Index", null, "block=".$block->id);
}
}

View File

@@ -123,6 +123,13 @@ class VoicenumberModel {
return $where;
}
if(array_key_exists("block_id", $filter)) {
$block_id = $filter['block_id'];
if(is_numeric($block_id)) {
$where .= " AND voicenumberblock_id = $block_id";
}
}
//var_dump($filter);exit;
if(array_key_exists("countrycode", $filter)) {
$countrycode = $filter['countrycode'];

View File

@@ -41,6 +41,10 @@ class Voicenumberblock extends mfBaseModel {
return $base;
}
public function isNumberInBlock($number) {
return ($number >= $this->first && $number <= $this->last);
}
public function getProperty($name) {
if($this->$name == null) {