568 lines
24 KiB
PHP
568 lines
24 KiB
PHP
<?php
|
|
?>
|
|
<form method="post" name="post_nav_find" action="">
|
|
<input type="hidden" name="jobID" value="">
|
|
</form>
|
|
|
|
<script type="text/javascript">
|
|
<!--
|
|
function post_nav_find_action(what, value) {
|
|
document.post_nav_find.action = what + '';
|
|
document.post_nav_find.jobID.value = value;
|
|
document.post_nav_find.submit();
|
|
return false;
|
|
}
|
|
// -->
|
|
</script>
|
|
|
|
<div class="row g-5 g-xl-8">
|
|
<div class="col-xl-8">
|
|
<div class="card mb-5 mb-xl-8">
|
|
<div class="card-header border-0 pt-5">
|
|
<h3 class="card-title align-items-start flex-column">
|
|
<table>
|
|
<tr>
|
|
<td>
|
|
<a href="<?php echo $redirect_to; ?>"> <img style="height: 40px; width: auto;" src="/assets/images/icons/back-arrow.png"></a>
|
|
</td>
|
|
<td>
|
|
<span class="card-label fw-bolder fs-3 mb-1"><?=$this_job_result->title?></span>
|
|
|
|
</td>
|
|
</tr>
|
|
</table>
|
|
|
|
</h3>
|
|
</div>
|
|
<div class="card-body" style="padding-top: 5px !important;">
|
|
<div class="tab-content">
|
|
<div class="tab-pane fade show active" id="kt_table_widget_5_tab_1">
|
|
<div class="table-responsive">
|
|
<table class="table table-row-dashed table-row-gray-200 align-middle gs-0 gy-4">
|
|
<tbody>
|
|
<tr>
|
|
<td style="width: 75%">
|
|
<?=$this_job_result->contract_id?><br>
|
|
<b>Description : </b><?=$this_job_result->description?> <br>
|
|
<?=$this_job_result->delivery_details?><br>
|
|
</td>
|
|
<td>
|
|
<a href="#" onclick="showModal('<?=$this_job_result->id?>');"><?=$this_job_result->firstname?></a> <br>
|
|
<b>Due : </b><mark><?=$this_job_result->delivery_date?> </mark><br>
|
|
<?=$this_job_result->timeline_days?> day(s)
|
|
</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
|
|
<div class="card mb-5 mb-xl-8">
|
|
|
|
<div class="card-body py-3">
|
|
<div class="tab-content">
|
|
<div class="tab-pane fade show active" id="kt_table_widget_5_tab_1">
|
|
<div class="table-responsive">
|
|
|
|
|
|
<ul class="nav nav-tabs nav-line-tabs mb-5 fs-6">
|
|
<li class="nav-item">
|
|
<a class="nav-link active" data-bs-toggle="tab" href="#kt_tab_pane_1">Message(s)</a>
|
|
</li>
|
|
<!-- li class="nav-item">
|
|
<a class="nav-link" data-bs-toggle="tab" href="#kt_tab_pane_2">Add File(s)</a>
|
|
</li>
|
|
<li class="nav-item">
|
|
<a class="nav-link" data-bs-toggle="tab" href="#kt_tab_pane_3">Actions</a>
|
|
</li -->
|
|
</ul>
|
|
|
|
<div class="tab-content" id="myTabContent">
|
|
<div class="tab-pane fade show active" id="kt_tab_pane_1" role="tabpanel">
|
|
<div id="sendmessagenote"></div>
|
|
|
|
<form name="message" id="message" action="/proj/thisjob" method='POST'>
|
|
<input type='hidden' name='ajax' value='1'>
|
|
<input type='hidden' name='jobID' value='<?php echo $jobID; ?>'>
|
|
<input type='hidden' name='contractId' value='<?php echo $contract_id; ?>'>
|
|
|
|
<div class="form-group">
|
|
<textarea cols="18" onchange="textContentChanged();" style="height:120px;" rows="3" id='jobmessage' name='jobmessage' class="textarea wysihtml5 wysihtml5-min form-control" placeholder="Enter message here ..."></textarea>
|
|
</div>
|
|
|
|
<div class="form-group">
|
|
<table class="table table-row-dashed table-row-gray-200 align-middle gs-0 gy-4">
|
|
|
|
<tbody>
|
|
<tr>
|
|
<td style="text-align: left;">
|
|
<div id="remain_text"></div>
|
|
</td>
|
|
<td style="width: 30%;"><div id="sendmessagenote"></div></td>
|
|
<td style="width: 20%; text-align:right;"> <button id='btn_cancel' name='btn_cancel' type="submit" class="btn btn-danger btn-sm" onclick="document.message.jobmessage.value = ''; return false;">Clear</button></td>
|
|
<td style="width: 20%; text-align:right;"><button id='btn_submit' name='btn_submit' type="submit" class="btn btn-primary btn-sm" onclick="SendMessage();return false;">Send</button> </td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
</div>
|
|
|
|
|
|
</form>
|
|
|
|
<?php
|
|
include 'uploads/upload_files.php';
|
|
?>
|
|
|
|
</div>
|
|
<!-- div class="tab-pane fade" id="kt_tab_pane_2" role="tabpanel">
|
|
<div class="form-group">
|
|
<form action="/proj/thisjob" method='POST' enctype="multipart/form-data">
|
|
<input type='hidden' name='uploadForm' value='1'>
|
|
<input type='hidden' name='jobID' value='<?php echo $jobID; ?>'>
|
|
<input type='hidden' name='contractId' value='<?php echo $contract_id; ?>'>
|
|
<input type="file" class="file-input" multiple="multiple" name="fileToUpload[]" id="fileToUpload[]">
|
|
<span class="help-block">There is a file size limit [<?php echo UPLOAD_FILE_SIZE; ?> MB]. Split large files into smaller size</span>
|
|
</form>
|
|
</div>
|
|
</div -->
|
|
<div class="tab-pane fade" id="kt_tab_pane_3" role="tabpanel">
|
|
|
|
|
|
<h3>Use action to manage the status of the project</h3>
|
|
<div class="form-group">
|
|
<?php
|
|
if ($this_is_client == true) {
|
|
include('jobaction/job_worker.php');
|
|
}
|
|
|
|
if ($this_is_project_owner == true) {
|
|
?>
|
|
<table class='table table-striped table-hover table-bordered table-condensed'>
|
|
<tr>
|
|
<td>
|
|
Accept or reject the completion of the task below. We will notify the other partner and finalize payment for the task.
|
|
</td>
|
|
<td style="width:140px;">
|
|
<div id="accept_completion"> <button type="submit" id="accept_completion_submit" class="btn btn-primary btn-sm" onclick="return acceptCompletion('<?php echo $job_contract; ?>');" <?php echo $disabled11; ?> >Accept Completion</button></div>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td>
|
|
If you reject the work done or want more review before accepting, click "Reject Completion."
|
|
</td>
|
|
<td style="width:140px;">
|
|
<div id="reject_completion"> <button type="submit" id="reject_completion_submit" class="btn btn-danger btn-sm" <?php echo $disabled22; ?> onclick="return rejectCompletion('<?php echo $job_contract; ?>');" >Reject Completion</button></div>
|
|
</td>
|
|
</tr>
|
|
</table>
|
|
<?php
|
|
}
|
|
?>
|
|
</div>
|
|
|
|
</div>
|
|
</div>
|
|
|
|
|
|
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="card-body py-3">
|
|
|
|
<?php
|
|
if( count($files_only) > 0 ){
|
|
include 'uploads/file_table.php';
|
|
}
|
|
?>
|
|
|
|
</div>
|
|
|
|
|
|
</div>
|
|
</div>
|
|
<div class="col-xl-4">
|
|
<div class="card mb-5 mb-xl-8">
|
|
<div class="card-header border-0 pt-5">
|
|
<h3 class="card-title align-items-start flex-column">
|
|
<span class="card-label fw-bolder fs-3 mb-1">Actions</span>
|
|
</h3>
|
|
<div class="card-toolbar">
|
|
|
|
</div>
|
|
</div>
|
|
<div class="card-body py-3">
|
|
<div class="tab-content">
|
|
<div class="tab-pane fade show active" id="kt_table_widget_5_tab_1">
|
|
<div class="table-responsive">
|
|
|
|
<?php
|
|
if ($this_is_client == true) {
|
|
// include(VIEWPATH.'/compo/compo_msg4_accord.php');
|
|
if ($this_job_result->current_job_status != 4){
|
|
include('jobaction/job_worker.php');
|
|
}
|
|
|
|
if ($this_job_result->current_job_status == 4){
|
|
echo "You have sent this task to the owner for review and acceptance. The job will automatically be completed in 3 days if the owner does not respond";
|
|
}
|
|
|
|
}
|
|
|
|
if ($this_is_project_owner == true) {
|
|
if ($this_job_result->current_job_status == 4){
|
|
include('jobaction/job_owner.php');
|
|
}
|
|
else{
|
|
echo "Waiting for the completion message from the client before you can approve.";
|
|
}
|
|
|
|
//
|
|
}
|
|
?>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="card mb-5 mb-xl-8">
|
|
<div class="card-header border-0 pt-5">
|
|
<h3 class="card-title align-items-start flex-column">
|
|
<span class="card-label fw-bolder fs-3 mb-1">Messages</span>
|
|
</h3>
|
|
<div class="card-toolbar">
|
|
|
|
</div>
|
|
</div>
|
|
<div class="card-body py-3">
|
|
<div class="tab-content">
|
|
<div class="tab-pane fade show active" id="kt_table_widget_5_tab_1">
|
|
<div class="table-responsive">
|
|
<?php
|
|
include(VIEWPATH.'/compo/compo_msg4_accord.php');
|
|
?>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
|
|
<script type="text/javascript">
|
|
<!--
|
|
const length_limit = 500;
|
|
var timerId = setTimeout(function tick() {
|
|
$.ajax({
|
|
url: "/proj/thisjobfiles?jobID=<?php echo $jobID; ?>"
|
|
}).done(function (data) {
|
|
$('#message_table').html(data);
|
|
});
|
|
timerId = setTimeout(tick, 300000);
|
|
}, 300000); // 300000 ms is 300 seconds is 5 minutes
|
|
|
|
function pad(num, size) {
|
|
var s = num + "";
|
|
while (s.length < size)
|
|
s = "0" + s;
|
|
return s;
|
|
}
|
|
|
|
function textContentChanged(){
|
|
|
|
/*
|
|
if (length_limit <= document.message.jobmessage.value.length){
|
|
document.message.jobmessage.value = document.message.jobmessage.value .substring(0, length_limit);
|
|
}
|
|
*/
|
|
var r = length_limit -document.message.jobmessage.value.length;
|
|
if (r < 0) r = 0;
|
|
$('#remain_text').text(r);
|
|
|
|
// document.message.remain_text.value= length_limit -document.message.jobmessage.value.length;
|
|
/*
|
|
if (document.message.jobmessage.value.length > 0 ){
|
|
// alert(100);
|
|
document.message.btn_cancel.disabled = false;
|
|
}
|
|
else{
|
|
document.message.btn_cancel.disabled = true;
|
|
}
|
|
*/
|
|
if(document.message.jobmessage.value.length > length_limit)
|
|
{
|
|
document.message.btn_submit.disabled = true;
|
|
}
|
|
else
|
|
{
|
|
document.message.btn_submit.disabled = false;
|
|
}
|
|
console.log('JobMessage Length = '+document.message.jobmessage.value.length);
|
|
console.log('JobMessage Value = '+document.message.jobmessage.value);
|
|
}
|
|
|
|
function SendMessage() {
|
|
document.message.btn_cancel.disabled = true;
|
|
document.message.btn_submit.disabled = true;
|
|
$.post("/proj/thisjob", $("#message").serialize(), function (data) {
|
|
if (data == '10') {
|
|
var d = new Date();
|
|
var d_str = d.getFullYear() + '-' + pad(d.getMonth(), 2) + '-' + pad(d.getDate(), 2) + ' ' + pad(d.getHours(), 2) + ':' + pad(d.getMinutes(), 2) + ':' + pad(d.getSeconds(), 2) + '.' + pad(d.getMilliseconds(), 3);
|
|
var res = '<tr><td><b>[<?= $_SESSION["firstname"] ?>]->' + d_str + '</b><br>' + document.message.jobmessage.value + '</td></tr>';
|
|
var tbody = $("#jobs_contract_message tbody");
|
|
if (tbody.children().length == 0) {
|
|
$('#jobs_contract_message').append(res);
|
|
} else {
|
|
$('#jobs_contract_message > tbody:last-child').append(res);
|
|
}
|
|
var id = Date.now();
|
|
var html = `<div class="accordion-item">
|
|
<h2 class="accordion-header" id="kt_accordion_1_header_1">
|
|
<button class="accordion-button fs-4 fw-semibold"
|
|
type="button" data-bs-toggle="collapse" data-bs-target="#kt_accordion_1_` + id + `"
|
|
aria-expanded="true" aria-controls="kt_accordion_1_body_1">
|
|
<b></b><?= $_SESSION["firstname"] ?>-` + d_str + `
|
|
</button>
|
|
</h2>
|
|
<div id="kt_accordion_1_` + id + `" class="accordion-collapse collapse" aria-labelledby="kt_accordion_1_header_1" data-bs-parent="#kt_accordion_1">
|
|
<div class="accordion-body">
|
|
` + document.message.jobmessage.value + `
|
|
</div>
|
|
</div>
|
|
</div>`;
|
|
document.message.jobmessage.value = '';
|
|
//$('#jobmessage').data("wysihtml5").editor.clear();
|
|
|
|
$('#jobmessage').trumbowyg('empty');
|
|
$('#sendmessagenote').html('<div class=\"text-left\"><div class=\"alert alert-info no-border\">Message was sent!</div></div>');
|
|
// Append
|
|
$(html).prependTo('#kt_accordion_1');
|
|
} else {
|
|
$('#sendmessagenote').html('<div class=\"text-left\"><div class=\"alert alert-danger no-border\">Failed to send message</div></div>');
|
|
}
|
|
document.message.btn_cancel.disabled = false;
|
|
document.message.btn_submit.disabled = false;
|
|
});
|
|
}
|
|
|
|
$(document).ready(function () {
|
|
$('#jobmessage').trumbowyg({
|
|
btns: [
|
|
['viewHTML'],
|
|
['undo','redo'],// Only supported in Blink browsers
|
|
['formatting'],
|
|
['strong','em','del'],
|
|
['superscript','subscript'],
|
|
['link'],
|
|
/* ['insertImage'], */
|
|
['justifyLeft','justifyCenter','justifyRight','justifyFull'],
|
|
['unorderedList','orderedList'],
|
|
['horizontalRule'],
|
|
['removeformat'],
|
|
['fullscreen']
|
|
]
|
|
});
|
|
/*$('#jobmessage').data("wysihtml5").editor.observe("load", function () {
|
|
editor.composer.element.addEventListener("keyup", function () {
|
|
// enter your listener-triggered code or function call here
|
|
var content = $(this).html();
|
|
if (content.length > length_limit) {
|
|
alert(length_limit + " characters is the limit!");
|
|
$(this).html(content.substr(0, length_limit));
|
|
}
|
|
});
|
|
});*/
|
|
});
|
|
// -->
|
|
</script>
|
|
|
|
<?php include('common/jobstrip.php'); ?>
|
|
|
|
<div id="modal_theme_primary_fail" class="modal fade">
|
|
<div class="modal-dialog">
|
|
<div class="modal-content">
|
|
<div class="modal-header">
|
|
<button type="button" class="close" data-dismiss="modal">×</button>
|
|
<h5 class="modal-title"><?php echo $contract_id; ?>- Delivery Detail</h5>
|
|
</div>
|
|
|
|
<div class="modal-body">
|
|
<p><?php echo $job_detail; ?>.</p>
|
|
</div>
|
|
|
|
<div class="modal-footer">
|
|
<button type="button" class="btn btn-link" data-dismiss="modal">Close</button>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<script type="text/javascript">
|
|
<!--
|
|
|
|
function showModal(interest_id) {
|
|
if (typeof event !== 'undefined') {
|
|
event.preventDefault();
|
|
}
|
|
|
|
// alert(123);
|
|
// collect data - either from forms or from data variables
|
|
var id = $(this).data('id');
|
|
|
|
// load the modal content with a loader gif and message
|
|
$('#modal-content').html('Loading...');
|
|
|
|
// show modal window
|
|
$('#modal_theme_primary').modal('show');
|
|
|
|
// do the ajax bit
|
|
var post_data = {
|
|
'interest_id': id,
|
|
};
|
|
|
|
$.ajax({
|
|
url: "/jobs/loaduserSkills?interest_id=" + interest_id
|
|
}).done(function (data) {
|
|
//alert(data);
|
|
$('#modal-content').html(data);
|
|
});
|
|
}
|
|
|
|
function showJobModal(contact_id) {
|
|
if (typeof event !== 'undefined') {
|
|
event.preventDefault();
|
|
}
|
|
// collect data - either from forms or from data variables
|
|
var id = $(this).data('id');
|
|
|
|
// load the modal content with a loader gif and message
|
|
$('#modal-content').html('Loading...');
|
|
|
|
// show modal window
|
|
$('#modal_theme_primary').modal('show');
|
|
|
|
// do the ajax bit
|
|
var post_data = {
|
|
'interest_id': id,
|
|
};
|
|
|
|
$.ajax({
|
|
url: "/jobs/jobdetail_modal?contact_id=" + contact_id
|
|
}).done(function (data) {
|
|
//alert(data);
|
|
$('#modal-content').html(data);
|
|
});
|
|
}
|
|
|
|
|
|
|
|
function requestCompletion(job_contract) {
|
|
if (confirm("Are you sure you want send completion messgae for this job?")) {
|
|
// do something
|
|
} else {
|
|
return false;
|
|
}
|
|
|
|
$('#req_completion').html('Processing...');
|
|
$('#req_completion_submit').prop('disabled', true);
|
|
$('#req_cancel_submit').prop('disabled', true);
|
|
$.ajax({
|
|
url: "/proj/processjob_status?proc=NCOMPLETE&jobID=<?php echo $jobID; ?>&job_contract=" + job_contract
|
|
}).done(function (data) {
|
|
$('#req_completion').html(data);
|
|
document.offer_individual.rec_email.value = '';
|
|
$('#req_completion_submit').prop('disabled', false);
|
|
});
|
|
return false;
|
|
}
|
|
|
|
function requestCancel(job_contract) {
|
|
if (confirm("Are you sure you want to request the cancellation of this job?")) {
|
|
// do something
|
|
} else {
|
|
return false;
|
|
}
|
|
|
|
$('#req_cancel').html('Processing...');
|
|
$('#req_cancel_submit').prop('disabled', true);
|
|
$('#req_completion_submit').prop('disabled', true);
|
|
$.ajax({
|
|
url: "/proj/processjob_status?proc=REQCANCEL&jobID=<?php echo $jobID; ?>&job_contract=" + job_contract
|
|
}).done(function (data) {
|
|
$('#req_cancel').html(data);
|
|
document.offer_individual.rec_email.value = '';
|
|
$('#req_cancel_submit').prop('disabled', false);
|
|
});
|
|
return false;
|
|
|
|
}
|
|
|
|
function acceptCompletion(job_contract) {
|
|
|
|
if (confirm("Are you sure you want to accept the completion of this job?")) {
|
|
// do something
|
|
} else {
|
|
return false;
|
|
}
|
|
|
|
$('#accept_completion').html('Processing...');
|
|
$('#accept_completion_submit').prop('disabled', true);
|
|
$('#reject_completion_submit').prop('disabled', true);
|
|
$.ajax({
|
|
url: "/proj/processjob_status?proc=ACCEPTCMP&jobID=<?php echo $jobID; ?>&job_contract=" + job_contract
|
|
}).done(function (data) {
|
|
$('#accept_completion').html(data);
|
|
document.offer_individual.rec_email.value = '';
|
|
$('#accept_completion_submit').prop('disabled', false);
|
|
});
|
|
return false;
|
|
|
|
|
|
}
|
|
|
|
function rejectCompletion(job_contract) {
|
|
if (confirm("Are you sure you want to reject the completion of this job?")) {
|
|
// do something
|
|
} else {
|
|
return false;
|
|
}
|
|
|
|
$('#reject_completion').html('Processing...');
|
|
$('#reject_completion_submit').prop('disabled', true);
|
|
$('#accept_completion_submit').prop('disabled', true);
|
|
$.ajax({
|
|
url: "/proj/processjob_status?proc=REJECTCMP&jobID=<?php echo $jobID; ?>&job_contract=" + job_contract
|
|
}).done(function (data) {
|
|
$('#reject_completion').html(data);
|
|
document.offer_individual.rec_email.value = '';
|
|
$('#reject_completion_submit').prop('disabled', false);
|
|
});
|
|
return false;
|
|
}
|
|
|
|
// -->
|
|
</script>
|
|
|
|
|
|
<!-- Basic modal -->
|
|
<div id="modal_theme_primary" class="modal fade">
|
|
<div class="modal-dialog">
|
|
<div class="modal-content" id="modal-content">
|
|
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<!-- /basic modal -->
|
|
|
|
|
|
|
|
|