示例#1
0
        private Invoice UpdateInvoiceStatusInDb(int invoiceid, InvoiceStatus status)
        {
            var invoice = GetByIDFromDb(invoiceid);

            if (invoice == null)
            {
                _logger.Error("Invoice not found");

                return(null);
            }
            _crmSecurity.DemandAccessTo(invoice);

            if (!invoiceStatusMap.Contains(new KeyValuePair <InvoiceStatus, InvoiceStatus>(invoice.Status, status)))
            {
                _logger.ErrorFormat("Status for invoice with ID={0} can't be changed. Return without changes", invoiceid);

                return(invoice);
            }

            var itemToUpdate = Query(CrmDbContext.Invoices).FirstOrDefault(x => x.Id == invoiceid);

            itemToUpdate.Status        = status;
            itemToUpdate.LastModifedOn = DateTime.UtcNow;
            itemToUpdate.LastModifedBy = _securityContext.CurrentAccount.ID;

            CrmDbContext.Update(itemToUpdate);

            CrmDbContext.SaveChanges();

            invoice.Status = status;

            return(invoice);
        }
示例#2
0
        public JsonResult ChangeAddress(InvoiceChangeAddressViewModel model)
        {
            try
            {
                var currentUser = GetAuthenticatedUser();

                var invoice = _context.Invoice.Single(x => x.InvoiceStatusId != InvoiceStatus.Deleted.Id && x.Id == model.invoiceId);
                var address = _context.UserAddress.Single(x => x.StatusId != UserAddressStatus.Deleted.Id && x.Id == model.addressId);

                if (address.UserId != invoice.UserId)
                {
                    return(Error("آدرس انتخاب شده متعلق به کاربر ثبت کننده سفارش نیست."));
                }

                var availableInvoiceStatusList = new InvoiceStatus[] { InvoiceStatus.Registered, InvoiceStatus.InProgress, InvoiceStatus.Factored, InvoiceStatus.Preparing };
                if (!availableInvoiceStatusList.Any(x => x.Id == invoice.InvoiceStatusId))
                {
                    return(Error("فاکتور در وضعیتی نیست که بتوان آدرس آن را تغییر داد.."));
                }

                invoice.AddressId    = model.addressId;
                invoice.ModifyUserId = currentUser.id;
                invoice.ModifyDate   = GetDatetime();
                invoice.ModifyIp     = GetCurrentIp();

                _context.SaveChanges();
                return(Success("آدرس با موفقیت تغییر کرد."));
            }
            catch (Exception ex)
            {
                return(ServerError(ex));
            }
        }
        public void ComplexConditionInTheEnd()
        {
            using (var session = Domain.OpenSession())
                using (var transaction = session.OpenTransaction()) {
                    var customers = new int[customerIds.Length];
                    customerIds.CopyTo(customers, 0);

                    var invoiceStatuses = new InvoiceStatus[queryableInvoiceStatuses.Length];
                    queryableInvoiceStatuses.CopyTo(invoiceStatuses, 0);

                    var paymentStatuses = new PaymentStatus[queryablePaymentStatuses.Length];
                    queryablePaymentStatuses.CopyTo(paymentStatuses, 0);

                    var paymentsQuery =
                        from payment in session.Query.All <Payment>()
                        join invoice in session.Query.All <Invoice>() on payment.Invoice equals invoice
                        join customer in session.Query.All <Customer>() on invoice.Customer equals customer
                        where invoice.Active &&
                        invoice.Status.In(IncludeAlgorithm.TemporaryTable, invoiceStatuses) &&
                        invoice.InvoicedOn.HasValue &&
                        customer.Id.In(IncludeAlgorithm.TemporaryTable, customers) &&
                        payment.Active &&
                        payment.Status.In(IncludeAlgorithm.ComplexCondition, paymentStatuses)
                        group payment.Amount by invoice.Id
                        into amounts
                        select new { Id = amounts.Key, Amount = amounts.Sum(e => e) };
                    Assert.DoesNotThrow(() => paymentsQuery.Run());
                }
        }
        public void DelayedQueryExecutionTest()
        {
            Require.ProviderIs(StorageProvider.SqlServer);
            var parametersCountLimit = 2100;

            using (var session = Domain.OpenSession())
                using (var transaction = session.OpenTransaction()) {
                    var customers = new int[customerIds.Length];
                    customerIds.CopyTo(customers, 0);

                    var invoiceStatuses = new InvoiceStatus[queryableInvoiceStatuses.Length];
                    queryableInvoiceStatuses.CopyTo(invoiceStatuses, 0);

                    var paymentStatuses = new PaymentStatus[queryablePaymentStatuses.Length];
                    queryablePaymentStatuses.CopyTo(paymentStatuses, 0);

                    var currentParametersCount = 0;
                    var delayedQueries         = new List <IEnumerable <Customer> >();

                    while (currentParametersCount < parametersCountLimit)
                    {
                        var customersDelayed = session.Query.CreateDelayedQuery(q => q.All <Customer>().Where(c => c.Id.In(customers)));
                        delayedQueries.Add(customersDelayed);
                        currentParametersCount += customers.Length;
                    }

                    delayedQueries.First().Run();
                    transaction.Complete();
                }
        }
示例#5
0
        public IActionResult Index(long invoiceId)
        {
            ViewBag.Name = User.FindFirst(ClaimTypes.NameIdentifier).Value;
            IDBService       dbService    = new DBservice(_helper);
            var              invoices     = dbService.GetInvoice(invoiceId);
            var              numberOfDocs = dbService.FetchDocumentsForInvoice(invoiceId);
            InvoiceViewModel model        = new InvoiceViewModel();

            model.InvoiceId        = invoiceId;
            model.AccountDate      = invoices.AccountDate.ToString("dd / M / yyyy", CultureInfo.InvariantCulture);
            model.InvoiceNumber    = invoices.InvoiceNo;
            model.TotalLocalAmount = invoices.TotalLocalAmt.ToString("N",
                                                                     CultureInfo.CreateSpecificCulture("en-IN"));
            model.ExchangeRate = invoices.ExRate;
            model.CustomerName = invoices.CustomerName;
            model.DelivaryDate = invoices.DeliveryDate.ToString("dd / M / yyyy", CultureInfo.InvariantCulture);
            model.CurrencyCode = invoices.CurrencyCode;
            model.VesselName   = invoices.VesselName;
            model.Remarks      = invoices.Remarks;
            model.Amount       = invoices.TotalAmt.ToString("N",
                                                            CultureInfo.CreateSpecificCulture("en-IN"));
            InvoiceStatus invStatus = (InvoiceStatus)invoices.InvoiceStatus;

            model.InvoiceStatus = invStatus.ToString();

            model.NoOfDocuments = numberOfDocs != null ? numberOfDocs.Count : 0;
            if (invoices.InvoiceStatus > 4 || invoices.InvoiceStatus == 2)
            {
                model.Showbuttons = true;
            }

            return(View(model));
        }
        public async Task <IActionResult> Edit(int id, [Bind("Id,Name")] InvoiceStatus invoiceStatus)
        {
            if (id != invoiceStatus.Id)
            {
                return(NotFound());
            }

            if (ModelState.IsValid)
            {
                try
                {
                    _context.Update(invoiceStatus);
                    await _context.SaveChangesAsync();
                }
                catch (DbUpdateConcurrencyException)
                {
                    if (!InvoiceStatusExists(invoiceStatus.Id))
                    {
                        return(NotFound());
                    }
                    else
                    {
                        throw;
                    }
                }
                return(RedirectToAction(nameof(Index)));
            }
            return(View(invoiceStatus));
        }
