Pop Update

* Rückseite der Pop-Racks können nun auch mit HEs bestückt werden
This commit is contained in:
Daniel Spitzer
2025-08-27 12:54:09 +02:00
parent 805a44bfbb
commit 75e9ac6dbb
7 changed files with 112 additions and 33 deletions

View File

@@ -97,6 +97,12 @@
background-color: #d7d7d7;
opacity: 1;
}
.switch-rack-side {
margin-right: 8px;
margin-top: 2px;
cursor: pointer;
}
</style>
<div class="row">
<div class="col-12">
@@ -339,6 +345,7 @@ if (!empty(trim($pops->vlan_ipv6)))
<div class="col-lg-1"></div>
<label class="col-lg-4 col-form-label" for="module-slot">19 Zoll Position</label>
<div class="col-lg-3">
<input type="hidden" value="front" id="module-side" name="module-side"/>
<select required="required" id="module-slot" name="module-slot"
class="form-control">
<option value="1">1</option>
@@ -483,13 +490,15 @@ if (!empty(trim($pops->vlan_ipv6)))
data-rackhe="<?= $poprack['rack']['he'] ?>"
data-rackid="<?= $poprack['rack']['id']; ?>"><span
class="rack-name"><i
class="fa-regular fa-arrows-up-down-left-right move-handle float-left"></i><?= $poprack['rack']['name']; ?></span>
class="fa-regular fa-arrows-up-down-left-right move-handle float-left"></i><?= $poprack['rack']['name']; ?>&nbsp;<span class="rack-side-indicator font-weight-normal">-&nbsp;Vorderseite</span></span>
<i class="fas fa-sync-alt float-right switch-rack-side" title="Seite wechseln"></i>
<i class="far fa-edit float-right" title="Bearbeiten"
data-toggle="modal" data-target="#rackModal"></i>
</th>
</tr>
</thead>
<tbody>
<tbody id="rack-body-<?= $poprack['rack']['id'] ?>" data-side="front">
<?php
$cellwidth = 227;
$blocktd = 0;
@@ -499,7 +508,8 @@ if (!empty(trim($pops->vlan_ipv6)))
data-toggle="modal" data-target="#rackModuleModal"
style="cursor: pointer" data-he="<?= $i; ?>">He<?= $i; ?></td>
<?php
foreach ($poprack['modules'] as $module) {
$modules_to_render = $poprack['modules']['front'] ?? [];
foreach ($modules_to_render as $module) {
if ($module['start_he'] == $i) {
$modulestart = 1;
@@ -511,6 +521,7 @@ if (!empty(trim($pops->vlan_ipv6)))
$extText = "";
$extTextspan = "";
foreach ($module['slots'] as $slots) {
var_dump();
$extText = "";
$title = $slots['modulname'];
if ($slots['type'] == '0') {

View File

@@ -119,6 +119,7 @@ class PoprackController extends mfBaseController
private function generateRack()
{
$id = $this->request->id;
$side=$this->request->side;
$cellwidth = 227;
$blocktd = 0;
$poprack = PoprackModel::getAllbyRack($id);
@@ -130,7 +131,7 @@ class PoprackController extends mfBaseController
<td class="border-right w-15 p-0 pl-1 pr-1 border-bottom font-13 rack-he user-select-none"
data-toggle="modal" data-target="#rackModuleModal"
style="cursor: pointer" data-he="' . $i . '">He' . $i . '</td>';
foreach ($poprack[0]['modules'] as $module) {
foreach ($poprack[0][$side]['modules'] as $module) {
if ($module['start_he'] == $i) {
$modulestart = 1;

View File

@@ -48,11 +48,11 @@ class PoprackModel
$items = [];
$db = FronkDB::singleton();
$sql = "(SELECT `Poprackmodule`.`type`,`Poprack`.`id`,`Poprack`.`sort`, `Poprack`.`name`, `Poprack`.`he`,`Poprackmodule`.start_he,`Poprackmodule`.end_he,`Poprackmodule`.`name` as `modulname`,device_id ,`Poprackmodule`.`id` as moduleid,`Poprackmodule`.`width` as modulewidth,`Poprackmodule`.`position` as moduleposition,`Poprackmodule`.`ports` as moduleports,`Poprackmodule`.`plug` as moduleplug FROM `Poprack`
$sql = "(SELECT `Poprackmodule`.`type`,`Poprack`.`id`,`Poprack`.`sort`, `Poprack`.`name`, `Poprack`.`he`,`Poprackmodule`.start_he,`Poprackmodule`.end_he,`Poprackmodule`.`name` as `modulname`,device_id ,`Poprackmodule`.`id` as moduleid,`Poprackmodule`.`width` as modulewidth,`Poprackmodule`.`position` as moduleposition,`Poprackmodule`.`side` as moduleside,`Poprackmodule`.`ports` as moduleports,`Poprackmodule`.`plug` as moduleplug FROM `Poprack`
LEFT JOIN `Poprackmodule` ON (`Poprackmodule`.`poprack_id`=`Poprack`.`id` AND `Poprackmodule`.`type`!=1)
WHERE `Poprack`.`pop_id`='" . $pop_id . "' ORDER by `Poprack`.`sort`,`Poprack`.`name`,`Poprackmodule`.start_he,`Poprackmodule`.position)
UNION
(SELECT `Poprackmodule`.`type`,`Poprack`.`id`,`Poprack`.`sort`, `Poprack`.`name`, `Poprack`.`he`,`Poprackmodule`.start_he,`Poprackmodule`.end_he,`Device`.`name` as `modulname`,device_id,`Poprackmodule`.`id` as moduleid,`Poprackmodule`.`width` as modulewidth,`Poprackmodule`.`position` as moduleposition,`Poprackmodule`.`ports` as moduleports,`Poprackmodule`.`plug` as moduleplug FROM `Poprack`
(SELECT `Poprackmodule`.`type`,`Poprack`.`id`,`Poprack`.`sort`, `Poprack`.`name`, `Poprack`.`he`,`Poprackmodule`.start_he,`Poprackmodule`.end_he,`Device`.`name` as `modulname`,device_id,`Poprackmodule`.`id` as moduleid,`Poprackmodule`.`width` as modulewidth,`Poprackmodule`.`position` as moduleposition,`Poprackmodule`.`side` as moduleside,`Poprackmodule`.`ports` as moduleports,`Poprackmodule`.`plug` as moduleplug FROM `Poprack`
LEFT JOIN `Poprackmodule` ON (`Poprackmodule`.`poprack_id`=`Poprack`.`id` AND `Poprackmodule`.`type`=1)
LEFT JOIN `Device` ON (`Device`.`id`=`Poprackmodule`.`device_id`)
WHERE `Poprack`.`pop_id`='" . $pop_id . "' ORDER by `Poprack`.`sort`,`Poprack`.`name`,`Poprackmodule`.start_he,`Poprackmodule`.position)
@@ -80,15 +80,15 @@ class PoprackModel
if ($data['device_id']) {
$items[$counter]['modules'][$data['start_he']]['slots'][$data['moduleid']]['device_id'] = $data['device_id'];
}
$items[$counter]['modules'][$data['start_he']]['start_he'] = $data['start_he'];
$items[$counter]['modules'][$data['start_he']]['end_he'] = $data['end_he'];
$items[$counter]['modules'][$data['start_he']]['slots'][$data['moduleid']]['modulname'] = $data['modulname'];
$items[$counter]['modules'][$data['start_he']]['slots'][$data['moduleid']]['moduleid'] = $data['moduleid'];
$items[$counter]['modules'][$data['start_he']]['slots'][$data['moduleid']]['type'] = $data['type'];
$items[$counter]['modules'][$data['start_he']]['slots'][$data['moduleid']]['width'] = $data['modulewidth'];
$items[$counter]['modules'][$data['start_he']]['slots'][$data['moduleid']]['position'] = $data['moduleposition'];
$items[$counter]['modules'][$data['start_he']]['slots'][$data['moduleid']]['ports'] = $data['moduleports'];
$items[$counter]['modules'][$data['start_he']]['slots'][$data['moduleid']]['plug'] = $data['moduleplug'];
$items[$counter]['modules'][$data['moduleside']][$data['start_he']]['start_he'] = $data['start_he'];
$items[$counter]['modules'][$data['moduleside']][$data['start_he']]['end_he'] = $data['end_he'];
$items[$counter]['modules'][$data['moduleside']][$data['start_he']]['slots'][$data['moduleid']]['modulname'] = $data['modulname'];
$items[$counter]['modules'][$data['moduleside']][$data['start_he']]['slots'][$data['moduleid']]['moduleid'] = $data['moduleid'];
$items[$counter]['modules'][$data['moduleside']][$data['start_he']]['slots'][$data['moduleid']]['type'] = $data['type'];
$items[$counter]['modules'][$data['moduleside']][$data['start_he']]['slots'][$data['moduleid']]['width'] = $data['modulewidth'];
$items[$counter]['modules'][$data['moduleside']][$data['start_he']]['slots'][$data['moduleid']]['position'] = $data['moduleposition'];
$items[$counter]['modules'][$data['moduleside']][$data['start_he']]['slots'][$data['moduleid']]['ports'] = $data['moduleports'];
$items[$counter]['modules'][$data['moduleside']][$data['start_he']]['slots'][$data['moduleid']]['plug'] = $data['moduleplug'];
$modulecounter++;
}
$oldrackid = $data['id'];
@@ -103,13 +103,12 @@ class PoprackModel
public static function getAllbyRack($rack_id)
{
$items = [];
$db = FronkDB::singleton();
$sql = "(SELECT `Poprackmodule`.`type`,`Poprack`.`id`,`Poprack`.`sort`, `Poprack`.`name`, `Poprack`.`he`,`Poprackmodule`.start_he,`Poprackmodule`.end_he,`Poprackmodule`.`name` as `modulname`,device_id ,`Poprackmodule`.`id` as moduleid,`Poprackmodule`.`width` as modulewidth,`Poprackmodule`.`position` as moduleposition,`Poprackmodule`.`ports` as moduleports,`Poprackmodule`.`plug` as moduleplug FROM `Poprack`
$sql = "(SELECT `Poprackmodule`.`type`,`Poprack`.`id`,`Poprack`.`sort`, `Poprack`.`name`, `Poprack`.`he`,`Poprackmodule`.start_he,`Poprackmodule`.end_he,`Poprackmodule`.`name` as `modulname`,device_id ,`Poprackmodule`.`id` as moduleid,`Poprackmodule`.`width` as modulewidth,`Poprackmodule`.`position` as moduleposition,`Poprackmodule`.`side` as moduleside,`Poprackmodule`.`ports` as moduleports,`Poprackmodule`.`plug` as moduleplug FROM `Poprack`
LEFT JOIN `Poprackmodule` ON (`Poprackmodule`.`poprack_id`=`Poprack`.`id` AND `Poprackmodule`.`type`!=1)
WHERE `Poprack`.`id`='" . $rack_id . "' ORDER by `Poprack`.`sort`,`Poprack`.`name`,`Poprackmodule`.start_he,`Poprackmodule`.position)
UNION
(SELECT `Poprackmodule`.`type`,`Poprack`.`id`,`Poprack`.`sort`, `Poprack`.`name`, `Poprack`.`he`,`Poprackmodule`.start_he,`Poprackmodule`.end_he,`Device`.`name` as `modulname`,device_id,`Poprackmodule`.`id` as moduleid,`Poprackmodule`.`width` as modulewidth,`Poprackmodule`.`position` as moduleposition,`Poprackmodule`.`ports` as moduleports,`Poprackmodule`.`plug` as moduleplug FROM `Poprack`
(SELECT `Poprackmodule`.`type`,`Poprack`.`id`,`Poprack`.`sort`, `Poprack`.`name`, `Poprack`.`he`,`Poprackmodule`.start_he,`Poprackmodule`.end_he,`Device`.`name` as `modulname`,device_id,`Poprackmodule`.`id` as moduleid,`Poprackmodule`.`width` as modulewidth,`Poprackmodule`.`position` as moduleposition,`Poprackmodule`.`side` as moduleside,`Poprackmodule`.`ports` as moduleports,`Poprackmodule`.`plug` as moduleplug FROM `Poprack`
LEFT JOIN `Poprackmodule` ON (`Poprackmodule`.`poprack_id`=`Poprack`.`id` AND `Poprackmodule`.`type`=1)
LEFT JOIN `Device` ON (`Device`.`id`=`Poprackmodule`.`device_id`)
WHERE `Poprack`.`id`='" . $rack_id . "' ORDER by `Poprack`.`sort`,`Poprack`.`name`,`Poprackmodule`.start_he,`Poprackmodule`.position)
@@ -137,15 +136,15 @@ class PoprackModel
if ($data['device_id']) {
$items[$counter]['modules'][$data['start_he']]['slots'][$data['moduleid']]['device_id'] = $data['device_id'];
}
$items[$counter]['modules'][$data['start_he']]['start_he'] = $data['start_he'];
$items[$counter]['modules'][$data['start_he']]['end_he'] = $data['end_he'];
$items[$counter]['modules'][$data['start_he']]['slots'][$data['moduleid']]['modulname'] = $data['modulname'];
$items[$counter]['modules'][$data['start_he']]['slots'][$data['moduleid']]['moduleid'] = $data['moduleid'];
$items[$counter]['modules'][$data['start_he']]['slots'][$data['moduleid']]['type'] = $data['type'];
$items[$counter]['modules'][$data['start_he']]['slots'][$data['moduleid']]['width'] = $data['modulewidth'];
$items[$counter]['modules'][$data['start_he']]['slots'][$data['moduleid']]['position'] = $data['moduleposition'];
$items[$counter]['modules'][$data['start_he']]['slots'][$data['moduleid']]['ports'] = $data['moduleports'];
$items[$counter]['modules'][$data['start_he']]['slots'][$data['moduleid']]['plug'] = $data['moduleplug'];
$items[$counter][$data['moduleside']]['modules'][$data['start_he']]['start_he'] = $data['start_he'];
$items[$counter][$data['moduleside']]['modules'][$data['start_he']]['end_he'] = $data['end_he'];
$items[$counter][$data['moduleside']]['modules'][$data['start_he']]['slots'][$data['moduleid']]['modulname'] = $data['modulname'];
$items[$counter][$data['moduleside']]['modules'][$data['start_he']]['slots'][$data['moduleid']]['moduleid'] = $data['moduleid'];
$items[$counter][$data['moduleside']]['modules'][$data['start_he']]['slots'][$data['moduleid']]['type'] = $data['type'];
$items[$counter][$data['moduleside']]['modules'][$data['start_he']]['slots'][$data['moduleid']]['width'] = $data['modulewidth'];
$items[$counter][$data['moduleside']]['modules'][$data['start_he']]['slots'][$data['moduleid']]['position'] = $data['moduleposition'];
$items[$counter][$data['moduleside']]['modules'][$data['start_he']]['slots'][$data['moduleid']]['ports'] = $data['moduleports'];
$items[$counter][$data['moduleside']]['modules'][$data['start_he']]['slots'][$data['moduleid']]['plug'] = $data['moduleplug'];
$modulecounter++;
}
$oldrackid = $data['id'];

View File

@@ -53,6 +53,7 @@ class PoprackmoduleController extends mfBaseController
$data['end_he'] = $r->end_he;
$data['width'] = $r->width;
$data['position'] = ($r->position) ? $r->position : null;
$data['side'] = ($r->side) ? $r->side : 'front';
$poprackmodule = PoprackmoduleModel::create($data);

View File

@@ -13,6 +13,7 @@ class PoprackmoduleModel
public $ports = null;
public $plug = null;
public $position = null;
public $side = null;
public $create_by = null;
public $edit_by = null;
public $create = null;

View File

@@ -0,0 +1,31 @@
<?php
declare(strict_types=1);
use Phinx\Migration\AbstractMigration;
final class PoprackModuleAddSide extends AbstractMigration
{
public function up(): void
{
if($this->getEnvironment() == "thetool") {
$table = $this->table("Poprackmodule");
$table->addColumn("side", "enum", ['values' => ['front', 'back'],'null' => false,'default' => 'front', "after" => "position"]);
$table->update();
}
if($this->getEnvironment() == "addressdb") {
}
}
public function down(): void
{
if($this->getEnvironment() == "thetool") {
$this->table("Poprackmodule")->removeColumn("side")->save();
}
if($this->getEnvironment() == "addressdb") {
}
}
}

View File

@@ -79,6 +79,7 @@ $(document).ready(function () {
var hemaxcount = 1;
var hemaxcountactive = 1;
var edit = 0;
var side = trigger.closest('tbody').data('side');
$('#module-type option').prop('disabled', false);
var parent = trigger.closest('tr');
if (trigger.closest('tr').find('td').eq(1).html() === undefined) {
@@ -130,10 +131,7 @@ $(document).ready(function () {
$('#module-ports').val(parent.find('td').eq(1).data('ports')).change();
$('#module-plug').val(parent.find('td').eq(1).data('plug'));
}
//$('#module-type').attr('disabled', 'disabled');
$('#module-name').val(parent.find('td').eq(1).data('name'));
// $('#module-name').attr('disabled', 'disabled');
$('#module-type option[value="1"]').prop('disabled', true);
@@ -207,6 +205,7 @@ $(document).ready(function () {
}
}
$('#module-side').val(side);
});
$("body").on("change", "#module-type", function () {
@@ -272,6 +271,7 @@ $(document).ready(function () {
if (!error) {
$.post(linkAddModule + "&poprack_id=" + rackid, {
side: $.trim($('#module-side').val()),
type: $.trim($('#module-type').val()),
device_id: $.trim($('#module-device-id').val()),
name: $.trim($('#module-name').val()),
@@ -285,7 +285,8 @@ $(document).ready(function () {
}, function (data) {
if (data.success === true) {
$('#rackModuleModal').modal('toggle');
$.get(linkGenerateRack + "&id=" + rackid, function (data, status) {
var currentSide = trigger.closest('tbody').data('side');
$.get(linkGenerateRack + "&id=" + rackid + "&side=" + currentSide, function (data, status) {
trigger.closest('tbody').html(data);
});
}
@@ -299,12 +300,13 @@ $(document).ready(function () {
var moduleid = $(this).data('moduleid');
var rackid = trigger.closest('table').find('th').data('rackid');
if (confirm("Modul entfernen?")) {
let side = trigger.closest('tbody').data('side');
$.post(linkRemoveModule, {
id: moduleid
}, function (data) {
if (data.success === true) {
$('#rackModuleModal').modal('toggle');
$.get(linkGenerateRack + "&id=" + rackid, function (data, status) {
$.get(linkGenerateRack + "&id=" + rackid + "&side=" + side, function (data, status) {
trigger.closest('tbody').html(data);
});
}
@@ -315,6 +317,7 @@ $(document).ready(function () {
var moduleid = $(this).data('moduleid');
var rackid = trigger.closest('table').find('th').data('rackid');
var error;
let side = trigger.closest('tbody').data('side');
if (!$.trim($('#module-name').val())) {
error = "Modul Name darf nicht leer sein";
}
@@ -328,7 +331,7 @@ $(document).ready(function () {
}, function (data) {
if (data.success === true) {
$('#rackModuleModal').modal('toggle');
$.get(linkGenerateRack + "&id=" + rackid, function (data, status) {
$.get(linkGenerateRack + "&id=" + rackid + "&side=" + side, function (data, status) {
trigger.closest('tbody').html(data);
});
}
@@ -532,6 +535,38 @@ $(document).ready(function () {
$('#module-device-text').hide();
}
});
$("body").on("click", ".switch-rack-side", function () {
var icon = $(this);
var rackTh = icon.closest('th');
var rackId = rackTh.data('rackid');
var rackTable = icon.closest('table');
var rackBody = rackTable.find('tbody');
var sideIndicator = rackTh.find('.rack-side-indicator');
var currentSide = rackBody.data('side');
var newSide = (currentSide === 'front') ? 'back' : 'front';
if (icon.hasClass('is-loading')) {
return;
}
icon.addClass('is-loading fa-spin');
rackTable.fadeOut(150, function () {
$.get(linkGenerateRack + "&id=" + rackId + "&side=" + newSide, function (data, status) {
rackBody.html(data);
rackBody.data('side', newSide);
if (newSide === 'front') {
sideIndicator.text('- Vorderseite');
} else {
sideIndicator.text('- Rückseite');
}
rackTable.fadeIn(150);
}).fail(function () {
rackBody.html('<tr><td colspan="13" class="text-center text-danger p-3">Fehler beim Laden.</td></tr>');
rackTable.fadeIn(150);
}).always(function () {
icon.removeClass('is-loading fa-spin');
});
});
});
});