namespace VECV_WebApi.Models.Van { #region Namespaces using DBHelper; using LoggingHelper; using Npgsql; using System; using System.Collections.Generic; using System.Configuration; using System.Data; using System.Linq; using System.Web; using VECV_WebApi.Models.Authorization; using VECV_WebApi.Models.Ticket; using VECV_WebApi.Models.Util; #endregion #region Repository Class /// /// This class contain van releted methods /// public class VanRepository { #region Global Variables /// /// making object of LoggingUtility class available to this class /// LoggingUtility objLog = new LoggingUtility(); /// /// making the data-log file path available to this class /// string path = HttpContext.Current.Server.MapPath(ConfigurationManager.AppSettings["PathLog"]); /// /// making error log file path available to this class /// string errorlogtf = (ConfigurationManager.AppSettings["ErrorLog"]); /// /// making the Database connection string available to this class /// private string _connStr; /// /// making Authentication Repository object available to this class /// AuthenticationRepository objAuthorization; #endregion #region Contructors /// /// Default constructor intialize connection string of vecv database /// public VanRepository(string connString) { this._connStr = connString; } #endregion #region API Methods /// /// To get van detail with its position details /// /// van info /// status and van detail with its position details public List GetVanPositionDetail(GetVanPositionModel model) { List objListModel = new List(); VanModel objModel = new VanModel(); try { objAuthorization = new AuthenticationRepository(); if (objAuthorization.AuthenticateDevice(model.Token)) { DataSet ds = new DataSet(); NpgsqlParameter[] nSqlParam = new NpgsqlParameter[5]; nSqlParam[0] = new NpgsqlParameter("instate", model.State); nSqlParam[1] = new NpgsqlParameter("incity", model.City); nSqlParam[2] = new NpgsqlParameter("indealer_id", model.DealerId); nSqlParam[3] = new NpgsqlParameter("insla_id", model.SlaId); nSqlParam[4] = new NpgsqlParameter("inorganization", model.RegionId); ds = NpgSqlHelper.ExecuteDataset(_connStr, CommandType.StoredProcedure, ConfigurationManager.AppSettings["usp_get_van_postion_details"], nSqlParam); if (ds.Tables[0].Rows.Count > 0) { foreach (string vanId in ds.Tables[0].AsEnumerable().Select(s => s.Field("van_id")).Distinct()) { objModel = new VanModel(); objModel.DealerId = ds.Tables[0].AsEnumerable().Where(w => w.Field("van_id").Equals(vanId)). Select(s => s.Field("dealer_id")).FirstOrDefault(); objModel.DealerCity = ds.Tables[0].AsEnumerable().Where(w => w.Field("van_id").Equals(vanId)). Select(s => s.Field("dealer_city")).FirstOrDefault(); objModel.DealerState = ds.Tables[0].AsEnumerable().Where(w => w.Field("van_id").Equals(vanId)). Select(s => s.Field("dealer_state")).FirstOrDefault(); objModel.DealerName = ds.Tables[0].AsEnumerable().Where(w => w.Field("van_id").Equals(vanId)). Select(s => s.Field("dealer_dealer_name")).FirstOrDefault(); objModel.VanDefaultLatitude = ds.Tables[0].AsEnumerable().Where(w => w.Field("van_id").Equals(vanId)). Select(s => s.Field("van_van_default_lattitude")).FirstOrDefault(); objModel.VanDefaultLongitude = ds.Tables[0].AsEnumerable().Where(w => w.Field("van_id").Equals(vanId)). Select(s => s.Field("van_van_default_longitude")).FirstOrDefault(); objModel.VanModelName = ds.Tables[0].AsEnumerable().Where(w => w.Field("van_id").Equals(vanId)). Select(s => s.Field("van_van_model")).FirstOrDefault(); objModel.VanRegistrationNo = ds.Tables[0].AsEnumerable().Where(w => w.Field("van_id").Equals(vanId)). Select(s => s.Field("van_registration_number")).FirstOrDefault(); objModel.VanId = vanId; objModel.OrganizationName = ds.Tables[0].AsEnumerable().Where(w => w.Field("van_id").Equals(vanId)). Select(s => s.Field("_organization_name")).FirstOrDefault(); objModel.OrganizationPath = ds.Tables[0].AsEnumerable().Where(w => w.Field("van_id").Equals(vanId)). Select(s => s.Field("_organization_organization_path")).FirstOrDefault(); objModel.ServiceEngineerId = ds.Tables[0].AsEnumerable().Where(w => w.Field("van_id").Equals(vanId)). Select(s => s.Field("service_engineer_id")).FirstOrDefault(); objModel.ServiceEngineerName = ds.Tables[0].AsEnumerable().Where(w => w.Field("van_id").Equals(vanId)). Select(s => s.Field("_service_engineer_name")).FirstOrDefault(); objModel.ServiceEngineerContactNo = ds.Tables[0].AsEnumerable().Where(w => w.Field("van_id").Equals(vanId)). Select(s => s.Field("service_engineer_contact_number")).FirstOrDefault(); objModel.VanPostionList = ds.Tables[0].AsEnumerable().Where(w => w.Field("van_id").Equals(vanId)). OrderBy(o => o.Field("_van_position_coverage_id")). Select(s => new VanPositionModel { SlaTime = s.Field("_van_position_sla_sla_time"), VanPositionCoverageId = s.Field("_van_position_coverage_id"), VanPositionCoverageSlaId = s.Field("_van_position_coverage_sla_id"), VanPositionCoverageVanId = s.Field("_van_position_coverage_van_id"), VanPositionCoverageVanLatitude = s.Field("_van_position_coverage_van_latitude"), VanPositionCoverageVanLongitude = s.Field("_van_position_coverage_van_longitude"), VanDefaultLatitude = ds.Tables[0].AsEnumerable().Where(w => w.Field("van_id").Equals(vanId)). Select(s1 => s1.Field("van_van_default_lattitude")).FirstOrDefault(), VanDefaultLongitude = ds.Tables[0].AsEnumerable().Where(w => w.Field("van_id").Equals(vanId)). Select(s1 => s1.Field("van_van_default_longitude")).FirstOrDefault() }).ToList(); objListModel.Add(objModel); } } } else { objModel.Status = "0"; objModel.Message = ConfigurationManager.AppSettings["DeviceConfigurationTokenMessage"].ToString(); objListModel.Add(objModel); } } catch (Exception Ex) { // writing error logs objLog.ErrorLogFile("GetCustomerDetails", Ex.Message, path, errorlogtf); objModel.Status = "0"; objModel.Message = Ex.Message; objListModel.Add(objModel); } return objListModel; } /// /// To insert and get van postion coverage . /// /// van and coverage info /// status and data public InsertGetVanPositionCoverage InsertGetVanPosition(InsertGetVanPositionCoverage model) { InsertGetVanPositionCoverage objListModel = new InsertGetVanPositionCoverage(); List objVanPositionCoverage = new List(); objVanPositionCoverage.Insert(0, new VanPositionCoverage { }); try { objAuthorization = new AuthenticationRepository(); if (objAuthorization.AuthenticateDevice(model.Token)) { DataSet ds = new DataSet(); //Get van coverage. if (model.Operation.Trim().ToUpper() == "GET") { NpgsqlParameter[] nSqlParam = new NpgsqlParameter[8]; nSqlParam[0] = new NpgsqlParameter("inid", null); nSqlParam[1] = new NpgsqlParameter("invan_id ", model.VanId); nSqlParam[2] = new NpgsqlParameter("insla_id ", null); nSqlParam[3] = new NpgsqlParameter("invan_coverage_latitude ", null); nSqlParam[4] = new NpgsqlParameter("invan_coverage_longitude ", null); nSqlParam[5] = new NpgsqlParameter("invan_lat ", model.VanDefaultLatitude); nSqlParam[6] = new NpgsqlParameter("invan_longitude ", model.VanDefaultLongitude); nSqlParam[7] = new NpgsqlParameter("inoperation ", model.Operation); ds = NpgSqlHelper.ExecuteDataset(_connStr, CommandType.StoredProcedure, ConfigurationManager.AppSettings["usp_insert_or_get_van_position_coverage"], nSqlParam); objListModel.VanId = model.VanId; objListModel.VanDefaultLatitude = ds.Tables[0].AsEnumerable().Select(s => s.Field("_van_default_lattitude")).FirstOrDefault(); objListModel.VanDefaultLongitude = ds.Tables[0].AsEnumerable().Select(s => s.Field("_van_default_longitude")).FirstOrDefault(); if (ds.Tables[0].Rows.Count > 0) { for (int j = 0; j < model.Coverage.Count; j++) { List lstPositionCoverages = new List(); lstPositionCoverages = ds.Tables[0].AsEnumerable().Where(w => w.Field("_van_position_coverage_sla_id").Equals(model.Coverage[j].SlaId)).Select(vansla => new PositionCoverages { VanPositionCoverageId = vansla.Field("_van_position_coverage_id"), VanPositionCoverageVanLatitude = vansla.Field("_van_position_coverage_van_latitude"), VanPositionCoverageVanLongitude = vansla.Field("_van_position_coverage_van_longitude") }).ToList(); VanPositionCoverage objposition = new VanPositionCoverage(); objVanPositionCoverage.Insert(j, new VanPositionCoverage { SlaId = model.Coverage[j].SlaId, SlaValue = model.Coverage[j].SlaValue, ListCoverage = lstPositionCoverages }); } } objListModel.Coverage = objVanPositionCoverage; } // insert van coverage. else { for (int i = 0; i < model.Coverage.Count; i++) { if (model.Coverage[i].SlaId != null && model.Coverage[i].ListCoverage != null) { for (int j = 0; j < model.Coverage[i].ListCoverage.Count; j++) { NpgsqlParameter[] nSqlParam = new NpgsqlParameter[8]; nSqlParam[0] = new NpgsqlParameter("inid", model.Coverage[i].ListCoverage[j].VanPositionCoverageId); nSqlParam[1] = new NpgsqlParameter("invan_id ", model.VanId); nSqlParam[2] = new NpgsqlParameter("insla_id ", model.Coverage[i].SlaId); nSqlParam[3] = new NpgsqlParameter("invan_coverage_latitude ", model.Coverage[i].ListCoverage[j].VanPositionCoverageVanLatitude); nSqlParam[4] = new NpgsqlParameter("invan_coverage_longitude ", model.Coverage[i].ListCoverage[j].VanPositionCoverageVanLongitude); nSqlParam[5] = new NpgsqlParameter("invan_lat ", model.VanDefaultLatitude); nSqlParam[6] = new NpgsqlParameter("invan_longitude ", model.VanDefaultLongitude); nSqlParam[7] = new NpgsqlParameter("inoperation ", model.Operation); ds = NpgSqlHelper.ExecuteDataset(_connStr, CommandType.StoredProcedure, ConfigurationManager.AppSettings["usp_insert_or_get_van_position_coverage"], nSqlParam); // For Telematics Use // NpgSqlHelper.ExecuteDataset(_connStr, CommandType.StoredProcedure, ConfigurationManager.AppSettings["usp_sync_telematics_van_position_coverage"], nSqlParam); } } } } objListModel.Status = "1"; } else { objListModel.Status = "0"; objListModel.Message = ConfigurationManager.AppSettings["DeviceConfigurationTokenMessage"].ToString(); } } catch (Exception Ex) { objListModel.Status = "0"; objListModel.Message = Ex.Message; objLog.ErrorLogFile("GetCustomerDetails", Ex.Message, path, errorlogtf); } return objListModel; } /// /// To update van position details /// /// contain van position detail /// status public GetVanPositionModel UpdateVanPositionDetail(GetVanPositionModel model) { GetVanPositionModel objModel = new GetVanPositionModel(); try { objAuthorization = new AuthenticationRepository(); if (objAuthorization.AuthenticateDevice(model.Token)) { for (int i = 0; i < model.VanList.Count; i++) { NpgsqlParameter[] nSqlParam = new NpgsqlParameter[11]; nSqlParam[0] = new NpgsqlParameter("inid ", model.VanList[i].VanId); nSqlParam[1] = new NpgsqlParameter("inalias ", null); nSqlParam[2] = new NpgsqlParameter("invan_default_lattitude ", model.VanList[i].VanDefaultLatitude); nSqlParam[3] = new NpgsqlParameter("invan_default_longitude ", model.VanList[i].VanDefaultLongitude); nSqlParam[4] = new NpgsqlParameter("incity ", model.VanList[i].DealerCity); nSqlParam[5] = new NpgsqlParameter("instate ", model.VanList[i].DealerState); nSqlParam[6] = new NpgsqlParameter("invan_model ", model.VanList[i].VanModelName); nSqlParam[7] = new NpgsqlParameter("inregistration_number ", model.VanList[i].VanRegistrationNo); nSqlParam[8] = new NpgsqlParameter("invan_registered_as ", model.VanList[i].ServiceEngineerName); nSqlParam[9] = new NpgsqlParameter("inisdeleted ", null); nSqlParam[10] = new NpgsqlParameter("inroute_id ", null); NpgSqlHelper.ExecuteNonQuery(_connStr, CommandType.StoredProcedure, ConfigurationManager.AppSettings["usp_update_van"], nSqlParam); // For Telematics Use //NpgSqlHelper.ExecuteNonQuery(_connStr, CommandType.StoredProcedure, ConfigurationManager.AppSettings["usp_sync_van_details"]); for (int j = 0; j < model.VanList[i].VanPostionList.Count; j++) { nSqlParam = new NpgsqlParameter[5]; nSqlParam[0] = new NpgsqlParameter("inid ", model.VanList[i].VanPostionList[j].VanPositionCoverageId); nSqlParam[1] = new NpgsqlParameter("invan_id ", model.VanList[i].VanPostionList[j].VanPositionCoverageVanId); nSqlParam[2] = new NpgsqlParameter("insla_id ", model.VanList[i].VanPostionList[j].VanPositionCoverageSlaId); nSqlParam[3] = new NpgsqlParameter("invan_latitude ", model.VanList[i].VanPostionList[j].VanPositionCoverageVanLatitude); nSqlParam[4] = new NpgsqlParameter("invan_longitude ", model.VanList[i].VanPostionList[j].VanPositionCoverageVanLongitude); NpgSqlHelper.ExecuteNonQuery(_connStr, CommandType.StoredProcedure, ConfigurationManager.AppSettings["usp_update_van_position_coverage"], nSqlParam); // For Telematics Use // NpgSqlHelper.ExecuteNonQuery(_connStr, CommandType.StoredProcedure, ConfigurationManager.AppSettings["usp_sync_van_position_coverage"]); } } objModel.Status = "1"; } else { objModel.Status = "0"; objModel.Message = ConfigurationManager.AppSettings["DeviceConfigurationTokenMessage"].ToString(); } } catch (Exception Ex) { objModel.Status = "0"; objModel.Message = Ex.Message; objLog.ErrorLogFile("GetCustomerDetails", Ex.Message, path, errorlogtf); } return objModel; } /// /// To insert/remove alarm for van not move /// /// van info /// contain status or message public GetVanPositionModel VanNotMoveAfterAcceptTicket(GetVanPositionModel model) { DataSet dsTicket = new DataSet(); DataSet dsTrack = new DataSet(); GetVanPositionModel objModel = new GetVanPositionModel(); try { //Declare local variable for default lat long. double[] tempLatitude = { 0.0, 0.0 }; double[] tempLongitude = { 0.0, 0.0 }; double distance = 0.0; DistanceCalc oDistanceCalc = new DistanceCalc(); objAuthorization = new AuthenticationRepository(); if (objAuthorization.AuthenticateDevice(model.Token)) { //Get ticket for van not move dsTicket = NpgSqlHelper.ExecuteDataset(_connStr, CommandType.StoredProcedure, ConfigurationManager.AppSettings["usp_get_open_ticket_for_van_not_move"]); string deviceAlias = null; string ticketAssignDate = null; DateTime dateAssign = new DateTime(); for (int i = 0; i < dsTicket.Tables[0].Rows.Count; i++) { //Get History log for calculating distance from assign time location and current location dateAssign = DateTime.Parse(dsTicket.Tables[0].Rows[i]["last_modified_time"].ToString()); deviceAlias = dsTicket.Tables[0].Rows[i]["_service_engineer_device_alias"].ToString(); ticketAssignDate = dateAssign.ToString(ConfigurationManager.AppSettings["DateTimeFormat"]); NpgsqlParameter[] nSqlParam = new NpgsqlParameter[3]; nSqlParam[0] = new NpgsqlParameter("indevice_alias ", deviceAlias); nSqlParam[1] = new NpgsqlParameter("inaccept_time ", ticketAssignDate); nSqlParam[2] = new NpgsqlParameter("induration ", ConfigurationManager.AppSettings["VanPostionMoveDurationTime"]); dsTrack = NpgSqlHelper.ExecuteDataset(ConfigurationManager.ConnectionStrings["Vecv_Tracking"].ToString(), CommandType.StoredProcedure, ConfigurationManager.AppSettings["usp_get_current_and_history_log_for_van_move_or_not"], nSqlParam); for (int j = 0; j < dsTrack.Tables[0].Rows.Count; j++) { tempLatitude[0] = Convert.ToDouble(dsTrack.Tables[0].Rows[j]["_latitude"].ToString()); tempLatitude[1] = Convert.ToDouble(dsTrack.Tables[0].Rows[j]["h_latitude"].ToString()); tempLongitude[0] = Convert.ToDouble(dsTrack.Tables[0].Rows[j]["_longitude"].ToString()); tempLongitude[1] = Convert.ToDouble(dsTrack.Tables[0].Rows[j]["h_longitude"].ToString()); // Get distance diff. distance = oDistanceCalc.DistanceInKM(tempLatitude, tempLongitude); /* check distance if distance is less then define distance for van not move like(.5 km) then create a ticket(escalation) for van not move.*/ if (distance < Convert.ToDouble(ConfigurationManager.AppSettings["VanPostionMoveDurationInKM"].ToString())) { // create escalation ticket for van not move. nSqlParam = new NpgsqlParameter[1]; nSqlParam[0] = new NpgsqlParameter("inticket_id ", dsTicket.Tables[0].Rows[i]["tickets_open_id"].ToString()); NpgSqlHelper.ExecuteNonQuery(_connStr, CommandType.StoredProcedure, ConfigurationManager.AppSettings["usp_insert_alarm_escalation_open_tickets"], nSqlParam); } else { /* If van move then remove escalation ticket for van.*/ nSqlParam = new NpgsqlParameter[1]; nSqlParam[0] = new NpgsqlParameter("inticket_id ", dsTicket.Tables[0].Rows[i]["tickets_open_id"].ToString()); NpgSqlHelper.ExecuteNonQuery(_connStr, CommandType.StoredProcedure, ConfigurationManager.AppSettings["usp_remove_alarm_escalation_open_tickets"], nSqlParam); } } } objModel.Status = "1"; } else { objModel.Status = "0"; objModel.Message = ConfigurationManager.AppSettings["DeviceConfigurationTokenMessage"].ToString(); } } catch (Exception Ex) { objModel.Status = "0"; objModel.Message = Ex.Message; objLog.ErrorLogFile("GetCustomerDetails", Ex.Message, path, errorlogtf); } return objModel; } /// /// To insert/remove alarm for van not Live /// /// van info and tracking /// status public GetVanPositionModel VanNotLive(GetVanPositionModel model) { DataSet dsTicket = new DataSet(); DataSet dsTrack = new DataSet(); GetVanPositionModel objModel = new GetVanPositionModel(); try { objAuthorization = new AuthenticationRepository(); if (objAuthorization.AuthenticateDevice(model.Token)) { //Get current log details from tracking db. dsTicket = NpgSqlHelper.ExecuteDataset(ConfigurationManager.ConnectionStrings["Vecv_Tracking"].ToString(), CommandType.StoredProcedure, ConfigurationManager.AppSettings["usp_get_current_log_devices_not_live_from_30min"]); string strDeleteRecord = "true"; for (int i = 0; i < dsTicket.Tables[0].Rows.Count; i++) { if (i > 0) { strDeleteRecord = "false"; } // insert current tracking details into eicher db. NpgsqlParameter[] nSqlParam = new NpgsqlParameter[11]; nSqlParam[0] = new NpgsqlParameter("indevicealias ", dsTicket.Tables[0].Rows[i]["_device_alias"]); nSqlParam[1] = new NpgsqlParameter("inlatitude", dsTicket.Tables[0].Rows[i]["_latitude"]); nSqlParam[2] = new NpgsqlParameter("inlongitude ", dsTicket.Tables[0].Rows[i]["_longitude"]); nSqlParam[3] = new NpgsqlParameter("inlogtime ", dsTicket.Tables[0].Rows[i]["_log_time"]); nSqlParam[4] = new NpgsqlParameter("inX_coordinate", dsTicket.Tables[0].Rows[i]["_x_coordinate"]); nSqlParam[5] = new NpgsqlParameter("inY_coordinate", dsTicket.Tables[0].Rows[i]["_y_coordinate"]); nSqlParam[6] = new NpgsqlParameter("inZ_coordinate", dsTicket.Tables[0].Rows[i]["_z_coordinate"]); nSqlParam[7] = new NpgsqlParameter("inbattery_status", dsTicket.Tables[0].Rows[i]["_battery_status"]); nSqlParam[8] = new NpgsqlParameter("ingps_status", dsTicket.Tables[0].Rows[i]["_gps_status"]); nSqlParam[9] = new NpgsqlParameter("inis_charging", dsTicket.Tables[0].Rows[i]["_is_charging"]); nSqlParam[10] = new NpgsqlParameter("inis_deleted", strDeleteRecord); dsTrack = NpgSqlHelper.ExecuteDataset(_connStr, CommandType.StoredProcedure, ConfigurationManager.AppSettings["usp_insert_update_log"], nSqlParam); } objModel.Status = "1"; } else { objModel.Status = "0"; objModel.Message = ConfigurationManager.AppSettings["DeviceConfigurationTokenMessage"].ToString(); } } catch (Exception Ex) { objModel.Status = "0"; objModel.Message = Ex.Message; objLog.ErrorLogFile("GetCustomerDetails", Ex.Message, path, errorlogtf); } return objModel; } #endregion } #endregion }