示例#7
0
        public int UpdateInvoiceStatus(int invoiceId, InvoiceStatus status)
        {
            context.Context.UpdateInvoiceStatus(invoiceId, (byte)status);
            var invoice = context.Context.Invoice.FirstOrDefault(i => i.InvoiceId == invoiceId);

            return(invoice != null?Convert.ToInt32(invoice.SelfBillingInvoiceStatusId) : 0);
        }
    public static IQueryable <Invoice> Search(this IQueryable <Invoice> src, int merchant,
                                              long buyer, bool send, bool paid, bool firstReminder,
                                              bool secondReminder, bool invoiceClaim)
    {
        var predicate    = PredicateBuilder.False <Invoice>();
        var sendValue    = new InvoiceStatus();
        var paidValue    = new InvoiceStatus();
        var firstRemind  = new DateTime();
        var secondRemind = new DateTime();

        if (buyer <= 0)
        {
            return(null);
        }
        predicate = predicate.Or(i => i.InstallationId == merchant && i.Buyer.Msisdn == buyer);
        if (send)
        {
            predicate = predicate.Or(i => i.Status == InvoiceStatus.Sent);
        }
        if (paid)
        {
            predicate = predicate.Or(i => i.Status == InvoiceStatus.Paid);
        }
        if (firstReminder)
        {
            predicate = predicate.Or(i => i.FirstReminderDate == DateTime.Today);
        }
        if (secondReminder)
        {
            predicate = predicate.Or(i => i.SecondReminderDate == DateTime.Today);
        }
        return(src.Where(predicate));
    }
示例#9
0
        /// <summary>
        /// Initializes a new instance of the <see cref="InvoicePreview" /> class.
        /// </summary>
        /// <param name="collectionMethod">collectionMethod (required).</param>
        /// <param name="currency">currency (required).</param>
        /// <param name="customer">customer (required).</param>
        /// <param name="lines">lines (required).</param>
        /// <param name="periodStart">periodStart (required).</param>
        /// <param name="periodEnd">periodEnd (required).</param>
        /// <param name="status">status (required).</param>
        /// <param name="statusTransitions">statusTransitions (required).</param>
        /// <param name="subtotal">subtotal (required).</param>
        /// <param name="total">total (required).</param>
        /// <param name="autoAdvance">autoAdvance.</param>
        /// <param name="description">description.</param>
        /// <param name="hostedInvoiceUrl">hostedInvoiceUrl.</param>
        /// <param name="subscription">subscription.</param>
        /// <param name="discount">discount.</param>
        /// <param name="totalDiscountAmounts">totalDiscountAmounts.</param>
        /// <param name="paymentMethod">The payment method that will be billed when this invoice is due..</param>
        public InvoicePreview
        (
            string collectionMethod, string currency, string customer, LineItemList lines, DateTime periodStart, DateTime periodEnd, InvoiceStatus status, InvoiceStatusTransitions statusTransitions, int subtotal, int total,                               // Required parameters
            bool autoAdvance = default, string description = default, string hostedInvoiceUrl = default, string subscription = default, Discount discount = default, List <DiscountAmount> totalDiscountAmounts = default, CardPublic paymentMethod = default // Optional parameters
        ) : base()                                                                                                                                                                                                                                            // BaseClass
        {
            // to ensure "collectionMethod" is required (not null)
            this.CollectionMethod = collectionMethod ?? throw new ArgumentNullException("collectionMethod is a required property for InvoicePreview and cannot be null");
            // to ensure "currency" is required (not null)
            this.Currency = currency ?? throw new ArgumentNullException("currency is a required property for InvoicePreview and cannot be null");
            // to ensure "customer" is required (not null)
            this.Customer = customer ?? throw new ArgumentNullException("customer is a required property for InvoicePreview and cannot be null");
            // to ensure "lines" is required (not null)
            this.Lines       = lines ?? throw new ArgumentNullException("lines is a required property for InvoicePreview and cannot be null");
            this.PeriodStart = periodStart;
            this.PeriodEnd   = periodEnd;
            this.Status      = status;
            // to ensure "statusTransitions" is required (not null)
            this.StatusTransitions    = statusTransitions ?? throw new ArgumentNullException("statusTransitions is a required property for InvoicePreview and cannot be null");
            this.Subtotal             = subtotal;
            this.Total                = total;
            this.AutoAdvance          = autoAdvance;
            this.Description          = description;
            this.HostedInvoiceUrl     = hostedInvoiceUrl;
            this.Subscription         = subscription;
            this.Discount             = discount;
            this.TotalDiscountAmounts = totalDiscountAmounts;
            this.PaymentMethod        = paymentMethod;

            // Set non-required readonly properties with defaultValue
            this.Type = "InvoicePreview";
        }
示例#10
0
        private Invoice UpdateInvoiceStatus(int invoiceid, InvoiceStatus status, DbManager db)
        {
            var invoice = GetByID(invoiceid, db);

            if (invoice == null)
            {
                _log.Error("Invoice not found");
                return(null);
            }
            CRMSecurity.DemandAccessTo(invoice);

            if (!invoiceStatusMap.Contains(new KeyValuePair <InvoiceStatus, InvoiceStatus>(invoice.Status, status)))
            {
                _log.ErrorFormat("Status for invoice with ID={0} can't be changed. Return without changes", invoiceid);
                return(invoice);
            }

            db.ExecuteNonQuery(
                Update("crm_invoice")
                .Set("status", (int)status)
                .Set("last_modifed_on", DateTime.UtcNow)
                .Set("last_modifed_by", SecurityContext.CurrentAccount.ID)
                .Where(Exp.Eq("id", invoiceid)));

            invoice.Status = status;
            return(invoice);
        }
示例#11
0
 public Invoice UpdateStatus(InvoiceStatus newStatus)
 {
     ExecuteSql(
         $"UPDATE invoices SET status = '{newStatus.ToString()}', updated_at = CURRENT_TIMESTAMP WHERE id = @id", new { id }
         );
     return(this);
 }
        public async Task <IActionResult> IssueInvoice([FromRoute] string invoiceNumber,
                                                       [FromBody] InvoiceStatusDto status)
        {
            InvoiceStatus newStatus = status.Status;
            var           invoice   = service.GetInvoice(invoiceNumber);

            if (invoice == null)
            {
                return(NotFound());
            }

            if (newStatus != InvoiceStatus.Issued || invoice.Status != InvoiceStatus.Draft)
            {
                return(BadRequest("The only permitted status change is from 'Draft' to 'Issued'"));
            }

            if (invoice.GrandTotal == 0m)
            {
                return(BadRequest("The invoice must have a grand total greater than 0."));
            }

            await service.IssueInvoice(invoiceNumber);

            return(Ok(mapper.Map <InvoiceDto>(service.GetInvoice(invoiceNumber))));
        }
