public IActionResult GetVatPDF(int id)
        {
            try
            {
                var indexAcceptPdf = Request.Headers["Accept"].ToList().IndexOf("application/pdf");

                GarmentInvoice          model     = facade.ReadById(id);
                GarmentInvoiceViewModel viewModel = mapper.Map <GarmentInvoiceViewModel>(model);
                if (viewModel == null)
                {
                    throw new Exception("Invalid Id");
                }
                if (indexAcceptPdf < 0)
                {
                    return(Ok(new
                    {
                        apiVersion = ApiVersion,
                        statusCode = General.OK_STATUS_CODE,
                        message = General.OK_MESSAGE,
                        data = viewModel,
                    }));
                }
                else
                {
                    int clientTimeZoneOffset = int.Parse(Request.Headers["x-timezone-offset"].First());

                    /* tambahan */
                    /* get gsupplier */
                    string supplierUri = "master/garment-suppliers";
                    var    httpClient  = (IHttpClientService)serviceProvider.GetService(typeof(IHttpClientService));
                    var    response    = httpClient.GetAsync($"{Lib.Helpers.APIEndpoint.Core}{supplierUri}/{model.SupplierId}").Result.Content.ReadAsStringAsync();
                    Dictionary <string, object> result   = JsonConvert.DeserializeObject <Dictionary <string, object> >(response.Result);
                    SupplierViewModel           supplier = JsonConvert.DeserializeObject <SupplierViewModel>(result.GetValueOrDefault("data").ToString());
                    /* tambahan */

                    VatPDFTemplate PdfTemplateLocal = new VatPDFTemplate();
                    MemoryStream   stream           = PdfTemplateLocal.GeneratePdfTemplate(viewModel, supplier, clientTimeZoneOffset, DOfacade);

                    return(new FileStreamResult(stream, "application/pdf")
                    {
                        FileDownloadName = $"{viewModel.npn}.pdf"
                    });
                }
            }
            catch (Exception e)
            {
                Dictionary <string, object> Result =
                    new ResultFormatter(ApiVersion, General.INTERNAL_ERROR_STATUS_CODE, e.Message)
                    .Fail();
                return(StatusCode(General.INTERNAL_ERROR_STATUS_CODE, Result));
            }
        }
        public async Task Should_Success_Get_Data_For_InternNote()
        {
            var            facade = new GarmentInvoiceFacade(_dbContext(GetCurrentMethod()), ServiceProvider);
            GarmentInvoice data   = await dataUtil(facade, GetCurrentMethod()).GetNewDataViewModel(USERNAME);

            var Responses = await facade.Create(data, USERNAME);

            var Response = facade.ReadForInternNote(new List <long> {
                data.Id
            });

            Assert.NotEmpty(Response);
        }
        public async Task Should_Success_Get_Buku_Sub_Beli_Excel_Null_Parameter()
        {
            var            facade = new GarmentInvoiceFacade(_dbContext(GetCurrentMethod()), ServiceProvider);
            GarmentInvoice data   = await dataUtil(facade, GetCurrentMethod()).GetNewDataViewModel(USERNAME);

            GarmentDailyPurchasingReportFacade DataInv = new GarmentDailyPurchasingReportFacade(GetServiceProvider().Object, _dbContext(GetCurrentMethod()));

            DateTime d1 = data.InvoiceDate.DateTime.AddDays(30);
            DateTime d2 = data.InvoiceDate.DateTime.AddDays(30);

            var Response = DataInv.GenerateExcelGDailyPurchasingReport(null, true, null, null, null, null, 7);

            Assert.IsType <System.IO.MemoryStream>(Response);
        }
        public async Task Should_Success_Get_Buku_Sub_Beli_Data()
        {
            var            facade = new GarmentInvoiceFacade(_dbContext(GetCurrentMethod()), ServiceProvider);
            GarmentInvoice data   = await dataUtil(facade, GetCurrentMethod()).GetNewDataViewModel(USERNAME);

            GarmentDailyPurchasingReportFacade DataInv = new GarmentDailyPurchasingReportFacade(GetServiceProvider().Object, _dbContext(GetCurrentMethod()));

            DateTime d1 = data.InvoiceDate.DateTime;
            DateTime d2 = data.InvoiceDate.DateTime;

            var Response = DataInv.GetGDailyPurchasingReport(null, true, null, null, null, null, 7);

            Assert.NotNull(Response.Item1);
        }
        public async void Should_Success_Update_Data()
        {
            var            facade   = new GarmentInvoiceFacade(_dbContext(GetCurrentMethod()), ServiceProvider);
            var            facadeDO = new GarmentDeliveryOrderFacade(ServiceProvider, _dbContext(GetCurrentMethod()));
            GarmentInvoice data     = await dataUtil(facade, GetCurrentMethod()).GetNewDataViewModel(USERNAME);

            var ResponseUpdate = await facade.Update((int)data.Id, data, USERNAME);

            Assert.NotEqual(ResponseUpdate, 0);
            var newItem = new GarmentInvoiceItem
            {
                DeliveryOrderId = It.IsAny <int>(),
                DODate          = DateTimeOffset.Now,
                DeliveryOrderNo = "donos",
                ArrivalDate     = DateTimeOffset.Now,
                TotalAmount     = 2000,
                PaymentType     = "type",
                PaymentMethod   = "method",
                Details         = new List <GarmentInvoiceDetail>
                {
                    new GarmentInvoiceDetail
                    {
                        EPOId            = It.IsAny <int>(),
                        EPONo            = "epono",
                        IPOId            = It.IsAny <int>(),
                        PRItemId         = It.IsAny <int>(),
                        PRNo             = "prno",
                        RONo             = "12343",
                        ProductId        = It.IsAny <int>(),
                        ProductCode      = "code",
                        ProductName      = "name",
                        UomId            = It.IsAny <int>(),
                        UomUnit          = "ROLL",
                        DOQuantity       = 40,
                        PricePerDealUnit = 5000,
                        PaymentDueDays   = 2,
                        POSerialNumber   = "PM132434"
                    }
                }
            };
            List <GarmentInvoiceItem> Newitems = new List <GarmentInvoiceItem>(data.Items);

            Newitems.Add(newItem);
            data.Items = Newitems;

            var ResponseUpdate1 = await facade.Update((int)data.Id, data, USERNAME);

            Assert.NotEqual(ResponseUpdate, 0);
        }
        public async Task <int> Create(GarmentInvoice model, string username, int clientTimeZoneOffset = 7)
        {
            int Created = 0;

            using (var transaction = this.dbContext.Database.BeginTransaction())
            {
                try
                {
                    double _total = 0;
                    EntityExtension.FlagForCreate(model, username, USER_AGENT);
                    if (model.UseIncomeTax)
                    {
                        model.NPH = GenerateNPH();
                    }
                    if (model.UseVat)
                    {
                        model.NPN = GenerateNPN();
                    }
                    foreach (var item in model.Items)
                    {
                        _total += item.TotalAmount;
                        GarmentDeliveryOrder deliveryOrder = dbSetDeliveryOrder.FirstOrDefault(s => s.Id == item.DeliveryOrderId);
                        if (deliveryOrder != null)
                        {
                            deliveryOrder.IsInvoice = true;
                        }
                        EntityExtension.FlagForCreate(item, username, USER_AGENT);

                        foreach (var detail in item.Details)
                        {
                            EntityExtension.FlagForCreate(detail, username, USER_AGENT);
                        }
                    }
                    model.TotalAmount = _total;

                    this.dbSet.Add(model);
                    Created = await dbContext.SaveChangesAsync();

                    transaction.Commit();
                }
                catch (Exception e)
                {
                    transaction.Rollback();
                    throw new Exception(e.Message);
                }
            }

            return(Created);
        }
