public void CalculateModeTest()
        {
            // Arrange
            InvoiceRepository repository = new InvoiceRepository();
            var invoiceList = repository.Retrieve();

            // Act
            var actual = repository.CalculateMode(invoiceList);

            // Assert
            Assert.AreEqual(10M, actual);
        }
        public void CalculateTotalAmountInvoicedTest()
        {
            // Arrange
            InvoiceRepository repository = new InvoiceRepository();
            var invoiceList = repository.Retrieve();

            // Act
            var actual = repository.CalculateTotalAmountInvoiced(invoiceList);

            // Assert
            Assert.AreEqual(1333.14M, actual);
        }
        public void CalculateTotalUnitsSoldTest()
        {
            // Arrange
            InvoiceRepository repository = new InvoiceRepository();
            var invoiceList = repository.Retrieve();

            // Act
            var actual = repository.CalculateTotalUnitsSold(invoiceList);

            // Assert
            Assert.AreEqual(136, actual);
        }
        public void CalculateTotalAmountInvoiced()
        {
            //Begin Arrange
            InvoiceRepository repository = new InvoiceRepository();
            var invoiceList = repository.Retrieve();
            //End Arrange

            //Begin Act
            var actual = repository.CalclateTotalAmontInvoiced(invoiceList);
            //End Act

            //Begin Assert
            Assert.AreEqual(588.64, actual);
            //End Assert
        }
        public void CalculateMedianTest()
        {
            //Begin Arrange
            InvoiceRepository repository = new InvoiceRepository();
            var invoiceList = repository.Retrieve();
            //End Arrange

            //Begin Act
            var actual = repository.CalculateMedian(invoiceList);
            //End Act

            //Begin Assert
            Assert.AreEqual(5M, actual);
            //End Assert
        }
        public void CalculateTotalUnitsSoldTest()
        {
            //Begin Arrange
            InvoiceRepository repository = new InvoiceRepository();
            var invoiceList = repository.Retrieve();
            //End Arrange

            //Begin Act
            var actual = repository.CalculateTotalUnitsSold(invoiceList);
            //End Act

            //Begin Assert
            ////NOT A REAL TEST
            Assert.AreEqual(62, actual);
            //End Assert
        }
 public InvoiceController(InvoiceRepository invoiceRepository)
 {
     _repository = invoiceRepository;
 }
Exemple #8
0
 public InvoiceController(InvoiceRepository repo)
 {
     this.repo = repo;
 }
        public void GetInvoiceTotalByIsPaidAndMOnthTest()
        {
            //Begin Arrange
            InvoiceRepository repository = new InvoiceRepository();
            var invoiceList = repository.Retrieve();
            //End Arrange

            //Begin Act
            var query = repository.getInvoiceTotalByIsPaidAndMonth(invoiceList);
            //End Act

            //Begin Assert
            //End Assert
        }
Exemple #10
0
 public ChangeInvoiceUseCase(InvoiceRepository repository)
 {
     _repository = repository;
 }
Exemple #11
0
        public string Wait(InvoiceWait[] i)
        {
            string messenger = "success";

            //Model 2 個人發票
            if (i[0].Model == 2)
            {
                if (i[0].CarrierType == "1") //紙本
                {
                    if (i[0].Name != null && i[0].City != null && i[0].County != null && i[0].Email != null && i[0].Address != null)
                    {
                        new InvoiceRepository().WaitCreate(i[0]);
                    }
                    else
                    {
                        messenger = "tableerror";
                    }
                }
                else  //手機or自然人

                {
                    if (i[0].CarrierID != null && i[0].Email != null)
                    {
                        string s = new InvoiceRepository().InvoiceIDSend("", "0", "", i[0].CarrierType, i[0].CarrierID);
                        if (s == "success")
                        {
                            new InvoiceRepository().WaitCreate(i[0]);
                        }
                        else
                        {
                            messenger = "codeerror";
                        }
                    }
                    else
                    {
                        messenger = "tableerror";
                    }
                }
            }
            else if (i[0].Model == 3) //3 統編
            {
                if (i[0].Name != null && i[0].City != null && i[0].County != null && i[0].Email != null && i[0].Address != null && i[0].Buyer_id != null)
                {
                    int value;
                    if (i[0].Buyer_id.Length == 8 && int.TryParse(i[0].Buyer_id, out value))
                    {
                        string s = new InvoiceRepository().InvoiceIDSend(i[0].Buyer_id, "0", "", "", "");
                        if (s == "success")
                        {
                            new InvoiceRepository().WaitCreate(i[0]);
                        }
                        else
                        {
                            messenger = "buyererror";
                        }
                    }
                    else
                    {
                        messenger = "buyererror";
                    }
                }
                else
                {
                    messenger = "tableerror";
                }
            }
            else if (i[0].Model == 1) //1 愛心碼
            {
                if (i[0].LoveKey != null)
                {
                    string s = new InvoiceRepository().InvoiceIDSend("", "1", i[0].LoveKey, "", "");
                    if (s == "success")
                    {
                        new InvoiceRepository().WaitCreate(i[0]);
                    }
                    else
                    {
                        messenger = "lovekeyerror";
                    }
                }
                else
                {
                    messenger = "tableerror";
                }
            }

            return(messenger);
        }