示例#13
0
        private Invoice Given_an_invoice(InvoiceType type = InvoiceType.AccountsPayable, InvoiceStatus status = InvoiceStatus.Authorised, decimal amount = 100m, string accountCode = "100", Contact contact = null)
        {
            if (contact == null)
                contact = new Contact {Name = "ABC Bank"};

            return Api.Create(new Invoice
            {
                Contact = contact,
                Type = type,
                Date = DateTime.UtcNow,
                DueDate = DateTime.UtcNow.AddDays(90),
                LineAmountTypes = LineAmountType.Inclusive,
                Status = status,
                LineItems = new List<LineItem>
                {
                    new LineItem
                    {
                        AccountCode = "200",
                        Description = "Good value item 1",
                        LineAmount = 100m
                    },
                    new LineItem
                    {
                        AccountCode = "200",
                        Description = "Good value item 2",
                        LineAmount = 100m
                    }
                }

            });
        }
示例#14
0
 public InvoicesResponseModel()
 {
     Invoices = new List <InvoiceModel>();
     InvoiceAttributeMetadata     = new List <AttributeMetadataModel>();
     InvoiceItemAttributeMetadata = new List <AttributeMetadataModel>();
     Status = InvoiceStatus.Success;
 }
示例#15
0
 public virtual Invoice UpdateInvoiceStatus(int invoiceid, InvoiceStatus status)
 {
     using (var db = GetDb())
     {
         return(UpdateInvoiceStatus(invoiceid, status, db));
     }
 }
示例#16
0
        public void Update(InvoiceStatus invoiceStatus)
        {
            invoiceStatus = Validate(invoiceStatus);

            _invoiceStatuses.Attach(invoiceStatus);
            _repository.Entry(invoiceStatus).State = EntityState.Modified;
            _repository.SaveChanges();
        }
示例#17
0
        public Task <Invoice> ChangeStatusAsync(long invoiceId, int cardHolderId, InvoiceStatus status)
        {
            var invoice = _db.Invoices.FirstOrDefault(x => x.Id == invoiceId);

            invoice.Status = status;
            // TODO: add permissions check
            return(Task.FromResult(invoice));
        }
示例#18
0
 private Invoice(string invoiceNumber, DateTime invoiceDate, string companyCode, string referenceId, InvoiceStatus currentStatus)
 {
     InvoiceNumber = invoiceNumber;
     Date          = invoiceDate;
     CompanyCode   = companyCode;
     ReferenceId   = referenceId;
     CurrentStatus = currentStatus;
 }
示例#19
0
 public async Task SetStatusAsync(string merchantId, string invoiceId, InvoiceStatus status)
 {
     await _storage.MergeAsync(GetPartitionKey(merchantId), GetRowKey(invoiceId), entity =>
     {
         entity.Status = status.ToString();
         return(entity);
     });
 }
示例#20
0
    public string getInvoiceStatus()
    {
        JavaScriptSerializer j  = new JavaScriptSerializer();
        InvoiceStatus        os = new InvoiceStatus();
        List <InvoiceStatus> invoiceStatusList = os.invoiceStatusList();

        return(j.Serialize(invoiceStatusList));
    }
示例#21
0
        public void UpdateStatus(int sysNo, InvoiceStatus invoiceStatus)
        {
            DataCommand command = DataCommandManager.GetDataCommand("UpdatePOVendorInvoiceStatus");

            command.SetParameterValue("@SysNo", sysNo);
            command.SetParameterValue("@Status", invoiceStatus);
            command.ExecuteNonQuery();
        }
        public ActionResult <IEnumerable <InvoiceDto> > GetInvoicesByStatus(InvoiceStatus status)
        {
            var invoices = service.GetInvoicesByStatus(status);

            var dtoList = mapper.Map <IEnumerable <InvoiceDto> >(invoices);

            return(Ok(dtoList));
        }
示例#23
0
        // TODO: dodaj metodę do anulowania faktury - Cancel()

        public void Cancel()
        {
            if (Status == InvoiceStatus.Created || Status == InvoiceStatus.Posted)
            {
                Status     = InvoiceStatus.Cancelled;
                postedDate = null;
            }
        }
示例#24
0
 // zaksięguj
 public void Post()
 {
     if (Status == InvoiceStatus.Created)
     {
         Status     = InvoiceStatus.Posted;
         postedDate = DateTime.Now;
     }
 }
        public string UpdateStatusForInvoice(long invoiceId, InvoiceStatus status, string remarks)
        {
            string     color   = string.Empty;
            IDBService service = new DBservice(_helper);

            var    username = User.FindFirst(ClaimTypes.NameIdentifier).Value;
            string email    = service.GetEmailForUser(username);

            var invoice          = service.GetInvoice(invoiceId);
            var invoiveViewModel = new InvoiceViewModel
            {
                AccountDate      = invoice.AccountDate.ToString("dd/M/yyyy", CultureInfo.InvariantCulture),
                CustomerName     = invoice.CustomerName,
                DelivaryDate     = invoice.DeliveryDate.ToString("dd/M/yyyy", CultureInfo.InvariantCulture),
                TotalLocalAmount = invoice.TotalLocalAmt.ToString("C",
                                                                  CultureInfo.CreateSpecificCulture("en-IN")),
                DueDate       = invoice.DueDate,
                InvoiceNumber = invoice.InvoiceNo
            };

            if (status == InvoiceStatus.CheckPending)
            {
                service.UpdatePendingStatusForChecker(invoiceId, username, remarks);
                color = service.getColorToUpdate((int)InvoiceStatus.CheckPending);
            }
            else if (status == InvoiceStatus.Checked)
            {
                service.UpdateCheckedStatusForChecker(invoiceId, username, remarks);
                color = service.getColorToUpdate((int)InvoiceStatus.Checked);
                ConstructEmail construct = new ConstructEmail();
                construct.SendEmail(invoiveViewModel, email);
            }
            else if (status == InvoiceStatus.CheckRejected)
            {
                service.UpdateRejectedStatusForChecker(invoiceId, username, remarks);
                color = service.getColorToUpdate((int)InvoiceStatus.CheckRejected);
            }
            else if (status == InvoiceStatus.Approved)
            {
                service.UpdateApprovedStatusForApprover(invoiceId, username, remarks);
                color = service.getColorToUpdate((int)InvoiceStatus.Approved);
            }
            else if (status == InvoiceStatus.ApprovePending)
            {
                service.UpdatePendingStatusForApprover(invoiceId, username, remarks);
                color = service.getColorToUpdate((int)InvoiceStatus.ApprovePending);
            }
            else if (status == InvoiceStatus.ApproveRejected)
            {
                service.UpdateRejectedStatusForApprover(invoiceId, username, remarks);
                color = service.getColorToUpdate((int)InvoiceStatus.ApproveRejected);
            }
            else
            {
                throw new Exception("Invalid Status");
            }
            return(color);
        }
