2023-04-28 12:21:24 +08:00

196 lines
9.7 KiB
C#

using Foresight.Data;
using Foresight.Fleet.Services.Asset;
using Foresight.ServiceModel;
using IronIntel.Contractor.Machines;
using IronIntel.Contractor.Maintenance;
using IronIntel.Contractor.MapView;
using IronIntel.Contractor.Users;
using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace IronIntel.Contractor.Contact
{
public class ContactManagement
{
public static ContactInfo[] GetContacts(string sessionid, FISqlConnection db = null)
{
const string SQL = "select CONTACTID,CONTACTNAME,USERIID,NOTES,CONTACTTYPE,EMAILADDRESS,TEXTADDRESS from CONTACT";
List<ContactInfo> list = new List<ContactInfo>();
if (db == null)
db = SystemParams.GetDbInstance();
DataTable dt = db.GetDataTableBySQL(SQL);
if (dt.Rows.Count > 0)
{
UserInfo[] users = UserManagement.GetUsers();
foreach (DataRow dr in dt.Rows)
{
ContactInfo ci = ConvertToContactInfo(dr);
if (!string.IsNullOrWhiteSpace(ci.UserIID))
{
UserInfo ui = users.FirstOrDefault(m => m.IID == ci.UserIID);
if (ui != null)
ci.UserName = ui.DisplayName;
}
list.Add(ci);
}
}
return list.ToArray();
}
public static void SaveContact(ContactInfo ci, string useriid)
{
const string SQL = @"if exists(select 1 from CONTACT where CONTACTID={0}) update CONTACT set CONTACTNAME={1},USERIID={2},NOTES={3},LASTUPDATEDBY={4},
LASTUPDATEDON = GETUTCDATE(),RECVER = ISNULL(RECVER,0) + 1,CONTACTTYPE={5},EMAILADDRESS={6},TEXTADDRESS={7} where CONTACTID={0} else insert CONTACT(CONTACTID,CONTACTNAME,USERIID, NOTES, ADDEDBY,
ADDEDON,LASTUPDATEDBY,LASTUPDATEDON,RECVER,CONTACTTYPE,EMAILADDRESS,TEXTADDRESS) values({0},{1},{2},{3},{4},GETUTCDATE(),{4},GETUTCDATE(),1,{5},{6},{7})";
const string SQL_C = "select COUNT(1) from CONTACT where CONTACTID!={0} and CONTACTNAME={1}";
FISqlConnection db = SystemParams.GetDbInstance();
object obj = db.GetRC1BySQL(SQL_C, ci.ContactID, ci.ContactName);
if (Convert.ToInt32(obj) > 0)
{
throw new Exception("The contact name must be unique.");
}
db.ExecSQL(SQL, ci.ContactID, ci.ContactName, ci.UserIID, ci.Notes, useriid, ci.ContactType, ci.EmailAddress, ci.TextAddress);
}
public static void DeleteContact(string contactid)
{
const string SQL = @"delete from CONTACT where CONTACTID={0}
delete from RELATIONSHIP where PRIMARYID = {0} and (RELATIONSHIPTYPEID='MachineContact' or RELATIONSHIPTYPEID='ContactJobsite') ";
FISqlConnection db = SystemParams.GetDbInstance();
db.ExecSQL(SQL, contactid);
}
public static MaintenanceMachineInfo[] GetContactMachinesByID(string contactid)
{
const string SQL = @"select a.RELATEDID as MACHINEID,b.MACHINENAME,b.MACHINENAME2,b.VIN,b.MAKEID,b.MODELID,b.TYPEID,b.HIDE,ISNULL(b.ENGINEHOURS,0) as ENGINEHOURS,
ISNULL(b.ODOMETER,0) as ODOMETER,ISNULL(b.ODOMETERUOM,'Mile') AS ODOMETERUOM from RELATIONSHIP a,MACHINES b
where a.RELATEDID=b.MACHINEID and a.RELATIONSHIPTYPEID='MachineContact' and a.REMOVED<>1 and a.PRIMARYID={0}";
FISqlConnection db = SystemParams.GetDbInstance();
DataTable tb = db.GetDataTableBySQL(SQL, contactid);
if (tb.Rows.Count == 0)
{
return new MaintenanceMachineInfo[0];
}
MachineManagement.RefreshBaseData();
AssetMake[] makes = MachineManagement.GetMachineMakes();
AssetModel[] models = MachineManagement.GetMachineModels();
AssetType[] types = MachineManagement.GetMachineTypes();
List<MaintenanceMachineInfo> ls = new List<MaintenanceMachineInfo>();
foreach (DataRow dr in tb.Rows)
{
MaintenanceMachineInfo mi = MaintenanceManagement.ConvertToMaintenanceMachineInfo(dr, makes, models, types);
ls.Add(mi);
}
return ls.ToArray();
}
public static void SaveContactMachines(string contactid, string contractorid, string[] machineids)
{
const string SQL_R = "update RELATIONSHIP set REMOVEDON=GETUTCDATE(),REMOVED=1 where RELATIONSHIPTYPEID='MachineContact' and REMOVED<>1 and PRIMARYID={0}";
const string SQL = @"if exists(select 1 from RELATIONSHIP where RELATIONSHIPTYPEID='MachineContact' and PRIMARYID={0} and RELATEDID={1}) update RELATIONSHIP
set REMOVEDON=null,REMOVED=0 where RELATIONSHIPTYPEID='MachineContact' and PRIMARYID={0} and RELATEDID={1} else insert into RELATIONSHIP
(RELATIONSHIPID,RELATIONSHIPTYPEID,CONTRACTORID,PRIMARYID,RELATEDID,ADDEDON) values({3},'MachineContact',{2},{0},{1},GETUTCDATE())";
FISqlConnection db = SystemParams.GetDbInstance();
db.ExecSQL(SQL_R, contactid);
foreach (var mid in machineids)
{
db.ExecSQL(SQL, contactid, mid, contractorid, Guid.NewGuid().ToString());
}
}
private static ContactInfo ConvertToContactInfo(DataRow dr)
{
ContactInfo ci = new ContactInfo();
ci.ContactID = FIDbAccess.GetFieldString(dr["CONTACTID"], string.Empty);
ci.ContactName = FIDbAccess.GetFieldString(dr["CONTACTNAME"], string.Empty);
ci.UserIID = FIDbAccess.GetFieldString(dr["USERIID"], string.Empty);
ci.Notes = FIDbAccess.GetFieldString(dr["NOTES"], string.Empty);
ci.ContactType = FIDbAccess.GetFieldString(dr["CONTACTTYPE"], string.Empty);
ci.EmailAddress = FIDbAccess.GetFieldString(dr["EMAILADDRESS"], string.Empty);
ci.TextAddress = FIDbAccess.GetFieldString(dr["TEXTADDRESS"], string.Empty);
return ci;
}
public static JobSiteViewItem[] GetContactJobsitesByID(string contactid)
{
const string SQL = @"select a.RELATEDID as JOBSITEID,JOBSITENAME,LATITUDE,LONGITUDE,RADIUS,RADUIS_UOM,b.CONTRACTORID,COLOR,NOTES,STARTDATE,ENDDATE,POLYGON,BASEONMACHINEID from RELATIONSHIP a,JOBSITES b
where a.RELATIONSHIPTYPEID='ContactJobsite' and a.REMOVED<>1 and a.RELATEDID=b.JOBSITEID and a.PRIMARYID={0}";
FISqlConnection db = SystemParams.GetDbInstance();
DataTable tb = db.GetDataTableBySQL(SQL, contactid);
if (tb.Rows.Count == 0)
{
return new JobSiteViewItem[0];
}
List<JobSiteViewItem> ls = new List<JobSiteViewItem>();
foreach (DataRow dr in tb.Rows)
{
JobSiteViewItem js = ConvertToJobSiteViewItem(dr);
ls.Add(js);
}
return ls.ToArray();
}
public static void SaveContactJobsites(string contactid, string contractorid, string[] jobsiteids)
{
const string SQL_R = "update RELATIONSHIP set REMOVEDON=GETUTCDATE(),REMOVED=1 where RELATIONSHIPTYPEID='ContactJobsite' and REMOVED<>1 and PRIMARYID={0}";
const string SQL = @"if exists(select 1 from RELATIONSHIP where RELATIONSHIPTYPEID='ContactJobsite' and PRIMARYID={0} and RELATEDID={1}) update RELATIONSHIP
set REMOVEDON=null,REMOVED=0 where RELATIONSHIPTYPEID='ContactJobsite' and PRIMARYID={0} and RELATEDID={1} else insert into RELATIONSHIP
(RELATIONSHIPID,RELATIONSHIPTYPEID,CONTRACTORID,PRIMARYID,RELATEDID,ADDEDON) values({3},'ContactJobsite',{2},{0},{1},GETUTCDATE())";
FISqlConnection db = SystemParams.GetDbInstance();
db.ExecSQL(SQL_R, contactid);
foreach (var mid in jobsiteids)
{
db.ExecSQL(SQL, contactid, mid, contractorid, Guid.NewGuid().ToString());
}
}
private static JobSiteViewItem ConvertToJobSiteViewItem(DataRow dr)
{
JobSiteViewItem js = new JobSiteViewItem();
long JobSiteId = FIDbAccess.GetFieldInt(dr["JOBSITEID"], 0);
js.ID = FIDbAccess.GetFieldInt(dr["JOBSITEID"], 0);
js.Name = FIDbAccess.GetFieldString(dr["JOBSITENAME"], string.Empty);
js.Latitude = FIDbAccess.GetFieldDouble(dr["LATITUDE"], 0);
js.Longitude = FIDbAccess.GetFieldDouble(dr["LONGITUDE"], 0);
js.Radius = FIDbAccess.GetFieldDouble(dr["RADIUS"], 0);
js.Radius_UOM = FIDbAccess.GetFieldString(dr["RADUIS_UOM"], string.Empty);
if (string.IsNullOrWhiteSpace(js.Radius_UOM))
js.Radius_UOM = "Mile";
js.ContractorID = FIDbAccess.GetFieldString(dr["CONTRACTORID"], string.Empty);
//js.ColorString = FIDbAccess.GetFieldString(dr["COLOR"], string.Empty);
//System.Drawing.Color color = System.Drawing.Color.Orange;
//try
//{
// color = System.Drawing.ColorTranslator.FromHtml(js.ColorString);
//}
//catch
//{
//}
//js.Color = new IIColor() { Alpha = color.A, Red = color.R, Green = color.G, Blue = color.B };
js.Notes = FIDbAccess.GetFieldString(dr["NOTES"], string.Empty);
js.StartDate = FIDbAccess.GetFieldDateTime(dr["STARTDATE"], DateTime.MinValue);
js.EndDate = FIDbAccess.GetFieldDateTime(dr["ENDDATE"], DateTime.MinValue);
js.BaseOnMachineID = FIDbAccess.GetFieldInt(dr["BASEONMACHINEID"], 0);
return js;
}
}
}