Gestione ore straordinarie in due scaglioni
git-svn-id: svn://10.65.10.50/branches/R_10_00@23021 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
		
							parent
							
								
									ec024943ae
								
							
						
					
					
						commit
						53c83b8c87
					
				@ -9,7 +9,7 @@ int main(int argc, char** argv)
 | 
				
			|||||||
  case 0 : ci0100(argc,argv); break; // gestione tabelle cont. ind.
 | 
					  case 0 : ci0100(argc,argv); break; // gestione tabelle cont. ind.
 | 
				
			||||||
	case 1 : ci0200(argc,argv); break; // gestione risorse / attrezzature
 | 
						case 1 : ci0200(argc,argv); break; // gestione risorse / attrezzature
 | 
				
			||||||
	case 2 : ci0300(argc,argv); break; // parametri configurazione Contabilità Industriale
 | 
						case 2 : ci0300(argc,argv); break; // parametri configurazione Contabilità Industriale
 | 
				
			||||||
  case 3 : ci0400(argc,argv); break; // immssione documenti
 | 
					  case 3 : ci0400(argc,argv); break; // immissione documenti
 | 
				
			||||||
  case 4 : ci0500(argc,argv); break; // gestione disponibilità risorse / attrezzature
 | 
					  case 4 : ci0500(argc,argv); break; // gestione disponibilità risorse / attrezzature
 | 
				
			||||||
  case 5 : ci0600(argc,argv); break; // gestione default risorse / attrezzature
 | 
					  case 5 : ci0600(argc,argv); break; // gestione default risorse / attrezzature
 | 
				
			||||||
  case 6 : ci0700(argc,argv); break; // creazione do
 | 
					  case 6 : ci0700(argc,argv); break; // creazione do
 | 
				
			||||||
 | 
				
			|||||||
@ -9,6 +9,8 @@ int main(int argc, char** argv)
 | 
				
			|||||||
	case 1: ci1200(argc,argv); break; // stampa 
 | 
						case 1: ci1200(argc,argv); break; // stampa 
 | 
				
			||||||
  case 2: ci1300(argc,argv); break; // rilevazione ore mensili per risorsa - attrezzatura
 | 
					  case 2: ci1300(argc,argv); break; // rilevazione ore mensili per risorsa - attrezzatura
 | 
				
			||||||
  case 3: ci1400(argc,argv); break; // rilevazione ore mensili per cms - cdc
 | 
					  case 3: ci1400(argc,argv); break; // rilevazione ore mensili per cms - cdc
 | 
				
			||||||
 | 
					  case 4: ci1500(argc,argv); break; // movimenti interni
 | 
				
			||||||
 | 
					  case 5: ci1600(argc,argv); break; // interrogazione movimenti interni
 | 
				
			||||||
  default: break; 
 | 
					  default: break; 
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
  return 0;
 | 
					  return 0;
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										2
									
								
								ci/ci1.h
									
									
									
									
									
								
							
							
						
						
									
										2
									
								
								ci/ci1.h
									
									
									
									
									
								
							@ -4,6 +4,8 @@
 | 
				
			|||||||
int ci1200(int argc, char* argv[]); // stampe
 | 
					int ci1200(int argc, char* argv[]); // stampe
 | 
				
			||||||
int ci1300(int argc, char* argv[]); // rilevazione ore mensili per risorsa - attrezzatura
 | 
					int ci1300(int argc, char* argv[]); // rilevazione ore mensili per risorsa - attrezzatura
 | 
				
			||||||
int ci1400(int argc, char* argv[]); // rilevazione ore mensili per cms - cdc
 | 
					int ci1400(int argc, char* argv[]); // rilevazione ore mensili per cms - cdc
 | 
				
			||||||
 | 
					int ci1500(int argc, char* argv[]); // elaborazione movimenti interni
 | 
				
			||||||
 | 
					int ci1600(int argc, char* argv[]); // interrogazione movimenti interni
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#endif // __CI1_H
 | 
					#endif // __CI1_H
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -396,6 +396,7 @@ protected:
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
protected:
 | 
					protected:
 | 
				
			||||||
  bool cerca_disponibilita(int riga) const;
 | 
					  bool cerca_disponibilita(int riga) const;
 | 
				
			||||||
 | 
					  int cerca_straordinario(int riga, const TString& tipo_ora) const;
 | 
				
			||||||
  real proponi_costo(TMask& msk) const;
 | 
					  real proponi_costo(TMask& msk) const;
 | 
				
			||||||
  void riempi_nuova_riga(int r);
 | 
					  void riempi_nuova_riga(int r);
 | 
				
			||||||
  bool add_ril_to_doc(TRectype& rilore, TDocumento& doc, TLog_report& log) const;
 | 
					  bool add_ril_to_doc(TRectype& rilore, TDocumento& doc, TLog_report& log) const;
 | 
				
			||||||
