mirror of https://github.com/itflow-org/itflow
Addec Contract Templates Listing add modal and add post code
This commit is contained in:
parent
ab46899e72
commit
1d3f206660
|
|
@ -0,0 +1,125 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
// Default Column Sort by Filter
|
||||||
|
$sort = "contract_template_name";
|
||||||
|
$order = "ASC";
|
||||||
|
|
||||||
|
require_once "includes/inc_all_admin.php";
|
||||||
|
|
||||||
|
// Search query
|
||||||
|
$sql = mysqli_query(
|
||||||
|
$mysqli,
|
||||||
|
"SELECT SQL_CALC_FOUND_ROWS * FROM contract_templates
|
||||||
|
WHERE contract_template_name LIKE '%$q%' OR contract_template_type LIKE '%$q%' OR contract_template_name LIKE '%$q%'
|
||||||
|
ORDER BY $sort $order LIMIT $record_from, $record_to"
|
||||||
|
);
|
||||||
|
|
||||||
|
$num_rows = mysqli_fetch_row(mysqli_query($mysqli, "SELECT FOUND_ROWS()"));
|
||||||
|
|
||||||
|
?>
|
||||||
|
|
||||||
|
<div class="card card-dark">
|
||||||
|
<div class="card-header py-2">
|
||||||
|
<h3 class="card-title mt-2"><i class="fa fa-fw fa-file-contract mr-2"></i>Contract Templates</h3>
|
||||||
|
<div class="card-tools">
|
||||||
|
<button type="button" class="btn btn-primary ajax-modal" data-modal-url="modals/contract_template/contract_template_add.php" data-modal-size="lg">
|
||||||
|
<i class="fas fa-plus mr-2"></i>New Template
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="card-body">
|
||||||
|
|
||||||
|
<form autocomplete="off">
|
||||||
|
<div class="input-group">
|
||||||
|
<input type="search" class="form-control" name="q" value="<?php if (isset($q)) { echo stripslashes(nullable_htmlentities($q)); } ?>" placeholder="Search templates">
|
||||||
|
<div class="input-group-append">
|
||||||
|
<button class="btn btn-secondary"><i class="fa fa-search"></i></button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</form>
|
||||||
|
<hr>
|
||||||
|
|
||||||
|
<div class="table-responsive-sm">
|
||||||
|
<table class="table table-striped table-borderless table-hover">
|
||||||
|
<thead class="text-dark <?php if ($num_rows[0] == 0) { echo "d-none"; } ?>">
|
||||||
|
<tr>
|
||||||
|
<th>Template Name</th>
|
||||||
|
<th>Type</th>
|
||||||
|
<th>Update Frequency</th>
|
||||||
|
<th>SLA (L/M/H Response)</th>
|
||||||
|
<th>SLA (L/M/H Resolution)</th>
|
||||||
|
<th>Hourly Rate</th>
|
||||||
|
<th>After Hours Rate</th>
|
||||||
|
<th>Support Hours</th>
|
||||||
|
<th>Net Terms</th>
|
||||||
|
<th>Created</th>
|
||||||
|
<th>Updated</th>
|
||||||
|
<th class="text-center">Action</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
<?php
|
||||||
|
while ($row = mysqli_fetch_array($sql)) {
|
||||||
|
$id = intval($row['contract_template_id']);
|
||||||
|
$name = nullable_htmlentities($row['contract_template_name']);
|
||||||
|
$type = nullable_htmlentities($row['contract_template_type']);
|
||||||
|
$freq = nullable_htmlentities($row['contract_template_update_frequency']);
|
||||||
|
$sla_low_resp = nullable_htmlentities($row['sla_low_response_time']);
|
||||||
|
$sla_med_resp = nullable_htmlentities($row['sla_medium_response_time']);
|
||||||
|
$sla_high_resp = nullable_htmlentities($row['sla_high_response_time']);
|
||||||
|
$sla_low_res = nullable_htmlentities($row['sla_low_resolution_time']);
|
||||||
|
$sla_med_res = nullable_htmlentities($row['sla_medium_resolution_time']);
|
||||||
|
$sla_high_res = nullable_htmlentities($row['sla_high_resolution_time']);
|
||||||
|
$hourly_rate = nullable_htmlentities($row['contract_template_hourly_rate']);
|
||||||
|
$after_hours = nullable_htmlentities($row['contract_template_after_hours_hourly_rate']);
|
||||||
|
$support_hours = nullable_htmlentities($row['contract_template_support_hours']);
|
||||||
|
$net_terms = nullable_htmlentities($row['contract_template_net_terms']);
|
||||||
|
$created = nullable_htmlentities($row['contract_template_created_at']);
|
||||||
|
$updated = nullable_htmlentities($row['contract_template_updated_at']);
|
||||||
|
?>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
<a class="text-bold" href="contract_template_details.php?contract_template_id=<?php echo $id; ?>">
|
||||||
|
<i class="fas fa-fw fa-file-alt text-dark"></i> <?php echo $name; ?>
|
||||||
|
</a>
|
||||||
|
<div class="mt-1 text-secondary"><?php echo nullable_htmlentities($row['contract_template_description']); ?></div>
|
||||||
|
</td>
|
||||||
|
<td><?php echo $type; ?></td>
|
||||||
|
<td><?php echo $freq; ?></td>
|
||||||
|
<td><?php echo "$sla_low_resp / $sla_med_resp / $sla_high_resp"; ?></td>
|
||||||
|
<td><?php echo "$sla_low_res / $sla_med_res / $sla_high_res"; ?></td>
|
||||||
|
<td><?php echo $hourly_rate; ?></td>
|
||||||
|
<td><?php echo $after_hours; ?></td>
|
||||||
|
<td><?php echo $support_hours; ?></td>
|
||||||
|
<td><?php echo $net_terms; ?></td>
|
||||||
|
<td><?php echo $created; ?></td>
|
||||||
|
<td><?php echo $updated; ?></td>
|
||||||
|
<td>
|
||||||
|
<div class="dropdown dropleft text-center">
|
||||||
|
<button class="btn btn-secondary btn-sm" type="button" data-toggle="dropdown">
|
||||||
|
<i class="fas fa-ellipsis-h"></i>
|
||||||
|
</button>
|
||||||
|
<div class="dropdown-menu">
|
||||||
|
<a class="dropdown-item ajax-modal" href="#"
|
||||||
|
data-modal-size="xl"
|
||||||
|
data-modal-url="modals/contract_template/contract_template_edit.php?id=<?= $id ?>">
|
||||||
|
<i class="fas fa-fw fa-edit mr-2"></i>Edit
|
||||||
|
</a>
|
||||||
|
<div class="dropdown-divider"></div>
|
||||||
|
<a class="dropdown-item text-danger text-bold" href="post.php?delete_contract_template=<?php echo $id; ?>">
|
||||||
|
<i class="fas fa-fw fa-trash mr-2"></i>Delete
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<?php } ?>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
<br>
|
||||||
|
</div>
|
||||||
|
<?php require_once "../includes/filter_footer.php"; ?>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<?php require_once "../includes/footer.php"; ?>
|
||||||
|
|
@ -110,6 +110,12 @@
|
||||||
<?php if ($config_module_enable_itdoc) { ?>
|
<?php if ($config_module_enable_itdoc) { ?>
|
||||||
<li class="nav-header">TEMPLATES</li>
|
<li class="nav-header">TEMPLATES</li>
|
||||||
|
|
||||||
|
<li class="nav-item">
|
||||||
|
<a href="/admin/contract_templates.php" class="nav-link <?php echo (basename($_SERVER['PHP_SELF']) == 'contract_templates.php' ? 'active' : ''); ?>">
|
||||||
|
<i class="nav-icon fas fa-file-contract"></i>
|
||||||
|
<p>Contract Templates</p>
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
<li class="nav-item">
|
<li class="nav-item">
|
||||||
<a href="/admin/project_template.php" class="nav-link <?php echo (in_array(basename($_SERVER['PHP_SELF']), ['project_template.php', 'project_template_details.php']) ? 'active' : ''); ?>">
|
<a href="/admin/project_template.php" class="nav-link <?php echo (in_array(basename($_SERVER['PHP_SELF']), ['project_template.php', 'project_template_details.php']) ? 'active' : ''); ?>">
|
||||||
<i class="nav-icon fas fa-project-diagram"></i>
|
<i class="nav-icon fas fa-project-diagram"></i>
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,139 @@
|
||||||
|
<?php
|
||||||
|
require_once '../../../includes/modal_header.php';
|
||||||
|
ob_start();
|
||||||
|
|
||||||
|
$contract_types_array = ['Fully Managed', 'Partialy Managed', 'Break/Fix'];
|
||||||
|
$update_frequency_array = ['Manual', 'Annually', '2 Year', '3 Year', '5 Year', '7 Year'];
|
||||||
|
?>
|
||||||
|
|
||||||
|
<div class="modal-header bg-dark">
|
||||||
|
<h5 class="modal-title"><i class="fa fa-fw fa-file-contract mr-2"></i>New Contract Template</h5>
|
||||||
|
<button type="button" class="close text-white" data-dismiss="modal"><span>×</span></button>
|
||||||
|
</div>
|
||||||
|
<!-- Tabs Navigation -->
|
||||||
|
<ul class="modal-header nav nav-pills nav-justified">
|
||||||
|
<li class="nav-item">
|
||||||
|
<a class="nav-link active" id="general-tab" data-toggle="tab" href="#general" role="tab">General Info</a>
|
||||||
|
</li>
|
||||||
|
<li class="nav-item">
|
||||||
|
<a class="nav-link" id="sla-tab" data-toggle="tab" href="#sla" role="tab">SLA</a>
|
||||||
|
</li>
|
||||||
|
<li class="nav-item">
|
||||||
|
<a class="nav-link" id="rates-tab" data-toggle="tab" href="#rates" role="tab">Rates & Support</a>
|
||||||
|
</li>
|
||||||
|
<li class="nav-item">
|
||||||
|
<a class="nav-link" id="details-tab" data-toggle="tab" href="#details" role="tab">Details</a>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
<form action="post.php" method="post" autocomplete="off">
|
||||||
|
|
||||||
|
<div class="modal-body">
|
||||||
|
|
||||||
|
<div class="tab-content" id="contractTemplateTabContent">
|
||||||
|
|
||||||
|
<!-- General Info Tab -->
|
||||||
|
<div class="tab-pane fade show active" id="general" role="tabpanel">
|
||||||
|
<div class="form-group">
|
||||||
|
<label>Template Name <strong class="text-danger">*</strong></label>
|
||||||
|
<input type="text" class="form-control" name="contract_template_name" placeholder="Contract Template Name" maxlength="200" required autofocus>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="form-group">
|
||||||
|
<label>Contract Type <strong class="text-danger">*</strong></label>
|
||||||
|
<select class="form-control select2" name="contract_template_type" required>
|
||||||
|
<option value="">- Select Type -</option>
|
||||||
|
<?php foreach ($contract_types_array as $type) { ?>
|
||||||
|
<option><?php echo $type; ?></option>
|
||||||
|
<?php } ?>
|
||||||
|
</select>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="form-group">
|
||||||
|
<label>Update Frequency</label>
|
||||||
|
<select class="form-control select2" name="contract_template_update_frequency">
|
||||||
|
<option value="">- Select Frequency -</option>
|
||||||
|
<?php foreach ($update_frequency_array as $freq) { ?>
|
||||||
|
<option><?php echo $freq; ?></option>
|
||||||
|
<?php } ?>
|
||||||
|
</select>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- SLA Tab -->
|
||||||
|
<div class="tab-pane fade" id="sla" role="tabpanel">
|
||||||
|
<div class="form-row">
|
||||||
|
<div class="form-group col-md-6">
|
||||||
|
<label>Low Priority Response (hrs)</label>
|
||||||
|
<input type="number" class="form-control" name="sla_low_response_time" placeholder="e.g., 24">
|
||||||
|
</div>
|
||||||
|
<div class="form-group col-md-6">
|
||||||
|
<label>Low Priority Resolution (hrs)</label>
|
||||||
|
<input type="number" class="form-control" name="sla_low_resolution_time" placeholder="e.g., 48">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="form-row">
|
||||||
|
<div class="form-group col-md-6">
|
||||||
|
<label>Medium Priority Response (hrs)</label>
|
||||||
|
<input type="number" class="form-control" name="sla_medium_response_time" placeholder="e.g., 12">
|
||||||
|
</div>
|
||||||
|
<div class="form-group col-md-6">
|
||||||
|
<label>Medium Priority Resolution (hrs)</label>
|
||||||
|
<input type="number" class="form-control" name="sla_medium_resolution_time" placeholder="e.g., 24">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="form-row">
|
||||||
|
<div class="form-group col-md-6">
|
||||||
|
<label>High Priority Response (hrs)</label>
|
||||||
|
<input type="number" class="form-control" name="sla_high_response_time" placeholder="e.g., 1">
|
||||||
|
</div>
|
||||||
|
<div class="form-group col-md-6">
|
||||||
|
<label>High Priority Resolution (hrs)</label>
|
||||||
|
<input type="number" class="form-control" name="sla_high_resolution_time" placeholder="e.g., 4">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- Rates & Support Tab -->
|
||||||
|
<div class="tab-pane fade" id="rates" role="tabpanel">
|
||||||
|
<div class="form-group">
|
||||||
|
<label>Standard Hourly Rate</label>
|
||||||
|
<input type="text" class="form-control" name="contract_template_hourly_rate" placeholder="e.g., 100">
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="form-group">
|
||||||
|
<label>After Hours Hourly Rate</label>
|
||||||
|
<input type="text" class="form-control" name="contract_template_after_hours_hourly_rate" placeholder="e.g., 150">
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="form-group">
|
||||||
|
<label>Support Hours</label>
|
||||||
|
<input type="text" class="form-control" name="contract_template_support_hours" placeholder="e.g., Mon-Fri 9am-5pm">
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="form-group">
|
||||||
|
<label>Net Terms</label>
|
||||||
|
<input type="text" class="form-control" name="contract_template_net_terms" placeholder="e.g., Net 30">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- Details Tab -->
|
||||||
|
<div class="tab-pane fade" id="details" role="tabpanel">
|
||||||
|
<div class="form-group">
|
||||||
|
<textarea class="form-control tinymce" rows="6" name="contract_template_details" placeholder="Enter Contract Details"></textarea>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="modal-footer">
|
||||||
|
<button type="submit" name="add_contract_template" class="btn btn-primary text-bold"><i class="fa fa-check mr-2"></i>Create Template</button>
|
||||||
|
<button type="button" class="btn btn-light" data-dismiss="modal"><i class="fa fa-times mr-2"></i>Cancel</button>
|
||||||
|
</div>
|
||||||
|
</form>
|
||||||
|
|
||||||
|
<?php
|
||||||
|
require_once '../../../includes/modal_footer.php';
|
||||||
|
?>
|
||||||
|
|
@ -0,0 +1,63 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
/*
|
||||||
|
* ITFlow - GET/POST request handler for Contract Templates
|
||||||
|
*/
|
||||||
|
|
||||||
|
defined('FROM_POST_HANDLER') || die("Direct file access is not allowed");
|
||||||
|
|
||||||
|
if (isset($_POST['add_contract_template'])) {
|
||||||
|
|
||||||
|
// Sanitize text inputs
|
||||||
|
$name = sanitizeInput($_POST['contract_template_name']);
|
||||||
|
$type = sanitizeInput($_POST['contract_template_type']);
|
||||||
|
$update_frequency = sanitizeInput($_POST['contract_template_update_frequency']);
|
||||||
|
$support_hours = sanitizeInput($_POST['contract_template_support_hours']);
|
||||||
|
$details = mysql_escape_string($mysqli, $_POST['contract_template_details']);
|
||||||
|
|
||||||
|
// Numeric fields cast to integer
|
||||||
|
$sla_low_resp = intval($_POST['sla_low_response_time']);
|
||||||
|
$sla_med_resp = intval($_POST['sla_medium_response_time']);
|
||||||
|
$sla_high_resp = intval($_POST['sla_high_response_time']);
|
||||||
|
$sla_low_res = intval($_POST['sla_low_resolution_time']);
|
||||||
|
$sla_med_res = intval($_POST['sla_medium_resolution_time']);
|
||||||
|
$sla_high_res = intval($_POST['sla_high_resolution_time']);
|
||||||
|
$hourly_rate = intval($_POST['contract_template_hourly_rate']);
|
||||||
|
$after_hours_rate = intval($_POST['contract_template_after_hours_hourly_rate']);
|
||||||
|
$net_terms = intval($_POST['contract_template_net_terms']);
|
||||||
|
|
||||||
|
// Insert into database (numbers not quoted)
|
||||||
|
mysqli_query($mysqli, "
|
||||||
|
INSERT INTO contract_templates SET
|
||||||
|
contract_template_name = '$name',
|
||||||
|
contract_template_description = '$description',
|
||||||
|
contract_template_details = '$details',
|
||||||
|
contract_template_type = '$type',
|
||||||
|
contract_template_update_frequency = '$update_frequency',
|
||||||
|
sla_low_response_time = $sla_low_resp,
|
||||||
|
sla_medium_response_time = $sla_med_resp,
|
||||||
|
sla_high_response_time = $sla_high_resp,
|
||||||
|
sla_low_resolution_time = $sla_low_res,
|
||||||
|
sla_medium_resolution_time = $sla_med_res,
|
||||||
|
sla_high_resolution_time = $sla_high_res,
|
||||||
|
contract_template_hourly_rate = $hourly_rate,
|
||||||
|
contract_template_after_hours_hourly_rate = $after_hours_rate,
|
||||||
|
contract_template_support_hours = '$support_hours',
|
||||||
|
contract_template_net_terms = $net_terms,
|
||||||
|
contract_template_created_by = $session_user_id,
|
||||||
|
contract_template_created_at = NOW()
|
||||||
|
");
|
||||||
|
|
||||||
|
$contract_template_id = mysqli_insert_id($mysqli);
|
||||||
|
|
||||||
|
// Log action
|
||||||
|
logAction("Contract Template", "Create", "$session_name created contract template $name", 0, $contract_template_id);
|
||||||
|
|
||||||
|
// Flash message
|
||||||
|
flash_alert("Contract Template <strong>$name</strong> created");
|
||||||
|
|
||||||
|
// Redirect back
|
||||||
|
redirect();
|
||||||
|
}
|
||||||
|
|
||||||
|
?>
|
||||||
Loading…
Reference in New Issue