Esempio n. 7
0
        public int Delete(int id, string username)
        {
            int Deleted = 0;

            using (var transaction = this.dbContext.Database.BeginTransaction())
            {
                try
                {
                    var model = this.dbSet
                                .Include(m => m.Items)
                                .ThenInclude(i => i.Details)
                                .SingleOrDefault(m => m.Id == id && !m.IsDeleted);

                    EntityExtension.FlagForDelete(model, username, USER_AGENT);
                    foreach (var item in model.Items)
                    {
                        GarmentInvoice garmentInvoice = this.dbContext.GarmentInvoices.FirstOrDefault(s => s.Id == item.InvoiceId);

                        if (garmentInvoice != null)
                        {
                            garmentInvoice.HasInternNote = false;
                        }
                        EntityExtension.FlagForDelete(item, username, USER_AGENT);
                        foreach (var detail in item.Details)
                        {
                            GarmentDeliveryOrder garmentDeliveryOrder = this.dbContext.GarmentDeliveryOrders.FirstOrDefault(s => s.Id == detail.DOId);
                            if (garmentDeliveryOrder != null)
                            {
                                garmentDeliveryOrder.InternNo = null;
                            }
                            EntityExtension.FlagForDelete(detail, username, USER_AGENT);

                            var result = _garmentDebtBalanceService.EmptyInternalNote((int)garmentDeliveryOrder.Id).Result;
                        }
                    }

                    Deleted = dbContext.SaveChanges();
                    transaction.Commit();
                }
                catch (Exception e)
                {
                    transaction.Rollback();
                    throw new Exception(e.Message);
                }
            }

            return(Deleted);
        }
        public async Task <int> Create(GarmentInternNote m, bool isImport, string user, int clientTimeZoneOffset = 7)
        {
            int Created = 0;

            using (var transaction = this.dbContext.Database.BeginTransaction())
            {
                try
                {
                    EntityExtension.FlagForCreate(m, user, USER_AGENT);

                    m.INNo = await GenerateNo(m, isImport, clientTimeZoneOffset);

                    m.INDate = DateTimeOffset.Now;

                    foreach (var item in m.Items)
                    {
                        foreach (var detail in item.Details)
                        {
                            GarmentExternalPurchaseOrderItem eksternalPurchaseOrderItem = this.dbContext.GarmentExternalPurchaseOrderItems.FirstOrDefault(s => s.GarmentEPOId == detail.EPOId);
                            GarmentInternalPurchaseOrder     internalPurchaseOrder      = this.dbContext.GarmentInternalPurchaseOrders.FirstOrDefault(s => s.Id == eksternalPurchaseOrderItem.POId);
                            detail.UnitId   = internalPurchaseOrder.UnitId;
                            detail.UnitCode = internalPurchaseOrder.UnitCode;
                            detail.UnitName = internalPurchaseOrder.UnitName;
                            EntityExtension.FlagForCreate(detail, user, USER_AGENT);
                        }
                        GarmentInvoice garmentInvoice = this.dbContext.GarmentInvoices.FirstOrDefault(s => s.Id == item.InvoiceId);
                        garmentInvoice.HasInternNote = true;

                        EntityExtension.FlagForCreate(item, user, USER_AGENT);
                    }

                    this.dbSet.Add(m);

                    Created = await dbContext.SaveChangesAsync();

                    transaction.Commit();
                }
                catch (Exception e)
                {
                    transaction.Rollback();
                    throw new Exception(e.Message);
                }
            }

            return(Created);
        }
        public async Task Should_Success_Create_Data()
        {
            var            facade = new GarmentInvoiceFacade(_dbContext(GetCurrentMethod()), ServiceProvider);
            GarmentInvoice data   = await dataUtil(facade, GetCurrentMethod()).GetNewDataViewModel(USERNAME);

            var Response = await facade.Create(data, USERNAME);

            Assert.NotEqual(Response, 0);
            GarmentInvoice data2 = await dataUtil(facade, GetCurrentMethod()).GetNewDataViewModel(USERNAME);

            DateTime dateWithoutOffset = new DateTime(2010, 8, 16, 13, 32, 00);

            data2.InvoiceDate = dateWithoutOffset;
            var Response1 = await facade.Create(data2, USERNAME);

            Assert.NotEqual(Response1, 0);
        }
        public async Task Should_Success_Update_Data2()
        {
            var            dbContext = _dbContext(GetCurrentMethod());
            var            facade    = new GarmentInvoiceFacade(dbContext, ServiceProvider);
            var            facadeDO  = new GarmentDeliveryOrderFacade(ServiceProvider, dbContext);
            GarmentInvoice data      = await dataUtil(facade, GetCurrentMethod()).GetNewDataViewModel(USERNAME);

            GarmentInvoiceItem item = await dataUtil(facade, GetCurrentMethod()).GetNewDataItem(USERNAME);

            var ResponseUpdate = await facade.Update((int)data.Id, data, USERNAME);

            Assert.NotEqual(ResponseUpdate, 0);

            List <GarmentInvoiceItem> Newitems = new List <GarmentInvoiceItem>(data.Items);

            Newitems.Add(item);
            data.Items = Newitems;

            var ResponseUpdate1 = await facade.Update((int)data.Id, data, USERNAME);

            Assert.NotEqual(ResponseUpdate, 0);

            dbContext.Entry(data).State = EntityState.Detached;
            foreach (var items in data.Items)
            {
                dbContext.Entry(items).State = EntityState.Detached;
                foreach (var detail in items.Details)
                {
                    dbContext.Entry(detail).State = EntityState.Detached;
                }
            }

            var newData = dbContext.GarmentInvoices.AsNoTracking()
                          .Include(m => m.Items)
                          .ThenInclude(i => i.Details)
                          .FirstOrDefault(m => m.Id == data.Id);

            newData.Items = newData.Items.Take(1).ToList();

            var ResponseUpdate2 = await facade.Update((int)newData.Id, newData, USERNAME);

            Assert.NotEqual(ResponseUpdate2, 0);
        }
