diff --git a/Xero.php b/Xero.php
index 21e0d5b..f53f4a9 100644
--- a/Xero.php
+++ b/Xero.php
@@ -321,18 +321,20 @@ class Xero {
// "IsReportableAsW1": true,
// "UpdatedDateUTC": "2019-03-16T13:18:19+00:00",
// "CurrentRecord": false
- $payitem_options[]= array(
- 'EarningsRateID' => $e->getEarningsRateID(),
- 'Name'=> $e->getName(),
- 'EarningsType'=> $e->getEarningstype(),
- 'RatePerUnit' => $e->getRatePerUnit(),
- 'RateType' => $e->getRateType(),
- 'AccountCode' => $e->getAccountCode(),
- "Multiplier"=> $e->getMultiplier(),
- "IsExemptFromTax" => $e->getIsExemptFromTax(),
- "IsExemptFromSuper"=> $e->getIsExemptFromSuper(),
- "AccrueLeave" => $e->getAccrueLeave(),
- );
+ if ($e->getCurrentRecord() == "true"){
+ $payitem_options[]= array(
+ 'EarningsRateID' => $e->getEarningsRateID(),
+ 'Name'=> $e->getName(),
+ 'EarningsType'=> $e->getEarningstype(),
+ 'RatePerUnit' => $e->getRatePerUnit(),
+ 'RateType' => $e->getRateType(),
+ 'AccountCode' => $e->getAccountCode(),
+ "Multiplier"=> $e->getMultiplier(),
+ "IsExemptFromTax" => $e->getIsExemptFromTax(),
+ "IsExemptFromSuper"=> $e->getIsExemptFromSuper(),
+ "AccrueLeave" => $e->getAccrueLeave(),
+ );
+ }
}
update_option('bts_payitem_earnings_rate', $payitem_options);
update_option('bts_payitem_last_sync', time());
diff --git a/css/bts_timesheet.css b/css/bts_timesheet.css
index 161c9f2..2f6c9e1 100644
--- a/css/bts_timesheet.css
+++ b/css/bts_timesheet.css
@@ -868,4 +868,8 @@ div.divTable.invalidjob{
border-left: 2px solid red;
border-right: 2px solid red;
}
+
+div.divTable .invalid{
+ background-color:yellow;
+}
/* end of div table */
\ No newline at end of file
diff --git a/html/job.html b/html/job.html
index bb51ed4..3e7a506 100644
--- a/html/job.html
+++ b/html/job.html
@@ -21,7 +21,7 @@
-
+
diff --git a/js/bts_timesheet.js b/js/bts_timesheet.js
index 860c157..a91a6f0 100644
--- a/js/bts_timesheet.js
+++ b/js/bts_timesheet.js
@@ -351,6 +351,12 @@
load_data(data)
{
+ //save to html element
+ this.data = data;
+ this.el.data({job:this, data:data});
+
+ //draw GUI
+ this.clear_err_msg();
this.set_job_id(data.id);
this.set_tos(data.tos);
this.set_start(data.start);
@@ -360,10 +366,8 @@
this.set_client(data.client);
this.set_ack(data.ack);
this.set_rating(data.rating);
- //save to html element
- this.data = data;
- this.el.data({job:this, data:data});
+ //draw GUI by other
this.mark_dirty_on_new_record(data);
this.mark_week_color();
this.validate(); //also triggers mark errors
@@ -513,13 +517,14 @@
d.addClass('blink_me');
setTimeout(function(){
d.removeClass('blink_me');
+ d.removeClass('saved');
},1000);
}
mark_saved()
{
var d = this.el.find('.bsave');
-
+
d.addClass('blink_me');
setTimeout(function(){
d.removeClass('blink_me');
@@ -574,10 +579,11 @@
validate()
{
- this.clear_err_msg();
- var ok = this.validate_start() &&
- this.validate_finish() &&
- this.validate_rate();
+ var ok_time = this.validate_start() &&
+ this.validate_finish(); //finish might not be executed, if start is wrong
+ var ok_tos = this.validate_tos(); //make sure this validate is executed;
+ var ok_rate = this.validate_rate() ; //make sure this validate is executed
+ var ok = ok_time && ok_tos && ok_rate;
if (ok){
this.el.removeClass('invalidjob');
}else{
@@ -624,11 +630,30 @@
this.mark_rate_invalid();
return false;
}
+ if (this.get_rate() != this.data.rate){
+ this.set_err_msg_rate('rate@Xero inactive ' + this.data.rate);
+ this.mark_rate_invalid();
+ this.mark_dirty();
+ return false;
+ }
this.set_err_msg_rate('');
this.mark_rate_valid();
return true;
}
+ validate_tos(){
+ if (this.get_tos() != this.data.tos){
+ this.set_err_msg_tos('require NDIS ' + this.data.tos);
+ this.mark_tos_invalid();
+ this.mark_dirty();
+ console.log('tos mark dirty');
+ return false;
+ }
+ this.set_err_msg_tos('');
+ this.mark_tos_valid();
+ return true;
+ }
+
clear_err_msg(){
this.el.find('.divTableRow.errmsg > div').html('');
}
@@ -648,8 +673,17 @@
{
this.el.find('div.bsave_err').html(str);
}
+ set_err_msg_tos(str)
+ {
+ this.el.find('div.btos_err').html(str);
+ }
-
+ mark_tos_valid(){
+ this.el.find('div.btos select').removeClass('invalid');
+ }
+ mark_tos_invalid(){
+ this.el.find('div.btos select').addClass('invalid');
+ }
mark_start_valid(){
this.el.find('div.bstart input').removeClass('invalid');
}
@@ -1026,6 +1060,7 @@
$('div.sheettitle h1').click(function(){
reset_title_to_today();
+ load_timesheet();
});
function reset_title_to_today(){
@@ -1137,9 +1172,7 @@
}
});
- console.log('filter worksspace');
filter_workspace(staffs, clients);
- console.log('filter by weeks');
filter_workspace_by_weeks();
debounced_calculate();
}