Exemple #12
0
 public InvoicePaymentProcessor(InvoiceRepository invoiceRepository)
 {
     _invoiceRepository = invoiceRepository;
 }
 public InvoiceControllerAPI(InvoiceController invoiceController,
                             InvoiceRepository invoiceRepository)
 {
     _InvoiceController = invoiceController;
     _InvoiceRepository = invoiceRepository;
 }
Exemple #14
0
        public InvoiceController()
        {
            Post("/api/v1/invoice/new", _ => {
                var me = DL.Model.User.User.Find(CurrentRequest.UserId);

                var errors = ValidationProcessor.Process(Request, new IValidatorRule[] {
                    new ShouldHaveParameters(new[] { "entity_guid", "entity_type", "amount", "currency_type" }),
                    new ShouldBeCorrectEnumValue("entity_type", typeof(EntityType)),
                    new ShouldBeCorrectEnumValue("currency_type", typeof(CurrencyType)),
                    new EntityShouldExist(),
                    new UserActiveInvoicesLimit(me, InvoiceConfig.UserActiveInvoicesLimit),
                }, true);
                if (errors.Count > 0)
                {
                    return(HttpResponse.Errors(errors));
                }

                var entityType = (EntityType)GetRequestEnum("entity_type", typeof(EntityType));

                var currencyType = (CurrencyType)GetRequestEnum("currency_type", typeof(CurrencyType));

                var wallet = CurrencyWalletRepository.FindRandom(currencyType);

                var invoice = InvoiceRepository.Create(
                    me,
                    EntityUtils.GetEntityId(GetRequestStr("entity_guid"), entityType),
                    entityType,
                    (decimal)Request.Query["amount"],
                    currencyType,
                    InvoiceStatus.Created,
                    wallet
                    );

                return(HttpResponse.Item(
                           "invoice", new InvoiceTransformer().Transform(invoice), HttpStatusCode.Created
                           ));
            });

            Get("/api/v1/me/invoice/get", _ => {
                var me = UserRepository.Find(CurrentRequest.UserId);

                var errors = ValidationProcessor.Process(Request, new IValidatorRule[] {
                    new ShouldHaveParameters(new[] { "invoice_guid" }),
                    new ExistsInTable("invoice_guid", "invoices", "guid"),
                    new StringShouldBeSameInDb(
                        "invoice_guid", "invoices", "guid", "user_id", me.id.ToString()
                        )
                }, true);
                if (errors.Count > 0)
                {
                    return(HttpResponse.Errors(errors));
                }

                return(HttpResponse.Item("invoice", new InvoiceTransformer().Transform(
                                             InvoiceRepository.FindByGuid(GetRequestStr("invoice_guid"))
                                             )));
            });

            Get("/api/v1/me/invoices/finished", _ => {
                var me = UserRepository.Find(CurrentRequest.UserId);

                var invoices = DL.Model.Funding.Invoice.GetForUserByStatuses(me, new [] {
                    InvoiceStatus.Confirmed, InvoiceStatus.Failed, InvoiceStatus.Done
                });

                return(HttpResponse.Item("invoices", new InvoiceTransformer().Many(invoices)));
            });

            Get("/api/v1/me/invoices/active", _ => {
                var me = UserRepository.Find(CurrentRequest.UserId);

                var invoices = DL.Model.Funding.Invoice.GetActiveForUser(me, 25);

                return(HttpResponse.Item("invoices", new InvoiceTransformer().Many(invoices)));
            });

            Patch("/api/v1/me/invoice/status/update", _ => {
                var me = UserRepository.Find(CurrentRequest.UserId);

                var errors = ValidationProcessor.Process(Request, new IValidatorRule[] {
                    new ShouldHaveParameters(new[] { "invoice_guid", "status" }),
                    new ExistsInTable("invoice_guid", "invoices", "guid"),
                    new ShouldBeCorrectEnumValue("status", typeof(InvoiceStatus)),
                    new StringShouldBeSameInDb(
                        "invoice_guid", "invoices", "guid", "user_id", me.id.ToString()
                        )
                }, true);
                if (errors.Count > 0)
                {
                    return(HttpResponse.Errors(errors));
                }

                var newStatus = (InvoiceStatus)GetRequestEnum("status", typeof(InvoiceStatus));

                var invoice = InvoiceRepository.FindByGuid(GetRequestStr("invoice_guid"));

                if (invoice.status != InvoiceStatus.Created)
                {
                    return(HttpResponse.Error(new HttpError(HttpStatusCode.Forbidden, "Cannot update invoice with this status")));
                }

                var availableStatuses = new[] { InvoiceStatus.Failed, InvoiceStatus.RequiresConfirmation };

                if (!availableStatuses.Contains(newStatus))
                {
                    return(HttpResponse.Error(new HttpError(HttpStatusCode.Forbidden, "This status is not allowed")));
                }

                InvoiceRepository.UpdateStatus(invoice, newStatus);

                return(HttpResponse.Item("invoice", new InvoiceTransformer().Transform(invoice.Refresh())));
            });
        }
 public InvoiceService(InvoiceRepository invoiceRepository)
 {
     _invoiceRepository = invoiceRepository;
 }
 public SimbaToursEastAfricaUnitOfWork(
     AbstractRepository <Address> addressRepository,
     AbstractRepository <Destination> destinationRepository,
     AbstractRepository <Driver> driverRepository,
     AbstractRepository <HotelBooking> hotelBookingRepository,
     AbstractRepository <InAndOutBoundAirTravel> inAndOutBoundAirTravelRepository,
     AbstractRepository <InternalVehicleTravel> internalVehicleTravelRepository,
     AbstractRepository <Invoice> invoiceRepository,
     AbstractRepository <Item> itemRepository,
     AbstractRepository <Itinary> itinaryRepository,
     AbstractRepository <Laguage> laguageRepository,
     AbstractRepository <Location> locationRepository,
     AbstractRepository <Meal> mealRepository,
     AbstractRepository <Schedule> scheduleRepository,
     AbstractRepository <TourClient> tourClientRepository,
     AbstractRepository <Vehicle> vehicleRepository,
     AbstractRepository <SchedulesPricing> schedulesPricingRepository,
     AbstractRepository <MealPricing> mealPricingRepository,
     AbstractRepository <DealsPricing> dealsPricingRepository,
     AbstractRepository <LaguagePricing> laguagePricingRepository,
     AbstractRepository <HotelPricing> hotelPricingRepostory,
     AbstractRepository <Hotel> hotelRepostory,
     AbstractRepository <TransportPricing> transportPricingRepository,
     Microsoft.EntityFrameworkCore.DbContext simbaToursEastAfricaDbContext)
 {
     SimbaToursEastAfricaDbContext = simbaToursEastAfricaDbContext as SimbaToursEastAfricaDbContext;
     _addressRepository            = addressRepository as AddressRepository;
     _addressRepository.SimbaToursEastAfricaDbContext = SimbaToursEastAfricaDbContext;
     _destinationRepository = destinationRepository as DestinationRepository;
     _destinationRepository.SimbaToursEastAfricaDbContext = SimbaToursEastAfricaDbContext;
     _driverRepository = driverRepository as DriverRepository;
     _driverRepository.SimbaToursEastAfricaDbContext = SimbaToursEastAfricaDbContext;
     _hotelBookingRepository = hotelBookingRepository as HotelBookingRepository;
     _hotelBookingRepository.SimbaToursEastAfricaDbContext = SimbaToursEastAfricaDbContext;
     _inAndOutBoundAirTravelRepository = inAndOutBoundAirTravelRepository as InAndOutBoundAirTravelRepository;
     _inAndOutBoundAirTravelRepository.SimbaToursEastAfricaDbContext = SimbaToursEastAfricaDbContext;
     _internalVehicleTravelRepository = internalVehicleTravelRepository as InternalVehicleTravelRepository;
     _internalVehicleTravelRepository.SimbaToursEastAfricaDbContext = SimbaToursEastAfricaDbContext;
     _invoiceRepository = invoiceRepository as InvoiceRepository;
     _invoiceRepository.SimbaToursEastAfricaDbContext = SimbaToursEastAfricaDbContext;
     _itemRepository = itemRepository as ItemRepository;
     _itemRepository.SimbaToursEastAfricaDbContext = SimbaToursEastAfricaDbContext;
     _itinaryRepository = itinaryRepository as ItinaryRepository;
     _itinaryRepository.SimbaToursEastAfricaDbContext = SimbaToursEastAfricaDbContext;
     _laguageRepository = laguageRepository as LaguageRepository;
     _laguageRepository.SimbaToursEastAfricaDbContext = SimbaToursEastAfricaDbContext;
     _locationRepository = locationRepository as LocationRepository;
     _locationRepository.SimbaToursEastAfricaDbContext = SimbaToursEastAfricaDbContext;
     _mealRepository = mealRepository as MealRepository;
     _mealRepository.SimbaToursEastAfricaDbContext = SimbaToursEastAfricaDbContext;
     _scheduleRepository = scheduleRepository as ScheduleRepository;
     _scheduleRepository.SimbaToursEastAfricaDbContext = SimbaToursEastAfricaDbContext;
     _tourClientRepository = tourClientRepository as TourClientRepository;
     _tourClientRepository.SimbaToursEastAfricaDbContext = SimbaToursEastAfricaDbContext;
     _vehicleRepository = vehicleRepository as VehicleRepository;
     _vehicleRepository.SimbaToursEastAfricaDbContext = SimbaToursEastAfricaDbContext;
     _mealsPricingRepository = mealPricingRepository as MealsPricingRepository;
     _mealsPricingRepository.SimbaToursEastAfricaDbContext = SimbaToursEastAfricaDbContext;
     _dealsPricingRepository = dealsPricingRepository as DealsPricingRepository;
     _dealsPricingRepository.SimbaToursEastAfricaDbContext = SimbaToursEastAfricaDbContext;
     _laguagePricingRepository = laguagePricingRepository as LaguagePricingRepository;
     _laguagePricingRepository.SimbaToursEastAfricaDbContext = SimbaToursEastAfricaDbContext;
     _schedulesPricingRepository = schedulesPricingRepository as SchedulesPricingRepository;
     _schedulesPricingRepository.SimbaToursEastAfricaDbContext = SimbaToursEastAfricaDbContext;
     _hotelPricingRepository = hotelPricingRepostory as HotelPricingRepository;
     _hotelPricingRepository.SimbaToursEastAfricaDbContext = SimbaToursEastAfricaDbContext;
     _hotelRepository = hotelRepostory as HotelRepository;
     _hotelRepository.SimbaToursEastAfricaDbContext = SimbaToursEastAfricaDbContext;
     _transportPricingRepository = transportPricingRepository as TransportPricingRepository;
     _transportPricingRepository.SimbaToursEastAfricaDbContext = SimbaToursEastAfricaDbContext;
 }
 public GreenFieldInvoiceController(InvoiceController invoiceController, InvoiceRepository invoiceRepository)
 {
     _invoiceController = invoiceController;
     _invoiceRepository = invoiceRepository;
 }
 public InvoiceController()
 {
     _invoiceRepository = new InvoiceRepository();
 }
 public InvoiceBusiness()
 {
     invoiceRepository = new InvoiceRepository();
 }
 public InvoiceEventSaverService(EventAggregator eventAggregator, InvoiceRepository invoiceRepository) : base(
         eventAggregator)
 {
     _invoiceRepository = invoiceRepository;
 }
        public void EmailConfirmationInvoices(uint[] invoices)
        {
            Task.Run(() =>
            {
                try
                {
                    using (var db = DB.GetContext())
                    {
                        SmtpClient smtp  = new SmtpClient(GLOB.Settings.Get <string>(3), GLOB.Settings.Get <int>(4));
                        smtp.EnableSsl   = GLOB.Settings.Get <bool>(5);
                        smtp.Credentials = new NetworkCredential(GLOB.Settings.Get <string>(6), GLOB.Settings.Get <string>(7));

                        float index = 0.0f;
                        foreach (uint invID in invoices)
                        {
                            var invoice = InvoiceRepository.GetInvoice(db, invID);
                            int percent = (int)((index / (float)invoices.Length) * 100.0f);
                            index++;
                            try
                            {
                                var location = LocationRepository.GetLocation(db, invoice.LocationID);
                                if (!location.InvoiceContactID.HasValue)
                                {
                                    continue;
                                }

                                RaiseProgress(percent, new ProgressItem(ProgressStatus.OK,
                                                                        string.Format("Emailing confirmation, Confirmation: {0} Contact: {1} Email: {2}",
                                                                                      invoice.ReceiverCompany,
                                                                                      location.ConfirmationContact.ContactName,
                                                                                      location.ConfirmationContact.ContactEmail)));

                                XtraReport rep      = this.RenderConfirmation(invoice.InvoiceID);
                                MemoryStream stream = new MemoryStream();
                                rep.ExportToPdf(stream);

                                MailMessage msg = new MailMessage(
                                    GLOB.Settings.Get <string>(8),                                                                                                                                                                                   //From
                                    location.ConfirmationContact.ContactEmail,                                                                                                                                                                       //To
                                    GLOB.Company.CompanyName + " - Confirm driver dispatches report (" + DateTime.Now.ToString("MM/dd/yyyy dddd") + ")",                                                                                             //Subject
                                    "These are the hours my drivers turned in last week. Please look them over and get back to me, so that payroll can be submitted and your invoice can be prepared. Thank you in advance, and have a great day."); //Body

                                stream.Position = 0;
                                msg.Attachments.Add(
                                    new Attachment(
                                        stream,
                                        invoice.InvoiceNumber + ".pdf",
                                        "application/pdf"));

                                smtp.Send(msg);
                                stream.Dispose();
                            }
                            catch (Exception ex)
                            {
                                RaiseProgress(percent, new ProgressItem(ProgressStatus.Error, ex.Message));
                            }
                        }
                        RaiseComplete(new ProgressItem(ProgressStatus.OK, "Emailing confirmations complete!"));
                    }
                }
                catch (Exception ex)
                {
                    RaiseComplete(new ProgressItem(ProgressStatus.Error, ex.Message));
                }
            });
        }
 public CreateInvoiceUseCase(InvoiceRepository repository)
 {
     _repository = repository;
 }
 public static Invoice GetInvoice()
 {
     return(InvoiceRepository.GetInvoice());
 }