Esempio n. 11
0
        public IActionResult GetVatPDF(int id)
        {
            try
            {
                var indexAcceptPdf = Request.Headers["Accept"].ToList().IndexOf("application/pdf");

                GarmentInvoice          model     = facade.ReadById(id);
                GarmentInvoiceViewModel viewModel = mapper.Map <GarmentInvoiceViewModel>(model);
                if (viewModel == null)
                {
                    throw new Exception("Invalid Id");
                }
                if (indexAcceptPdf < 0)
                {
                    return(Ok(new
                    {
                        apiVersion = ApiVersion,
                        statusCode = General.OK_STATUS_CODE,
                        message = General.OK_MESSAGE,
                        data = viewModel,
                    }));
                }
                else
                {
                    int clientTimeZoneOffset = int.Parse(Request.Headers["x-timezone-offset"].First());

                    VatPDFTemplate PdfTemplateLocal = new VatPDFTemplate();
                    MemoryStream   stream           = PdfTemplateLocal.GeneratePdfTemplate(viewModel, clientTimeZoneOffset, DOfacade);

                    return(new FileStreamResult(stream, "application/pdf")
                    {
                        FileDownloadName = $"{viewModel.npn}.pdf"
                    });
                }
            }
            catch (Exception e)
            {
                Dictionary <string, object> Result =
                    new ResultFormatter(ApiVersion, General.INTERNAL_ERROR_STATUS_CODE, e.Message)
                    .Fail();
                return(StatusCode(General.INTERNAL_ERROR_STATUS_CODE, Result));
            }
        }
        public int Delete(int id, string username)
        {
            int Deleted = 0;

            using (var transaction = this.dbContext.Database.BeginTransaction())
            {
                try
                {
                    var model = this.dbSet
                                .Include(m => m.Items)
                                .ThenInclude(i => i.Details)
                                .SingleOrDefault(m => m.Id == id && !m.IsDeleted);

                    EntityExtension.FlagForDelete(model, username, USER_AGENT);
                    foreach (var item in model.Items)
                    {
                        foreach (var detail in item.Details)
                        {
                            EntityExtension.FlagForDelete(model, username, USER_AGENT);
                        }
                        GarmentInvoice garmentInvoice = this.dbContext.GarmentInvoices.FirstOrDefault(s => s.Id == item.InvoiceId);
                        garmentInvoice.HasInternNote = false;

                        EntityExtension.FlagForDelete(model, username, USER_AGENT);
                    }

                    Deleted = dbContext.SaveChanges();

                    dbContext.SaveChanges();
                    transaction.Commit();
                }
                catch (Exception e)
                {
                    transaction.Rollback();
                    throw new Exception(e.Message);
                }
            }

            return(Deleted);
        }
        public async Task Should_Error_Update_Data()
        {
            var            facade = new GarmentInvoiceFacade(_dbContext(GetCurrentMethod()), ServiceProvider);
            GarmentInvoice data   = await dataUtil(facade, GetCurrentMethod()).GetNewData(USERNAME);

            List <GarmentInvoiceItem> item = new List <GarmentInvoiceItem>(data.Items);

            data.Items.Add(new GarmentInvoiceItem
            {
                DeliveryOrderId = It.IsAny <int>(),
                DODate          = DateTimeOffset.Now,
                DeliveryOrderNo = "donos",
                ArrivalDate     = DateTimeOffset.Now,
                TotalAmount     = 2000,
                Details         = null
            });

            var ResponseUpdate = await facade.Update((int)data.Id, data, USERNAME);

            Assert.NotEqual(ResponseUpdate, 0);
            var newItem = new GarmentInvoiceItem
            {
                DeliveryOrderId = It.IsAny <int>(),
                DODate          = DateTimeOffset.Now,
                DeliveryOrderNo = "dono",
                ArrivalDate     = DateTimeOffset.Now,
                TotalAmount     = 2000,
                Details         = null
            };
            List <GarmentInvoiceItem> Newitems = new List <GarmentInvoiceItem>(data.Items);

            Newitems.Add(newItem);
            data.Items = Newitems;

            Exception errorNullItems = await Assert.ThrowsAsync <Exception>(async() => await facade.Update((int)data.Id, data, USERNAME));

            Assert.NotNull(errorNullItems.Message);
        }
