private string _desc; // DAY_DESC /// <summary> /// Creates a new CmpDay object associated to a specific day /// </summary> /// <param name="day">DateTime specifing the day</param> /// <param name="getDefInfo">If true a CmpDaysDef object with DAYS_DEF info will be created</param> public CmpDay(DateTime day, bool getDefInfo) { _id = -1; _desc = null; _day = day; if (getDefInfo) { _daysdef = new CmpDaysDef(day); } }
/// <summary> /// Obtains the tariff associated to the ID and day (or day_type) specified. /// </summary> /// <param name="cmpDaysDef">CmpDaysDef with the info about days_def assigned to the current Date.</param> /// <returns>ArrayList of Tarifs objects</returns> public ArrayList ObtainTariff(CmpDay cmpday) { ArrayList tariffs = new ArrayList(); CmpDaysDef cmpdaysdef = cmpday.DaysDef; // Filter the TARIFF table by TAR_ID. As a result we will found a set of registers // Foreach row that the TAR_DAY_ID is NOT NULL check if TAR_DAY_ID is a DAY_ID of the pInDate day. // If it is we have found a tariff. // If none of the registers have TAR_DAY_ID not NULL or we have not found the tariff yet, we get all // registers with a TAR_DDAY_ID NOT NULL, and find the 1st that his DDAY_ID has the current day. CmpTariffsDB cmp = new CmpTariffsDB(); string swhere = "TAR_ID = @TARIFFS.TAR_ID@ AND (TAR_INIDATE <[email protected]_INIDATE@ OR TAR_INIDATE IS NULL) AND (TAR_ENDDATE>= @TARIFFS.TAR_ENDDATE@ OR TAR_ENDDATE IS NULL)"; DataTable dtTariffs = cmp.GetData(null, swhere, new object[] { _tarId, _pInDate, _pInDate }); // Step 1: Check all TAR_DAY_ID not null DataRow [] tarDayId = dtTariffs.Select("TAR_DAY_ID IS NOT NULL"); if (tarDayId.Length > 0) { // Get all DAY_ID that correspond to _pInDate (can be more than one). if (cmpday.Count > 0) { // Finally checks every DAY_ID of the TARIFFS found to IDs stored in daysid array foreach (DataRow drTariff in tarDayId) { int dayid = Convert.ToInt32(drTariff["TAR_DAY_ID"]); // Check if the DAY with day_id is the same day of _pInDate. If it is we have found the tariff (a part // of the tarif, because remember that we can have more than one register). if (dayid == cmpday.Id) { // We have found it!!! We have found it!! tariffs.Add(new Tariff(drTariff)); } } } } // Search now by day_def and acumulate the results. DataRow[] tarDdayId = dtTariffs.Select("TAR_DDAY_ID IS NOT NULL"); if (tarDdayId.Length > 0) { // Get al DDAY_ID that contains the _pInDate (that is, have a 1 in the mask for the _pInDate day) and store // them all (CmpDaysDef will store them for us ;)) if (!cmpdaysdef.IsLoaded) { cmpdaysdef.Load(); } if (cmpdaysdef.Count > 0) { // If we have found at least one DDAY_ID that contains the pInDate process the tariffs... foreach (DataRow drTariff in tarDdayId) { int ddayid = Convert.ToInt32(drTariff["TAR_DDAY_ID"]); // Check if DDAY_ID is a day_def including the day _pInDate. If it is we have found de tariff if (cmpdaysdef.ContainsId(ddayid)) { // We have found it!!! We have found it!! tariffs.Add(new Tariff(drTariff)); } } } } return(tariffs); // If no tariff was found will have Count == 0 }