; --------------------------------------------
; Calcule l'ecart entre 2 dates en minutes
; --------------------------------------------
; INPUT:
;       dat0,h0 = date(j,m,a) et heure (h,min)
;       dat1,h1 = date(j,m,a) et heure (h,min)
; OUPUT:
;       dmin    = ecart, en minutes
;                 (dat0,h0) + dmin = (dat1,h1)  
; --------------------------------------------

FUNCTION rh_calc_datmin, dat0, h0, dat1, h1
  j0 = julday(dat0(1), dat0(0), dat0(2))
  j1 = julday(dat1(1), dat1(0), dat1(2))
  j = min([j0, j1])
  dmin = long(j1-j)*24L*60L+long(h1(0))*60L+long(h1(1))
  dmin = dmin-long((j0-j))*24L*60L-long(h0(0))*60L-long(h0(1))
  return,  dmin
end

; ----------------------
; Gestion des evenements
; ----------------------

PRO rh_command_ath_event, event
common wcommand_at, s_nb, s_nb1, nb, nb1, ind_mois, ind_jour, dmin, s_min, dat

  WIDGET_CONTROL,Event.Id,GET_UVALUE=Ev

  IF ev EQ 'FIN' THEN BEGIN
     widget_control,s_nb, GET_VALUE = nb
     widget_control,s_nb1, GET_VALUE = nb1
     dmin= rh_calc_datmin([dat(2),dat(1), dat(0)],[dat(3),dat(4)] , $
                                    [ind_jour+1, ind_mois+1,dat(0)], [nb,nb1])
      widget_control, s_min, set_value=strcompress(string(dmin)+' minutes')
     WIDGET_CONTROL,EVENT.TOP,/DESTROY
  ENDIF

  IF ev EQ 'MOIS' THEN begin
      ind_mois = event.index
     dmin= rh_calc_datmin([dat(2),dat(1), dat(0)],[dat(3),dat(4)] , $
                                    [ind_jour+1, ind_mois+1,dat(0)], [nb,nb1])
      widget_control, s_min, set_value=strcompress(string(dmin)+' minutes')
  ENDIF
  IF ev EQ 'JOUR' THEN BEGIN
      ind_jour = event.index
     dmin= rh_calc_datmin([dat(2),dat(1), dat(0)],[dat(3),dat(4)] , $
                                    [ind_jour+1, ind_mois+1,dat(0)], [nb,nb1])
     widget_control, s_min, set_value=strcompress(string(dmin)+' minutes')
   ENDIF
  IF ev EQ 'nb'   THEN BEGIN
      widget_control,event.Id,GET_VALUE = nb
     dmin= rh_calc_datmin([dat(2),dat(1), dat(0)],[dat(3),dat(4)] , $
                                    [ind_jour+1, ind_mois+1,dat(0)], [nb,nb1])
     widget_control, s_min, set_value=strcompress(string(dmin)+' minutes')
  ENDIF
  IF ev EQ 'nb1'   THEN BEGIN
      widget_control,event.Id,GET_VALUE = nb1
     dmin= rh_calc_datmin([dat(2),dat(1), dat(0)],[dat(3),dat(4)] , $
                                    [ind_jour+1, ind_mois+1,dat(0)], [nb,nb1])
     widget_control, s_min, set_value=strcompress(string(dmin)+' minutes')
  ENDIF
END

;-------------------------------------
;-------------------------------------

Function rh_command_ath, group = group

