Exemplo n.º 1
0
        //public DriverTrackerDL()
        //{
        //    try
        //    {
        //        con = new OracleConnection(Constants.connectionstring);
        //        con.Open();
        //        Console.WriteLine("Connected to Oracle Database {0}", con.ServerVersion);
        //    }
        //    catch (Exception e)
        //    {
        //        Console.WriteLine("Error on Connection");

        //    }

        //}

        //~DriverTrackerDL()
        //{
        //    con.Close();
        //    con.Dispose();
        //    Console.WriteLine("Connected to Oracle Database {0} is closed now", con.ServerVersion);
        //}

        public DriverTracker Add(DriverTracker drivertrack)
        {
            try
            {
                con = new OracleConnection(Constants.connectionstring);
                con.Open();
                string guid         = Convert.ToString(Guid.NewGuid());
                string SQLStatement = "Insert into DriverTracker values('" + guid + "', " + drivertrack.weeknumber + ",'" + drivertrack.driverid + "','" + drivertrack.scheduleid + "'," + drivertrack.shiftid + "," + drivertrack.totaltrip + "," + drivertrack.daytrip + "," + drivertrack.nighttrip + ",'" + drivertrack.weekday + "',sysdate)";
                //Console.WriteLine(SQLStatement);
                if (con.State.ToString().Equals("Open"))
                {
                    OracleCommand sqlCommandOracle = new OracleCommand(SQLStatement, con);
                    sqlCommandOracle.ExecuteScalar();
                }
                return(Alone("TRACK_ID", guid));
            }
            catch (Exception e)
            {
                return(null);
            }
            finally
            {
                con.Close();
            }
        }
Exemplo n.º 2
0
        /// <summary>
        /// To modify driver tracker
        /// </summary>

        public DriverTracker EditDriverTracker(DriverTracker objdrivertracker)
        {
            try
            {
                return(drivertrackerdl.Amend(objdrivertracker));
            }
            catch (Exception e)
            {
                return(null);
            }
        }
Exemplo n.º 3
0
        /// <summary>
        /// Save driver tracker information
        /// </summary>

        public DriverTracker SaveDriverTracker(DriverTracker objdrivertracker)
        {
            try
            {
                return(drivertrackerdl.Add(objdrivertracker));
            }
            catch (Exception e)
            {
                return(null);
            }
        }
Exemplo n.º 4
0
        public List <DriverTracker> All(string property = null, int value = 0)
        {
            try
            {
                con = new OracleConnection(Constants.connectionstring);
                con.Open();
                List <DriverTracker> listdriver = new List <DriverTracker>();
                string SQLStatement             = "Select * from DriverTracker";
                if (property != null)
                {
                    SQLStatement += " where " + property + " =" + value;
                }
                if (con.State.ToString().Equals("Open"))
                {
                    OracleCommand    sqlCommandOracle = new OracleCommand(SQLStatement, con);
                    OracleDataReader reader           = sqlCommandOracle.ExecuteReader();


                    while (reader.Read())
                    {
                        DriverTracker objdrivertracker = new DriverTracker();
                        objdrivertracker.trackid    = Convert.ToString(reader["TRACK_ID"]);
                        objdrivertracker.weeknumber = Convert.ToInt16(reader["WEEK_NUMBER"]);
                        objdrivertracker.driverid   = Convert.ToString(reader["DRIVER_ID"]);
                        objdrivertracker.scheduleid = Convert.ToString(reader["SCHEDULE_ID"]);
                        objdrivertracker.totaltrip  = Convert.ToInt16(reader["TOTALTRIP"]);
                        objdrivertracker.daytrip    = Convert.ToInt16(reader["DAYTRIP"]);
                        objdrivertracker.nighttrip  = Convert.ToInt16(reader["NIGHTTRIP"]);
                        objdrivertracker.weekday    = Convert.ToString(reader["WEEK_DAY"]);

                        listdriver.Add(objdrivertracker);
                    }
                }


                return(listdriver);
            }
            catch (Exception e)
            {
                return(null);
            }
            finally
            {
                con.Close();
            }
        }
Exemplo n.º 5
0
        public DriverTracker Amend(DriverTracker drivertrack)
        {
            try
            {
                con = new OracleConnection(Constants.connectionstring);
                con.Open();

                string SQLStatement = "Update DriverTracker SET ";
                SQLStatement += " WEEK_NUMBBER =" + drivertrack.weeknumber;
                SQLStatement += " DRIVER_ID =" + drivertrack.driverid;
                SQLStatement += " SCHEDULE_ID =" + drivertrack.scheduleid;
                SQLStatement += " SHIFT_ID =" + drivertrack.shiftid;
                SQLStatement += " TOTALTRIP = " + drivertrack.totaltrip;
                SQLStatement += " DAYTRIP =" + drivertrack.daytrip;
                SQLStatement += " NIGHTTRIP =" + drivertrack.nighttrip;
                SQLStatement += " WEEK_DAY =" + drivertrack.weekday;
                SQLStatement += " CREATE_DATE = sysdate";
                SQLStatement += " WHERE ID=" + drivertrack.trackid;

                //Console.WriteLine(SQLStatement);
                if (con.State.ToString().Equals("Open"))
                {
                    OracleCommand sqlCommandOracle = new OracleCommand(SQLStatement, con);
                    sqlCommandOracle.ExecuteScalar();
                }
                return(drivertrack);
            }
            catch (Exception e)
            {
                return(null);
            }
            finally
            {
                con.Close();
            }
        }
