public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer) { var obj = JObject.Load(reader); Representative representative; if ((obj["discriminator"] != null && obj["discriminator"].ToString() == "RepresentativePerson") || (obj["Discriminator"] != null && obj["Discriminator"].ToString() == "RepresentativePerson")) { representative = new RepresentativePerson(); } else if ((obj["discriminator"] != null && obj["discriminator"].ToString() == "RepresentativeCompany") || (obj["Discriminator"] != null && obj["Discriminator"].ToString() == "RepresentativeCompany")) { representative = new RepresentativeCompany(); } else { representative = new Representative(); } serializer.Populate(obj.CreateReader(), representative); return(representative); }
public FinanceData Update(Form obj, FinanceData financeData) { if (obj.Representative is RepresentativePersonViewModel) { RepresentativePerson representativePerson = _mapper.Map <RepresentativePerson>((RepresentativePersonViewModel)obj.Representative); representativePerson.FinanceDataId = financeData.Id; if (financeData.Representative == null) { _context.Set <RepresentativePerson>().Add(representativePerson); } else { if (financeData.Representative is RepresentativeCompany) { _context.Set <RepresentativeCompany>().Remove((RepresentativeCompany)financeData.Representative); _context.Set <RepresentativePerson>().Add(representativePerson); } else { representativePerson.Id = financeData.Representative.Id; _context.Entry(financeData.Representative).CurrentValues.SetValues(representativePerson); } } } else if (obj.Representative is RepresentativeCompanyViewModel) { RepresentativeCompany representativeCompany = _mapper.Map <RepresentativeCompany>((RepresentativeCompanyViewModel)obj.Representative); representativeCompany.FinanceDataId = financeData.Id; if (financeData.Representative == null) { _context.Set <RepresentativeCompany>().Add(representativeCompany); } else { if (financeData.Representative is RepresentativePerson) { _context.Set <RepresentativePerson>().Remove((RepresentativePerson)financeData.Representative); _context.Set <RepresentativeCompany>().Add(representativeCompany); } else { representativeCompany.Id = financeData.Representative.Id; _context.Entry(financeData.Representative).CurrentValues.SetValues(representativeCompany); } } } foreach (Guarantor guarantor in financeData.Guarantors.ToList()) { if (!obj .Guarantors .Any(c => c.Id == guarantor.Id)) { _context.Set <GuarantorDocument>().RemoveRange(guarantor.GuarantorDocuments); _context.Set <Document>().RemoveRange(guarantor.GuarantorDocuments.Select(x => x.Document)); _context.Set <Guarantor>().Remove(guarantor); } } foreach (GuarantorViewModel guarantorViewModel in obj.Guarantors) { Guarantor existingGuarantor = financeData.Guarantors .Where(c => c.Id == guarantorViewModel.Id) .SingleOrDefault(); if (existingGuarantor != null) { Guarantor guarantor = _mapper.Map <Guarantor>(guarantorViewModel); guarantor.Id = existingGuarantor.Id; guarantor.FinanceDataId = financeData.Id; _context.Entry(existingGuarantor).CurrentValues.SetValues(guarantor); foreach (GuarantorDocument guarantorDocument in existingGuarantor.GuarantorDocuments.ToList()) { if (!guarantorViewModel .Documents .Any(c => c.Id == guarantorDocument.DocumentId)) { _context.Set <GuarantorDocument>().Remove(guarantorDocument); _context.Set <Document>().Remove(_context.Set <Document>().Find(guarantorDocument.DocumentId)); } } foreach (DocumentViewModel guarantorDocumentViewModel in guarantorViewModel.Documents) { GuarantorDocument existingGuarantorDocument = existingGuarantor.GuarantorDocuments .Where(c => c.DocumentId == guarantorDocumentViewModel.Id) .SingleOrDefault(); if (existingGuarantorDocument != null) { GuarantorDocument guarantorDocument = new GuarantorDocument { Document = new Document { Id = existingGuarantorDocument.Document.Id, Url = guarantorDocumentViewModel.Url, DocumentTypeId = guarantorDocumentViewModel.DocumentTypeId, }, GuarantorId = existingGuarantor.Id }; _context.Entry(existingGuarantorDocument.Document).CurrentValues.SetValues(guarantorDocument.Document); } else { GuarantorDocument guarantorDocument = new GuarantorDocument { Document = new Document { Id = 0, Url = guarantorDocumentViewModel.Url, DocumentTypeId = guarantorDocumentViewModel.DocumentTypeId }, GuarantorId = existingGuarantor.Id }; _context.Set <GuarantorDocument>().Add(guarantorDocument); } } } else { Guarantor guarantor = _mapper.Map <Guarantor>(guarantorViewModel); guarantor.Id = 0; guarantor.FinanceDataId = financeData.Id; _context.Set <Guarantor>().Add(guarantor); } } financeData.PlanId = obj.PlanId; financeData.PaymentMethodId = obj.PaymentMethodId; return(base.Update(financeData)); }