Exemple #24
0
 public InvoiceService()
 {
     invRepo = new InvoiceRepository();
 }
Exemple #25
0
 public PayjoinReceiverContext(InvoiceRepository invoiceRepository, ExplorerClient explorerClient, PayJoinRepository payJoinRepository)
 {
     _invoiceRepository = invoiceRepository;
     _explorerClient    = explorerClient;
     _payJoinRepository = payJoinRepository;
 }
Exemple #26
0
 public InvoiceService()
 {
     _repository = new InvoiceRepository();
 }
Exemple #27
0
 // constructor
 // instantiale a new repository object
 public CartController()
 {
     repo = new InvoiceRepository <Invoice>();
 }
        public ActionResult bluenewRequest(SpGatewayResponse response)
        {
            //正式
            response.Vi  = "PmNER6HP23jikkcC";
            response.Key = "382go6Z9UrDy3XBuJnCHzNusEYFnBfls";

            //test
            //response.Key = "CON3KthrvPulsAWQQiQ3jsswLIzxxgQK";
            //response.Vi = "ugZbqRhI6x5LGI94";

            //test
            //var success = response.Validate("MS15822085");

            //正式
            var success = response.Validate("MS3276146654");

            if (success)
            {
                var tradInfoModel = response.GetResponseModel <TradeInfoModel>();
                var resuccess     = true;
                //var OrderNoToProuctId = tradInfoModel.Result.MerchantOrderNo.OrderNoToProuctId();
                var wait = new InvoiceRepository().GetWait(tradInfoModel.Result.MerchantOrderNo);
                var inv  = new InvoiceRepository().GetInvoice(wait.id);
                if (inv != null)
                {
                    resuccess = false;
                }

                if (resuccess)
                {
                    User_CashReturn user         = new MallRepository().GetUserPRecord(tradInfoModel.Result.MerchantOrderNo);
                    Product         productModel = new MallRepository().Get((int)user.productId);
                    Order           order        = new Order
                    {
                        UserId            = user.userId,
                        ProductId         = productModel.id,
                        Pay               = tradInfoModel.Result.PaymentType,
                        Order_No          = tradInfoModel.Result.MerchantOrderNo,
                        PayStore          = tradInfoModel.Result.PayStore,
                        Barcode_1         = tradInfoModel.Result.Barcode_1,
                        Barcode_2         = tradInfoModel.Result.Barcode_2,
                        Barcode_3         = tradInfoModel.Result.Barcode_3,
                        PayBankCode       = tradInfoModel.Result.PayBankCode,
                        CodeNo            = tradInfoModel.Result.CodeNo,
                        PayerAccount5Code = tradInfoModel.Result.PayerAccount5Code,
                        inpdate           = tradInfoModel.Result.PayTime
                    };

                    //加入購物記錄
                    var reutrnorder = new MallRepository().OrderCreate(order);



                    ProductRecord assr = new ProductRecord
                    {
                        UserID    = user.userId,
                        unitSn    = 1,
                        assets    = productModel.transform,
                        inpdate   = DateTime.Now,
                        type      = 1,
                        ProductId = productModel.id
                    };
                    new AssetsRepository().AddBearByAssets(assr);

                    var pr = new PreferentialRepository().getPRecordsAll(user.userId).Where(x => x.PreferentialID == 5 && x.productID == productModel.id).FirstOrDefault();
                    //2倍

                    /*
                     * if (pr.Count != 0)
                     * {
                     *  assr = new ProductRecord
                     *  {
                     *      UserID = user.userId,
                     *      unitSn = 1,
                     *      assets = productModel.transform,
                     *      inpdate = DateTime.Now,
                     *      type = 5,
                     *      ProductId = productModel.id
                     *  };
                     *  new AssetsRepository().AddBearByAssets(assr);
                     *  var prds = new PreferentialRecords
                     *  {
                     *      id = pr.id,
                     *      UserId = user.userId,
                     *      Count = 0,
                     *      inpdate = DateTime.Now,
                     *      PreferentialID = pr.PreferentialID,
                     *      productID = pr.productID
                     *  };
                     *  new PreferentialRepository().PRecordsUpdate(prds);
                     * }*/



                    //普通首儲

                    /*if(pr.Count != 0)
                     * {
                     *  assr = new ProductRecord
                     *  {
                     *      UserID = user.userId,
                     *      unitSn = 1,
                     *      assets = new PreferentialRepository().getpreferential(1).assets,
                     *      inpdate = DateTime.Now,
                     *      type = 5,
                     *      ProductId = productModel.id
                     *  };
                     *  new AssetsRepository().AddBearByAssets(assr);
                     *  var prds = new PreferentialRecords {
                     *      id = pr.id,
                     *      UserId = user.userId,
                     *      Count = 0,
                     *      inpdate = DateTime.Now,
                     *      PreferentialID = 1
                     *  };
                     *  new PreferentialRepository().PRecordsUpdate(prds);
                     * }*/
                    //InvoiceModel invoice = new InvoiceModel();
                    //發送發票
                    var smilePayEinvoice = new InvoiceRepository().invoiceSend(tradInfoModel.Result.MerchantOrderNo, productModel);

                    Invoice invoice = new Invoice
                    {
                        invoiceNumber = smilePayEinvoice.InvoiceNumber,
                        RandomNumber  = smilePayEinvoice.RandomNumber,
                        inpdate       = DateTime.Parse(smilePayEinvoice.InvoiceDate + " " + smilePayEinvoice.InvoiceTime),
                        IwaitId       = wait.id,
                        CarrierID     = smilePayEinvoice.CarrierID,
                        orderId       = reutrnorder.id
                    };


                    new InvoiceRepository().InvoiceCreate(invoice);
                }
            }
            return(View());
        }
 public Repository(OrderContext context)
 {
     ProductRepo = new ProductRepository(context);
     OrderRepo   = new OrderRepository(context);
     InvoiceRepo = new InvoiceRepository(context);
 }
        private async Task MigratedInvoiceTextSearchToDb(int startFromPage)
        {
            // deleting legacy DBriize database if present
            var dbpath = Path.Combine(_datadirs.DataDir, "InvoiceDB");

            if (Directory.Exists(dbpath))
            {
                Directory.Delete(dbpath, true);
            }

            // migrate data to new table using invoices from database
            using var ctx = _dbContextFactory.CreateContext();

            var invoiceQuery = new InvoiceQuery {
                IncludeArchived = true
            };
            var totalCount = await _invoiceRepository.GetInvoicesTotal(invoiceQuery);

            const int PAGE_SIZE  = 1000;
            var       totalPages = Math.Ceiling(totalCount * 1.0m / PAGE_SIZE);

            for (int i = startFromPage; i < totalPages && !CancellationToken.IsCancellationRequested; i++)
            {
                invoiceQuery.Skip = i * PAGE_SIZE;
                invoiceQuery.Take = PAGE_SIZE;
                var invoices = await _invoiceRepository.GetInvoices(invoiceQuery);

                foreach (var invoice in invoices)
                {
                    var textSearch = new List <string>();

                    // recreating different textSearch.Adds that were previously in DBriize
                    foreach (var paymentMethod in invoice.GetPaymentMethods())
                    {
                        if (paymentMethod.Network != null)
                        {
                            var paymentDestination = paymentMethod.GetPaymentMethodDetails().GetPaymentDestination();
                            textSearch.Add(paymentDestination);
                            textSearch.Add(paymentMethod.Calculate().TotalDue.ToString());
                        }
                    }
                    //
                    textSearch.Add(invoice.Id);
                    textSearch.Add(invoice.InvoiceTime.ToString(CultureInfo.InvariantCulture));
                    textSearch.Add(invoice.Price.ToString(CultureInfo.InvariantCulture));
                    textSearch.Add(invoice.Metadata.OrderId);
                    textSearch.Add(InvoiceRepository.ToJsonString(invoice.Metadata, null));
                    textSearch.Add(invoice.StoreId);
                    textSearch.Add(invoice.Metadata.BuyerEmail);
                    //
                    textSearch.Add(invoice.RefundMail);
                    // TODO: Are there more things to cache? PaymentData?

                    InvoiceRepository.AddToTextSearch(ctx,
                                                      new InvoiceData {
                        Id = invoice.Id, InvoiceSearchData = new List <InvoiceSearchData>()
                    },
                                                      textSearch.ToArray());
                }

                var settings = await _settingsRepository.GetSettingAsync <MigrationSettings>();

                if (i + 1 < totalPages)
                {
                    settings.MigratedInvoiceTextSearchPages = i;
                }
                else
                {
                    // during final pass we set int.MaxValue so migration doesn't run again
                    settings.MigratedInvoiceTextSearchPages = int.MaxValue;
                }

                // this call triggers update; we're sure that MigrationSettings is already initialized in db
                // because of logic executed in MigrationStartupTask.cs
                _settingsRepository.UpdateSettingInContext(ctx, settings);
                await ctx.SaveChangesAsync();
            }
        }
 public UnitOfWork(DataContext context)
 {
     _context           = context;
     CustomerRepository = new CustomerRepository(_context);
     InvoiceRepository  = new InvoiceRepository(_context);
 }
