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
}