diff --git a/css/bts_office.css b/css/bts_office.css
index a9a8649..c320fbc 100644
--- a/css/bts_office.css
+++ b/css/bts_office.css
@@ -18,6 +18,12 @@ body {
}
}
+@keyframes bolder {
+ 0% { padding-left:0px; background-color:yellow;}
+ 50% { padding-left:10px; background-color: lightyellow;}
+ 100% { padding-left:0px; background-color:yellow;}
+}
+
.titlebar_gradient {
/* Permalink - use to edit and share this gradient: https://colorzilla.com/gradient-editor/#f6e6b4+0,ed9017+100 */
background: rgb(246,230,180); /* Old browsers */
@@ -757,7 +763,7 @@ div.blueTable.emptyrecord {
box-shadow: 0px 0px 10px green;
}
.divTable.highlight div {
- background-color: lightyellow;
+ background-color: lightyellow !important;
}
.divTable.invalidjob.highlight {
@@ -836,6 +842,11 @@ div.brate {
max-width: 20px;
}
+div.brate.error{
+ background-color: red !important;
+ animation: bolder 1s linear infinite;
+}
+
.divTable div > select {
width: 100%;
height: 100%;
@@ -888,7 +899,6 @@ div.jobTable.saved div.bsave span.ticon-save {
display: none;
}
-
div.jobTable.saved div{
background-color: transparent;
}
diff --git a/html/jobv1.html b/html/jobv1.html
index 3f11954..caee06b 100644
--- a/html/jobv1.html
+++ b/html/jobv1.html
@@ -8,9 +8,9 @@
{{start}}
{{finish}}
- {{rate_name}}
+ {{rate_name}}
{{staff_name}}
- {{client_name}}
+ {{client_name}}
{{rating}}
diff --git a/js/bts_office.js b/js/bts_office.js
index f111f72..eed04cd 100644
--- a/js/bts_office.js
+++ b/js/bts_office.js
@@ -1189,15 +1189,7 @@
{
//map data for each jobTable
response.jobs.forEach(function(e){
- e.tos_name = bts().tos[e.tos].tos_full_str;
- e.staff_name = bts().staff_map[e.staff].display_name;
- e.client_name = bts().client_map[e.client].display_name;
- e.rate_name = bts().earnings_rate[e.rate].RatePerUnit + "-" + bts().earnings_rate[e.rate].Name;
- e.saved = true;
- if (e.ack != 0){
- e.is_confirmed = true;
- }
- //console.log('attach %s %o to %o ', e.id, e, div);
+ job_derive_attr(e);
});
//we do works, load timesheets
@@ -1215,6 +1207,33 @@
}, 500); //try it half seconds later
}
+ function job_derive_attr(e)
+ {
+ e.saved = true;
+ e.tos_name = bts().tos[e.tos].tos_full_str;
+ e.staff_name = bts().staff_map[e.staff].display_name;
+ e.client_name = bts().client_map[e.client].display_name;
+ e.rate_name = bts().earnings_rate[e.rate].RatePerUnit + "-" + bts().earnings_rate[e.rate].Name;
+
+ if (! has_txt_hour( bts().earnings_rate[e.rate].TypeOfUnits )){
+ e.non_hour = true;
+ }
+
+ if (job_is_week1(e.start)){
+ e.is_week1=true;
+ }else if (job_is_week2(e.start)){
+ e.is_week2=true;
+ }
+
+ if (e.ack != 0){
+ e.is_confirmed = true;
+ }
+ }
+
+ function has_txt_hour(str){
+ var s = str.toLowerCase();
+ return s.indexOf('hour') != -1;
+ }
function show_jobs(job_els, in_ajax){
if (job_els.length >0){
@@ -1441,21 +1460,43 @@
var el = $(this).closest('.jobTable');
var data = el.data();
data.ack = e.checked? 1: 0;
- mark_dirty(el);
+ job_mark_dirty(el);
});
- function mark_dirty(el)
+ function job_mark_dirty(el)
{
el.removeClass('saved');
el.addClass('dirty');
}
- function mark_clean(el)
+ function job_mark_clean(el)
{
el.addClass('saved');
el.removeClass('dirty');
}
+ function job_is_week1(t)
+ {
+ var w1_begin = new Date($('span[name="w1d1"]').data().date) ;
+ var w1_end = new Date($('span[name="w1d7"]').data().date);
+ w1_begin.setHours(0,0,0,0);
+ w1_end.setHours(23,59,59);
+ //console.log("week1 begin %o, end %o", w1_begin, w1_end);
+ //w1_end = new Date (w1_end.setDate(w1_end.getDate()+1)); //from 00:00 to 23:59;
+ var me = new Date(t);
+ return (w1_begin <= me && me <= w1_end );
+ }
+
+ function job_is_week2(t)
+ {
+ var w2_begin = new Date($('span[name="w2d1"]').data().date);
+ var w2_end = new Date($('span[name="w2d7"]').data().date);
+ w2_begin.setHours(0,0,0,0);
+ w2_end.setHours(23,59,59);
+ var me = new Date(t);
+ return (w2_begin <= me && me <= w2_end );
+ }
+
function init_ts(){
xero(false);
wifi(false);