Exemple #32
0
        public async Task <IActionResult> ShopifyInvoiceEndpoint(
            [FromServices] InvoiceRepository invoiceRepository,
            [FromServices] InvoiceController invoiceController,
            [FromServices] IHttpClientFactory httpClientFactory,
            string storeId, string orderId, decimal amount, bool checkOnly = false)
        {
            var invoiceOrderId          = $"{ShopifyOrderMarkerHostedService.SHOPIFY_ORDER_ID_PREFIX}{orderId}";
            var matchedExistingInvoices = await invoiceRepository.GetInvoices(new InvoiceQuery()
            {
                OrderId = new[] { invoiceOrderId }, StoreId = new[] { storeId }
            });

            matchedExistingInvoices = matchedExistingInvoices.Where(entity =>
                                                                    entity.GetInternalTags(ShopifyOrderMarkerHostedService.SHOPIFY_ORDER_ID_PREFIX)
                                                                    .Any(s => s == orderId))
                                      .ToArray();

            var firstInvoiceStillPending =
                matchedExistingInvoices.FirstOrDefault(entity => entity.GetInvoiceState().Status == InvoiceStatus.New);

            if (firstInvoiceStillPending != null)
            {
                return(Ok(new
                {
                    invoiceId = firstInvoiceStillPending.Id,
                    status = firstInvoiceStillPending.Status.ToString().ToLowerInvariant()
                }));
            }

            var firstInvoiceSettled =
                matchedExistingInvoices.LastOrDefault(entity =>
                                                      new[] { InvoiceStatus.Paid, InvoiceStatus.Complete, InvoiceStatus.Confirmed }.Contains(
                                                          entity.GetInvoiceState().Status));

            var store = await _Repo.FindStore(storeId);

            var shopify             = store?.GetStoreBlob()?.Shopify;
            ShopifyApiClient client = null;
            ShopifyOrder     order  = null;

            if (shopify?.IntegratedAt.HasValue is true)
            {
                client = new ShopifyApiClient(httpClientFactory, shopify.CreateShopifyApiCredentials());
                order  = await client.GetOrder(orderId);

                if (string.IsNullOrEmpty(order?.Id))
                {
                    return(NotFound());
                }
            }

            if (firstInvoiceSettled != null)
            {
                //if BTCPay was shut down before the tx managed to get registered on shopify, this will fix it on the next UI load in shopify
                if (client != null && order?.FinancialStatus == "pending" &&
                    firstInvoiceSettled.Status != InvoiceStatus.Paid)
                {
                    await new OrderTransactionRegisterLogic(client).Process(orderId, firstInvoiceSettled.Id,
                                                                            firstInvoiceSettled.Currency,
                                                                            firstInvoiceSettled.Price.ToString(CultureInfo.InvariantCulture), true);
                    order = await client.GetOrder(orderId);
                }

                if (order?.FinancialStatus != "pending" && order?.FinancialStatus != "partially_paid")
                {
                    return(Ok(new
                    {
                        invoiceId = firstInvoiceSettled.Id,
                        status = firstInvoiceSettled.Status.ToString().ToLowerInvariant()
                    }));
                }
            }

            if (checkOnly)
            {
                return(Ok());
            }

            if (shopify?.IntegratedAt.HasValue is true)
            {
                if (string.IsNullOrEmpty(order?.Id) ||
                    !new[] { "pending", "partially_paid" }.Contains(order.FinancialStatus))
                {
                    return(NotFound());
                }

                //we create the invoice at due amount provided from order page or full amount if due amount is bigger than order amount
                var invoice = await invoiceController.CreateInvoiceCoreRaw(
                    new CreateInvoiceRequest()
                {
                    Amount   = amount < order.TotalPrice ? amount : order.TotalPrice,
                    Currency = order.Currency,
                    Metadata = new JObject {
                        ["orderId"] = invoiceOrderId
                    }
                }, store,
                    Request.GetAbsoluteUri(""), new List <string>() { invoiceOrderId });

                return(Ok(new { invoiceId = invoice.Id, status = invoice.Status.ToString().ToLowerInvariant() }));
            }

            return(NotFound());
        }
        public void GetInvoiceTotalByIsPaidAndMonthTest()
        {
            // Arrange
            InvoiceRepository repository = new InvoiceRepository();
            var invoiceList = repository.Retrieve();

            // Act
            var query = repository.GetInvoiceTotalByIsPaidAndMonth(invoiceList);

            // NOT REALLY A TEST
        }
        public void EmailInvoices(uint[] invoices)
        {
            Task.Run(() =>
            {
                try
                {
                    using (var db = DB.GetContext())
                    {
                        SmtpClient smtp  = new SmtpClient(GLOB.Settings.Get <string>(3), GLOB.Settings.Get <int>(4));
                        smtp.EnableSsl   = GLOB.Settings.Get <bool>(5);
                        smtp.Credentials = new NetworkCredential(GLOB.Settings.Get <string>(9), GLOB.Settings.Get <string>(10));

                        float index = 0.0f;
                        foreach (uint invID in invoices)
                        {
                            var invoice = InvoiceRepository.GetInvoice(db, invID);
                            int percent = (int)((index / (float)invoices.Length) * 100.0f);
                            index++;
                            try
                            {
                                var location = LocationRepository.GetLocation(db, invoice.LocationID);
                                if (!location.InvoiceContactID.HasValue)
                                {
                                    continue;
                                }

                                RaiseProgress(percent, new ProgressItem(ProgressStatus.OK,
                                                                        string.Format("Emailing invoice, Invoice#: {0} Contact: {1} Email: {2}",
                                                                                      invoice.InvoiceNumber,
                                                                                      location.InvoiceContact.ContactName,
                                                                                      location.InvoiceContact.ContactEmail)));

                                XtraReport rep      = this.RenderInvoice(invID);
                                MemoryStream stream = new MemoryStream();
                                rep.ExportToPdf(stream);

                                MailMessage msg = new MailMessage(
                                    GLOB.Settings.Get <string>(11),                                    //From
                                    location.InvoiceContact.ContactEmail,                              //To
                                    GLOB.Company.CompanyName + " - Invoice #" + invoice.InvoiceNumber, //Subject
                                    "Please see the attached invoice.");                               //Body

                                stream.Position = 0;
                                msg.Attachments.Add(
                                    new Attachment(
                                        stream,
                                        invoice.InvoiceNumber + ".pdf",
                                        "application/pdf"));

                                if (location.IncludeConfirmation)
                                {
                                    var confRep             = this.RenderConfirmation(invoice.InvoiceID);
                                    MemoryStream confStream = new MemoryStream();
                                    confRep.ExportToPdf(confStream);
                                    confStream.Position = 0;
                                    msg.Attachments.Add(
                                        new Attachment(
                                            confStream,
                                            invoice.InvoiceNumber + "-Confirmation.pdf",
                                            "application/pdf"));
                                }

                                smtp.Send(msg);
                                stream.Dispose();
                            }
                            catch (Exception ex)
                            {
                                RaiseProgress(percent, new ProgressItem(ProgressStatus.Error, ex.Message));
                            }
                        }
                        RaiseComplete(new ProgressItem(ProgressStatus.OK, "Emailing invoices complete!"));
                    }
                }
                catch (Exception ex)
                {
                    RaiseComplete(new ProgressItem(ProgressStatus.Error, ex.Message));
                }
            });
        }
 public BitpayInvoiceController(UIInvoiceController invoiceController,
                                InvoiceRepository invoiceRepository)
 {
     _InvoiceController = invoiceController;
     _InvoiceRepository = invoiceRepository;
 }
Exemple #36
0
 public static T GetBlob(PayoutProcessorData data)
 {
     return(InvoiceRepository.FromBytes <T>(data.Blob));
 }
Exemple #37
0
 /// <summary>
 /// The GetInvoicesByClientCode.
 /// </summary>
 /// <param name="clientCode">The clientCode<see cref="string"/>.</param>
 /// <returns>The <see cref="List{Invoice}"/> of invoices .</returns>
 public static List <Invoice> GetInvoicesByClientCode(string clientCode) => InvoiceRepository.GetInvoicesByClientCode(clientCode);
 public CancelInvoiceUseCase(InvoiceRepository repository)
 {
     _repository = repository;
 }