Esempio n. 14
0
        public async Task <int> Update(int id, GarmentInvoice model, string user, int clientTimeZoneOffset = 7)
        {
            int Updated = 0;

            using (var transaction = this.dbContext.Database.BeginTransaction())
            {
                try
                {
                    if (model.Items != null)
                    {
                        double         total     = 0;
                        HashSet <long> detailIds = GetGarmentInvoiceId(id);
                        foreach (var itemId in detailIds)
                        {
                            GarmentInvoiceItem data = model.Items.FirstOrDefault(prop => prop.Id.Equals(itemId));
                            if (data == null)
                            {
                                GarmentInvoiceItem dataItem = dbContext.GarmentInvoiceItems.FirstOrDefault(prop => prop.Id.Equals(itemId));
                                EntityExtension.FlagForDelete(dataItem, user, USER_AGENT);
                                var Details = dbContext.GarmentInvoiceDetails.Where(prop => prop.InvoiceItemId.Equals(itemId)).ToList();
                                GarmentDeliveryOrder deliveryOrder = dbContext.GarmentDeliveryOrders.FirstOrDefault(s => s.Id.Equals(dataItem.DeliveryOrderId));
                                deliveryOrder.IsInvoice = false;
                                foreach (GarmentInvoiceDetail detail in Details)
                                {
                                    EntityExtension.FlagForDelete(detail, user, USER_AGENT);
                                }

                                await _garmentDebtBalanceService.EmptyInvoice((int)dataItem.DeliveryOrderId);
                            }
                            else
                            {
                                EntityExtension.FlagForUpdate(data, user, USER_AGENT);
                            }

                            foreach (GarmentInvoiceItem item in model.Items)
                            {
                                total += item.TotalAmount;
                                if (item.Id <= 0)
                                {
                                    GarmentDeliveryOrder garmentDeliveryOrder = dbSetDeliveryOrder.FirstOrDefault(s => s.Id == item.DeliveryOrderId);
                                    if (garmentDeliveryOrder != null)
                                    {
                                        garmentDeliveryOrder.IsInvoice = true;
                                    }
                                    EntityExtension.FlagForCreate(item, user, USER_AGENT);

                                    var deliveryOrder = dbSetDeliveryOrder.FirstOrDefault(s => s.Id == item.DeliveryOrderId);
                                    if (deliveryOrder != null)
                                    {
                                        var amount                  = 0.0;
                                        var currencyAmount          = 0.0;
                                        var vatAmount               = 0.0;
                                        var currencyVATAmount       = 0.0;
                                        var incomeTaxAmount         = 0.0;
                                        var currencyIncomeTaxAmount = 0.0;

                                        if (model.CurrencyCode == "IDR")
                                        {
                                            amount = item.TotalAmount;
                                            if (model.IsPayVat)
                                            {
                                                vatAmount = item.TotalAmount * 0.1;
                                            }

                                            if (model.IsPayTax)
                                            {
                                                incomeTaxAmount = item.TotalAmount * model.IncomeTaxRate / 100;
                                            }
                                        }
                                        else
                                        {
                                            amount         = item.TotalAmount * deliveryOrder.DOCurrencyRate.GetValueOrDefault();
                                            currencyAmount = item.TotalAmount;
                                            if (model.IsPayVat)
                                            {
                                                vatAmount         = amount * 0.1;
                                                currencyVATAmount = item.TotalAmount * 0.1;
                                            }

                                            if (model.IsPayTax)
                                            {
                                                incomeTaxAmount         = amount * model.IncomeTaxRate / 100;
                                                currencyIncomeTaxAmount = item.TotalAmount * model.IncomeTaxRate / 100;
                                            }
                                        }

                                        await _garmentDebtBalanceService.UpdateFromInvoice((int)deliveryOrder.Id, new InvoiceFormDto((int)model.Id, model.InvoiceDate, model.InvoiceNo, amount, currencyAmount, vatAmount, incomeTaxAmount, model.IsPayVat, model.IsPayTax, currencyVATAmount, currencyIncomeTaxAmount, model.VatNo));
                                    }
                                }
                                else
                                {
                                    EntityExtension.FlagForUpdate(item, user, USER_AGENT);
                                }

                                foreach (GarmentInvoiceDetail detail in item.Details)
                                {
                                    if (item.Id <= 0)
                                    {
                                        EntityExtension.FlagForCreate(detail, user, USER_AGENT);
                                    }
                                    else
                                    {
                                        EntityExtension.FlagForUpdate(detail, user, USER_AGENT);
                                    }
                                }
                            }
                        }
                    }
                    EntityExtension.FlagForUpdate(model, user, USER_AGENT);
                    this.dbSet.Update(model);

                    Updated = await dbContext.SaveChangesAsync();

                    transaction.Commit();
                }
                catch (Exception e)
                {
                    transaction.Rollback();
                    throw new Exception(e.Message);
                }
            }

            return(Updated);
        }
