public async Task <IActionResult> MarkInvoiceStatus(string storeId, string invoiceId,
                                                            MarkInvoiceStatusRequest request)
        {
            var store = HttpContext.GetStoreData();

            if (store == null)
            {
                return(InvoiceNotFound());
            }

            var invoice = await _invoiceRepository.GetInvoice(invoiceId, true);

            if (invoice.StoreId != store.Id)
            {
                return(InvoiceNotFound());
            }

            if (!await _invoiceRepository.MarkInvoiceStatus(invoice.Id, request.Status))
            {
                ModelState.AddModelError(nameof(request.Status),
                                         "Status can only be marked to invalid or settled within certain conditions.");
            }

            if (!ModelState.IsValid)
            {
                return(this.CreateValidationError(ModelState));
            }

            return(await GetInvoice(storeId, invoiceId));
        }
Example #2
0
        public virtual async Task <InvoiceData> MarkInvoiceStatus(string storeId, string invoiceId,
                                                                  MarkInvoiceStatusRequest request, CancellationToken token = default)
        {
            if (request == null)
            {
                throw new ArgumentNullException(nameof(request));
            }
            if (request.Status != InvoiceStatus.Settled && request.Status != InvoiceStatus.Invalid)
            {
                throw new ArgumentOutOfRangeException(nameof(request.Status), "Status can only be Invalid or Complete");
            }
            var response = await _httpClient.SendAsync(
                CreateHttpRequest($"api/v1/stores/{storeId}/invoices/{invoiceId}/status", bodyPayload : request,
                                  method : HttpMethod.Post), token);

            return(await HandleResponse <InvoiceData>(response));
        }