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());
            }
        }
Esempio n. 2
0
        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"
            });
        }
Esempio n. 3
0
        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));
        }
Esempio n. 6
0
        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();
            }
        }
Esempio n. 7
0
        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");
        }
Esempio n. 9
0
        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;
            }
        }
Esempio n. 10
0
        /// <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;
            }
        }