Esempio n. 15
0
        public async Task <int> Update(int id, GarmentInternNote m, string user, int clientTimeZoneOffset = 7)
        {
            int Updated = 0;

            using (var transaction = dbContext.Database.BeginTransaction())
            {
                try
                {
                    if (m.Items != null)
                    {
                        double         total     = 0;
                        HashSet <long> detailIds = GetGarmentInternNoteId(id);
                        foreach (var itemId in detailIds)
                        {
                            GarmentInternNoteItem data = m.Items.FirstOrDefault(prop => prop.Id.Equals(itemId));
                            if (data == null)
                            {
                                GarmentInternNoteItem dataItem = dbContext.GarmentInternNoteItems.FirstOrDefault(prop => prop.Id.Equals(itemId));
                                EntityExtension.FlagForDelete(dataItem, user, USER_AGENT);
                                var            Details         = dbContext.GarmentInternNoteDetails.Where(prop => prop.GarmentItemINId.Equals(itemId)).ToList();
                                GarmentInvoice garmentInvoices = dbContext.GarmentInvoices.FirstOrDefault(s => s.Id.Equals(dataItem.InvoiceId));
                                if (garmentInvoices != null)
                                {
                                    garmentInvoices.HasInternNote = false;
                                }
                                foreach (GarmentInternNoteDetail detail in Details)
                                {
                                    GarmentDeliveryOrder garmentDeliveryOrder = this.dbContext.GarmentDeliveryOrders.FirstOrDefault(s => s.Id == detail.DOId);
                                    garmentDeliveryOrder.InternNo = null;

                                    EntityExtension.FlagForDelete(detail, user, USER_AGENT);
                                }
                            }
                            else
                            {
                                EntityExtension.FlagForUpdate(data, user, USER_AGENT);
                            }

                            foreach (GarmentInternNoteItem item in m.Items)
                            {
                                total += item.TotalAmount;
                                if (item.Id <= 0)
                                {
                                    GarmentInvoice garmentInvoice = this.dbContext.GarmentInvoices.FirstOrDefault(s => s.Id == item.InvoiceId);
                                    if (garmentInvoice != null)
                                    {
                                        garmentInvoice.HasInternNote = true;
                                    }
                                    EntityExtension.FlagForCreate(item, user, USER_AGENT);
                                }
                                else
                                {
                                    EntityExtension.FlagForUpdate(item, user, USER_AGENT);
                                }

                                foreach (GarmentInternNoteDetail detail in item.Details)
                                {
                                    if (item.Id <= 0)
                                    {
                                        GarmentDeliveryOrder         garmentDeliveryOrder  = this.dbContext.GarmentDeliveryOrders.FirstOrDefault(s => s.Id == detail.DOId);
                                        GarmentInternalPurchaseOrder internalPurchaseOrder = this.dbContext.GarmentInternalPurchaseOrders.FirstOrDefault(s => s.RONo == detail.RONo);
                                        if (internalPurchaseOrder != null)
                                        {
                                            detail.UnitId   = internalPurchaseOrder.UnitId;
                                            detail.UnitCode = internalPurchaseOrder.UnitCode;
                                            detail.UnitName = internalPurchaseOrder.UnitName;
                                        }
                                        if (garmentDeliveryOrder != null)
                                        {
                                            garmentDeliveryOrder.InternNo = m.INNo;
                                        }
                                        EntityExtension.FlagForCreate(detail, user, USER_AGENT);
                                    }
                                    else
                                    {
                                        EntityExtension.FlagForUpdate(detail, user, USER_AGENT);
                                    }
                                }
                            }
                        }
                    }
                    EntityExtension.FlagForUpdate(m, user, USER_AGENT);
                    this.dbSet.Update(m);
                    Updated = await dbContext.SaveChangesAsync();

                    transaction.Commit();
                }
                catch (Exception e)
                {
                    transaction.Rollback();
                    throw new Exception(e.Message);
                }
            }

            return(Updated);
        }
Esempio n. 16
0
        public UnitCostDto(GarmentInternNoteDetail detail, List <GarmentInternNoteItem> internNoteItems, GarmentInternNote element, GarmentInvoice elementInvoice)
        {
            Unit = new UnitDto(detail.UnitId, detail.UnitCode, detail.UnitName, "", "0", "");

            var total = detail.PriceTotal;

            if (elementInvoice != null)
            {
                if (elementInvoice.UseVat)
                {
                    total += detail.PriceTotal * 0.1;
                }

                if (elementInvoice.UseIncomeTax && !elementInvoice.IsPayTax)
                {
                    total -= detail.PriceTotal * (elementInvoice.IncomeTaxRate / 100);
                }
            }

            PriceTotal = detail.PriceTotal;
            Amount     = total;
        }