示例#26
0
        public void Delete(InvoiceStatus invoiceStatus)
        {
            if (invoiceStatus.Invoices.Any())
                throw new BusinessLogicException(string.Format("This invoice status cannot be deleted because {0} invoices are using it.", invoiceStatus.Invoices.Count));

            _invoiceStatuses.Attach(invoiceStatus);
            _repository.Entry(invoiceStatus).State = EntityState.Deleted;
            _repository.SaveChanges();
        }
示例#27
0
        private InvoiceStatus Validate(InvoiceStatus invoiceStatus)
        {
            if (!string.IsNullOrWhiteSpace(invoiceStatus.Description))
                invoiceStatus.Description = invoiceStatus.Description.Trim();
            else
                throw new BusinessLogicException("A name or description is required for all invoice statuses.");

            return invoiceStatus;
        }
 public void ShouldFailIfInvoiceIsNotHeld(InvoiceStatus status)
 {
     _payrun.PayrunInvoices.First().InvoiceStatus = status;
     _useCase
     .Invoking(useCase => useCase.ReleaseInvoiceAsync(_payrun.Id, _payrunInvoice.Id))
     .Should().Throw <ApiException>()
     .Where(ex => ex.StatusCode == StatusCodes.Status400BadRequest);
     _dbManager.VerifyNotSaved();
 }
示例#29
0
        public void Audit(int sysNo, InvoiceStatus invoiceStatus)
        {
            DataCommand command = DataCommandManager.GetDataCommand("AuditPOVendorInvoice");

            command.SetParameterValue("@SysNo", sysNo);
            command.SetParameterValue("@Status", invoiceStatus);
            command.SetParameterValueAsCurrentUserSysNo("@AuditUserSysNo");
            command.ExecuteNonQuery();
        }
示例#30
0
 public override int GetHashCode()
 {
     return(InvoiceNumber.GetHashCode()
            ^ InvoiceType.GetHashCode()
            ^ InvoiceStatus.GetHashCode()
            ^ Lines.GetHashCode()
            ^ Total.GetHashCode()
            ^ Carrier.GetHashCode());
 }
示例#31
0
 public static PayrunInvoice CreatePayrunInvoice(Guid?payRunId, Invoice invoice,
                                                 InvoiceStatus invoiceStatus = InvoiceStatus.Accepted)
 {
     return(new Faker <PayrunInvoice>()
            .RuleFor(pInv => pInv.Id, f => f.Random.Uuid())
            .RuleFor(pInv => pInv.PayrunId, f => payRunId ?? f.Random.Uuid())
            .RuleFor(pInv => pInv.InvoiceId, f => invoice.Id)
            .RuleFor(pInv => pInv.InvoiceStatus, f => invoiceStatus));
 }
示例#32
0
        public async void ShouldChangePayRunInvoiceStatus(PayrunStatus payrunStatus, InvoiceStatus oldInvoiceStatus, InvoiceStatus newInvoiceStatus)
        {
            _payrun.Status = payrunStatus;
            _payrunInvoice.InvoiceStatus = oldInvoiceStatus;
            await _useCase.ExecuteAsync(_payrun.Id, _payrunInvoice.Id, newInvoiceStatus);

            _payrunInvoice.InvoiceStatus.Should().Be(newInvoiceStatus);
            _dbManager.VerifySaved();
        }
示例#33
0
        // Konstruktor - metoda uruchamiana automatycznie podczas tworzenia instancji obiektu
        public Invoice(string number, Customer customer)
        {
            createdDate = DateTime.Now;
            dueDate     = createdDate.AddDays(14);
            this.Status = InvoiceStatus.Created;

            this.number   = number;
            this.customer = customer;
        }
示例#34
0
        public void Insert(InvoiceStatus invoiceStatus)
        {
            invoiceStatus = Validate(invoiceStatus);

            if (_invoiceStatuses.Any(i => i.Description.Equals(invoiceStatus.Description, StringComparison.InvariantCultureIgnoreCase)))
                throw new BusinessLogicException("An invoice status with that same description already exists.");

            _invoiceStatuses.Add(invoiceStatus);
            _repository.SaveChanges();
        }
示例#35
0
 private void AddInvoiceStatuses(DataContext context)
 {
     foreach (var item in InvoiceStatusList)
     {
         var invoiceStatus = new InvoiceStatus {
             Name = item
         };
         context.InvoiceStatuses.Add(invoiceStatus);
     }
 }
        public void SendInvoicesToMaventa(IEnumerable<InvoiceViewModel>invoices)
        {
            ApiKeys apiKeys = new ApiKeys();
            apiKeys.user_api_key = "x"; //User API key
            apiKeys.company_uuid = "y"; //UUID of current company

            //Create invoice
            foreach(var invoice in invoices)
            {
                MaventaAPI.InvoiceParamsInC invoiceOut = new MaventaAPI.InvoiceParamsInC();
                //invoiceOut.invoice_nr = "1001";
                //invoiceOut.reference_nr = "10016";
                invoiceOut.date = invoice.InvoiceDate;
                invoiceOut.date_due = invoice.InvoiceDueDate;
                invoiceOut.sum = invoice.InvoiceSum;
                invoiceOut.sum_tax = invoice.InvoiceSum_tax;
                invoiceOut.currency = invoice.ClientCurrency;
                //invoiceOut.lang = "FI";

                //Customer information
                MaventaAPI.CustomerParamsInC customerOut = new CustomerParamsInC();
                customerOut.name = invoice.ClientName;
                //customerOut.bid = "FI1234567";
                //customerOut.ovt = "0037111111";
                //customerOut.email = "*****@*****.**";
                //customerOut.country = "FI";
                customerOut.address1 = invoice.ClientAddress;
                invoiceOut.customer = customerOut;

                //Invoice items

                List<ItemsInC> itemList = new List<ItemsInC>();
                foreach(var item in invoice.Items)
                {
                    ItemsInC itemOut = new ItemsInC();
                    itemOut.item_code = item.Code;
                    itemOut.subject = item.Subject;
                    itemOut.amount = item.Amount;
                    itemOut.price = item.UnitPrice;
                    itemOut.tax = item.Tax;
                    itemOut.sum = item.Sum;
                    itemOut.sum_tax = item.Sum_tax;
                    itemList.Add(itemOut);
                }

                invoiceOut.items = itemList.ToArray();

                //Send invoice
                InvoiceStatus invoiceResponse = new InvoiceStatus();
                MaventaApiPortClient port = new MaventaApiPortClient();
                invoiceResponse = port.invoice_create(apiKeys, invoiceOut);
            }
        }