common wcommand_at, s_nb, s_nb1, nb, nb1, ind_mois, ind_jour, dmin, s_min, dat


  base = WIDGET_BASE(/column, TITLE='Traitement Differe', $
         group=group, /BASE_ALIGN_CENTER,space=30, xpad=20, $
         ypad=20,/modal, xoffset=1, yoffset=1)
  l = widget_label(base, value = systime(0))

  dat = bin_date(systime())
  ind_mois=dat(1)-1
  mois=['Janvier','Fevrier','Mars','Avril','Mai','Juin', 'Juillet','Aout','Septembre']
  mois = [mois,'Octobre','Novembre','Decembre']
  ind_jour=dat(2)-1
  jour = string(indgen(31)+1)
  s_jour = widget_droplist( base, value=jour, uvalue = 'JOUR', TITLE='Jour: ')
  widget_control, s_jour,  set_droplist_select = ind_jour
  s_mois = widget_droplist( base, value=mois, uvalue = 'MOIS', TITLE='Mois: ')
  widget_control, s_mois,  set_droplist_select = ind_mois
  nb = dat(3)+1
  IF nb GT 23 THEN nb = 0
  nb1=0
  s_nb = rh_cw_nombre( base, MINIMUM=0, MAXIMUM=23, $
         VALUE = nb, UVALUE='nb', TITLE='Heure')
  s_nb1 = rh_cw_nombre( base, MINIMUM=0, MAXIMUM=59, $
         VALUE = nb1, UVALUE='nb1', TITLE='Minute')
  b = widget_base(base, /row, space=0)
  lab = widget_label(b, value='Attente de ')
  dmin= rh_calc_datmin([dat(2),dat(1), dat(0)],[dat(3),dat(4)] , $
                    [ind_jour+1, ind_mois+1,dat(0)], [nb,nb1])
  s_min=widget_label(b, value=strcompress(string(dmin)+' minutes'))      
  b = WIDGET_BUTTON(base, UVALUE='FIN', VALUE='OK', xs=100, ys=35)

  WIDGET_CONTROL, base, /REALIZE
  XMANAGER, 'rh_command_ath', base, group=group
  dmin1 = dmin
  mm=['Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct',$
      'Nov','Dec']
  sh = string(format='(i2.2,":",i2.2," ",a3," ",i2)',$
       nb,nb1, mm(ind_mois),ind_jour+1)
  return, sh
end
;------------------------------------------------

Pro rh_command_exec, nom, NOLOG = NOLOG, group = group
common wcommand_at, s_nb, s_nb1, nb, nb1, ind_mois, ind_jour, dmin, s_min, dat
  
  IF n_elements(group) eq 0 THEN group = 0
  rh_chmod_fich, nom+".cmd", PERM='744'
         
  IF KEYWORD_SET(NOLOG) THEN BEGIN
     rh_execute_cmd, nom+".cmd >& "+nom+".bil"
     return
  ENDIF
  
  txt = ['',"CREATION DU SCRIPT:", "    "+nom+".cmd", $
         '','',"NOM DU FICHIER LOG:", "    "+nom+".bil", '']

  res = widget_message([' ',' ','On continue ?', ' '],$
        /question, title = 'Traitement')
  IF res EQ "No" Then BEGIN
     rh_del_fich, nom+".cmd"
     return
  ENDIF
  res = widget_message([' ',' ','Traitement DIFFERE', ' ', $
        ' '], /question, title = 'Traitement')
  IF res eq "Yes" THEN BEGIN
     dmin = rh_command_ath(group=group)
; modif : les messages doivent etre rediriges au niveau de la commande idl
;     rh_system, "at -f "+nom+".cmd "+" >& "+nom+".bil "+dmin
    nom1=nom+'_'+string(format='(i4.4)',dat(0))+string(format='(i2.2)',(ind_mois+1))
     nom1=nom1+string(format='(i2.2)',(ind_jour+1))+'_'+strmid(dmin,0,2)+strmid(dmin,3,2)
     rh_system,"mv "+nom+".cmd "+nom1+".cmd"
; pour eviter les doublons en traitement différé
     rh_system, "at -f "+nom1+".cmd "+dmin 
     res = widget_message([txt, ' ',' ','Traitement DIFFERE', ' ', $
        "La rubrique 'Les Jobs', 'Jobs en attente'",$
            ' permet de consulter les Jobs en attente', ' '],$
        /info, title = 'Traitement')
  ENDIF ELSE BEGIN
     rh_execute_cmd, nom+".cmd"+" >& "+nom+".bil &"
     txt = [txt, ' ', '          Traitement IMMEDIAT', ' ']
     txt = [txt, ' ', "La rubrique 'Les Jobs', 'Consultation Log'",$
            ' permet de consulter le fichier LOG', ' ']
     res = widget_message(txt,/information, title = 'Traitement')
  ENDELSE

  RETURN
END
  
