Ejemplo n.º 1
0
        public void TestSubmission()
        {
            var obRequest = new ObligationsRequest()
            {
                Vrn = Users.Organisation.User.Vrn,
            };

            PopulateDateRange(obRequest);

            var client = GetClient();

            client.AccessToken = Users.Organisation.Tokens.AccessToken;

            var obligations = client.Vat.GetObligations(obRequest);
            var periodKey   = obligations.Value.Where(o => o.Status == ObligationStatus.Open).LastOrDefault().PeriodKey;

            var request = new SubmitRequest()
            {
                Return = CreateVatReturn(periodKey),
                Vrn    = Users.Organisation.User.Vrn
            };

            var resp = client.Vat.SubmitReturn(request);

            Output.WriteLine("VAT Submission:");
            Output.WriteLine(JsonConvert.SerializeObject(resp, Formatting.Indented));
        }
Ejemplo n.º 2
0
        public void TestObligations()
        {
            var obligations = new ObligationsRequest()
            {
                GovTestScenario = ObligationsRequest.ScenarioMonthlylyMet2,
                Vrn             = Users.Organisation.User.Vrn,
            };

            PopulateDateRange(obligations);

            var client = GetClient();

            client.AccessToken = Users.Organisation.Tokens.AccessToken;

            ObligationResponse resp;

            // All, expect only two to be fulfilled
            resp = client.Vat.GetObligations(obligations);
            Assert.NotNull(resp);
            Assert.NotEmpty(resp.Value);
            Assert.Equal(2, resp.Value.Where(x => x.Status == ObligationStatus.Fulfilled).Count());
            foreach (var item in resp.Value)
            {
                Assert.NotDefault(item.Start);
                Assert.NotDefault(item.End);
                Assert.NotDefault(item.Due);
                Assert.NotNull(item.PeriodKey);
            }

            Output.WriteLine("VAT Obligations");
            Output.WriteLine(JsonConvert.SerializeObject(resp, Formatting.Indented));

            // Fulfulled
            obligations.Status          = ObligationStatus.Fulfilled;
            obligations.GovTestScenario = null;
            resp = client.Vat.GetObligations(obligations);
            Assert.NotNull(resp);
            Assert.NotEmpty(resp.Value);
            foreach (var item in resp.Value)
            {
                Assert.Equal(ObligationStatus.Fulfilled, item.Status);
                Assert.NotNull(item.Received);
            }

            // Open
            obligations.Status          = ObligationStatus.Open;
            obligations.GovTestScenario = null;
            resp = client.Vat.GetObligations(obligations);
            Assert.NotNull(resp);
            Assert.NotEmpty(resp.Value);
            foreach (var item in resp.Value)
            {
                Assert.Equal(ObligationStatus.Open, item.Status);
                Assert.Null(item.Received);
            }
        }
Ejemplo n.º 3
0
        /// <summary>Retrieve VAT obligations.</summary>
        /// <param name="request">The obligations request.</param>
        public ObligationResponse GetObligations(ObligationsRequest request)
        {
            var restRequest = this.CreateRequest(request);

            var resp = this.ExecuteRequest <ObligationResponse>(restRequest);

            // HACK: The Api appears to return all obligations, regardless of status, filter them here
            if (request.Status != null)
            {
                resp.Value = resp.Value.Except(resp.Value.Where(x => x.Status != request.Status));
            }

            return(resp);
        }
Ejemplo n.º 4
0
        public void TestGetReturn()
        {
            var obRequest = new ObligationsRequest()
            {
                Vrn = Users.Organisation.User.Vrn,
            };

            PopulateDateRange(obRequest);

            var client = GetClient();

            client.AccessToken = Users.Organisation.Tokens.AccessToken;

            var obligations = client.Vat.GetObligations(obRequest);
            var periodKey   = obligations.Value.Where(o => o.Status == ObligationStatus.Open).LastOrDefault().PeriodKey;

            var returnRequest = new ReturnRequest()
            {
                Vrn       = Users.Organisation.User.Vrn,
                PeriodKey = periodKey
            };

            var resp = client.Vat.GetReturn(returnRequest);

            Assert.NotNull(resp);

            // Compare to the expected return
            var expected = CreateVatReturn(periodKey);

            foreach (var prop in expected.GetType().GetProperties())
            {
                object expectedValue = prop.GetValue(expected);

                var    returnedProp  = typeof(ReturnResponse).GetProperty(prop.Name);
                object returnedValue = returnedProp.GetValue(resp);

                if (prop.Name == nameof(VatReturn.Finalised))
                {
                    Assert.Null(returnedValue); // Finalised isn't returned by GetReturn
                }
                else
                {
                    Assert.Equal(expectedValue, returnedValue);
                }
            }

            Output.WriteLine("VAT Retrieved return:");
            Output.WriteLine(JsonConvert.SerializeObject(resp, Formatting.Indented));
        }
Ejemplo n.º 5
0
        public void TestSubmission()
        {
            var obRequest = new ObligationsRequest()
            {
                Vrn = Users.Organisation.User.Vrn,
            };

            PopulateDateRange(obRequest);

            var client = GetClient();

            client.AccessToken = Users.Organisation.Tokens.AccessToken;

            var obligations = client.Vat.GetObligations(obRequest);
            var periodKey   = obligations.Value.Where(o => o.Status == ObligationStatus.Open).LastOrDefault().PeriodKey;

            var request = new SubmitRequest()
            {
                Return          = CreateVatReturn(periodKey),
                Vrn             = Users.Organisation.User.Vrn,
                GovTestScenario = SubmitRequest.ScenarioDuplicateSubmission
            };

            var ex = Assert.Throws <Api.ApiException>(() => client.Vat.SubmitReturn(request));

            Assert.Equal("Business validation error", ex.Message);
            Assert.Equal("BUSINESS_ERROR", ex.ApiError.Code);
            Assert.Equal("Business validation error", ex.ApiError.Message);
            Assert.Single(ex.ApiError.Errors);
            Assert.Equal("DUPLICATE_SUBMISSION", ex.ApiError.Errors.First().Code);
            Assert.Equal("The VAT return was already submitted for the given period.", ex.ApiError.Errors.First().Message);

            request.GovTestScenario = null;

            var resp = client.Vat.SubmitReturn(request);

            Output.WriteLine("VAT Submission:");
            Output.WriteLine(JsonConvert.SerializeObject(resp, Formatting.Indented));
        }