示例#37
0
 private IEnumerable<Invoice> Given_a_bad_invoice(InvoiceType type = InvoiceType.AccountsPayable, InvoiceStatus status = InvoiceStatus.Draft, bool summariseErrors = true)
 {
     Api.Invoices.SummarizeErrors(summariseErrors);
     return Api.Create(new[]
     {
         new Invoice
         {
             Contact = new Contact {Name = "ABC Bank"},
             Type = type,
             Date = DateTime.UtcNow,
             DueDate = DateTime.UtcNow.AddDays(90),
             LineAmountTypes = LineAmountType.Inclusive,
             Status = status,
             Items = new List<LineItem>
             {
                 new LineItem
                 {
                     AccountCode = "200",
                     Description = "Good value item",
                     LineAmount = 100m
                 }
             }
         },
         new Invoice
         {
             Contact = new Contact
             {
                 Name = "ABC Bank",
                 EmailAddress = "this_is_!_valid"
             },
             Type = type,
             Date = DateTime.UtcNow,
             DueDate = DateTime.UtcNow.AddDays(90),
             LineAmountTypes = LineAmountType.Inclusive,
             Status = status,
             Items = new List<LineItem>
             {
                 new LineItem
                 {
                     AccountCode = "200",
                     Description = "Good value item",
                     LineAmount = 100m
                 }
             }
         }
     });
 }
示例#38
0
 public CreditNote Given_a_creditnote(string contactName = "Apple Computers Ltd", CreditNoteType type = CreditNoteType.AccountsPayable, InvoiceStatus status = InvoiceStatus.Draft)
 {
     return Api.CreditNotes.Create(new CreditNote
     {
         Contact = new Contact { Name = contactName },
         Type = type,
         Date = DateTime.UtcNow,
         LineAmountTypes = LineAmountType.Exclusive,
         Status = status,
         LineItems = new List<LineItem>
         {
             new LineItem
             {
                 AccountCode = "720",
                 Description = "MacBook - White",
                 UnitAmount = 1995.00m
             }
         }
     });
 }
示例#39
0
        public Invoice Given_an_invoice(InvoiceType type = InvoiceType.AccountsPayable, InvoiceStatus status = InvoiceStatus.Draft)
        {
            return Api.Create(new Invoice
            {
                Contact = new Contact { Name = "ABC Bank" },
                Type = type,
                Date = DateTime.UtcNow,
                DueDate = DateTime.UtcNow.AddDays(90),
                LineAmountTypes = LineAmountType.Inclusive,
                Status = status,
                Items = new List<LineItem>
                {
                    new LineItem
                    {
                        AccountCode = "200",
                        Description = "Good value item",
                        LineAmount = 100m
                    }
                }

            });
        }
        public void Given_approved_invoice_with_tracking_option(InvoiceType type = InvoiceType.AccountsPayable, InvoiceStatus status = InvoiceStatus.Draft)
        {
            Guid category = category1_.Id;
            string name = category1_.Name;
            string option = category1_.Options.FirstOrDefault().Name;

            var inv = Api.Create(new Invoice
            {
                Contact = new Contact { Name = "Wayne Enterprises" },
                Type = type,
                Date = DateTime.UtcNow,
                DueDate = DateTime.UtcNow.AddDays(90),
                LineAmountTypes = LineAmountType.Inclusive,
                Status = status,
                Items = new List<LineItem>
                {
                    new LineItem
                    {
                        AccountCode = "200",
                        Description = "Good value item",
                        LineAmount = 100m,
                        Tracking = new ItemTracking
                            {
                                new ItemTrackingCategory
                                {
                                    Id = category,
                                    Name = name,
                                    Option = option
                                }
                            }
                    }
                }

            });

            inv.Status = InvoiceStatus.Authorised;
            invoice_ = Api.Update(inv);
        }
示例#41
0
        private Exp WhereConditional(String tblAlias,
                                ICollection<int> exceptIDs,
                                String searchText,
                                InvoiceStatus? status,
                                DateTime issueDateFrom,
                                DateTime issueDateTo,
                                DateTime dueDateFrom,
                                DateTime dueDateTo,
                                EntityType entityType,
                                int entityID,
                                String currency)
        {
            var tblAliasPrefix = !String.IsNullOrEmpty(tblAlias) ? tblAlias + ".": "";
            var conditions = new List<Exp>();

             if (entityID > 0)
                switch (entityType)
                {
                    case EntityType.Contact:
                    case EntityType.Person:
                    case EntityType.Company:
                        conditions.Add(Exp.Eq(tblAliasPrefix + "contact_id", entityID));
                        break;
                    case EntityType.Case:
                    case EntityType.Opportunity:
                        conditions.Add(Exp.Eq(tblAliasPrefix + "entity_id", entityID) &
                                       Exp.Eq(tblAliasPrefix + "entity_type", (int)entityType));
                        break;
                }

            var ids = new List<int>();

            if (status != null)
            {
                conditions.Add(Exp.Eq(tblAliasPrefix + "status", (int)status.Value));
            }


            if (!String.IsNullOrEmpty(searchText))
            {
                searchText = searchText.Trim();

                var keywords = searchText.Split(new[] { ' ' }, StringSplitOptions.RemoveEmptyEntries)
                   .ToArray();

                if (keywords.Length > 0)
                    //if (FullTextSearch.SupportModule(FullTextSearch.CRMInvoiceModule))
                    //{
                    //    ids = FullTextSearch.Search(searchText, FullTextSearch.CRMInvoiceModule)
                    //        .GetIdentifiers()
                    //        .Select(item => Convert.ToInt32(item.Split('_')[1])).Distinct().ToList();

                    //    if (ids.Count == 0) return null;
                    //}
                    //else
                        conditions.Add(BuildLike(new[] { tblAliasPrefix + "number", tblAliasPrefix + "description" }, keywords));
            }

            if (exceptIDs.Count > 0)
            {
                conditions.Add(!Exp.In(tblAliasPrefix + "id", exceptIDs.ToArray()));
            }

            if (issueDateFrom != DateTime.MinValue && issueDateTo != DateTime.MinValue)
                conditions.Add(Exp.Between(tblAliasPrefix + "issue_date", TenantUtil.DateTimeToUtc(issueDateFrom), TenantUtil.DateTimeToUtc(issueDateTo.AddDays(1).AddMinutes(-1))));
            else if (issueDateFrom != DateTime.MinValue)
                conditions.Add(Exp.Ge(tblAliasPrefix + "issue_date", TenantUtil.DateTimeToUtc(issueDateFrom)));
            else if (issueDateTo != DateTime.MinValue)
                conditions.Add(Exp.Le(tblAliasPrefix + "issue_date", TenantUtil.DateTimeToUtc(issueDateTo.AddDays(1).AddMinutes(-1))));


            if (dueDateFrom != DateTime.MinValue && dueDateTo != DateTime.MinValue)
                conditions.Add(Exp.Between(tblAliasPrefix + "due_date", TenantUtil.DateTimeToUtc(dueDateFrom), TenantUtil.DateTimeToUtc(dueDateTo.AddDays(1).AddMinutes(-1))));
            else if (dueDateFrom != DateTime.MinValue)
                conditions.Add(Exp.Ge(tblAliasPrefix + "due_date", TenantUtil.DateTimeToUtc(dueDateFrom)));
            else if (dueDateTo != DateTime.MinValue)
                conditions.Add(Exp.Le(tblAliasPrefix + "due_date", TenantUtil.DateTimeToUtc(dueDateTo.AddDays(1).AddMinutes(-1))));

            if (!String.IsNullOrEmpty(currency)) {
                conditions.Add(Exp.Eq(tblAliasPrefix + "currency", currency));
            }

            if (conditions.Count == 0) return null;

            return conditions.Count == 1 ? conditions[0] : conditions.Aggregate((i, j) => i & j);
        }
