public static List <TimeSlice> GetUnloadSlices(string rampid, string rampdsc, DateTime datefrom, DateTime dateto, List <TimeSlice> tslices, SqlCommand cmd, SqlDataReader dr) { rampid = rampid.Trim(); rampdsc = rampdsc.Trim(); // Zistenie dynamicky rezervovaných časov rampy ktoré spadajú do čaového úseku od-do List <TimeSlice> tmptslices = new List <TimeSlice>(); cmd.CommandText = "SELECT FORMAT(datefrom, 'yyyy-MM-dd HH:mm:ss'), FORMAT(dateto, 'yyyy-MM-dd HH:mm:ss') FROM trucks_unloads WHERE rampid='" + rampid + "' "; cmd.CommandText = cmd.CommandText + "AND NOT ( DATEADD( ss, 1, datefrom )>@Dateto OR DATEADD( ss, -1, dateto )<@Datefrom )"; cmd.Parameters.Clear(); cmd.Parameters.Add("@Rampid", SqlDbType.NVarChar).Value = rampid; cmd.Parameters.Add("@Datefrom", SqlDbType.DateTime).Value = datefrom; cmd.Parameters.Add("@Dateto", SqlDbType.DateTime).Value = dateto; dr = cmd.ExecuteReader(); if (dr.HasRows) { tmptslices.Clear(); while (dr.Read()) { DateTime startdt = DateTime.ParseExact(dr.GetValue(0).ToString().Trim(), "yyyy-MM-dd HH:mm:ss", null); DateTime enddt = DateTime.ParseExact(dr.GetValue(1).ToString().Trim(), "yyyy-MM-dd HH:mm:ss", null).AddSeconds(1); int diffminutes = (int)Math.Floor((double)(int)(enddt - startdt).TotalMinutes / Constants.TimeSliceLenghtInMinutes); tmptslices = WorkCalendar.CreateTimeSlices(rampid, rampdsc, startdt, 1, diffminutes, tmptslices, false); } // Nájdenie každého dieliku dynamicky rezervovaného času v dielikoch pracovných smien danej rampy a ak sa nájde, tak označenie nájdeného dieliku pracovnej smeny príznakom 'obsadený' tslices = WorkCalendar.CompareTimeSlices(tmptslices, tslices); } dr.Close(); cmd.Dispose(); return(tslices); }
public static int IsCalWorkDayShiftInDate(string rampid, DateTime date) { // Táto metóda zistí, či na danej rampe je v danom dni aspoň jedna smena pracovná // Premenná 'date' obsahuje iba dátum, čas má vo formáte 00:00:00, napr. 2018-06-26 00:00:00 // Ak chcem otestovaťm či je v danom dátum ranná smena, tak k premennej 'date' pridám šesť hodín a dostanem dátum/čas napr. 2018-06-26 06:00:00 // tento dátum/čas potom otestujem, či spadá do pracovnej smeny danej rampy. Rovnako pre poobednú smenu pripočítam 14 hodín a pre nočnú smenu 22 hodín return((WorkCalendar.IsCalWorkDayShiftInDateTime(rampid, date.AddHours(6)) == 1 || WorkCalendar.IsCalWorkDayShiftInDateTime(rampid, date.AddHours(14)) == 1 || WorkCalendar.IsCalWorkDayShiftInDateTime(rampid, date.AddHours(22)) == 1) ? 1 : 0); }
public static List <TimeSlice> GetBlockResSlices(string sqltable, string rampid, string rampdsc, DateTime date, List <TimeSlice> tslices, SqlCommand cmd, SqlDataReader dr, bool isjumpable) { sqltable = sqltable.Trim(); rampid = rampid.Trim(); rampdsc = rampdsc.Trim(); // Zistenie blokovaných/rezervovaných časov rampy pre obdobie, do ktorého spadá zadaný dátum List <TimeSlice> tmptslices = new List <TimeSlice>(); cmd.CommandText = "SELECT mon,tue,wed,thu,fri,sat,sun,timefrom,timeto" + (isjumpable ? ",jumpable" : "") + " FROM " + sqltable + " WHERE rampid=@Rampid AND validfrom<=@Date AND validto>=@Date "; cmd.Parameters.Clear(); cmd.Parameters.Add("@Rampid", SqlDbType.NVarChar).Value = rampid; cmd.Parameters.Add("@Date", SqlDbType.Date).Value = date; dr = cmd.ExecuteReader(); if (dr.HasRows) { DateTime startdt, enddt; while (dr.Read()) { // Zistenie, či blokovaný čas platí aj pre deň v týždni na ktorý pripadá dátum zadaný užívateľom if ((date.DayOfWeek == DayOfWeek.Monday && dr.GetValue(0).ToString().Trim() == "1") || (date.DayOfWeek == DayOfWeek.Tuesday && dr.GetValue(1).ToString().Trim() == "1") || (date.DayOfWeek == DayOfWeek.Wednesday && dr.GetValue(2).ToString().Trim() == "1") || (date.DayOfWeek == DayOfWeek.Thursday && dr.GetValue(3).ToString().Trim() == "1") || (date.DayOfWeek == DayOfWeek.Friday && dr.GetValue(4).ToString().Trim() == "1") || (date.DayOfWeek == DayOfWeek.Saturday && dr.GetValue(5).ToString().Trim() == "1") || (date.DayOfWeek == DayOfWeek.Sunday && dr.GetValue(6).ToString().Trim() == "1")) { // Vytvorenie časových dielikov (po 10 minútach) pre blokovaný čas startdt = DateTime.ParseExact(date.ToString("yyyy-MM-dd") + " " + dr.GetValue(7).ToString().Trim() + ":00", "yyyy-MM-dd HH:mm:ss", null); enddt = DateTime.ParseExact(date.ToString("yyyy-MM-dd") + " " + dr.GetValue(8).ToString().Trim() + ":00", "yyyy-MM-dd HH:mm:ss", null); int diffminutes = (int)Math.Floor((double)(int)(enddt - startdt).TotalMinutes / Constants.TimeSliceLenghtInMinutes); tmptslices.Clear(); tmptslices = WorkCalendar.CreateTimeSlices(rampid, rampdsc, startdt, 1, diffminutes, tmptslices, (isjumpable ? dr.GetValue(9).ToString().Trim() == "1" : false)); // Nájdenie každého dieliku blokovaného času v dielikoch pracovných smien danej rampy a ak sa nájde, tak označenie nájdeného dieliku pracovnej smeny príznakom 'obsadený' prípadne o bokovaných časov rampy aj príznakom 'obskočiteľný' tslices = WorkCalendar.CompareTimeSlices(tmptslices, tslices); } } } dr.Close(); cmd.Dispose(); return(tslices); }
public static int DetectBlockResColision(string mode, int rowid, string rampid, string validfrom, string validto, string timefrom, string timeto, int mon, int tue, int wed, int thu, int fri, int sat, int sun) { DateTime date; int result = 0, retval = 0; for (int i = 0; i <= (DateTime.Parse(validto) - DateTime.Parse(validfrom)).Days; i++) { date = DateTime.Parse(validfrom).AddDays(i); if ((date.DayOfWeek == DayOfWeek.Monday && mon == 1) || (date.DayOfWeek == DayOfWeek.Tuesday && tue == 1) || (date.DayOfWeek == DayOfWeek.Wednesday && wed == 1) || (date.DayOfWeek == DayOfWeek.Thursday && thu == 1) || (date.DayOfWeek == DayOfWeek.Friday && fri == 1) || (date.DayOfWeek == DayOfWeek.Saturday && sat == 1) || (date.DayOfWeek == DayOfWeek.Sunday && sun == 1)) { //date = DateTime.ParseExact(validfrom + " 00:00:00", "yyyy-MM-dd HH:mm:ss", CultureInfo.InvariantCulture).AddDays(i); // Kontrola na koliziu s blokovanymi casami rampy retval = TruckrampFuncs.BlockResColision("truckramps_block", rampid, date, timefrom, timeto, (mode.ToUpper() == "NEW" ? 0 : rowid)); switch (retval) { case 1: // Zistena kolizia result = -1; break; case -1: // Vynimka v metode IsRampBlockTimeColision result = -2; break; } if (result == 0) { // Kontrola na koliziu s pevnymi rezervaciami rampy retval = TruckrampFuncs.BlockResColision("sapvendors_res", rampid, date, timefrom, timeto, 0); switch (retval) { case 1: // Zistena kolizia result = -3; break; case -1: // Vynimka v metode IsSAPVendResTimeColision result = -4; break; } } } if (result == 0) { retval = WorkCalendar.IsCalWorkDay(date); // Zistenie, ci je den pracovny switch (retval) { case 0: // Den nie je pracovny podla pracovneho kalendara firmy, kontrola nie je potrebna break; case 1: // Kontrola zaciatku blokovaneho casu na koliziu s definiciou pracovných smien rampy retval = WorkCalendar.IsCalWorkDayShiftInDateTime(rampid, DateTime.ParseExact(date.ToString("yyyy-MM-dd", CultureInfo.InvariantCulture) + " " + timefrom + ":00", "yyyy-MM-dd HH:mm:ss", CultureInfo.InvariantCulture)); switch (retval) { case 0: // V dany cas nie je v kalendary rampy pracovna smena (zistena kolizia) result = -5; break; case 1: break; case -1: // Vynimka v metode IsCalWorkDayShift result = -6; break; case -2: // Chybajuci pracovný kalendar smien rampy result = -7; break; } if (result == 0) { // Kontrola konca blokovaneho casu na koliziu s definiciou pracovných smien retval = WorkCalendar.IsCalWorkDayShiftInDateTime(rampid, DateTime.ParseExact(date.ToString("yyyy-MM-dd", CultureInfo.InvariantCulture) + " " + timeto + ":00", "yyyy-MM-dd HH:mm:ss", CultureInfo.InvariantCulture).AddSeconds(-1)); switch (retval) { case 0: // V dany cas nie je v kalendary rampy pracovna smena (zistena kolizia) result = -8; break; case 1: break; case -1: // Vynimka v metode IsCalWorkDayShift result = -9; break; case -2: // Chybajuci kalendar smien rampy result = -10; break; } } break; case -1: // Vynimka v metode IsCalWorkDay result = -11; break; } } if (result != 0) { break; // Opustenie cyklu for } } return(result); }