예제 #1
0
        public async Task UpdateJobOrder(Model.JobOrder model)
        {
            var param = new DynamicParameters();

            param.Add("@ID", model.ID);
            param.Add("@RefID", model.RefID);
            param.Add("@Type", model.Type);
            param.Add("@Status", model.Status);
            param.Add("@Notes", model.Notes);
            param.Add("@CustomerID", model.Customer.ID);
            param.Add("@OfficerID", model.Officer?.ID);
            param.Add("@OfficerName", model.Officer?.Name);
            param.Add("@TargetDate", model.TargetDate);
            param.Add("@ScheduledOn", model.ScheduledOn);
            param.Add("@ScheduledOnTo", model.ScheduledOnTo);
            param.Add("@ContactPersonID", model.ContactPersonID);

            await SqlMapper.ExecuteAsync(_unitOfWork.Connection,
                                         "UpdateJobOrder",
                                         param,
                                         commandType : CommandType.StoredProcedure,
                                         transaction : _unitOfWork.Transaction);
        }
예제 #2
0
        public Model.JobOrder Map(Model.JobOrder joborder,
                                  JobOrderLineItem lineitem = null,
                                  Premise premise           = null,
                                  Customer customer         = null,
                                  Person person             = null,
                                  ContactInfo contactInfo   = null,
                                  Attendee attendee         = null,
                                  Officer officer           = null,
                                  Attachment attachment     = null,
                                  Officer invitee           = null,
                                  Log log                               = null,
                                  Findings findings                     = null,
                                  Officer findingsOfficer               = null,
                                  FindingsLineItem findingsLineItem     = null,
                                  Attachment findingsLineItemAttachment = null,
                                  Attachment signature                  = null)
        {
            if (!dict.TryGetValue(joborder.ID, out Model.JobOrder result))
            {
                dict[joborder.ID] = joborder;

                if (!string.IsNullOrEmpty(officer?.Name))
                {
                    joborder.Officer = officer;
                }

                if (!string.IsNullOrEmpty(customer?.Name))
                {
                    joborder.Customer = customer;
                }

                result = joborder;
            }

            if ((lineitem?.ID ?? 0) > 0 &&
                !_liCache.ContainsKey(lineitem.ID))
            {
                _liCache[lineitem.ID] = lineitem;

                if (result.LineItems == null)
                {
                    result.LineItems = new List <JobOrderLineItem>();
                }
                result.LineItems.Add(lineitem);
            }

            if ((premise?.ID ?? 0) > 0 &&
                (result.Premises?.FirstOrDefault(e => e.ID == premise.ID) == null))
            {
                if (result.Premises == null)
                {
                    result.Premises = new List <Premise>();
                }
                result.Premises.Add(premise);
            }

            if ((attendee?.ID ?? 0) > 0 &&
                !_attendeeCache.ContainsKey(attendee.ID))
            {
                _attendeeCache[attendee.ID] = attendee;

                if (result.Attendees == null)
                {
                    result.Attendees = new List <Attendee>();
                }

                result.Attendees.Add(attendee);
            }

            if ((log?.ID ?? 0) > 0 &&
                !_logCache.ContainsKey(log.ID))
            {
                _logCache[log.ID] = log;

                if (result.Logs == null)
                {
                    result.Logs = new List <Log>();
                }
                result.Logs.Add(log);
            }

            if (!string.IsNullOrEmpty(invitee?.Name) &&
                result.Invitees?.FirstOrDefault(e => e.ID == invitee.ID) == null)
            {
                if (result.Invitees == null)
                {
                    result.Invitees = new List <Officer>();
                }

                result.Invitees.Add(invitee);
            }

            Findings outFindings = null;

            if ((findings?.ID ?? 0) > 0 &&
                !_findingsCache.TryGetValue(findings.ID, out outFindings))
            {
                _findingsCache[findings.ID] = findings;

                if (result.Findings == null)
                {
                    result.Findings = new List <Findings>();
                }

                if (!string.IsNullOrEmpty(findingsOfficer?.Name))
                {
                    findings.Officer = findingsOfficer;
                }

                if ((signature?.ID ?? 0) > 0)
                {
                    findings.Attachment = signature;
                }

                result.Findings.Add(findings);
                outFindings = findings;
            }

            FindingsLineItem outFindingsLineItem = null;

            if ((findingsLineItem?.ID ?? 0) > 0 &&
                !_findingsLineItemCache.TryGetValue(findingsLineItem.ID, out outFindingsLineItem))
            {
                _findingsLineItemCache[findingsLineItem.ID] = findingsLineItem;

                if (outFindings.LineItems == null)
                {
                    outFindings.LineItems = new List <FindingsLineItem>();
                }

                outFindings.LineItems.Add(findingsLineItem);

                outFindingsLineItem = findingsLineItem;
            }

            if ((findingsLineItemAttachment?.ID ?? 0) > 0 &&
                !_findingsLineItemAttachmentCache.ContainsKey(findingsLineItemAttachment.ID))
            {
                _findingsLineItemAttachmentCache[findingsLineItemAttachment.ID] = findingsLineItemAttachment;

                if (outFindingsLineItem.Attachments == null)
                {
                    outFindingsLineItem.Attachments = new List <Attachment>();
                }
                outFindingsLineItem.Attachments.Add(findingsLineItemAttachment);
            }

            Person outContactPerson = null;

            if (person?.ID != null &&
                person.ID != Guid.Empty &&
                !_personCache.TryGetValue(person.ID, out outContactPerson))
            {
                _personCache[person.ID] = person;

                outContactPerson = person;
            }

            result.ContactPerson = outContactPerson;


            if ((contactInfo?.ID ?? 0L) != 0L &&
                !_contactInfoCache.ContainsKey(contactInfo.ID))
            {
                _contactInfoCache[contactInfo.ID] = contactInfo;

                if (outContactPerson.ContactInfos == null)
                {
                    outContactPerson.ContactInfos = new List <ContactInfo>();
                }
                outContactPerson.ContactInfos.Add(contactInfo);
            }

            return(result);
        }