Esempio n. 17
0
 public InternalNoteInvoiceDto(GarmentInvoice internalNoteInvoice)
 {
     Invoice = new InvoiceDto(internalNoteInvoice);
 }
        public IActionResult Get(int page = 1, int size = 25, string order = "{}", string keyword = null, string filter = "{}")
        {
            try
            {
                identityService.Username = User.Claims.Single(p => p.Type.Equals("username")).Value;

                var Data = facade.Read(page, size, order, keyword, filter);

                var viewModel = mapper.Map <List <GarmentInternNoteViewModel> >(Data.Item1);

                HashSet <long>        garmentInvoiceIds = new HashSet <long>(viewModel.SelectMany(vm => vm.items.Select(i => i.garmentInvoice.Id)));
                List <GarmentInvoice> garmentInvoices   = invoiceFacade.ReadForInternNote(garmentInvoiceIds.ToList());

                HashSet <long> deliveryOrderIds = new HashSet <long>(viewModel.SelectMany(vm => vm.items.SelectMany(i => i.details.Select(d => d.deliveryOrder.Id))));
                List <GarmentDeliveryOrder> garmentDeliveryOrders = deliveryOrderFacade.ReadForInternNote(deliveryOrderIds.ToList());

                foreach (var d in viewModel)
                {
                    foreach (var item in d.items)
                    {
                        GarmentInvoice garmentInvoice = garmentInvoices.SingleOrDefault(gi => gi.Id == item.garmentInvoice.Id);
                        if (garmentInvoice != null)
                        {
                            GarmentInvoiceViewModel invoiceViewModel = mapper.Map <GarmentInvoiceViewModel>(garmentInvoice);

                            item.garmentInvoice.items = invoiceViewModel.items;
                        }
                        foreach (var detail in item.details)
                        {
                            var deliveryOrder = garmentDeliveryOrders.SingleOrDefault(gdo => gdo.Id == detail.deliveryOrder.Id);
                            if (deliveryOrder != null)
                            {
                                var deliveryOrderViewModel = mapper.Map <GarmentDeliveryOrderViewModel>(deliveryOrder);
                                detail.deliveryOrder.items = deliveryOrderViewModel.items;
                            }
                        }
                    }
                }

                List <object> listData = new List <object>();
                listData.AddRange(
                    viewModel.AsQueryable().Select(s => new
                {
                    s.Id,
                    s.inNo,
                    s.inDate,
                    supplier = new { s.supplier.Name },
                    items    = s.items.Select(i => new {
                        //i.garmentInvoice,
                        garmentInvoice = new
                        {
                            i.garmentInvoice.invoiceNo,
                            items = i.garmentInvoice.items == null ? null : i.garmentInvoice.items.Select(gii => new
                            {
                                details = gii.details == null ? null : gii.details.Select(gid => new
                                {
                                    gid.dODetailId
                                })
                            })
                        },
                        details = i.details.Select(d => new
                        {
                            //d.deliveryOrder
                            deliveryOrder = new
                            {
                                items = d.deliveryOrder.items == null ? null : d.deliveryOrder.items.Select(doi => new
                                {
                                    fulfillments = doi.fulfillments == null ? null : doi.fulfillments.Select(dof => new
                                    {
                                        dof.Id,
                                        dof.receiptQuantity
                                    })
                                })
                            }
                        }).ToList(),
                    }).ToList(),
                    s.CreatedBy,
                    s.LastModifiedUtc
                }).ToList()
                    );

                var info = new Dictionary <string, object>
                {
                    { "count", listData.Count },
                    { "total", Data.Item2 },
                    { "order", Data.Item3 },
                    { "page", page },
                    { "size", size }
                };

                Dictionary <string, object> Result =
                    new ResultFormatter(ApiVersion, General.OK_STATUS_CODE, General.OK_MESSAGE)
                    .Ok(listData, info);
                return(Ok(Result));
            }
            catch (Exception e)
            {
                Dictionary <string, object> Result =
                    new ResultFormatter(ApiVersion, General.INTERNAL_ERROR_STATUS_CODE, e.Message)
                    .Fail();
                return(StatusCode(General.INTERNAL_ERROR_STATUS_CODE, Result));
            }
        }
        public async Task <int> Update(int id, GarmentInvoice model, string user, int clientTimeZoneOffset = 7)
        {
            int Updated = 0;

            using (var transaction = this.dbContext.Database.BeginTransaction())
            {
                try
                {
                    if (model.Items != null)
                    {
                        double         total     = 0;
                        HashSet <long> detailIds = GetGarmentInvoiceId(id);
                        foreach (var itemId in detailIds)
                        {
                            GarmentInvoiceItem data = model.Items.FirstOrDefault(prop => prop.Id.Equals(itemId));
                            if (data == null)
                            {
                                GarmentInvoiceItem dataItem = dbContext.GarmentInvoiceItems.FirstOrDefault(prop => prop.Id.Equals(itemId));
                                EntityExtension.FlagForDelete(dataItem, user, USER_AGENT);
                            }
                            else
                            {
                                EntityExtension.FlagForUpdate(data, user, USER_AGENT);
                            }

                            foreach (GarmentInvoiceItem item in model.Items)
                            {
                                total += item.TotalAmount;
                                if (item.Id <= 0)
                                {
                                    GarmentDeliveryOrder garmentDeliveryOrder = dbSetDeliveryOrder.FirstOrDefault(s => s.Id == item.DeliveryOrderId);
                                    if (garmentDeliveryOrder != null)
                                    {
                                        garmentDeliveryOrder.IsInvoice = true;
                                    }
                                    EntityExtension.FlagForCreate(item, user, USER_AGENT);
                                }
                                else
                                {
                                    EntityExtension.FlagForUpdate(item, user, USER_AGENT);
                                }

                                foreach (GarmentInvoiceDetail detail in item.Details)
                                {
                                    if (item.Id <= 0)
                                    {
                                        EntityExtension.FlagForCreate(detail, user, USER_AGENT);
                                    }
                                    else
                                    {
                                        EntityExtension.FlagForUpdate(detail, user, USER_AGENT);
                                    }
                                }
                            }
                        }
                    }
                    EntityExtension.FlagForUpdate(model, user, USER_AGENT);
                    this.dbSet.Update(model);
                    Updated = await dbContext.SaveChangesAsync();

                    transaction.Commit();
                }
                catch (Exception e)
                {
                    transaction.Rollback();
                    throw new Exception(e.Message);
                }
            }

            return(Updated);
        }
        public ReportIndexDto(GarmentDeliveryOrder garmentDeliveryOrders, GarmentBeacukaiItem deliveryOrderCustoms, GarmentDeliveryOrderItem deliveryOrderItems, GarmentInvoiceItem deliveryOrderInvoiceItems, GarmentInvoice deliveryOrderInvoices, GarmentExternalPurchaseOrder deliveryOrderExternalPurchaseOrders, GarmentInternNoteDetail deliveryOrderInternalNoteDetails, GarmentInternNoteItem deliveryOrderInternalNoteItems, GarmentInternNote deliveryOrderInternalNotes)
        {
            if (deliveryOrderCustoms != null)
            {
                CustomsArrivalDate = deliveryOrderCustoms.ArrivalDate;
            }

            if (deliveryOrderExternalPurchaseOrders != null)
            {
                SupplierId             = deliveryOrderExternalPurchaseOrders.SupplierId;
                SupplierName           = deliveryOrderExternalPurchaseOrders.SupplierName;
                IsImportSupplier       = deliveryOrderExternalPurchaseOrders.SupplierImport;
                AccountingCategoryName = deliveryOrderExternalPurchaseOrders.Category;
                PurchasingCategoryName = deliveryOrderExternalPurchaseOrders.Category;
            }

            var dppAmount = 0.0;

            if (deliveryOrderInternalNoteDetails != null)
            {
                ProductName          = deliveryOrderInternalNoteDetails.ProductName;
                InternalNoteQuantity = deliveryOrderInternalNoteDetails.Quantity;
                dppAmount            = deliveryOrderInternalNoteDetails.PriceTotal;
                Total = dppAmount;
            }

            if (garmentDeliveryOrders != null)
            {
                GarmentDeliveryOrderId = (int)garmentDeliveryOrders.Id;
                GarmentDeliveryOrderNo = garmentDeliveryOrders.DONo;
                BillNo      = garmentDeliveryOrders.BillNo;
                PaymentBill = garmentDeliveryOrders.PaymentBill;
            }

            if (deliveryOrderInvoices != null)
            {
                InvoiceId = (int)deliveryOrderInvoices.Id;
                InvoiceNo = deliveryOrderInvoices.InvoiceNo;
                VATNo     = deliveryOrderInvoices.VatNo;

                var vatAmount = 0.0;
                if (deliveryOrderInvoices.UseVat && deliveryOrderInvoices.IsPayVat)
                {
                    vatAmount = dppAmount * 0.1;
                    Total    += vatAmount;
                }

                var incomeTaxAmount = 0.0;
                if (deliveryOrderInvoices.UseIncomeTax && deliveryOrderInvoices.IsPayTax)
                {
                    incomeTaxAmount = dppAmount * deliveryOrderInvoices.IncomeTaxRate / 100;
                    Total          += incomeTaxAmount;
                }

                VATAmount       = vatAmount;
                IncomeTaxAmount = incomeTaxAmount;
            }
        }
        public IActionResult Get(int page = 1, int size = 25, string order = "{}", string keyword = null, string filter = "{}")
        {
            try
            {
                identityService.Username = User.Claims.Single(p => p.Type.Equals("username")).Value;

                var Data = facade.Read(page, size, order, keyword, filter);

                var viewModel = mapper.Map <List <GarmentInternNoteViewModel> >(Data.Item1);

                foreach (var d in viewModel)
                {
                    foreach (var item in d.items)
                    {
                        GarmentInvoice garmentInvoice = invoiceFacade.ReadById((int)item.garmentInvoice.Id);
                        if (garmentInvoice != null)
                        {
                            GarmentInvoiceViewModel invoiceViewModel = mapper.Map <GarmentInvoiceViewModel>(garmentInvoice);

                            item.garmentInvoice.items = invoiceViewModel.items;
                        }
                        foreach (var detail in item.details)
                        {
                            var deliveryOrder = deliveryOrderFacade.ReadById((int)detail.deliveryOrder.Id);
                            if (deliveryOrder != null)
                            {
                                var deliveryOrderViewModel = mapper.Map <GarmentDeliveryOrderViewModel>(deliveryOrder);
                                detail.deliveryOrder.items = deliveryOrderViewModel.items;
                            }
                        }
                    }
                }

                List <object> listData = new List <object>();
                listData.AddRange(
                    viewModel.AsQueryable().Select(s => new
                {
                    s.Id,
                    s.inNo,
                    s.inDate,
                    supplier = new { s.supplier.Name },
                    items    = s.items.Select(i => new {
                        i.garmentInvoice,
                        details = i.details.Select(d => new
                        {
                            d.deliveryOrder
                        }).ToList(),
                    }).ToList(),
                    s.CreatedBy,
                    s.LastModifiedUtc
                }).ToList()
                    );

                var info = new Dictionary <string, object>
                {
                    { "count", listData.Count },
                    { "total", Data.Item2 },
                    { "order", Data.Item3 },
                    { "page", page },
                    { "size", size }
                };

                Dictionary <string, object> Result =
                    new ResultFormatter(ApiVersion, General.OK_STATUS_CODE, General.OK_MESSAGE)
                    .Ok(listData, info);
                return(Ok(Result));
            }
            catch (Exception e)
            {
                Dictionary <string, object> Result =
                    new ResultFormatter(ApiVersion, General.INTERNAL_ERROR_STATUS_CODE, e.Message)
                    .Fail();
                return(StatusCode(General.INTERNAL_ERROR_STATUS_CODE, Result));
            }
        }
        public async Task <GarmentInternNote> GetNewData(GarmentInvoice invo = null)
        {
            var garmentInvoice = invo ?? await Task.Run(() => garmentInvoiceDataUtil.GetTestDataViewModel("User"));

            List <GarmentInternNoteDetail> garmentInternNoteDetails = new List <GarmentInternNoteDetail>();

            foreach (var item in garmentInvoice.Items)
            {
                foreach (var detail in item.Details)
                {
                    garmentInternNoteDetails.Add(new GarmentInternNoteDetail
                    {
                        EPOId          = detail.EPOId,
                        EPONo          = detail.EPONo,
                        POSerialNumber = detail.POSerialNumber,
                        Quantity       = (long)detail.DOQuantity,
                        RONo           = detail.RONo,

                        DOId   = item.DeliveryOrderId,
                        DONo   = item.DeliveryOrderNo,
                        DODate = item.DODate,

                        ProductId   = detail.ProductId,
                        ProductCode = detail.ProductCode,
                        ProductName = detail.ProductName,

                        PaymentType   = item.PaymentType,
                        PaymentMethod = item.PaymentMethod,

                        PaymentDueDate = item.DODate.AddDays(detail.PaymentDueDays),

                        UOMId   = detail.UomId,
                        UOMUnit = detail.UomUnit,

                        PricePerDealUnit = detail.PricePerDealUnit,
                        PriceTotal       = detail.PricePerDealUnit * detail.PricePerDealUnit,
                    });
                }
            }



            List <GarmentInternNoteItem> garmentInternNoteItems = new List <GarmentInternNoteItem>
            {
                new GarmentInternNoteItem
                {
                    InvoiceId   = garmentInvoice.Id,
                    InvoiceNo   = garmentInvoice.InvoiceNo,
                    InvoiceDate = garmentInvoice.InvoiceDate,
                    TotalAmount = 20000,
                    Details     = garmentInternNoteDetails
                }
            };

            GarmentInternNote garmentInternNote = new GarmentInternNote
            {
                INNo   = "NI1234L",
                INDate = new DateTimeOffset(),

                SupplierId   = garmentInvoice.SupplierId,
                SupplierCode = garmentInvoice.SupplierCode,
                SupplierName = garmentInvoice.SupplierCode,

                CurrencyId   = garmentInvoice.CurrencyId,
                CurrencyCode = garmentInvoice.CurrencyCode,
                CurrencyRate = 5,


                Remark = null,

                Items = garmentInternNoteItems
            };

            return(garmentInternNote);
        }
