private void Test(IDocumentStore store) { using (IDocumentSession session = store.OpenSession()) { var lead = new Lead { Id = "leads/1", Lat = 52.5223618, Lng = -1.8355805 }; var invoice = new BaseInvoice { Id = "invoices/1", LeadId = "leads/1", }; invoice.Calls.Add(new ServiceCall { Id = 1, AppointmentDate = DateTime.Now }); invoice.Calls.Add(new ServiceCall { Id = 2, AppointmentDate = DateTime.Now }); session.Store(lead); session.Store(invoice); session.SaveChanges(); } new ServiceCalls_Index().Execute(store); new NearbyServiceCallTransformer().Execute(store); using (var session = store.OpenSession()) { var results = session.Query <ServiceCalls_Index.Result, ServiceCalls_Index>() .Customize( x => x.WaitForNonStaleResults().SetAllowMultipleIndexEntriesForSameDocumentToResultTransformer(true)) .Customize(x => x.WithinRadiusOf("Coordinates", 20, 52.5158768, longitude: -1.7306246) .SortByDistance()) .Where(x => x.AppointmentDate != null) .ProjectFromIndexFieldsInto <ServiceCalls_Index.Result>() .TransformWith <NearbyServiceCallTransformer, NearbyServiceCallItemViewModel>() .ToList(); WaitForUserToContinueTheTest(); Assert.Equal(2, results.Count()); } }
private async Task <FileDescriptor> ConstructInvoiceDocumentFilePathAsync(BaseInvoice invoice) { var year = invoice.InvoiceDate != null ? ((DateTime)invoice.InvoiceDate).Year : 0; var directory = await _fileStorageService.CreateDirectoryAsync(year.ToString(), _invoiceStorageLocation); var filename = _onlyAlphaNumeric.Replace($"F0{invoice.Number}", ""); return(new FileDescriptor { Parent = directory, FileName = $"{filename}.pdf" }); }
private async Task CreateCertificateAsync(BaseInvoice invoice) { dynamic documentData = new ExpandoObject(); documentData.Invoice = invoice; var url = $"{_documentGenerationConfig.BaseUrl}/documents/certificate"; var fileDescriptor = await ConstructGeneratedCertificateFilePathAsync(invoice); await GenerateAndStoreDocumentAsync(url, documentData, fileDescriptor); }
private string ConstructGeneratedCertificateFilePath(BaseInvoice invoice) { var year = invoice.InvoiceDate != null ? ((DateTime)invoice.InvoiceDate).Year : 0; var directory = $"{_generatedCertificateStorageLocation}{year}{Path.DirectorySeparatorChar}"; Directory.CreateDirectory(directory); var filename = _onlyAlphaNumeric.Replace($"A0{invoice.Number}", ""); return($"{directory}{filename}.pdf"); }
private async Task <Stream> CreateCertificateAsync(BaseInvoice invoice, string language) { dynamic documentData = new ExpandoObject(); documentData.Invoice = invoice; documentData.language = language; var url = $"{_documentGenerationConfig.BaseUrl}/documents/certificate"; var filePath = ConstructGeneratedCertificateFilePath(invoice); return(await GenerateAndStoreDocumentAsync(url, documentData, filePath)); }
private async Task <string> FindReceivedCertificateFilePathAsync(int invoiceId, bool isDeposit = false) { string filePath = null; string notFoundWarning = null; if (_documentGenerationConfig.IsSearchEnabled) { BaseInvoice invoice = null; if (isDeposit) { invoice = await _depositInvoiceDataProvider.GetByIdAsync(invoiceId); } else { invoice = await _invoiceDataProvider.GetByIdAsync(invoiceId); } var year = invoice.InvoiceDate != null ? ((DateTime)invoice.InvoiceDate).Year : 0; var directory = await _fileStorageService.CreateDirectoryAsync(year.ToString(), _receivedCertificateStorageLocation); // only search on invoice number since customer name might have changed var filenameSearch = _onlyAlphaNumeric.Replace($"A0{invoice.Number}", ""); filePath = await _fileStorageService.FindDocumentAsync(directory, filenameSearch); notFoundWarning = $"Cannot find production-ticket file for invoice {invoiceId} starting with '{filenameSearch}' in directory {directory}"; } else { var fileDescriptor = await ConstructReceivedCertificateFilePathAsync(invoiceId); filePath = fileDescriptor.FilePath; notFoundWarning = $"Cannot find production-ticket file for invoice {invoiceId} at {filePath}"; } if (filePath != null) { return(filePath); } else { _logger.LogWarning(notFoundWarning); throw new EntityNotFoundException(); } }
private async Task <FileDescriptor> ConstructReceivedCertificateFilePathAsync(int invoiceId, bool isDeposit = false) { BaseInvoice invoice = null; if (isDeposit) { invoice = await _depositInvoiceDataProvider.GetByIdAsync(invoiceId); } else { invoice = await _invoiceDataProvider.GetByIdAsync(invoiceId); } var year = invoice.InvoiceDate != null ? ((DateTime)invoice.InvoiceDate).Year : 0; var directory = await _fileStorageService.CreateDirectoryAsync(year.ToString(), _receivedCertificateStorageLocation); var filename = _onlyAlphaNumeric.Replace($"A0{invoice.Number}", "") + _noNewlines.Replace($"_{invoice.CustomerName}", ""); return(new FileDescriptor { Parent = directory, FileName = $"{filename}.pdf" }); }
private async Task <string> ConstructReceivedCertificateFilePathAsync(int invoiceId, bool isDeposit = false) { BaseInvoice invoice = null; if (isDeposit) { invoice = await _depositInvoiceDateProvider.GetByIdAsync(invoiceId); } else { invoice = await _invoiceDateProvider.GetByIdAsync(invoiceId); } var year = invoice.InvoiceDate != null ? ((DateTime)invoice.InvoiceDate).Year : 0; var directory = $"{_receivedCertificateStorageLocation}{year}{Path.DirectorySeparatorChar}"; Directory.CreateDirectory(directory); var filename = _onlyAlphaNumeric.Replace($"A0{invoice.Number}", "") + $"_{invoice.CustomerName}"; return($"{directory}{filename}.pdf"); }
private bool _charge(ChargeInfo[] BudgetaryChargeInfos, Prescription[] prescriptions, out BaseInvoice[] ChargeInvoicies) { try { for (int chargeCount = 0; chargeCount < BudgetaryChargeInfos.Length; chargeCount++) { if (MSAccessDb.Exists("MZ_COSTMASTER", Tables.mz_costmaster.COSTMASTERID + "=" + BudgetaryChargeInfos[chargeCount].ChargeID)) { HIS.Model.MZ_CostMaster chargeBill = new HIS.Model.MZ_CostMaster( ); chargeBill = (MZ_CostMaster)MSAccessDb.GetModel("MZ_COSTMASTER", Tables.mz_costmaster.COSTMASTERID + "=" + BudgetaryChargeInfos[chargeCount].ChargeID, typeof(MZ_CostMaster)); chargeBill.Self_Fee = BudgetaryChargeInfos[chargeCount].SelfFee; chargeBill.Village_Fee = BudgetaryChargeInfos[chargeCount].VillageFee; chargeBill.Favor_Fee = BudgetaryChargeInfos[chargeCount].FavorFee; chargeBill.Pos_Fee = BudgetaryChargeInfos[chargeCount].PosFee; chargeBill.Money_Fee = BudgetaryChargeInfos[chargeCount].CashFee; chargeBill.Ticket_Flag = 0; chargeBill.CostDate = DateTime.Now; chargeBill.Record_Flag = 0; string perfCode = ""; chargeBill.TicketNum = InvoiceManager.GetBillNumber(OPDBillKind.门诊收费发票, OperatorId, false, out perfCode); chargeBill.TicketCode = perfCode; BudgetaryChargeInfos[chargeCount].InvoiceSerialNO = Convert.ToInt32(chargeBill.TicketNum); BudgetaryChargeInfos[chargeCount].ChargeDate = chargeBill.CostDate; MSAccessDb.UpdateRecord(chargeBill); //更新结算表 //更新处方表收费标识 HIS.Model.MZ_PresMaster presMaster = new HIS.Model.MZ_PresMaster( ); //presMaster = BindEntity<HIS.Model.MZ_PresMaster>.CreateInstanceDAL( oleDb ).GetModel( BudgetaryChargeInfos[chargeCount].PrescriptionID ); presMaster = (MZ_PresMaster)MSAccessDb.GetModel("MZ_PRESMASTER", Tables.mz_presmaster.PRESMASTERID + "=" + BudgetaryChargeInfos[chargeCount].PrescriptionID, typeof(MZ_PresMaster)); if (presMaster.Charge_Flag == 0) { presMaster.Charge_Flag = 1; presMaster.RoungingMoney = presMaster.Total_Fee - BudgetaryChargeInfos[chargeCount].TotalFee; presMaster.Total_Fee = BudgetaryChargeInfos[chargeCount].TotalFee; presMaster.TicketCode = BudgetaryChargeInfos[chargeCount].InvoiceNO; presMaster.TicketNum = chargeBill.TicketNum; presMaster.CostMasterID = BudgetaryChargeInfos[chargeCount].ChargeID; presMaster.ChargeCode = OperatorId.ToString( ); //BindEntity<HIS.Model.MZ_PresMaster>.CreateInstanceDAL( oleDb ).Update( presMaster ); MSAccessDb.UpdateRecord(presMaster); } else { throw new Exception("该处方已被其他收费员收费!"); } } else { throw new Exception("没有找到结算号的记录!"); } } //生成发票 ChargeInvoicies = new BaseInvoice[BudgetaryChargeInfos.Length]; for (int i = 0; i < BudgetaryChargeInfos.Length; i++) { ChargeInvoicies[i] = new Invoice(BudgetaryChargeInfos[i].PerfChar, BudgetaryChargeInfos[i].InvoiceNO, OPDBillKind.门诊收费发票); } return(true); } catch (Exception err) { throw err; } }
/// <summary> /// 结算 /// </summary> /// <param name="BudgetaryChargeInfos">预算后产生的计算信息</param> /// <param name="prescriptions">要收费的处方</param> /// <param name="ChargeInvoicies">结算成功后返回的发票结果,数组对象</param> /// <returns></returns> private bool _charge(ChargeInfo[] BudgetaryChargeInfos, Prescription[] prescriptions, out BaseInvoice[] ChargeInvoicies) { try { MZClinicInterface clinicInterface = new MZClinicInterface(); for (int presindex = 0; presindex < prescriptions.Length; presindex++) { if (prescriptions[presindex].DocPresId > 0) { decimal mzdocfee = clinicInterface.GetDocPresMoney(prescriptions[presindex].DocPresId); if (mzdocfee != prescriptions[presindex].Total_Fee) { throw new Exception("门诊医生站已对该收费处方进行修改,请重新刷新处方再点收银!"); } } } for (int chargeCount = 0; chargeCount < BudgetaryChargeInfos.Length; chargeCount++) { if (BindEntity <Model.MZ_CostMaster> .CreateInstanceDAL(oleDb).Exists(BudgetaryChargeInfos[chargeCount].ChargeID)) { HIS.Model.MZ_CostMaster chargeBill = new HIS.Model.MZ_CostMaster( ); chargeBill = BindEntity <Model.MZ_CostMaster> .CreateInstanceDAL(oleDb).GetModel(BudgetaryChargeInfos[chargeCount].ChargeID); chargeBill.Self_Fee = BudgetaryChargeInfos[chargeCount].SelfFee; chargeBill.Village_Fee = BudgetaryChargeInfos[chargeCount].VillageFee; chargeBill.Favor_Fee = BudgetaryChargeInfos[chargeCount].FavorFee; chargeBill.Pos_Fee = BudgetaryChargeInfos[chargeCount].PosFee; chargeBill.Money_Fee = BudgetaryChargeInfos[chargeCount].CashFee; chargeBill.Self_Tally = BudgetaryChargeInfos[chargeCount].SelfTally; chargeBill.Ticket_Flag = 0; chargeBill.CostDate = HIS.SYSTEM.PubicBaseClasses.XcDate.ServerDateTime; chargeBill.Record_Flag = 0; string perfCode = ""; chargeBill.TicketNum = InvoiceManager.GetBillNumber(OPDBillKind.门诊收费发票, OperatorId, false, out perfCode); chargeBill.TicketCode = perfCode; //前缀 //BudgetaryChargeInfos[chargeCount].InvoiceSerialNO = Convert.ToInt32( chargeBill.TicketNum ); //BudgetaryChargeInfos[chargeCount].PerfChar = perfCode; //BudgetaryChargeInfos[chargeCount].ChargeDate = chargeBill.CostDate; BudgetaryChargeInfos[chargeCount].InvoiceSerialNO = Convert.ToInt32(chargeBill.TicketNum); BudgetaryChargeInfos[chargeCount].InvoiceNO = chargeBill.TicketNum; BudgetaryChargeInfos[chargeCount].PerfChar = perfCode; BudgetaryChargeInfos[chargeCount].ChargeDate = chargeBill.CostDate; BindEntity <Model.MZ_CostMaster> .CreateInstanceDAL(oleDb).Update(chargeBill); //更新结算表 //更新处方表收费标识 HIS.Model.MZ_PresMaster presMaster = new HIS.Model.MZ_PresMaster( ); presMaster = BindEntity <Model.MZ_PresMaster> .CreateInstanceDAL(oleDb).GetModel(BudgetaryChargeInfos[chargeCount].PrescriptionID); if (presMaster.Charge_Flag == 0) { presMaster.Charge_Flag = 1; presMaster.RoungingMoney = presMaster.Total_Fee - BudgetaryChargeInfos[chargeCount].TotalFee; presMaster.Total_Fee = BudgetaryChargeInfos[chargeCount].TotalFee; presMaster.TicketCode = perfCode;//前缀//BudgetaryChargeInfos[chargeCount].InvoiceNO; presMaster.TicketNum = chargeBill.TicketNum; presMaster.CostMasterID = BudgetaryChargeInfos[chargeCount].ChargeID; presMaster.ChargeCode = OperatorId.ToString( ); BindEntity <Model.MZ_PresMaster> .CreateInstanceDAL(oleDb).Update(presMaster); } else { throw new OperatorException("该处方已被其他收费员收费!"); } } else { throw new OperatorException("没有找到结算号的记录!"); } } for (int i = 0; i < prescriptions.Length; i++) { clinicInterface.ChangePresStatus(prescriptions[i].DocPresId, 1); } //生成发票 ChargeInvoicies = new BaseInvoice[BudgetaryChargeInfos.Length]; for (int i = 0; i < BudgetaryChargeInfos.Length; i++) { ChargeInvoicies[i] = new Invoice(BudgetaryChargeInfos[i].PerfChar, BudgetaryChargeInfos[i].InvoiceNO, OPDBillKind.门诊收费发票); } return(true); } catch (OperatorException operr) { throw operr; } catch (Exception err) { throw err; } }