示例#42
0
        public List<Invoice> UpdateInvoiceBatchStatus(int[] invoiceids, InvoiceStatus status)
        {
            if (invoiceids == null || !invoiceids.Any())
                throw new ArgumentException();

            var invoices = new List<Invoice>();

            using (var db = GetDb())
            {
                foreach (var id in invoiceids)
                {
                    var inv = UpdateInvoiceStatus(id, status, db);
                    if (inv != null) {
                        invoices.Add(inv);
                    }
                }
            }
            return invoices;
        }
示例#43
0
        private Invoice UpdateInvoiceStatus(int invoiceid, InvoiceStatus status, DbManager db)
        {
            var invoice = GetByID(invoiceid, db);
            if (invoice == null) {
                _log.Error("Invoice not found");
                return null;
            }
            CRMSecurity.DemandAccessTo(invoice);

            if (!invoiceStatusMap.Contains(new KeyValuePair<InvoiceStatus, InvoiceStatus>(invoice.Status, status))){
                _log.ErrorFormat("Status for invoice with ID={0} can't be changed. Return without changes", invoiceid);
                return invoice;
            }

            db.ExecuteNonQuery(
                Update("crm_invoice")
                    .Set("status", (int)status)
                    .Set("last_modifed_on", DateTime.UtcNow)
                    .Set("last_modifed_by", SecurityContext.CurrentAccount.ID)
                    .Where(Exp.Eq("id", invoiceid)));

            invoice.Status = status;
            return invoice;
        }
示例#44
0
        public int GetInvoicesCount(
                                    String searchText,
                                    InvoiceStatus? status,
                                    DateTime issueDateFrom,
                                    DateTime issueDateTo,
                                    DateTime dueDateFrom,
                                    DateTime dueDateTo,
                                    EntityType entityType,
                                    int entityID,
                                    String currency)
        {
            var cacheKey = TenantID.ToString(CultureInfo.InvariantCulture) +
                           "invoice" +
                           SecurityContext.CurrentAccount.ID.ToString() +
                           searchText;

            var fromCache = _cache.Get(cacheKey);

            if (fromCache != null) return Convert.ToInt32(fromCache);

            var withParams = hasParams(searchText, status, issueDateFrom, issueDateTo, dueDateFrom, dueDateTo, entityType, entityID, currency);

            var exceptIDs = CRMSecurity.GetPrivateItems(typeof(Invoice)).ToList();

            int result;

            using (var db = GetDb())
            {
                if (withParams)
                {
                    var whereConditional = WhereConditional(null, exceptIDs, searchText, status, issueDateFrom, issueDateTo, dueDateFrom, dueDateTo, entityType, entityID, currency);
                    result = whereConditional != null ? db.ExecuteScalar<int>(Query("crm_invoice").Where(whereConditional).SelectCount()) : 0;
                }
                else
                {
                    var countWithoutPrivate = db.ExecuteScalar<int>(Query("crm_invoice").SelectCount());
                    var privateCount = exceptIDs.Count;

                    if (privateCount > countWithoutPrivate)
                    {
                        _log.ErrorFormat(@"Private invoice count more than all cases. Tenant: {0}. CurrentAccount: {1}", 
                                                               TenantID, 
                                                               SecurityContext.CurrentAccount.ID);
                 
                        privateCount = 0;
                    }

                    result = countWithoutPrivate - privateCount;
                }
            }

            if (result > 0)
                _cache.Insert(cacheKey, result, new CacheDependency(null, new[] { _invoiceCacheKey }), Cache.NoAbsoluteExpiration,
                                      TimeSpan.FromSeconds(30));

            return result;
        }
示例#45
0
 public virtual Invoice UpdateInvoiceStatus(int invoiceid, InvoiceStatus status)
 {
     using (var db = GetDb())
     {
         return UpdateInvoiceStatus(invoiceid, status, db);
     }
 }
示例#46
0
文件: Invoice.cs 项目: unicloud/FRP
 /// <summary>
 ///     设置发票状态
 /// </summary>
 /// <param name="status">发票状态</param>
 public void SetInvoiceStatus(InvoiceStatus status)
 {
     switch (status)
     {
         case InvoiceStatus.草稿:
             Status = InvoiceStatus.草稿;
             break;
         case InvoiceStatus.待审核:
             Status = InvoiceStatus.待审核;
             break;
         case InvoiceStatus.已审核:
             Status = InvoiceStatus.已审核;
             IsValid = true;
             break;
         default:
             throw new ArgumentOutOfRangeException("status");
     }
 }
示例#47
0
        public List<Invoice> GetCrudeInvoices(
                                String searchText,
                                InvoiceStatus? status,
                                DateTime issueDateFrom,
                                DateTime issueDateTo,
                                DateTime dueDateFrom,
                                DateTime dueDateTo,
                                EntityType entityType,
                                int entityID,
                                String currency,
                                int from,
                                int count,
                                OrderBy orderBy)
        {
            var invoicesTableAlias = "i_tbl";

            var sqlQuery = GetInvoiceSqlQuery(null, invoicesTableAlias);

            var withParams = hasParams(searchText, status, issueDateFrom, issueDateTo, dueDateFrom, dueDateTo, entityType, entityID, currency);

            var whereConditional = WhereConditional(invoicesTableAlias, new List<int>(), searchText, status, issueDateFrom, issueDateTo, dueDateFrom, dueDateTo, entityType, entityID, currency);
                // WhereConditional(CRMSecurity.GetPrivateItems(typeof(Invoice)).ToList(), searchText);

            if (withParams && whereConditional == null)
                return new List<Invoice>();

            sqlQuery.Where(whereConditional);

            if (0 < from && from < int.MaxValue) sqlQuery.SetFirstResult(from);
            if (0 < count && count < int.MaxValue) sqlQuery.SetMaxResults(count);

            if (orderBy != null && Enum.IsDefined(typeof(InvoiceSortedByType), orderBy.SortedBy))
            {
                switch ((InvoiceSortedByType)orderBy.SortedBy)
                {
                    case InvoiceSortedByType.Number:
                        sqlQuery.OrderBy(invoicesTableAlias + ".number", orderBy.IsAsc);
                        break;
                    case InvoiceSortedByType.Status:
                        sqlQuery.OrderBy(invoicesTableAlias + ".status", orderBy.IsAsc);
                        break;
                    case InvoiceSortedByType.DueDate:
                        sqlQuery.OrderBy(invoicesTableAlias + ".due_date", orderBy.IsAsc);
                        break;
                    case InvoiceSortedByType.IssueDate:
                        sqlQuery.OrderBy(invoicesTableAlias + ".issue_date", orderBy.IsAsc);
                        break;
                    case InvoiceSortedByType.Contact:
                        sqlQuery.LeftOuterJoin("crm_contact c_tbl", Exp.EqColumns(invoicesTableAlias + ".contact_id", "c_tbl.id"))
                                .OrderBy("case when c_tbl.display_name is null then 1 else 0 end, c_tbl.display_name", orderBy.IsAsc)
                                .OrderBy(invoicesTableAlias + ".number", true);
                        break;
                    default:
                        sqlQuery.OrderBy(invoicesTableAlias + ".number", true);
                        break;
                }
            }
            else
            {
                sqlQuery.OrderBy(invoicesTableAlias + ".number", true);
            }

            using (var db = GetDb())
            {
                return db.ExecuteList(sqlQuery).ConvertAll(ToInvoice);
            }
        }