Esempio n. 23
0
        public async Task <int> Create(GarmentInvoice model, string username, int clientTimeZoneOffset = 7)
        {
            int Created = 0;

            using (var transaction = this.dbContext.Database.BeginTransaction())
            {
                try
                {
                    double _total = 0;
                    EntityExtension.FlagForCreate(model, username, USER_AGENT);
                    if (model.UseIncomeTax)
                    {
                        model.NPH = GenerateNPH();
                    }
                    if (model.UseVat)
                    {
                        model.NPN = GenerateNPN();
                    }
                    foreach (var item in model.Items)
                    {
                        _total += item.TotalAmount;
                        GarmentDeliveryOrder deliveryOrder = dbSetDeliveryOrder.FirstOrDefault(s => s.Id == item.DeliveryOrderId);
                        if (deliveryOrder != null)
                        {
                            deliveryOrder.IsInvoice = true;
                        }
                        EntityExtension.FlagForCreate(item, username, USER_AGENT);

                        foreach (var detail in item.Details)
                        {
                            EntityExtension.FlagForCreate(detail, username, USER_AGENT);
                        }
                    }
                    model.TotalAmount = _total;

                    this.dbSet.Add(model);
                    Created = await dbContext.SaveChangesAsync();

                    foreach (var item in model.Items)
                    {
                        var deliveryOrder = dbSetDeliveryOrder.FirstOrDefault(s => s.Id == item.DeliveryOrderId);
                        if (deliveryOrder != null)
                        {
                            var amount                  = 0.0;
                            var currencyAmount          = 0.0;
                            var vatAmount               = 0.0;
                            var currencyVATAmount       = 0.0;
                            var incomeTaxAmount         = 0.0;
                            var currencyIncomeTaxAmount = 0.0;

                            if (model.CurrencyCode == "IDR")
                            {
                                amount = item.TotalAmount;
                                if (model.IsPayVat)
                                {
                                    vatAmount = item.TotalAmount * 0.1;
                                    //vatAmount = item.TotalAmount * (model.VatRate / 100);
                                }

                                if (model.IsPayTax)
                                {
                                    incomeTaxAmount = item.TotalAmount * model.IncomeTaxRate / 100;
                                }
                            }
                            else
                            {
                                amount         = item.TotalAmount * deliveryOrder.DOCurrencyRate.GetValueOrDefault();
                                currencyAmount = item.TotalAmount;
                                if (model.IsPayVat)
                                {
                                    vatAmount = amount * 0.1;
                                    //vatAmount = amount * (model.VatRate / 100);
                                    currencyVATAmount = item.TotalAmount * 0.1;
                                    //currencyVATAmount = item.TotalAmount * (model.VatRate / 100);
                                }

                                if (model.IsPayTax)
                                {
                                    incomeTaxAmount         = amount * model.IncomeTaxRate / 100;
                                    currencyIncomeTaxAmount = item.TotalAmount * model.IncomeTaxRate / 100;
                                }
                            }

                            await _garmentDebtBalanceService.UpdateFromInvoice((int)deliveryOrder.Id, new InvoiceFormDto((int)model.Id, model.InvoiceDate, model.InvoiceNo, amount, currencyAmount, vatAmount, incomeTaxAmount, model.IsPayVat, model.IsPayTax, currencyVATAmount, currencyIncomeTaxAmount, model.VatNo));
                        }
                    }

                    transaction.Commit();
                }
                catch (Exception e)
                {
                    transaction.Rollback();
                    throw new Exception(e.Message);
                }
            }

            return(Created);
        }