public static int CheckAssenze(string sMese, string sAnno, string persons_id, ref List <CheckAnomalia> ListaAnomalie) { // Funzione ritorna // 0 = nessun problema // 1 = warning // 2 = errore // La lista di oggetti contiene le anomalie secondo la struttura della class CheckAnomalia int iRet; ListaAnomalie.Clear(); string dFirst = ASPcompatility.FormatDateDb("01/" + sMese.PadLeft(2, '0') + "/" + sAnno); string dLast = ASPcompatility.FormatDateDb(DateTime.DaysInMonth(Convert.ToInt32(sAnno), Convert.ToInt32(sMese)).ToString() + "/" + sMese + "/" + sAnno); // selezione se ce ne sono le ore di richiesta assenza in stato da approvare DataTable dtAssenze = Database.GetData("Select FORMAT(a.date,'dd/MM/yyyy') as date, a.Projects_id, b.ProjectCode, b.Name as ProjectName from Hours as a JOIN Projects as b ON b.Projects_id = a.Projects_id WHERE ApprovalStatus='" + MyConstants.WF_REQUEST + "' AND Persons_id=" + persons_id + " AND date >= " + dFirst + " AND date <= " + dLast, null /* TODO Change to default(_) if this is not a reference type */); iRet = dtAssenze.Rows.Count; // numero anomalie // cicla sulle assenze non approvate foreach (DataRow rs in dtAssenze.Rows) { CheckAnomalia a = new CheckAnomalia(); a.Data = Convert.ToDateTime(rs["date"].ToString()); a.Descrizione = "Richiesta assenza da approvare"; a.ProjectName = rs["ProjectName"].ToString(); ListaAnomalie.Add(a); } return(iRet); }
public static int CheckTicketHomeOffice(string sMese, string sAnno, string persons_id, ref List <CheckAnomalia> ListaAnomalie) { // Funzione ritorna // 0 = nessun problema // 1 = warning // 2 = errore // La lista di oggetti contiene le anomalie secondo la struttura della class CheckAnomalia int iRet = 0; ListaAnomalie.Clear(); string dFirst = ASPcompatility.FormatDateDb("01/" + sMese.PadLeft(2, '0') + "/" + sAnno); string dLast = ASPcompatility.FormatDateDb(DateTime.DaysInMonth(Convert.ToInt32(sAnno), Convert.ToInt32(sMese)).ToString() + "/" + sMese + "/" + sAnno); // carica ticket caricati nel mese DataTable dtTicket = Database.GetData("Select FORMAT(date,'dd/MM/yyyy') as date from Expenses where persons_id=" + persons_id + " AND TipoBonus_id<>'0' AND date >= " + dFirst + " AND date <= " + dLast, null /* TODO Change to default(_) if this is not a reference type */); DataTable dtHomeOffice = Database.GetData("SELECT FORMAT(date,'dd/MM/yyyy') AS date " + " FROM Hours AS a " + " WHERE LocationDescription LIKE '%" + ConfigurationManager.AppSettings["HOME_OFFICE"] + "%' AND " + " persons_id=" + persons_id + " AND date >= " + dFirst + " AND date <= " + dLast, null); // cicla sui ticket, controlla ticket caricati su giorni HOME OFFICE foreach (DataRow i in dtTicket.Rows) { // se il giorno è in Home Office alza un'anomalia if (dtHomeOffice.Select("date = '" + i["date"] + "'").Length != 0) { // Alza anomalia e carica lista iRet = 1; CheckAnomalia a = new CheckAnomalia(); a.Data = Convert.ToDateTime(i["date"]); a.Tipo = "M"; a.Descrizione = "Ticket caricato su giornata in HOME OFFICE"; ListaAnomalie.Add(a); } } return(iRet); }
public static int CheckSpese(string sMese, string sAnno, string persons_id, ref List <CheckAnomalia> ListaAnomalie) { // Funzione ritorna // 0 = nessun problema // 1 = warning // 2 = errore // La lista di oggetti contiene le anomalie secondo la struttura della class CheckAnomalia int iRet; ListaAnomalie.Clear(); string dFirst = ASPcompatility.FormatDateDb("01/" + sMese.PadLeft(2, '0') + "/" + sAnno); string dLast = ASPcompatility.FormatDateDb(DateTime.DaysInMonth(Convert.ToInt32(sAnno), Convert.ToInt32(sMese)).ToString() + "/" + sMese + "/" + sAnno); // carica spese nel mese della persona per il controllo DataTable dtProgettiMese = Database.GetData("Select FORMAT(date,'dd/MM/yyyy') as date, Projects_id from Hours WHERE Persons_id=" + persons_id + " AND date >= " + dFirst + " AND date <= " + dLast, null /* TODO Change to default(_) if this is not a reference type */); // seleziona tutte le spese del mese, considera le spese standard e i rimborsi trasferta DataTable dt = Database.GetData("SELECT a.Projects_id, Amount, date, b.ProjectCode, c.ExpenseCode, c.UnitOfMeasure FROM Expenses As a " + " JOIN Projects As b On b.Projects_id = a.Projects_id " + " JOIN ExpenseType As c On c.ExpenseType_id = a.ExpenseType_Id " + " WHERE ( a.TipoBonus_Id = 0 Or a.TipoBonus_Id = 1 ) And Persons_id=" + persons_id + " And Date >= " + dFirst + " And Date <= " + dLast + " ORDER BY date", null /* TODO Change to default(_) if this is not a reference type */); // se non ci sono stati carichi esce con errore if (dtProgettiMese.Rows.Count == 0) { return(1); } DataRow[] drRows; string sdata; if ((dt != null) & dt.Rows.Count > 0) { // cicla sulla spese del mese foreach (DataRow rs in dt.Rows) { sdata = string.Format("{0:dd/MM/yyyy}", rs["date"]); // verifica se esistono ore caricate per lo stesso progetto drRows = null; drRows = dtProgettiMese.Select("date = '" + sdata + "' AND Projects_id = " + rs["Projects_id"].ToString()); if (drRows.Count() == 0) { CheckAnomalia a = new CheckAnomalia(); a.Data = Convert.ToDateTime(rs["date"].ToString()); a.Tipo = "M"; a.Descrizione = "Spesa caricata su commessa non presente nel giorno"; a.ExpenseCode = rs["ExpenseCode"].ToString(); a.ProjectCode = rs["ProjectCode"].ToString(); a.UnitOfMeasure = rs["UnitOfMeasure"].ToString(); a.Amount = Convert.ToDouble(rs["Amount"].ToString()); ListaAnomalie.Add(a); } } } if (ListaAnomalie.Count > 0) { iRet = 1; } else { iRet = 0; } return(iRet); }
public static int CheckTicketAssenti(string sMese, string sAnno, string persons_id, ref List <CheckAnomalia> ListaAnomalie) { // Funzione ritorna // 0 = nessun problema // 1 = warning // 2 = errore // La lista di oggetti contiene le anomalie secondo la struttura della class CheckAnomalia int f; string sDate; DataRow[] drRow; int iRet = 0; ListaAnomalie.Clear(); string dFirst = ASPcompatility.FormatDateDb("01/" + sMese.PadLeft(2, '0') + "/" + sAnno); string dLast = ASPcompatility.FormatDateDb(DateTime.DaysInMonth(Convert.ToInt32(sAnno), Convert.ToInt32(sMese)).ToString() + "/" + sMese + "/" + sAnno); // carica ticket caricati nel mese DataTable dtTicket = Database.GetData("Select FORMAT(date,'dd/MM/yyyy') as date from Expenses where persons_id=" + persons_id + " AND TipoBonus_id<>'0' AND date >= " + dFirst + " AND date <= " + dLast, null /* TODO Change to default(_) if this is not a reference type */); // carica date in cui sono presenti ferie / malattie / festività DataTable dtFerie = Database.GetData("SELECT FORMAT(date,'dd/MM/yyyy') AS date " + " FROM Hours AS a " + " INNER JOIN Projects AS b ON b.projects_id = a.projects_id " + " WHERE b.ProjectCode IN " + ConfigurationManager.AppSettings["CODICI_FERIE"] + " AND " + " persons_id=" + persons_id + " AND date >= " + dFirst + " AND date <= " + dLast, null); DataTable dtHomeOffice = Database.GetData("SELECT FORMAT(date,'dd/MM/yyyy') AS date " + " FROM Hours AS a " + " WHERE LocationDescription LIKE '%" + ConfigurationManager.AppSettings["HOME_OFFICE"] + "%' AND " + " persons_id=" + persons_id + " AND date >= " + dFirst + " AND date <= " + dLast, null); //dtFerie.PrimaryKey = new DataColumn[] { dtFerie.Columns["hours_id"] }; // cicla sui giorni del mese, controllo giorni senza ticket for (f = 1; f <= DateTime.DaysInMonth(Convert.ToInt32(sAnno), Convert.ToInt32(sMese)); f++) { sDate = f.ToString().PadLeft(2, '0') + "/" + sMese.PadLeft(2, '0') + "/" + sAnno; // giorno lavorativo if ((int)Convert.ToDateTime(sDate).DayOfWeek != 6 & (int)Convert.ToDateTime(sDate).DayOfWeek != 0) { // controlla che non sia festivo e non sia una giornata di Smart Working if (!MyConstants.DTHoliday.Rows.Contains(sDate) && (dtFerie.Rows.Count == 0 || dtFerie.Select("date = '" + sDate + "'").Length == 0) && (dtHomeOffice.Select("date = '" + sDate + "'").Length == 0)) { // controlla che sia caricato un ticket drRow = null; drRow = dtTicket.Select("date = '" + sDate + "'"); if (drRow.Count() == 0) { // Alza anomalia e carica lista iRet = 1; CheckAnomalia a = new CheckAnomalia(); a.Data = Convert.ToDateTime(sDate); a.Tipo = "M"; a.Descrizione = "Ticket o rimborso assente"; ListaAnomalie.Add(a); } } } } return(iRet); }