在EXTJS6中有一个网格,可以将工作时间延长一周。所有这些时间都属于时区类型,由早晨,下午,下午,下午分开。
应添加所有小时数并与总工作时间进行比较(如果是,则在标签中显示为YES,否则,表示“否”)。当我添加一个新的默认值行(8:30,13:00,15:00,19:00)时,此复杂工作正常,但存在我需要逐个编辑每个单元格并再次检查总和之后的时刻。
sum算法以这种方式工作:当我单击按钮o添加日期时,创建一个具有默认值的新行并添加到网格计数+1,然后将数组中的所有小时值与cicle相加并检查总数小时值。
当我单击一个单元格(timefieldtype)并编辑该值时,问题就出现了。此值将更改,并在我单击添加日期按钮时添加到总计,但不会在更改的时刻添加。出于这个原因,我想获取单元格时域值以使其他策略值运行此值,换句话说,使用新值操作时域中的旧值。
如何获取单元格中的旧时域值?。
网格图片:enter image description here
这是在网格的时间域组合中单击时监听的视图控制器方法。
onTimefieldSelect: function(combo, record, eOpts) {
var value = new Date(combo.getValue());
hora = value.getHours();
minuto = (value.getMinutes() === 0)?'00':value.getMinutes();
hora_combo = hora +':'+minuto;
combo.setValue(hora_combo);
console.log('hora '+hora+' '+minuto+" (desde onTimefieldSelect)");
var valor_actual = grid.editingPlugin.getActiveRecord();
console.log(valor_actual);
}
然后在此方法中呈现(每列一个)
renderHora1: function(value, metaData, record, rowIndex, colIndex, store, view) {
//return(this.renderHora(value));
if(!isNaN(new Date(value)))
{
return(this.renderHora(value));
}else{
return value;
}
},
和添加日期的方法:
onAgregarDiaClick: function(button, e, eOpts) {
dias_store = button.up('grid').getStore().count();
console.log(dias_store+" dia (desde agregardiaclick)");
horas_semanales = Ext.ComponentQuery.query('numberfield[name=num_horasSemanales]')[0].getValue();
hora_inicial = 0;
dif_hora_total = 8.80;
dif_hora_med_jor = 4.48;
hora_entera = 0; // VARIABLE QUE DETERMINA EL VALOR DE LA SUMA DE HORAS SIN DECIMALES.
cuenta_grid = Ext.ComponentQuery.query('[itemId=grid_jornadaLaboral]')[0].getStore().getCount();
if (horas_semanales === 0) {
Ext.Msg.show
({
title:'Advertencia',
msg: 'No has ingresado las horas semanales' ,
icon: Ext.MessageBox.WARNING,
buttons: Ext.MessageBox.OK
});
} else {
if(dias_store < 7)
{
grideditable = button.up('grid');
opcion = new form_48.model.JornadaLaboral.mdl_JornadaDiaria({
'dia_codigo' : 8,
'dia_nombre' : 'Seleccione...',
'entrada_manana': '08:30',
'salida_manana' : '13:18',
'entrada_tarde' : '15:00',
'salida_tarde' : '19:00'
});
if(dias_store == 6)
button.disable();
var editor = button.up('grid').editingPlugin;
//editor.cancelEdit();
console.log(cuenta_grid);
console.log("**********************************************")
if(cuenta_grid === 0){
button.up('grid').getStore().insert(dias_store+1, opcion);
button.up('grid').getStore().sort('dia_codigo', 'ASC');
//cuenta_grid = cuenta_grid + 1;
}
//editor.startEditByPosition({row: dias_store+1, column: 0});
}
if( hora_inicial < horas_semanales ){
hora_inicial = dif_hora_total;
activa_suma = true;
if (activa_suma ==true) {
for (var i = 0; i < cuenta_grid; i++)
{
var ent_mnna = Ext.ComponentQuery.query('[itemId=grid_jornadaLaboral]')[0].getStore().data.items[i].data.entrada_manana;
var sal_mnna = Ext.ComponentQuery.query('[itemId=grid_jornadaLaboral]')[0].getStore().data.items[i].data.salida_manana;
var ent_tard = Ext.ComponentQuery.query('[itemId=grid_jornadaLaboral]')[0].getStore().data.items[i].data.entrada_tarde;
var sal_tard = Ext.ComponentQuery.query('[itemId=grid_jornadaLaboral]')[0].getStore().data.items[i].data.salida_tarde;
var ent_mnna_sum = form_48.app.getController('FormateoNumero').fecha_hora(ent_mnna);
var sal_mnna_sum = form_48.app.getController('FormateoNumero').fecha_hora(sal_mnna);
var ent_tard_sum = form_48.app.getController('FormateoNumero').fecha_hora(ent_tard);
var sal_tard_sum = form_48.app.getController('FormateoNumero').fecha_hora(sal_tard);
//OBTENEMOS LAS DIFERENCIAS DE HORAS DE LA MANANA Y DE LA TARDE (EJ. 8:30 -13:18 = 04:48)
dif_hora_manana = form_48.app.getController('FormateoNumero').resta_horas(ent_mnna_sum,sal_mnna_sum);
dif_hora_tarde = form_48.app.getController('FormateoNumero').resta_horas(ent_tard_sum,sal_tard_sum);
//SUMAMOS LAS DIFERENCIAS DE HORAS DE LA MANANA Y DE LA TARDE PARA OBTENER EL TOTAL DE HORAS TRABAJADO AL DIA.
suma_horas_jornada = form_48.app.getController('FormateoNumero').suma_horas(dif_hora_manana,dif_hora_tarde);
dif_hora_total = (dif_hora_total + suma_horas_jornada);
console.log(suma_horas_jornada+ " horas jornada(desdea gregardiaclick)");
console.log(hora_entera+ " diferencia horas sin decimal (desde agregardiaclick)");
console.log("-------------------------------------------------------------------");
console.log(ent_mnna);
// Ext.ComponentQuery.query('numberfield[name=num_horas_grid]')[0].setValue(num_horas_grid);
//console.log(dif_hora_total);
}
hora_entera = Math.trunc(dif_hora_total);
if(hora_entera <= horas_semanales){
//alert("dif_hora2: "+dif_hora_total);
button.up('grid').getStore().insert(dias_store+1, opcion);
button.up('grid').getStore().sort('dia_codigo', 'ASC');
}else{
Ext.Msg.show
({
title:'Advertencia',
msg: 'No se puede ingresar la jornada ya que se exceden por ' +(dif_hora_total- horas_semanales).toFixed(1) + ' horas el maximo establecido en el campo:<center><b>"Horas Semanales"</b></center>' ,
icon: Ext.MessageBox.WARNING,
buttons: Ext.MessageBox.OK
});
activa_suma == false;
}
console.log(dif_hora_total+ " suma actual de horas(desde agregardiaclick)");
if((hora_entera || dif_hora_total)=== horas_semanales){
Ext.ComponentQuery.query('displayfield[name=dsp_cumple_horas]')[0].setValue('SI');
console.log(horas_semanales+ " horas semanales(desde agregardiaclick)");
}else{
Ext.ComponentQuery.query('displayfield[name=dsp_cumple_horas]')[0].setValue('NO');
}
}//fin if cuentagrid
}
//horas_semanales = Ext.ComponentQuery.query('numberfield[name=num_horasSemanales]')[0].getValue();
}
},
抱歉我的英文。我希望你能帮助我一个想法。 谢谢!