예제 #3
0
        public async Task <long> InsertJobOrder(Model.JobOrder model)
        {
            var param = new DynamicParameters();

            param.Add("@RefID", model.RefID);
            param.Add("@Type", model.Type);
            param.Add("@Status", model.Status);
            param.Add("@Notes", model.Notes);
            param.Add("@CustomerID", model.Customer.ID);
            param.Add("@CustomerName", model.Customer.Name);
            param.Add("@CustomerCode", model.Customer.Code);
            param.Add("@OfficerID", model.Officer?.ID);
            param.Add("@OfficerName", model.Officer?.Name);
            param.Add("@TargetDate", model.TargetDate);
            param.Add("@ScheduledOn", model.ScheduledOn);
            param.Add("@ScheduledOnTo", model.ScheduledOnTo);
            param.Add("@ContactPersonID", model.ContactPerson?.ID);
            param.Add("@ID", dbType: DbType.Int64, direction: ParameterDirection.Output);

            await SqlMapper.ExecuteAsync(_unitOfWork.Connection,
                                         "InsertJobOrder",
                                         param,
                                         commandType : CommandType.StoredProcedure,
                                         transaction : _unitOfWork.Transaction);

            var result = param.Get <long>("@ID");

            if (model.LineItems?.Any() ?? false)
            {
                foreach (var lineItem in model.LineItems)
                {
                    var lparam = new DynamicParameters();
                    lparam.Add("@Scheme", lineItem.Scheme);
                    lparam.Add("@SubScheme", lineItem.SubScheme);
                    lparam.Add("@ChecklistHistoryID", lineItem.ChecklistHistoryID);
                    lparam.Add("@JobID", result);
                    lparam.Add("@ID", dbType: DbType.Int64, direction: ParameterDirection.Output);

                    await SqlMapper.ExecuteAsync(_unitOfWork.Connection,
                                                 "InsertJobOrderLineItem",
                                                 lparam,
                                                 commandType : CommandType.StoredProcedure,
                                                 transaction : _unitOfWork.Transaction);
                }
            }

            if (model.Premises?.Any() ?? false)
            {
                var premises = new DataTable();
                premises.Columns.Add("A", typeof(long));
                premises.Columns.Add("B", typeof(long));

                foreach (var premise in model.Premises)
                {
                    var premParam = new DynamicParameters();
                    premParam.Add("@ID", premise.ID);
                    premParam.Add("@IsLocal", premise.IsLocal);
                    premParam.Add("@Name", premise.Name);
                    premParam.Add("@Type", premise.Type);
                    premParam.Add("@Area", premise.Area);
                    premParam.Add("@Schedule", premise.Schedule);
                    premParam.Add("@BlockNo", premise.BlockNo);
                    premParam.Add("@UnitNo", premise.UnitNo);
                    premParam.Add("@FloorNo", premise.FloorNo);
                    premParam.Add("@BuildingName", premise.BuildingName);
                    premParam.Add("@Address1", premise.Address1);
                    premParam.Add("@Address2", premise.Address2);
                    premParam.Add("@City", premise.City);
                    premParam.Add("@Province", premise.Province);
                    premParam.Add("@Country", premise.Country);
                    premParam.Add("@Postal", premise.Postal);
                    premParam.Add("@Latitude", premise.Latitude);
                    premParam.Add("@Longtitude", premise.Longitude);
                    premParam.Add("@Grade", null);
                    premParam.Add("@IsHighPriority", null);

                    await SqlMapper.ExecuteAsync(_unitOfWork.Connection,
                                                 "InsertOrReplacePremise",
                                                 premParam,
                                                 commandType : CommandType.StoredProcedure,
                                                 transaction : _unitOfWork.Transaction);

                    premises.Rows.Add(result, premise.ID);
                }

                var premisesParam = new DynamicParameters();
                premisesParam.Add("@IDMappingType", premises.AsTableValuedParameter("dbo.IDMappingType"));

                await SqlMapper.ExecuteAsync(_unitOfWork.Connection,
                                             "InsertJobOrderPremises",
                                             premisesParam,
                                             commandType : CommandType.StoredProcedure,
                                             transaction : _unitOfWork.Transaction);
            }

            return(result);
        }