示例#48
0
 /// <summary>
 /// Updates invoice for the transaction.
 /// </summary>
 /// <param name="id">invoice id.</param>
 /// <param name="invoiceStatus">status of payment and invoice.</param>
 /// <returns>Invoice updated successfully or not.</returns>
 private bool UpdateInvoice(long id, InvoiceStatus invoiceStatus)
 {
     InvoiceModel invoiceModel = this.paymentService.GetInvoice(id);
     invoiceModel.EnumStatus = invoiceStatus;
     bool result = this.paymentService.UpdateInvoice(invoiceModel);
     return result;
 }
 public InvoiceFactory SetInvoiceStatus(InvoiceStatus status)
 {
     invoice.InvoiceStatus = status;
     return this;
 }
 public InvoiceStatusWrapper(InvoiceStatus status)
     : base((int)status)
 {
     Title = status.ToLocalizedString();
 }
示例#51
0
        public KeyValuePair<IEnumerable<InvoiceBaseWrapper>,IEnumerable<InvoiceItemWrapper>>  UpdateInvoiceBatchStatus(
            int[] invoiceids,
            InvoiceStatus status
            )
        {
            if (invoiceids == null || !invoiceids.Any()) throw new ArgumentException();

            var oldInvoices = DaoFactory.GetInvoiceDao().GetByID(invoiceids).Where(CRMSecurity.CanAccessTo).ToList();

            var updatedInvoices = DaoFactory.GetInvoiceDao().UpdateInvoiceBatchStatus(oldInvoices.ToList().Select(i => i.ID).ToArray(), status);

            // detect what really changed
            var realUpdatedInvoices = updatedInvoices
                .Select(t => oldInvoices.FirstOrDefault(x => x.ID == t.ID && x.Status != t.Status))
                .Where(inv => inv != null)
                .ToList();

            if (realUpdatedInvoices.Any())
            {
                MessageService.Send(Request, MessageAction.InvoicesUpdatedStatus, realUpdatedInvoices.Select(x => x.Number), status.ToLocalizedString());
            }

            var invoiceItemsUpdated = new List<InvoiceItem>();

            if (status == InvoiceStatus.Sent || status == InvoiceStatus.Rejected)
            {
                var invoiceItemsAll = DaoFactory.GetInvoiceItemDao().GetAll();
                var invoiceItemsWithTrackInventory = invoiceItemsAll.Where(item => item.TrackInventory).ToList();

                if (status == InvoiceStatus.Sent && invoiceItemsWithTrackInventory != null && invoiceItemsWithTrackInventory.Count != 0)
                {
                    foreach (var inv in updatedInvoices)
                    {
                        if (inv.Status == InvoiceStatus.Sent)
                        {
                            //could be changed
                            var oldInv = oldInvoices.FirstOrDefault(i => i.ID == inv.ID);
                            if (oldInv != null && oldInv.Status == InvoiceStatus.Draft)
                            {
                                //was changed to Sent
                                var invoiceLines = DaoFactory.GetInvoiceLineDao().GetInvoiceLines(inv.ID);

                                foreach (var line in invoiceLines)
                                {
                                    var item = invoiceItemsWithTrackInventory.FirstOrDefault(ii => ii.ID == line.InvoiceItemID);
                                    if (item != null)
                                    {
                                        item.StockQuantity -= line.Quantity;
                                        DaoFactory.GetInvoiceItemDao().SaveOrUpdateInvoiceItem(item);
                                        var oldItem = invoiceItemsUpdated.Find(i => i.ID == item.ID);
                                        if (oldItem != null)
                                        {
                                            invoiceItemsUpdated.Remove(oldItem);
                                        }
                                        invoiceItemsUpdated.Add(item);
                                    }
                                }
                            }
                        }
                    }
                }

                if (status == InvoiceStatus.Rejected && invoiceItemsWithTrackInventory != null && invoiceItemsWithTrackInventory.Count != 0)
                {
                    foreach (var inv in updatedInvoices)
                    {
                        if (inv.Status == InvoiceStatus.Rejected)
                        {
                            //could be changed
                            var oldInv = oldInvoices.FirstOrDefault(i => i.ID == inv.ID);
                            if (oldInv != null && oldInv.Status == InvoiceStatus.Sent)
                            {
                                //was changed from Sent to Rejectes
                                var invoiceLines = DaoFactory.GetInvoiceLineDao().GetInvoiceLines(inv.ID);

                                foreach (var line in invoiceLines)
                                {
                                    var item = invoiceItemsWithTrackInventory.FirstOrDefault(ii => ii.ID == line.InvoiceItemID);
                                    if (item != null)
                                    {
                                        item.StockQuantity += line.Quantity;
                                        DaoFactory.GetInvoiceItemDao().SaveOrUpdateInvoiceItem(item);
                                        var oldItem = invoiceItemsUpdated.Find(i => i.ID == item.ID);
                                        if (oldItem != null)
                                        {
                                            invoiceItemsUpdated.Remove(oldItem);
                                        }
                                        invoiceItemsUpdated.Add(item);
                                    }
                                }
                            }
                        }
                    }
                }
            }

            var listInvoiceBaseWrappers = ToListInvoiceBaseWrappers(updatedInvoices);

            return new KeyValuePair<IEnumerable<InvoiceBaseWrapper>,IEnumerable<InvoiceItemWrapper>>(listInvoiceBaseWrappers,invoiceItemsUpdated.ConvertAll(i => ToInvoiceItemWrapper(i)));
        }
 public bool UpdateInvoiceForRefund(Guid invoiceId, InvoiceStatus status, decimal priceForRefund, string notes)
 {
     try
     {
         var dc = new ManagementContext();
         var invoice = dc.Invoices.Where(x => x.InvoiceId == invoiceId).FirstOrDefault();
         if (invoice != null)
         {
             invoice.Merchant = invoice.Merchant;
             invoice.InvoiceStatus = (byte)status;
             invoice.InvoiceStatusUpdated = DateTime.UtcNow;
             invoice.AdminNote = notes;
             RDN.Library.DataModels.PaymentGateway.Invoices.InvoiceRefund refund = new RDN.Library.DataModels.PaymentGateway.Invoices.InvoiceRefund();
             refund.Invoice = invoice;
             refund.PriceRefunded = priceForRefund;
             invoice.Refunds.Add(refund);
             int c = dc.SaveChanges();
             return c > 0;
         }
     }
     catch (Exception exception)
     {
         ErrorDatabaseManager.AddException(exception, exception.GetType());
     }
     return false;
 }
 public bool SetInvoiceStatus(Guid invoiceId, InvoiceStatus status, string customerId = null)
 {
     try
     {
         var dc = new ManagementContext();
         var invoice = dc.Invoices.Where(x => x.InvoiceId == invoiceId).FirstOrDefault();
         if (invoice != null)
         {
             invoice.Merchant = invoice.Merchant;
             invoice.InvoiceStatus = (byte)status;
             invoice.Paywall = invoice.Paywall;
             if (!String.IsNullOrEmpty(customerId))
                 invoice.PaymentProviderCustomerId = customerId;
             invoice.InvoiceStatusUpdated = DateTime.UtcNow;
             int c = dc.SaveChanges();
             return c > 0;
         }
     }
     catch (Exception exception)
     {
         ErrorDatabaseManager.AddException(exception, exception.GetType());
     }
     return false;
 }
 private void SetInvoiceStatus(ref DataModels.PaymentGateway.Invoices.Invoice invoice, InvoiceStatus status)
 {
     invoice.InvoiceStatus = (byte)status;
     invoice.InvoiceStatusUpdated = DateTime.Now;
 }
