Bizgaze CRM Visitors App
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

VisitorManager.Async.cs 19KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Data;
  4. using System.Dynamic;
  5. using System.Linq;
  6. using System.Text;
  7. using System.Threading.Tasks;
  8. using Unibase.Data;
  9. using Unibase.Data.Enums;
  10. using Unibase.Data.Expressions;
  11. using Unibase.Dependency;
  12. using Unibase.Platform.Data;
  13. using Unibase.Platform.DataSources.Attributes;
  14. using Unibase.Platform.Managers;
  15. using Unibase.Data.Sql;
  16. using System.Text.Json;
  17. using Org.BouncyCastle.Asn1.Ocsp;
  18. using ChoETL;
  19. using MongoDB.Libmongocrypt;
  20. using iText.StyledXmlParser.Jsoup.Select;
  21. namespace Bizgaze.CRM.Visitors.Managers
  22. {
  23. internal partial class VisitorManager : BaseManager, IVisitorManager
  24. {
  25. [SelectMethod(ApiName = "Get pre visitors", AppName = "crm", Description = "Get pre visitors", UniqueName = "bizgaze_transact_visitors_Getprevisitors", MethodName = "Getprevisitors", ModuleName = "visitors", PackageName = "bizgaze", ParamName1 = "code")]
  26. public async Task<SelectResponse<Bizgaze.CRM.Visitors.Infos.Visitor>> GetpreVisitorsAsync(SelectRequest srequest, string code)
  27. {
  28. var exp = srequest.Filter();
  29. exp &= Exp.Eq(Bizgaze.CRM.Visitors.Infos.Visitor.Property.Code.ToString(), code);
  30. srequest.Filter(exp);
  31. var visData = await GetSingleAsync<Bizgaze.CRM.Visitors.Infos.Visitor>(srequest);
  32. if (visData.Result != null)
  33. {
  34. var refStatusId = visData.Result.RefStatusId;
  35. if (refStatusId != 2)
  36. {
  37. return visData;
  38. }
  39. }
  40. else
  41. {
  42. return SelectResponse<Bizgaze.CRM.Visitors.Infos.Visitor>.CreateErrorResponse("404", "Please Enter A Valid Uniqueid!");
  43. }
  44. return SelectResponse<Bizgaze.CRM.Visitors.Infos.Visitor>.CreateErrorResponse("404", "you have been already checked out");
  45. }
  46. [SelectMethod(ApiName = "Get pre visitors id", AppName = "crm", Description = "Get pre visitors id", UniqueName = "bizgaze_transact_visitors_Getprevisitorsid", MethodName = "getprevisitorid", ModuleName = "visitors", PackageName = "bizgaze", ParamName1 = "code")]
  47. public async Task<SelectResponse> GetVisitorsIDAsync(SelectRequest srequest, string code)
  48. {
  49. var exp = srequest.Filter();
  50. exp &= Exp.Eq(Bizgaze.CRM.Visitors.Infos.Visitor.Property.Code.ToString(), code);
  51. srequest.Filter(exp);
  52. var visData = await GetSingleAsync<Bizgaze.CRM.Visitors.Infos.Visitor>(srequest);
  53. var refstatusid = visData.Result.RefStatusId;
  54. if (refstatusid == 2)
  55. {
  56. return SelectResponse.CreateErrorResponse("417", "you have been already checked out");
  57. }
  58. if (refstatusid == 3)
  59. {
  60. return SelectResponse.CreateErrorResponse("417", "please Check-In First");
  61. }
  62. var select = "select visitorid,* from bizgazecrm_visitors where code='" + code + "' order by createddate desc";
  63. var dt = await _dbContext.GetTableAsync(GetConnectionAsync(srequest), select, Unibase.Data.Enums.InstructionType.Query, null);
  64. var visitorid = dt.Rows[0]["visitorid"].ToString();
  65. var select1 = "select e.contactname,c.cityname,* from bizgazecrm_visitors v inner join bizgazecrm_contacts e on e.contactid = v.employeeid inner join bizgazecrm_cities c on c.cityid = v.cityid where v.visitorid=" + visitorid;
  66. var dt1 = await _dbContext.GetTableAsync(GetConnectionAsync(srequest), select1, Unibase.Data.Enums.InstructionType.Query, null);
  67. var tabledata = Unibase.Core.Helpers.JsonHelper.ToJson(dt1);
  68. string json = System.Text.Json.JsonSerializer.Serialize(tabledata);
  69. return new SelectResponse() { Result = json };
  70. }
  71. #region Getting data By VisitorId
  72. // This method gets a visitor record with the given VisitorId. It takes a SelectRequest as parameter and returns a SelectResponse<Infos.Visitor> object.
  73. public async Task<SelectResponse<Infos.Visitor>> GetVisitorByIdAsync(SelectRequest request, long VisitorId)
  74. {
  75. var exp = request.Filter();
  76. exp = exp & Unibase.Data.Expressions.Exp.Eq(Infos.Visitor.Property.VisitorId.ToString(), VisitorId);
  77. request.Filter(exp);
  78. var data = await GetSingleAsync<Infos.Visitor>(request);
  79. return data;
  80. }
  81. #endregion
  82. #region Getting data By VisitorId
  83. public async Task<SelectResponse> GetVisitordataByIdAsync(SelectRequest request, long VisitorId)
  84. {
  85. var exp = request.Filter();
  86. exp = exp & Unibase.Data.Expressions.Exp.Eq(Infos.Visitor.Property.VisitorId.ToString(), VisitorId);
  87. request.Filter(exp);
  88. //var sql = "select c.cityname, e.contactname,* from bizgazecrm_visitors v inner join bizgazecrm_contacts e on e.contactid = v.employeeid inner join bizgazecrm_cities c on c.cityid = v.cityid where visitorid=" + VisitorId;
  89. var sql = "select d.visitorid,d.fullname,d.code,(d.checkindate|| ' & ' ||d.checkintime) as datetime,d.cityname,d.contactname,Case when d.purposeofvisit=1 then 'Interview' when d.purposeofvisit=2 then 'Official Meeting' when d.purposeofvisit=3 then 'Meeting an Employee' when d.purposeofvisit=4 then 'Package Delivery' when d.purposeofvisit=5 then 'Others' end as purposeofvisittype,d.photourl from (select v.visitorid,v.fullname,v.code,v.photourl, TO_CHAR(v.checkindate, 'DD/MM/YYYY') as checkindate, UPPER(TO_CHAR(v.checkindate, 'HH:MI:SS AM')) AS checkintime,v.purposeofvisit,c.cityname, e.contactname from bizgazecrm_visitors v inner join bizgazecrm_contacts e on e.contactid = v.employeeid inner join bizgazecrm_cities c on c.cityid = v.cityid)d where visitorid = " + VisitorId;
  90. var dt = await _dbContext.GetTableAsync(GetConnectionAsync(request), sql, Unibase.Data.Enums.InstructionType.Query, null);
  91. var tabledata = Unibase.Core.Helpers.JsonHelper.ToJson(dt);
  92. string json = System.Text.Json.JsonSerializer.Serialize(tabledata);
  93. return new SelectResponse() { Result = json };
  94. }
  95. #endregion
  96. #region Get Visitors html
  97. //This method is used to get the html of a visitor. It takes a Visitor ID as an argument, then gets the related templates from Unibase.Platform.Templates.Managers.ITemplateManager, if the templates are found the id is assigned to the variable "templateid" and the information from GetVisitorByIdAsync is used to populate the fields in the template. In the end, the PrintTemplate object is returned with the PrintHTML.
  98. [SelectMethod(ApiName = "Get visitors Html", AppName = "crm", Description = "Get visitors Html", UniqueName = "bizgaze_transact_visitors_GetvisitorsHtml", MethodName = "getvisitorshtml", ModuleName = "visitors", PackageName = "bizgaze", ParamName1 = "visitorid")]
  99. public async Task<SelectResponse<Unibase.Platform.Templates.Infos.PrintTemplate>> GetVisitorshtmlAsync(SelectRequest srequest, long VisitorId)
  100. {
  101. long templateid = 0;
  102. //var appManager = Unibase.Dependency.DependencyConfig.Resolve<Unibase.Platform.Apps.Managers.IAppManager>();
  103. var templateManager = Unibase.Dependency.DependencyConfig.Resolve<Unibase.Platform.Templates.Managers.ITemplateManager>();
  104. var templateInfos = await templateManager.GetTemplatesAsync(srequest, "Bizgaze_Extension_CRM_CRM_TemplateProvider_Visitors");
  105. if (templateInfos.Result != null && templateInfos.Result.Count > 0)
  106. {
  107. templateid = templateInfos.Result[0].TemplateId;
  108. }
  109. var result = new SelectResponse<Unibase.Platform.Templates.Infos.PrintTemplate>();
  110. var printTemplate = new Unibase.Platform.Templates.Infos.PrintTemplate();
  111. //var templateManager = //Unibase.Dependency.DependencyConfig.Resolve<Unibase.Platform.Templates.Managers.ITemplateManager>();
  112. var _dbContext = DependencyConfig.Resolve<Unibase.Data.IDbContext>();
  113. Unibase.Platform.Templates.Helpers.TemplateHelper helper = new Unibase.Platform.Templates.Helpers.TemplateHelper(_dbContext);
  114. var VisitorInfo_ = await GetVisitorByIdAsync(srequest, VisitorId);
  115. if (VisitorInfo_.Result != null)
  116. {
  117. var tInfo = await templateManager.GetTemplateAsync(srequest, templateid);
  118. var templateInfo = tInfo.Result;
  119. if (templateInfo == null)
  120. {
  121. return SelectResponse<Unibase.Platform.Templates.Infos.PrintTemplate>.CreateErrorResponse("1", "Template Not Found");
  122. }
  123. string CreatedDate = VisitorInfo_.Result.CheckInDate.ToString("dd-MM-yyyy hh:mm:ss tt");
  124. var template = System.Web.HttpUtility.UrlDecode(templateInfo.TemplateText.ToString());
  125. string multiTemplateText = "";
  126. if (template.Contains("{{fullname}}"))
  127. {
  128. template = template.Replace("{{fullname}}", VisitorInfo_.Result.FullName);
  129. }
  130. if (template.Contains("{{cityname}}"))
  131. {
  132. template = template.Replace("{{cityname}}", VisitorInfo_.Result.CityName);
  133. }
  134. if (template.Contains("{{purposeofvisit}}"))
  135. {
  136. template = template.Replace("{{purposeofvisit}}", VisitorInfo_.Result.PurposeOfVisitType);
  137. }
  138. if (template.Contains("{{phonenumber}}"))
  139. {
  140. template = template.Replace("{{phonenumber}}", VisitorInfo_.Result.MobileNumber);
  141. }
  142. if (template.Contains("{{code}}"))
  143. {
  144. template = template.Replace("{{code}}", VisitorInfo_.Result.Code);
  145. }
  146. if (template.Contains("{{createddate}}"))
  147. {
  148. template = template.Replace("{{createddate}}", CreatedDate.ToString());
  149. }
  150. if (template.Contains("{{photourl}}"))
  151. {
  152. template = template.Replace("{{photourl}}", VisitorInfo_.Result.PhotoUrl);
  153. }
  154. if (template.Contains("{{HostName}}"))
  155. {
  156. template = template.Replace("{{HostName}}", VisitorInfo_.Result.HostName);
  157. }
  158. if (template.Contains("{{imageurl}}"))
  159. {
  160. template = template.Replace("{{imageurl}}", VisitorInfo_.Result.ImageUrl);
  161. }
  162. multiTemplateText = template;
  163. printTemplate.PrintHTML = multiTemplateText;
  164. printTemplate.FileName = "Visitors";
  165. printTemplate.PkId = VisitorId;
  166. result.Result = printTemplate;
  167. return result;
  168. }
  169. else
  170. {
  171. return SelectResponse<Unibase.Platform.Templates.Infos.PrintTemplate>.CreateErrorResponse("1", "visitor Not Found");
  172. }
  173. }
  174. #endregion
  175. /* #region Get Pre_Visitors
  176. /***/
  177. #region Visitor Agreement
  178. /*
  179. Action Method Name: visitoragreement
  180. Description: This action method is used to update the agreement status of the visitors in the bizgazecrm_visitors table.
  181. Parameters: visitorid - The ID of the visitor whose status is to be updated.
  182. Return: ActionResponse - Returns success or error response based on the success of the query.
  183. */
  184. [ActionMethod(ApiName = "visitor agreement", AppName = "crm", Description = "visitor agreement", UniqueName = "bizgaze_transact_visitors_visitoragreement", MethodName = "visitoragreement", ModuleName = "visitors", PackageName = "bizgaze", ParamName1 = "visitorid")]
  185. public async Task<ActionResponse<Bizgaze.CRM.Visitors.Infos.Visitor>> VisitorAgreementAsync(ActionRequest arequest, long VisitorId)
  186. {
  187. var srequest = SelectRequest.FromRequest(arequest);
  188. var parameters = new List<Unibase.Data.Parameter>();
  189. var connection = GetConnection(srequest);
  190. var visitorinfo = await GetVisitorsAsync(srequest, VisitorId);
  191. if (visitorinfo.Result != null)
  192. {
  193. parameters.Add(new Unibase.Data.Parameter("@visitorid", VisitorId));
  194. var Agreementupdate = "update bizgazecrm_visitors set agreement=" + "true" + " where visitorid=" + visitorinfo.Result.VisitorId;
  195. var sqlvoucher = await _dbContext.ExecuteAsync(connection, Agreementupdate, Unibase.Data.Enums.InstructionType.Query, parameters);
  196. return ActionResponse<Bizgaze.CRM.Visitors.Infos.Visitor>.CreateSuccessResponse("Agreement Success", null);
  197. }
  198. else
  199. {
  200. return ActionResponse<Bizgaze.CRM.Visitors.Infos.Visitor>.CreateErrorResponse("", "Visitor Not Found");
  201. }
  202. }
  203. #endregion
  204. #region check Mobile Number
  205. /**
  206. * Api Name: check Mobile Number
  207. * App Name: crm
  208. * Description: check Mobile Numbert
  209. * Unique Name: bizgaze_transact_visitors_checkMobileNumber
  210. * Method Name: checkmobilenumber
  211. * Module Name: visitors
  212. * Package Name: bizgaze
  213. * Param Name1: mobilenumber
  214. * Param Name2: emailid
  215. * This method is used to check the existing mobile number and email id in the Visitors table and return an error response.
  216. */
  217. [ActionMethod(ApiName = "check Mobile Number", AppName = "crm", Description = "check Mobile Numbert", UniqueName = "bizgaze_transact_visitors_checkMobileNumber", MethodName = "checkmobilenumber", ModuleName = "visitors", PackageName = "bizgaze", ParamName1 = "mobilenumber", ParamName2 = "emailid")]
  218. public async Task<ActionResponse<Bizgaze.CRM.Visitors.Infos.Visitor>> checkMobileNumberAsync(ActionRequest arequest, string mobileNumber, string emailId)
  219. {
  220. await Task.Delay(0);
  221. var srequest = SelectRequest.FromRequest(arequest);
  222. var parameters = new List<Unibase.Data.Parameter>();
  223. var connection = GetConnection(srequest);
  224. var sql = new Unibase.Data.Sql.Select("bizgazecrm_visitors").AllColumns();
  225. List<Unibase.Data.Parameter> viparam = new List<Unibase.Data.Parameter>();
  226. return ActionResponse<Bizgaze.CRM.Visitors.Infos.Visitor>.CreateErrorResponse("", "Mobile Number And Email Id Alredy Exit");
  227. }
  228. #endregion
  229. #region Getting data from Visitors by Mobile Number
  230. /**
  231. * Get a single visitor record by mobile number
  232. * @param SelectRequest srequest - the filer criteria
  233. * @param string MobileNumber - the mobile number of the visitor that needs to be retrieved
  234. * @return SelectResponse<Bizgaze.CRM.Visitors.Infos.Visitor> - the response containing visitor information
  235. */
  236. [SelectMethod(ApiName = "getvisitorsbymobilenumber", AppName = "crm", Description = "getvisitorsbymobilenumber", UniqueName = "bizgaze_transact_visitors_getvisitorsbymobilenumber", MethodName = "visitorsbymobilenumber", ModuleName = "visitors", PackageName = "bizgaze", ParamName1 = "mobilenumber")]
  237. public async Task<SelectResponse<Bizgaze.CRM.Visitors.Infos.Visitor>> VisitorsbyMobileNumberAsync(SelectRequest srequest, string MobileNumber)
  238. {
  239. var exp = srequest.Filter();
  240. var select = "select visitorid,* from bizgazecrm_visitornumbers where mobilenumber='" + MobileNumber + "' order by lastupdateddate desc";
  241. var dt = await _dbContext.GetTableAsync(GetConnectionAsync(srequest), select, Unibase.Data.Enums.InstructionType.Query, null);
  242. var visitorid = dt.Rows[0]["visitorid"];
  243. exp = exp & Exp.Eq(Bizgaze.CRM.Visitors.Infos.Visitor.Property.VisitorId.ToString(), visitorid);
  244. srequest.Filter(exp);
  245. return await GetSingleAsync<Bizgaze.CRM.Visitors.Infos.Visitor>(srequest);
  246. }
  247. #endregion
  248. #region Get installedAppId Async
  249. /*
  250. This method is used to get the install app id based on the visitorid.
  251. The method takes the select request and visitorid as parameters and returns a select response of type Bizgaze.CRM.Visitors.Infos.Visitor.
  252. */
  253. [SelectMethod(ApiName = "getinstallappid", AppName = "crm", Description = "getinstallappid", UniqueName = "bizgaze_crm_visitors_getinstallappid", MethodName = "getinstallappid", ModuleName = "visitors", PackageName = "bizgaze", ParamName1 = "visitorid")]
  254. public async Task<SelectResponse<Bizgaze.CRM.Visitors.Infos.Visitor>> GetInstallappAsync(SelectRequest srequest, long VisitorId)
  255. {
  256. var exp = srequest.Filter();
  257. exp = exp & Exp.Eq(Bizgaze.CRM.Visitors.Infos.Visitor.Property.VisitorId.ToString(), VisitorId);
  258. srequest.Filter(exp);
  259. return await GetSingleAsync<Bizgaze.CRM.Visitors.Infos.Visitor>(srequest);
  260. }
  261. #endregion
  262. #region Get Visitor INformation
  263. // Gets Visitors information with the given Visitor Id.
  264. public async Task<SelectResponse<Bizgaze.CRM.Visitors.Infos.Visitor>> GetVisitorsAsync(SelectRequest srequest, long VisitorId)
  265. {
  266. var exp = srequest.Filter();
  267. exp &= Exp.Eq(Bizgaze.CRM.Visitors.Infos.Visitor.Property.VisitorId.ToString(), VisitorId);
  268. srequest.Filter(exp);
  269. return await GetSingleAsync<Bizgaze.CRM.Visitors.Infos.Visitor>(srequest);
  270. }
  271. #endregion
  272. #region Save Visitor Image
  273. /*
  274. * ActionMethod Name: SaveVisitorImage
  275. * ApiName: Bizgaze_crm_Visitor_Capture
  276. * Description: This method is used for capturing the image of the visitor.
  277. * AppName: crm
  278. * ModuleName: visitors
  279. * PackageName: bizgaze
  280. * UniqueName: Bizgaze_crm_Visitor_Capture
  281. */
  282. [ActionMethod(ApiName = "VisitorCapture ", AppName = "crm", Description = "image Capture ", UniqueName = "Bizgaze_crm_Visitor_Capture", MethodName = "SaveVisitorImage", ModuleName = "visitors", PackageName = "bizgaze")]
  283. public async Task<ActionResponse> SaveVisitorImageAsync(ActionRequest request, ExpandoObject obj)
  284. {
  285. using (var requestTrans = await request.BeginTransactionAsync())
  286. {
  287. {
  288. SelectRequest rrequest = new SelectRequest(request.Transaction)
  289. {
  290. Identity = request.Identity
  291. };
  292. var dictObj = obj as IDictionary<string, dynamic>;
  293. var visitorid = Convert.ToInt64(dictObj["visitorid"].ToString());
  294. var Photourl = dictObj["image"].ToString();
  295. var parameters = new Dictionary<string, object>();
  296. var Update = new Update("bizgazecrm_visitors");
  297. parameters.Add("photourl", Photourl);
  298. Update.Values(parameters).Where(Exp.Eq("visitorid", visitorid));
  299. var ds = await _repository.ExecuteAsync(request, Update);
  300. if (requestTrans.StartedLocal) await request.CommitTransactionAsync();
  301. return ActionResponse.CreateSuccessResponse("Your Image Saved Successfully", ds.Result);
  302. }
  303. }
  304. }
  305. #endregion
  306. }
  307. }