Added default storage to vessel and some other fixes
This commit is contained in:
+5
-2
@@ -20,6 +20,7 @@ $pagetitle = _('Boxes');
|
||||
|
||||
$id = gpc_get_int($_REQUEST, 'id', 0);
|
||||
|
||||
// TODO use global function
|
||||
// Storage options
|
||||
$sql = "SELECT sid, sname FROM storage WHERE vid=? ORDER BY sname";
|
||||
$sth = $pdo->prepare($sql);
|
||||
@@ -44,7 +45,7 @@ switch ($submit = form_get_action()) {
|
||||
|
||||
case 'insert':
|
||||
$p[':label'] = gpc_get_string($_POST, 'label');
|
||||
$p[':sid'] = gpc_get_int($_POST, 'sid');
|
||||
$p[':sid'] = gpc_get_uint($_POST, 'sid');
|
||||
$p[':content'] = gpc_get_string($_POST, 'content');
|
||||
$p[':remarks'] = gpc_get_string($_POST, 'remarks');
|
||||
$id = db_exec_insert('box', $p);
|
||||
@@ -59,6 +60,7 @@ switch ($submit = form_get_action()) {
|
||||
$p[':content'] = gpc_get_string($_POST, 'content');
|
||||
$p[':color'] = gpc_get_color($_POST, 'color');
|
||||
$p[':weight'] = min(gpc_get_float($_POST, 'weight'), 99.99);
|
||||
$p[':sid'] = gpc_get_uint($_POST, 'sid');
|
||||
$p[':remarks'] = gpc_get_string($_POST, 'remarks', 150);
|
||||
db_exec_update('box', $p, 'boxid');
|
||||
$action = ACT_VIEW;
|
||||
@@ -231,7 +233,7 @@ if ($res) {
|
||||
elseif ($action == ACT_EDIT):
|
||||
// ========== VARIANT: edit single record =====================================
|
||||
|
||||
$sql = "SELECT boxtype, label, content, color, weight, remarks "
|
||||
$sql = "SELECT boxtype, label, content, color, weight, sid, remarks "
|
||||
. "FROM box "
|
||||
. "WHERE boxid=?";
|
||||
$sth = $pdo->prepare($sql);
|
||||
@@ -261,6 +263,7 @@ echo '<h2>', _('Edit Box'), "</h2>\n";
|
||||
<label for="weight" class="form-label"><?=_('Weight, kg')?></label>
|
||||
<input type="text" class="form-control" id="weight" name="weight" value="<?=format_float($box->weight); ?>">
|
||||
</div>
|
||||
<?php form_create_select('sid', _('Storage'), $opt_storage, $box->sid); ?>
|
||||
<div class="mb-3">
|
||||
<label for="remarks" class="form-label"><?=_('Remarks')?></label>
|
||||
<textarea class="form-control" id="remarks" name="remarks" rows="3"><?=$box->remarks ?></textarea>
|
||||
|
||||
+36
-1
@@ -128,6 +128,7 @@ $g_doc_mimetypes = ['image/png', 'image/jpeg', 'image/svg+xml', 'application/pdf
|
||||
// form option lists
|
||||
$g_opt_all = array(-2 => _('― all ―'));
|
||||
$g_opt_none = array(-1 => _('― none ―'));
|
||||
$g_opt_empty = array('' => _('― none ―'));
|
||||
$g_opt_unknown = array(-1 => _('― unknown ―'));
|
||||
|
||||
// Initialize message system
|
||||
@@ -392,6 +393,7 @@ function db_exec_insert($table, $params) {
|
||||
$g_error->Add('SQL-Error: '. $e->getMessage());
|
||||
$g_error->Add($sql);
|
||||
$g_error->Add(print_r($params, true));
|
||||
return false;
|
||||
}
|
||||
return $pdo->LastInsertId();
|
||||
}
|
||||
@@ -772,7 +774,6 @@ function db_get_opt_vessel() {
|
||||
return $list;
|
||||
}
|
||||
|
||||
|
||||
function db_get_opt_storage($vid) {
|
||||
global $pdo;
|
||||
global $g_error;
|
||||
@@ -927,6 +928,40 @@ function db_get_filter($user, $sno, $fields = []) {
|
||||
return $flt;
|
||||
}
|
||||
|
||||
function db_get_default_storage($vesselid, $fallback=true) {
|
||||
global $pdo;
|
||||
global $g_error, $g_warning;
|
||||
$sql = "SELECT sid_default FROM vessel WHERE vid=?";
|
||||
$sth = $pdo->prepare($sql);
|
||||
try {
|
||||
$sth->execute([$vesselid]);
|
||||
} catch(PDOException $e) {
|
||||
$g_error->Add($e->getMessage());
|
||||
return false;
|
||||
}
|
||||
$sid = $sth->fetchColumn();
|
||||
if ($sid == NULL && $fallback) {
|
||||
// try to get another storage as last fallback
|
||||
$g_warning->Add(_('No default storage defined for current vessel'));
|
||||
$sql = "SELECT MIN(sid), sname FROM storage WHERE vid=?";
|
||||
$sth = $pdo->prepare($sql);
|
||||
try {
|
||||
$sth->execute([$vesselid]);
|
||||
} catch(PDOException $e) {
|
||||
$g_error->Add($e->getMessage());
|
||||
return false;
|
||||
}
|
||||
$row = $sth->fetch(PDO::FETCH_NUM);
|
||||
if ($row[0] == NULL) {
|
||||
$g_error->Add('Error: No storage defined for current vessel');
|
||||
return false;
|
||||
}
|
||||
$sid = $row[0];
|
||||
$g_warning->Add(sprintf(_("Selected fallback storage '%s'"), $row[1]));
|
||||
}
|
||||
return $sid;
|
||||
}
|
||||
|
||||
function date_to_sql($var) {
|
||||
if (!isset($var) || $var == '') {
|
||||
return NULL;
|
||||
|
||||
+34
-7
@@ -79,6 +79,7 @@ switch ($submit = form_get_action()) {
|
||||
$p[':shapefile'] = NULL;
|
||||
}
|
||||
$p[':shipyard'] = gpc_get_int($_POST, 'shipyard');
|
||||
$p[':sid_default'] = gpc_get_uint($_POST, 'sid');
|
||||
$p[':remarks'] = gpc_get_string($_POST, 'remarks', 150);
|
||||
db_exec_update('vessel', $p, 'vid');
|
||||
$action = ACT_DEFAULT;
|
||||
@@ -448,13 +449,37 @@ echo '<h2>', _('Add additional yacht'), "</h2>\n";
|
||||
elseif ($action == ACT_EDIT):
|
||||
// ========== VARIANT: edit single record =====================================
|
||||
|
||||
// get list of shapefiles
|
||||
//$opt_shapefiles = array('' => _('--- none ---'));
|
||||
$opt_shapefiles = $g_opt_none;
|
||||
foreach (glob($g_shapedir.'/*.svg') as $f) {
|
||||
$f = basename($f);
|
||||
$opt_shapefiles[$f] = $f;
|
||||
// check if there is a shapefile-index
|
||||
$shapeindexfile = $g_doc_basepath . '/shapeindex.json';
|
||||
$shapeindex = [];
|
||||
if (!file_exists($shapeindexfile)) {
|
||||
// try to read metadata from top of svg file
|
||||
foreach (glob($g_shapedir.'/*.svg') as $f) {
|
||||
$fh = fopen($f, 'r');
|
||||
$fname = basename($f);
|
||||
$header = fread($fh, 1024);
|
||||
if (preg_match('/<title[^>]*>(.*?)<\/title>/is', $header, $match)) {
|
||||
$title = trim($match[1]);
|
||||
} else {
|
||||
$title = $fname;
|
||||
}
|
||||
$shapeindex[$fname] = $title;
|
||||
fclose($fh);
|
||||
}
|
||||
$json = json_encode($shapeindex, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE);
|
||||
file_put_contents($shapeindexfile, $json);
|
||||
} else {
|
||||
// read svg metadata from existing file
|
||||
$json = file_get_contents($shapeindexfile);
|
||||
$shapeindex = json_decode($json, true);
|
||||
if (json_last_error() !== JSON_ERROR_NONE) {
|
||||
// TODO some kind of error and fallback
|
||||
// perhaps regenerate index file?
|
||||
}
|
||||
}
|
||||
$opt_shapefiles = $g_opt_none + $shapeindex;
|
||||
|
||||
$opt_storage = db_get_opt_storage($user->vid);
|
||||
|
||||
$opt_shipyard = $g_opt_none + [-3 => _('― Custom-built ―')];
|
||||
$sql = "SELECT compid, compname FROM company WHERE comptype=3 ORDER BY compname";
|
||||
@@ -465,7 +490,7 @@ foreach ($sth->fetchAll(PDO::FETCH_NUM) as $row) {
|
||||
|
||||
$sql = "SELECT vesselname, vtype, model, loa, lwl, beam, draught, draught_min,"
|
||||
. " displacement, ballast, beltpos_aft, beltpos_bow, shapefile,"
|
||||
. " shipyard, remarks "
|
||||
. " shipyard, sid_default, remarks "
|
||||
. "FROM vessel "
|
||||
. "WHERE vid=?";
|
||||
$sth = $pdo->prepare($sql);
|
||||
@@ -526,6 +551,8 @@ $vessel = $sth->fetch(PDO::FETCH_OBJ);
|
||||
</div> */
|
||||
form_create_select('shapefile', _('Shape file'), $opt_shapefiles, $vessel->shapefile);
|
||||
form_create_select('shipyard', _('Shipyard'), $opt_shipyard, $vessel->shipyard);
|
||||
form_create_select('sid', _('Default Storage'), $g_opt_none + $opt_storage, $vessel->sid_default);
|
||||
|
||||
?>
|
||||
<div class="mb-3">
|
||||
<label for="remarks" class="form-label"><?=_('Remarks')?></label>
|
||||
|
||||
+26
-6
@@ -48,9 +48,18 @@ switch ($submit = form_get_action()) {
|
||||
$p[':invname'] = gpc_get_string($_POST, 'invname');
|
||||
$p[':number'] = gpc_get_int($_POST, 'number');
|
||||
$p[':conttype'] = gpc_get_string($_POST, 'conttype');
|
||||
$p[':sid'] = gpc_get_int($_POST, 'sid');
|
||||
$p[':boxid'] = gpc_get_int($_POST, 'boxid');
|
||||
$p[':invcond'] = 'good';
|
||||
$p[':sid'] = gpc_get_uint($_POST, 'sid', 0);
|
||||
$p[':boxid'] = gpc_get_uint($_POST, 'boxid', 0);
|
||||
if ($p[':sid'] == NULL && $p[':boxid'] == NULL) {
|
||||
$p[':conttype'] = 'storage';
|
||||
$sid = db_get_default_storage($user->vid);
|
||||
if ($sid === false) {
|
||||
$action = ACT_ADD;
|
||||
break;
|
||||
}
|
||||
$p[':sid'] = $sid;
|
||||
}
|
||||
$p[':invcond'] = 'unknown';
|
||||
$id = db_exec_insert('inventory', $p);
|
||||
$action = ACT_VIEW;
|
||||
break;
|
||||
@@ -60,8 +69,17 @@ switch ($submit = form_get_action()) {
|
||||
$p[':invname'] = gpc_get_string($_POST, 'invname');
|
||||
$p[':number'] = gpc_get_int($_POST, 'number');
|
||||
$p[':conttype'] = gpc_get_string($_POST, 'conttype');
|
||||
$p[':sid'] = gpc_get_int($_POST, 'sid');
|
||||
$p[':boxid'] = gpc_get_int($_POST, 'boxid');
|
||||
$p[':sid'] = gpc_get_uint($_POST, 'sid', 0);
|
||||
$p[':boxid'] = gpc_get_uint($_POST, 'boxid', 0);
|
||||
if ($p[':sid'] == NULL && $p[':boxid'] == NULL) {
|
||||
$p[':conttype'] = 'storage';
|
||||
$sid = db_get_default_storage($user->vid);
|
||||
if ($sid === false) {
|
||||
$action = ACT_VIEW;
|
||||
break;
|
||||
}
|
||||
$p[':sid'] = $sid;
|
||||
}
|
||||
$p[':weight'] = min(gpc_get_float($_POST, 'weight'), 999.99); // limit max value
|
||||
$p[':price'] = gpc_get_currency($_POST, 'price');
|
||||
$p[':purchdate'] = gpc_get_date($_POST, 'purchdate');
|
||||
@@ -351,7 +369,9 @@ echo '<table class="table">', "\n";
|
||||
echo '<tr><th style="width:20%">', _('Box type'),"</th><td>", $inventory->conttype, "</td></tr>\n";
|
||||
|
||||
// Container with link
|
||||
echo "<tr><th>", _('Container'),"</th><td>", sprintf(_('%s in %s'), $box['label'], $storagename);
|
||||
echo '<tr><th>', $inventory->conttype == 'storage' ? _('Storage') : _('Container');
|
||||
echo '</th><td>', sprintf(_('%s in %s'), $box['label'], $storagename);
|
||||
// TODO insert link
|
||||
echo "</td></tr>\n";
|
||||
|
||||
echo "<tr><th>", _('Location ID'), "</th><td>", $inventory->locationid, "</td></tr>\n";
|
||||
|
||||
@@ -30,6 +30,17 @@ function gpc_get_int(&$GPC, $varname, $default = NULL) {
|
||||
return (int)$GPC[$varname];
|
||||
}
|
||||
|
||||
function gpc_get_uint(&$GPC, $varname, $default = NULL) {
|
||||
if (!isset($GPC[$varname])) {
|
||||
return $default;
|
||||
}
|
||||
$val = (int)$GPC[$varname];
|
||||
if ($val < 0) {
|
||||
$val = $default;
|
||||
}
|
||||
return $val;
|
||||
}
|
||||
|
||||
function gpc_get_float(&$GPC, $varname, $default = NULL) {
|
||||
global $g_lconv;
|
||||
if (!isset($GPC[$varname]) or (strlen(trim($GPC[$varname])) == 0)) {
|
||||
|
||||
+12
-6
@@ -330,18 +330,24 @@ if (empty($res)) {
|
||||
<tr>
|
||||
<th>#</th>
|
||||
<th><?=_('Task')?></th>
|
||||
<th></th>
|
||||
</tr>
|
||||
</thead>
|
||||
<?php
|
||||
$i = 1;
|
||||
foreach ($res as $row) {
|
||||
echo "<tr>";
|
||||
echo "<td>", $i++, "</td>";
|
||||
echo "<td>", $row['taskname'], "</td>";
|
||||
form_action_buttons('task.php', $row['taskid']);
|
||||
echo "</tr>\n";
|
||||
echo "<tr>";
|
||||
echo "<td>", $i++;
|
||||
echo '<a class="text-nowrap" title="', _('View'), '" href="task.php?f=view&id=', $row['taskid'], '"><i class="bi bi-eye ms-2"></i></a>', "\n";
|
||||
echo "</td>";
|
||||
echo "<td>", $row['taskname'], "</td>";
|
||||
// Edit current record button
|
||||
echo "<td>";
|
||||
echo '<a title="', _('Edit'), '" href="task.php?f=edit&id=', $row['taskid'], '"><i class="bi-pencil"></i></a>', "\n";
|
||||
echo "</td>\n";
|
||||
echo "</tr>\n";
|
||||
} // endforeach;
|
||||
echo "</table>\n";
|
||||
echo "</table>\n";
|
||||
} // not empty
|
||||
|
||||
form_add_button('task.php', $id, 'projid');
|
||||
|
||||
@@ -0,0 +1,63 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg
|
||||
width="1023.9999"
|
||||
height="412"
|
||||
viewBox="0 0 270.93331 109.00834"
|
||||
version="1.1"
|
||||
id="svg5"
|
||||
xml:space="preserve"
|
||||
xmlns:xlink="http://www.w3.org/1999/xlink"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"><title
|
||||
id="title1472">Etap 23</title><defs
|
||||
id="defs2" /><metadata
|
||||
id="metadata307"><rdf:RDF><cc:Work
|
||||
rdf:about=""><dc:title>Etap 23</dc:title></cc:Work></rdf:RDF></metadata><g
|
||||
id="layer3"><path
|
||||
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.529167;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="m 0.86350443,56.194479 c 0,0 0.69516577,-14.052372 2.35183327,-20.194909 1.6566675,-6.142538 7.2458203,-17.836033 7.2458203,-17.836033 0,0 26.514024,-8.2805452 34.450621,-9.6979403 12.412423,-2.2167318 31.13408,-6.4342996 53.931466,-6.3070386 19.314615,0.1078193 53.094175,5.573439 76.283115,12.8907639 16.69715,5.268824 40.14414,13.436259 63.79504,23.921131 14.71032,6.521353 26.48827,13.146633 30.48785,15.138539 1.11012,0.552872 0.96357,2.01622 0.96357,2.01622"
|
||||
id="path245" /><use
|
||||
x="0"
|
||||
y="0"
|
||||
xlink:href="#path245"
|
||||
id="use461"
|
||||
transform="matrix(1,0,0,-1,-0.01141454,112.22431)" /><path
|
||||
style="display:inline;fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.529169;stroke-linecap:butt;stroke-linejoin:round;stroke-dasharray:2.11667, 1.05833, 0.529169, 1.05833;stroke-dashoffset:0;stroke-opacity:1"
|
||||
d="M 8.579525e-7,56.091669 270.48373,56.091668"
|
||||
id="path271" /><path
|
||||
style="display:inline;fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.529168;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="M 243.01026,40.79159 V 71.25056"
|
||||
id="path1051-5-20-3-5" /><path
|
||||
style="display:inline;fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.529168;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="M 143.32867,7.3151282 V 53.180623"
|
||||
id="path1051-5-20-3-5-3" /><path
|
||||
style="display:inline;fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.529168;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="M 143.01507,70.407464 V 105.23012"
|
||||
id="path1051-5-20-3-5-3-1" /><path
|
||||
style="display:inline;fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.529168;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="M 117.33745,3.3521262 V 12.178617"
|
||||
id="path1051-5-20-3-5-3-5" /><path
|
||||
style="display:inline;fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.529169;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="M 92.185244,2.3233771 V 12.236508"
|
||||
id="path1051-5-20-3-5-3-5-3" /><path
|
||||
style="display:inline;fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.529167;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="M 66.584543,4.8189868 V 107.726"
|
||||
id="path1051-5-20-3-5-3-6" /><path
|
||||
style="display:inline;fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.529167;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="M 143.50598,12.19599 H 66.434472"
|
||||
id="path1051-5-20-3-5-3-6-7" /><path
|
||||
style="display:inline;fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.529167;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="M 66.45163,38.498153 H 9.4379737"
|
||||
id="path1051-5-20-3-5-3-6-7-5" /><path
|
||||
style="display:inline;fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.529167;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="M 66.508118,69.931578 H 9.494461"
|
||||
id="path1051-5-20-3-5-3-6-7-5-6" /><path
|
||||
style="display:inline;fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.529167;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="M 142.7458,70.803411 H 67.016281"
|
||||
id="path1051-5-20-3-5-3-6-7-5-6-2" /><path
|
||||
style="display:inline;fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.529167;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="M 142.96058,38.598891 H 67.231062"
|
||||
id="path1051-5-20-3-5-3-6-7-5-6-2-9" /></g></svg>
|
||||
|
After Width: | Height: | Size: 4.6 KiB |
+16
-2
@@ -14,6 +14,7 @@ $pagetitle = _('Storage');
|
||||
$id = gpc_get_int($_REQUEST, 'id', 0);
|
||||
|
||||
$opt_stype = db_get_options(3);
|
||||
$opt_capaunit = $g_opt_empty + db_load_enum('storage', 'capaunit', true, true);
|
||||
|
||||
// ========== ACTIONS START ===================================================
|
||||
|
||||
@@ -44,6 +45,10 @@ switch ($submit = form_get_action()) {
|
||||
$p[':wx'] = gpc_get_int($_POST, 'wx');
|
||||
$p[':wy'] = gpc_get_int($_POST, 'wy');
|
||||
$p[':wz'] = gpc_get_int($_POST, 'wz');
|
||||
$p[':angle'] = gpc_get_int($_POST, 'angle');
|
||||
$p[':capacity'] = gpc_get_int($_POST, 'capacity');
|
||||
if ($p[':capacity'] == 0) $p[':capacity'] = NULL;
|
||||
$p[':capaunit'] = gpc_get_string($_POST, 'capaunit');
|
||||
$p[':remarks'] = gpc_get_string($_POST, 'remarks', 150);
|
||||
db_exec_update('storage', $p, 'sid');
|
||||
$action = ACT_VIEW;
|
||||
@@ -180,7 +185,7 @@ foreach ($res as $row) {
|
||||
}
|
||||
// Table summary
|
||||
$numrows = count($res);
|
||||
table_rec_summary($i, $numrows, $numrows, 4);
|
||||
table_rec_summary($i, $numrows, $numrows, 5);
|
||||
echo "</table>\n";
|
||||
|
||||
form_add_button('box.php');
|
||||
@@ -277,7 +282,7 @@ elseif ($action == ACT_EDIT):
|
||||
|
||||
echo '<h2>', _('Edit Storage'), "</h2>\n";
|
||||
|
||||
$sql = "SELECT sid, sname, stype, x, y, z, wx, wy, wz, remarks "
|
||||
$sql = "SELECT sid, sname, stype, x, y, z, wx, wy, wz, angle, capacity, capaunit, remarks "
|
||||
. "FROM storage "
|
||||
. "WHERE sid=?";
|
||||
$sth = $pdo->prepare($sql);
|
||||
@@ -322,6 +327,15 @@ form_create_select('stype', _('Type'), $opt_stype, $storage->stype);
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="mb-3">
|
||||
<label for="angle" class="form-label"><?=_('Angle, deg.')?></label>
|
||||
<input type="number" class="form-control" id="angle" name="angle" value="<?=$storage->angle ?>">
|
||||
</div>
|
||||
<div class="mb-3">
|
||||
<label for="capacity" class="form-label"><?=_('Capacity')?></label>
|
||||
<input type="number" class="form-control" id="capacity" name="capacity" value="<?=$storage->capacity ?>">
|
||||
</div>
|
||||
<?php form_create_select('capaunit', _('Capacity Unit'), $opt_capaunit, $storage->capaunit); ?>
|
||||
<div class="mb-3">
|
||||
<label for="remarks" class="form-label"><?=_('Remarks')?></label>
|
||||
<textarea class="form-control" id="remarks" name="remarks" rows="3"><?=$storage->remarks ?></textarea>
|
||||
|
||||
Reference in New Issue
Block a user