示例#55
0
 private bool hasParams(
                         String searchText,
                         InvoiceStatus? status,
                         DateTime issueDateFrom,
                         DateTime issueDateTo,
                         DateTime dueDateFrom,
                         DateTime dueDateTo,
                         EntityType entityType,
                         int entityID,
                         String currency)
 {
     return !(String.IsNullOrEmpty(searchText) && !status.HasValue &&
         issueDateFrom == DateTime.MinValue && issueDateTo == DateTime.MinValue &&
         dueDateFrom == DateTime.MinValue && dueDateTo == DateTime.MinValue &&
         entityID == 0 && String.IsNullOrEmpty(currency));
 }
示例#56
0
        public List<Invoice> GetInvoices(
                                    String searchText,
                                    InvoiceStatus? status,
                                    DateTime issueDateFrom,
                                    DateTime issueDateTo,
                                    DateTime dueDateFrom,
                                    DateTime dueDateTo,
                                    EntityType entityType,
                                    int entityID,
                                    String currency,
                                    int from,
                                    int count,
                                    OrderBy orderBy)
        {

            if (CRMSecurity.IsAdmin)
                return GetCrudeInvoices(
                    searchText,
                    status,
                    issueDateFrom,
                    issueDateTo,
                    dueDateFrom,
                    dueDateTo,
                    entityType,
                    entityID,
                    currency,
                    from,
                    count,
                    orderBy);


            var crudeInvoices = GetCrudeInvoices(
                    searchText,
                    status,
                    issueDateFrom,
                    issueDateTo,
                    dueDateFrom,
                    dueDateTo,
                    entityType,
                    entityID,
                    currency,
                    0,
                    from + count,
                    orderBy);

            if (crudeInvoices.Count == 0) return crudeInvoices;

            if (crudeInvoices.Count < from + count) return CRMSecurity.FilterRead(crudeInvoices).Skip(from).ToList();

            var result = CRMSecurity.FilterRead(crudeInvoices).ToList();

            if (result.Count == crudeInvoices.Count) return result.Skip(from).ToList();

            var localCount = count;
            var localFrom = from + count;

            while (true)
            {
                crudeInvoices = GetCrudeInvoices(
                    searchText,
                    status,
                    issueDateFrom,
                    issueDateTo,
                    dueDateFrom,
                    dueDateTo,
                    entityType,
                    entityID,
                    currency,
                    localFrom,
                    localCount,
                    orderBy);

                if (crudeInvoices.Count == 0) break;

                result.AddRange(CRMSecurity.FilterRead(crudeInvoices));

                if ((result.Count >= count + from) || (crudeInvoices.Count < localCount)) break;

                localFrom += localCount;
                localCount = localCount * 2;
            }

            return result.Skip(from).Take(count).ToList();
        }
示例#57
0
        public IEnumerable<InvoiceBaseWrapper> GetInvoices(
            InvoiceStatus? status,
            ApiDateTime issueDateFrom,
            ApiDateTime issueDateTo,
            ApiDateTime dueDateFrom,
            ApiDateTime dueDateTo,
            String entityType,
            int entityid,
            String currency
            )
        {
            if (!String.IsNullOrEmpty(entityType) && !(
                                                          String.Compare(entityType, "contact", true) == 0 ||
                                                          String.Compare(entityType, "opportunity", true) == 0 ||
                                                          String.Compare(entityType, "case", true) == 0))
                throw new ArgumentException();

            IEnumerable<InvoiceBaseWrapper> result;

            InvoiceSortedByType sortBy;

            OrderBy invoiceOrderBy;

            var searchString = _context.FilterValue;

            if (InvoiceSortedByType.TryParse(_context.SortBy, true, out sortBy))
            {
                invoiceOrderBy = new OrderBy(sortBy, !_context.SortDescending);
            }
            else if (String.IsNullOrEmpty(_context.SortBy))
            {
                invoiceOrderBy = new OrderBy(InvoiceSortedByType.Number, true);
            }
            else
            {
                invoiceOrderBy = null;
            }

            var fromIndex = (int)_context.StartIndex;
            var count = (int)_context.Count;

            if (invoiceOrderBy != null)
            {
                result = ToListInvoiceBaseWrappers(
                    DaoFactory.GetInvoiceDao().GetInvoices(
                        searchString,
                        status,
                        issueDateFrom, issueDateTo,
                        dueDateFrom, dueDateTo,
                        ToEntityType(entityType), entityid,
                        currency,
                        fromIndex, count,
                        invoiceOrderBy));

                _context.SetDataPaginated();
                _context.SetDataFiltered();
                _context.SetDataSorted();
            }
            else
            {
                result = ToListInvoiceBaseWrappers(
                    DaoFactory.GetInvoiceDao().GetInvoices(
                        searchString,
                        status,
                        issueDateFrom, issueDateTo,
                        dueDateFrom, dueDateTo,
                        ToEntityType(entityType), entityid,
                        currency,
                        0,
                        0,
                        null));
            }

            int totalCount;

            if (result.Count() < count)
            {
                totalCount = fromIndex + result.Count();
            }
            else
            {
                totalCount = DaoFactory.GetInvoiceDao().GetInvoicesCount(
                    searchString,
                    status,
                    issueDateFrom, issueDateTo,
                    dueDateFrom, dueDateTo,
                    ToEntityType(entityType), entityid,
                    currency);
            }

            _context.SetTotalCount(totalCount);

            return result.ToSmartList();
        }
示例#58
0
 public void SetInvoiceStatus(InvoiceStatus status)
 {
     InvoiceStatus = (byte)status;
 }