@ -1225,6 +1226,37 @@ bool TConsuntivazione_msk::cerca_disponibilita(int riga) const
 | 
				
			|||||||
  return false;
 | 
					  return false;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					int TConsuntivazione_msk::cerca_straordinario(int riga, const TString& tipo_ora) const
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					  TSheet_field& s = sfield(F_SHEET);
 | 
				
			||||||
 | 
					  const int col_att = s.cid2index(S_CODATT);
 | 
				
			||||||
 | 
					  const int col_ora = s.cid2index(S_TPORA);
 | 
				
			||||||
 | 
					  const int col_cms = s.cid2index(S_CDC1);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  const TToken_string& r = s.row(riga);
 | 
				
			||||||
 | 
					  TString80 cod_rss; r.get(col_att, cod_rss);  cod_rss.trim();
 | 
				
			||||||
 | 
					  TString80 cod_cms; r.get(col_cms, cod_cms);  cod_cms.trim();
 | 
				
			||||||
 | 
					  for (int i = riga-2; i <= riga+2; i++) if (i != riga)
 | 
				
			||||||
 | 
					  {
 | 
				
			||||||
 | 
					    if (i >= 0 && i < s.items())
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      const TToken_string& ri = s.row(i);
 | 
				
			||||||
 | 
					      TString80 ca; ri.get(col_att, ca); ca.trim();
 | 
				
			||||||
 | 
					      TString4 to;  ri.get(col_ora, to); to.trim();
 | 
				
			||||||
 | 
					      TString80 cc; ri.get(col_cms, cc); cc.trim();
 | 
				
			||||||
 | 
					      if (ca == cod_rss && cc == cod_cms && to == tipo_ora)
 | 
				
			||||||
 | 
					        return i;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					  
 | 
				
			||||||
 | 
					  const int nr = s.insert(riga+1);
 | 
				
			||||||
 | 
					  TToken_string& rowd = s.row(nr);
 | 
				
			||||||
 | 
					  rowd = r;
 | 
				
			||||||
 | 
					  rowd.add(tipo_ora, col_ora);
 | 
				
			||||||
 | 
					  return nr;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
bool TConsuntivazione_msk::on_field_event(TOperable_field& o, TField_event e, long jolly)
 | 
					bool TConsuntivazione_msk::on_field_event(TOperable_field& o, TField_event e, long jolly)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
  switch (o.dlg())
 | 
					  switch (o.dlg())
 | 
				
			||||||
@ -1367,6 +1399,47 @@ bool TConsuntivazione_msk::on_field_event(TOperable_field& o, TField_event e, lo
 | 
				
			|||||||
              sheet.force_update(nr);
 | 
					              sheet.force_update(nr);
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
          }
 | 
					          }
 | 
				
			||||||
 | 
					        } else
 | 
				
			||||||
 | 
					        if (tipo == 'R' && cod.full() && ora.full())
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					          const int col = sheet.cid2index(S_QTAORE);
 | 
				
			||||||
 | 
					          const TRectype& rss = cache().get("RSS", cod);
 | 
				
			||||||
 | 
					          int ore = row.get_int(col);
 | 
				
			||||||
 | 
					          const int dopo_ora1 = rss.get_int("R5"); 
 | 
				
			||||||
 | 
					          const TString4 ora1 = rss.get("S9"); 
 | 
				
			||||||
 | 
					          const real prezzo1  = rss.get("R6");
 | 
				
			||||||
 | 
					          const int dopo_ora2 = rss.get_int("R7");
 | 
				
			||||||
 | 
					          const TString4 ora2 = rss.get("S10"); 
 | 
				
			||||||
 | 
					          const real prezzo2  = rss.get("R8");
 | 
				
			||||||
 | 
					          
 | 
				
			||||||
 | 
					          int ore1 = 0, ore2 = 0;
 | 
				
			||||||
 | 
					          if (ore > dopo_ora2 && ora2.full())  // ultraordinario
 | 
				
			||||||
 | 
					          {
 | 
				
			||||||
 | 
					            ore2 = ore - dopo_ora2;
 | 
				
			||||||
 | 
					            ore -= ore2;
 | 
				
			||||||
 | 
					          }
 | 
				
			||||||
 | 
					          if (ore > dopo_ora1 && ora1.full())  // straordinario
 | 
				
			||||||
 | 
					          {
 | 
				
			||||||
 | 
					            ore1 = ore - dopo_ora1;
 | 
				
			||||||
 | 
					            ore = dopo_ora1;
 | 
				
			||||||
 | 
					          }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					          if (ore1 > 0)                        // c'è straordinario?
 | 
				
			||||||
 | 
					          {
 | 
				
			||||||
 | 
					            const int prz = sheet.cid2index(S_COSTO);
 | 
				
			||||||
 | 
					            row.add(ore, col);                 // Reimposta ore ordinarie
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            const int r1 = cerca_straordinario(jolly, ora1);
 | 
				
			||||||
 | 
					            sheet.row(r1).add(ore1, col);      // Ore straordinarie   
 | 
				
			||||||
 | 
					            sheet.row(r1).add(prezzo1.string(0, 2), prz);
 | 
				
			||||||
 | 
					            if (ore2 > 0)                      // Ore ultraordianrie
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					              const int r2 = cerca_straordinario(r1, ora2);
 | 
				
			||||||
 | 
					              sheet.row(r2).add(ore2, col);
 | 
				
			||||||
 | 
					              sheet.row(r2).add(prezzo2.string(0, 2), prz);
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            sheet.force_update();
 | 
				
			||||||
 | 
					          }
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
      break;
 | 
					      break;
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user