Bizgaze CRM Visitors App
您最多选择25个主题 主题必须以字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符

VisitorManager.Async.cs 16KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290
  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. namespace Bizgaze.CRM.Visitors.Managers
  17. {
  18. internal partial class VisitorManager : BaseManager, IVisitorManager
  19. {
  20. #region Getting data By VisitorId
  21. // This method gets a visitor record with the given VisitorId. It takes a SelectRequest as parameter and returns a SelectResponse<Infos.Visitor> object.
  22. public async Task<SelectResponse<Infos.Visitor>> GetVisitorByIdAsync(SelectRequest request, long VisitorId)
  23. {
  24. var exp = request.Filter();
  25. exp = exp & Unibase.Data.Expressions.Exp.Eq(Infos.Visitor.Property.VisitorId.ToString(), VisitorId);
  26. request.Filter(exp);
  27. var data = await GetSingleAsync<Infos.Visitor>(request);
  28. return data;
  29. }
  30. #endregion
  31. #region Get Visitors html
  32. //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.
  33. [SelectMethod(ApiName = "Get visitors Html", AppName = "crm", Description = "Get visitors Html", UniqueName = "bizgaze_transact_visitors_GetvisitorsHtml", MethodName = "getvisitorshtml", ModuleName = "visitors", PackageName = "bizgaze", ParamName1 = "visitorid")]
  34. public async Task<SelectResponse<Unibase.Platform.Templates.Infos.PrintTemplate>> GetVisitorshtmlAsync(SelectRequest srequest, long VisitorId)
  35. {
  36. long templateid = 0;
  37. //var appManager = Unibase.Dependency.DependencyConfig.Resolve<Unibase.Platform.Apps.Managers.IAppManager>();
  38. var templateManager = Unibase.Dependency.DependencyConfig.Resolve<Unibase.Platform.Templates.Managers.ITemplateManager>();
  39. var templateInfos = await templateManager.GetTemplatesAsync(srequest, "Bizgaze_Extension_CRM_CRM_TemplateProvider_Visitors");
  40. if (templateInfos.Result != null && templateInfos.Result.Count > 0)
  41. {
  42. templateid = templateInfos.Result[0].TemplateId;
  43. }
  44. var result = new SelectResponse<Unibase.Platform.Templates.Infos.PrintTemplate>();
  45. var printTemplate = new Unibase.Platform.Templates.Infos.PrintTemplate();
  46. //var templateManager = //Unibase.Dependency.DependencyConfig.Resolve<Unibase.Platform.Templates.Managers.ITemplateManager>();
  47. var _dbContext = DependencyConfig.Resolve<Unibase.Data.IDbContext>();
  48. Unibase.Platform.Templates.Helpers.TemplateHelper helper = new Unibase.Platform.Templates.Helpers.TemplateHelper(_dbContext);
  49. var VisitorInfo_ = await GetVisitorByIdAsync(srequest, VisitorId);
  50. if (VisitorInfo_.Result != null)
  51. {
  52. var tInfo = await templateManager.GetTemplateAsync(srequest, templateid);
  53. var templateInfo = tInfo.Result;
  54. if (templateInfo == null)
  55. {
  56. return SelectResponse<Unibase.Platform.Templates.Infos.PrintTemplate>.CreateErrorResponse("1", "Template Not Found");
  57. }
  58. string CreatedDate = VisitorInfo_.Result.CheckInDate.ToString("dd-MM-yyyy hh:mm:ss tt");
  59. var template = System.Web.HttpUtility.UrlDecode(templateInfo.TemplateText.ToString());
  60. string multiTemplateText = "";
  61. if (template.Contains("{{fullname}}"))
  62. {
  63. template = template.Replace("{{fullname}}", VisitorInfo_.Result.FullName);
  64. }
  65. if (template.Contains("{{comingfrom}}"))
  66. {
  67. template = template.Replace("{{comingfrom}}", VisitorInfo_.Result.ComingFrom);
  68. }
  69. if (template.Contains("{{purposeofvisit}}"))
  70. {
  71. template = template.Replace("{{purposeofvisit}}", VisitorInfo_.Result.PurposeOfVisitType);
  72. }
  73. if (template.Contains("{{phonenumber}}"))
  74. {
  75. template = template.Replace("{{phonenumber}}", VisitorInfo_.Result.MobileNumber);
  76. }
  77. if (template.Contains("{{code}}"))
  78. {
  79. template = template.Replace("{{code}}", VisitorInfo_.Result.Code);
  80. }
  81. if (template.Contains("{{createddate}}"))
  82. {
  83. template = template.Replace("{{createddate}}", CreatedDate.ToString());
  84. }
  85. if (template.Contains("{{photourl}}"))
  86. {
  87. template = template.Replace("{{photourl}}", VisitorInfo_.Result.PhotoUrl);
  88. }
  89. if (template.Contains("{{HostName}}"))
  90. {
  91. template = template.Replace("{{HostName}}", VisitorInfo_.Result.HostName);
  92. }
  93. if (template.Contains("{{imageurl}}"))
  94. {
  95. template = template.Replace("{{imageurl}}", VisitorInfo_.Result.ImageUrl);
  96. }
  97. multiTemplateText = template;
  98. printTemplate.PrintHTML = multiTemplateText;
  99. printTemplate.FileName = "Visitors";
  100. printTemplate.PkId = VisitorId;
  101. result.Result = printTemplate;
  102. return result;
  103. }
  104. else
  105. {
  106. return SelectResponse<Unibase.Platform.Templates.Infos.PrintTemplate>.CreateErrorResponse("1", "visitor Not Found");
  107. }
  108. }
  109. #endregion
  110. #region Get Pre_Visitors
  111. /**
  112. * This method is used to get the pre-visitors with the specified code.
  113. * If the visitor with the given code is present, it returns the visitor data else it returns an error.
  114. * @param srequest The select request object
  115. * @param code The code of the visitor
  116. * @return The select response object containing the visitor data or the error.
  117. */
  118. [SelectMethod(ApiName = "Get pre visitors", AppName = "crm", Description = "Get pre visitors", UniqueName = "bizgaze_transact_visitors_Getprevisitors", MethodName = "Getprevisitors", ModuleName = "visitors", PackageName = "bizgaze", ParamName1 = "code")]
  119. public async Task<SelectResponse<Bizgaze.CRM.Visitors.Infos.Visitor>> GetpreVisitorsAsync(SelectRequest srequest, string code)
  120. {
  121. var exp = srequest.Filter();
  122. exp &= Exp.Eq(Bizgaze.CRM.Visitors.Infos.Visitor.Property.Code.ToString(), code);
  123. srequest.Filter(exp);
  124. var visData = await GetSingleAsync<Bizgaze.CRM.Visitors.Infos.Visitor>(srequest);
  125. if (visData.Result != null)
  126. {
  127. var refStatusId = visData.Result.RefStatusId;
  128. if (refStatusId != 2)
  129. {
  130. return visData;
  131. }
  132. }
  133. else
  134. {
  135. return SelectResponse<Bizgaze.CRM.Visitors.Infos.Visitor>.CreateErrorResponse("404", "Please Enter A Valid Uniqueid!");
  136. }
  137. return SelectResponse<Bizgaze.CRM.Visitors.Infos.Visitor>.CreateErrorResponse("404", "you have been already checked out");
  138. }
  139. #endregion
  140. #region Visitor Agreement
  141. /*
  142. Action Method Name: visitoragreement
  143. Description: This action method is used to update the agreement status of the visitors in the bizgazecrm_visitors table.
  144. Parameters: visitorid - The ID of the visitor whose status is to be updated.
  145. Return: ActionResponse - Returns success or error response based on the success of the query.
  146. */
  147. [ActionMethod(ApiName = "visitor agreement", AppName = "crm", Description = "visitor agreement", UniqueName = "bizgaze_transact_visitors_visitoragreement", MethodName = "visitoragreement", ModuleName = "visitors", PackageName = "bizgaze", ParamName1 = "visitorid")]
  148. public async Task<ActionResponse<Bizgaze.CRM.Visitors.Infos.Visitor>> VisitorAgreementAsync(ActionRequest arequest, long VisitorId)
  149. {
  150. var srequest = SelectRequest.FromRequest(arequest);
  151. var parameters = new List<Unibase.Data.Parameter>();
  152. var connection = GetConnection(srequest);
  153. var visitorinfo = await GetVisitorsAsync(srequest, VisitorId);
  154. if (visitorinfo.Result != null)
  155. {
  156. parameters.Add(new Unibase.Data.Parameter("@visitorid", VisitorId));
  157. var Agreementupdate = "update bizgazecrm_visitors set agreement=" + "true" + " where visitorid=" + visitorinfo.Result.VisitorId;
  158. var sqlvoucher = await _dbContext.ExecuteAsync(connection, Agreementupdate, Unibase.Data.Enums.InstructionType.Query, parameters);
  159. return ActionResponse<Bizgaze.CRM.Visitors.Infos.Visitor>.CreateSuccessResponse("Agreement Success",null);
  160. }
  161. else
  162. {
  163. return ActionResponse<Bizgaze.CRM.Visitors.Infos.Visitor>.CreateErrorResponse("", "Visitor Not Found");
  164. }
  165. }
  166. #endregion
  167. #region check Mobile Number
  168. /**
  169. * Api Name: check Mobile Number
  170. * App Name: crm
  171. * Description: check Mobile Numbert
  172. * Unique Name: bizgaze_transact_visitors_checkMobileNumber
  173. * Method Name: checkmobilenumber
  174. * Module Name: visitors
  175. * Package Name: bizgaze
  176. * Param Name1: mobilenumber
  177. * Param Name2: emailid
  178. * This method is used to check the existing mobile number and email id in the Visitors table and return an error response.
  179. */
  180. [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")]
  181. public async Task<ActionResponse<Bizgaze.CRM.Visitors.Infos.Visitor>> checkMobileNumberAsync(ActionRequest arequest, string mobileNumber, string emailId)
  182. {
  183. await Task.Delay(0);
  184. var srequest = SelectRequest.FromRequest(arequest);
  185. var parameters = new List<Unibase.Data.Parameter>();
  186. var connection = GetConnection(srequest);
  187. var sql = new Unibase.Data.Sql.Select("bizgazecrm_visitors").AllColumns();
  188. List<Unibase.Data.Parameter> viparam = new List<Unibase.Data.Parameter>();
  189. return ActionResponse<Bizgaze.CRM.Visitors.Infos.Visitor>.CreateErrorResponse("", "Mobile Number And Email Id Alredy Exit");
  190. }
  191. #endregion
  192. #region Getting data from Visitors by Mobile Number
  193. /**
  194. * Get a single visitor record by mobile number
  195. * @param SelectRequest srequest - the filer criteria
  196. * @param string MobileNumber - the mobile number of the visitor that needs to be retrieved
  197. * @return SelectResponse<Bizgaze.CRM.Visitors.Infos.Visitor> - the response containing visitor information
  198. */
  199. [SelectMethod(ApiName = "getvisitorsbymobilenumber", AppName = "crm", Description = "getvisitorsbymobilenumber", UniqueName = "bizgaze_transact_visitors_getvisitorsbymobilenumber", MethodName = "visitorsbymobilenumber", ModuleName = "visitors", PackageName = "bizgaze", ParamName1 = "mobilenumber")]
  200. public async Task<SelectResponse<Bizgaze.CRM.Visitors.Infos.Visitor>> VisitorsbyMobileNumberAsync(SelectRequest srequest, string MobileNumber)
  201. {
  202. var exp = srequest.Filter();
  203. exp = exp & Exp.Eq(Bizgaze.CRM.Visitors.Infos.Visitor.Property.MobileNumber.ToString(), MobileNumber);
  204. srequest.Filter(exp);
  205. return await GetSingleAsync<Bizgaze.CRM.Visitors.Infos.Visitor>(srequest);
  206. }
  207. #endregion
  208. #region Get installedAppId Async
  209. /*
  210. This method is used to get the install app id based on the visitorid.
  211. The method takes the select request and visitorid as parameters and returns a select response of type Bizgaze.CRM.Visitors.Infos.Visitor.
  212. */
  213. [SelectMethod(ApiName = "getinstallappid", AppName = "crm", Description = "getinstallappid", UniqueName = "bizgaze_crm_visitors_getinstallappid", MethodName = "getinstallappid", ModuleName = "visitors", PackageName = "bizgaze", ParamName1 = "visitorid")]
  214. public async Task<SelectResponse<Bizgaze.CRM.Visitors.Infos.Visitor>> GetInstallappAsync(SelectRequest srequest, long VisitorId)
  215. {
  216. var exp = srequest.Filter();
  217. exp = exp & Exp.Eq(Bizgaze.CRM.Visitors.Infos.Visitor.Property.VisitorId.ToString(), VisitorId);
  218. srequest.Filter(exp);
  219. return await GetSingleAsync<Bizgaze.CRM.Visitors.Infos.Visitor>(srequest);
  220. }
  221. #endregion
  222. #region Get Visitor INformation
  223. // Gets Visitors information with the given Visitor Id.
  224. public async Task<SelectResponse<Bizgaze.CRM.Visitors.Infos.Visitor>> GetVisitorsAsync(SelectRequest srequest, long VisitorId)
  225. {
  226. var exp = srequest.Filter();
  227. exp &= Exp.Eq(Bizgaze.CRM.Visitors.Infos.Visitor.Property.VisitorId.ToString(), VisitorId);
  228. srequest.Filter(exp);
  229. return await GetSingleAsync<Bizgaze.CRM.Visitors.Infos.Visitor>(srequest);
  230. }
  231. #endregion
  232. #region Save Visitor Image
  233. /*
  234. * ActionMethod Name: SaveVisitorImage
  235. * ApiName: Bizgaze_crm_Visitor_Capture
  236. * Description: This method is used for capturing the image of the visitor.
  237. * AppName: crm
  238. * ModuleName: visitors
  239. * PackageName: bizgaze
  240. * UniqueName: Bizgaze_crm_Visitor_Capture
  241. */
  242. [ActionMethod(ApiName = "VisitorCapture ", AppName = "crm", Description = "image Capture ", UniqueName = "Bizgaze_crm_Visitor_Capture", MethodName = "SaveVisitorImage", ModuleName = "visitors", PackageName = "bizgaze")]
  243. public async Task<ActionResponse> SaveVisitorImageAsync(ActionRequest request, ExpandoObject obj)
  244. {
  245. using (var requestTrans = await request.BeginTransactionAsync())
  246. {
  247. {
  248. SelectRequest rrequest = new SelectRequest(request.Transaction)
  249. {
  250. Identity = request.Identity
  251. };
  252. var dictObj = obj as IDictionary<string, dynamic>;
  253. var visitorid = Convert.ToInt64(dictObj["visitorid"].ToString());
  254. var Photourl = dictObj["image"].ToString();
  255. var parameters = new Dictionary<string, object>();
  256. var Update = new Update("bizgazecrm_visitors");
  257. parameters.Add("photourl", Photourl);
  258. Update.Values(parameters).Where(Exp.Eq("visitorid", visitorid));
  259. var ds = await _repository.ExecuteAsync(request, Update);
  260. if (requestTrans.StartedLocal) await request.CommitTransactionAsync();
  261. return ActionResponse.CreateSuccessResponse("Your Image Saved Successfully", ds.Result);
  262. }
  263. }
  264. }
  265. #endregion
  266. }
  267. }