Exemplo n.º 6
0
        /// <summary>
        /// Create schedule for current week
        /// </summary>
        /// <param name="lstdriver"> List of all drivers</param>
        /// <param name="routeid"> Selected root </param>
        /// <returns></returns>
        public List <Schedule> CreateSchedule(List <Driver> lstdriver, string routeid)
        {
            try
            {
                int initialvalue = 0;

                Schedule             objschedule       = new Schedule();
                List <Schedule>      lstschedule       = new List <Schedule>();
                List <Shift>         lstshift          = new List <Shift>();
                List <DriverTracker> lstdrivertrackers = new List <DriverTracker>();
                List <DriverTracker> alldrivertrackers = new List <DriverTracker>();
                List <Availability>  availability      = new List <Availability>();

                lstshift = shiftbl.GetAllShift();

                // DriverTracker : All inforamtion for that driver like driver route, driver shift, etc;
                alldrivertrackers = drivertrackerbl.GetAllDriverTrackers("WEEK_NUMBBER", Constants.week);

                //If user selected auto option at that time we assign driver and availability randomly.
                if (lstdriver == null || lstdriver.Count < 1)
                {
                    lstdriver = driverbl.SelectDriverAuto(routeid);
                    if (lstdriver == null || lstdriver.Count < 1)
                    {
                        Console.WriteLine("There are no enough driver to assign for this route");
                        return(null);
                    }
                    foreach (Driver drv in lstdriver)
                    {
                        if (!availabilitybl.SaveAvailabilityAuto(drv.empid))
                        {
                            Console.WriteLine("Error while inserting availabbility");
                        }
                    }
                }

                //Get availability for each driver for each day so we can assign shift according to that
                availability = availabilitybl.GetAllAvailabilities("WEEK_NUMBER", Constants.week);

                // Create Schedule and use this schedule id in drivertracker table
                string scheduleid = Convert.ToString(Guid.NewGuid());
                objschedule.scheduleid = scheduleid;
                objschedule.week       = Constants.week;
                scheduledl.Add(objschedule);

                //Assign driver for current week on their availability
                foreach (Driver driver in lstdriver)
                {
                    foreach (Shift shift in lstshift.FindAll(x => x.shiftid < 10)) // we need to assign first shift and second shift only
                    {
                        for (int i = initialvalue; i < Constants.days.Length; i++)
                        {
                            if (Array.IndexOf(Constants.holidays, Constants.days[i]) < 0) // To skip holiday
                            {
                                // If we have already asign that driver and want to modify their shift
                                DriverTracker drivertracker = (alldrivertrackers != null)? alldrivertrackers.Find(x => x.driverid == driver.driverid &&
                                                                                                                  x.shiftid == shift.shiftid &&
                                                                                                                  x.weekday == Constants.days[i]) : null;

                                // Get driver availability for that day
                                Availability avail = new Availability();
                                avail = availability.Find(x => x.weekday == Constants.days[i] && x.driverid == driver.driverid);

                                /* A driver cannot work more than one shift in a day.
                                 * The schedules should be randomly generated to ensure fairness.
                                 * A driver can only work a maximum of two shifts per week.
                                 */

                                if (!(lstdrivertrackers.Exists(x => x.weeknumber == Constants.week && x.weekday == Constants.days[i] && x.shiftid == shift.shiftid)) &&
                                    (avail.driveravailabbility == lstshift.Find(x => x.shift.ToUpper() == "ALL").shiftid ||
                                     avail.driveravailabbility == shift.shiftid) &&
                                    !(lstdrivertrackers.Exists(x => x.driverid == driver.driverid &&
                                                               x.weeknumber == Constants.week &&
                                                               (x.weekday == Constants.days[i] || x.shiftid == shift.shiftid))))
                                {
                                    if (!string.IsNullOrEmpty(objschedule.scheduleid))
                                    {
                                        if (drivertracker == null)
                                        {
                                            drivertracker            = new DriverTracker();
                                            drivertracker.scheduleid = scheduleid;
                                            drivertracker.weeknumber = Constants.week;
                                            drivertracker.driverid   = driver.driverid;
                                            drivertracker.shiftid    = shift.shiftid;
                                            drivertracker.totaltrip  = 2;
                                            drivertracker.weekday    = Constants.days[i];
                                            drivertrackerbl.SaveDriverTracker(drivertracker);
                                        }
                                        else
                                        {
                                            drivertracker.scheduleid = scheduleid;
                                            drivertracker.weeknumber = Constants.week;
                                            drivertracker.driverid   = driver.driverid;
                                            drivertracker.shiftid    = shift.shiftid;
                                            drivertracker.totaltrip  = 2;
                                            drivertracker.weekday    = Constants.days[i];
                                            drivertrackerbl.EditDriverTracker(drivertracker);
                                        }

                                        lstdrivertrackers.Add(drivertracker);
                                    }
                                    initialvalue = i;
                                    break;
                                }
                                else if (lstdrivertrackers.Count == (Constants.days.Length - Constants.holidays.Length) * Constants.maxshift)
                                {
                                    break;
                                }
                            }


                            if (i == Constants.days.Length - 1)
                            {
                                i            = 0;
                                initialvalue = 0;
                            }
                        }
                    }
                }



                return(scheduledl.All("SCHEDULE_ID", Convert.ToString(scheduleid)));
            }
            catch (Exception e)
            {
                return(null);
            }
        }