コード例 #1
0
        public static List <InvoiceAttachment> ConvertPdfToPng(string pathToDocument, string folderPath)
        {
            XSettings.InstallLicense(ConfigurationManager.AppSettings["ABCPdfKey"]);
            pathToDocument = LocalizePath(pathToDocument);

            var convertedFileName    = string.Empty;
            var convertedAttachments = new List <InvoiceAttachment>();
            var pdfToConvert         = new Doc();

            pdfToConvert.Read(pathToDocument);

            // loop through the pages

            var n = pdfToConvert.PageCount;

            for (var i = 1; i <= n; i++)
            {
                pdfToConvert.PageNumber  = i;
                pdfToConvert.Rect.String = pdfToConvert.CropBox.String;
                convertedFileName        = $"{folderPath}\\{Path.GetFileNameWithoutExtension(pathToDocument)}{i}.png";
                pdfToConvert.Rendering.Save(convertedFileName);
                var newDoc = new InvoiceAttachment
                {
                    DocumentPath = convertedFileName
                };
                convertedAttachments.Add(newDoc);
                newDoc = null;
            }
            pdfToConvert.Clear();
            return(convertedAttachments);
        }
コード例 #2
0
        public static List <InvoiceAttachment> ConvertMsgToPng(string pathToDocument, string folderPath)
        {
            SetAsposeLicense();

            pathToDocument = LocalizePath(pathToDocument);
            var convertedAttachments = new List <InvoiceAttachment>();

            var convertedFileName = $"{folderPath}\\{Path.GetFileNameWithoutExtension(pathToDocument)}.png";

            var msg = MailMessage.Load(pathToDocument);

            var msgStream = new MemoryStream();

            msg.Save(msgStream, MailMessageSaveType.MHtmlFormat);

            msgStream.Position = 0;
            var msgDocument = new Document(msgStream);

            msgDocument.Save(convertedFileName, SaveFormat.Png);

            var newDoc = new InvoiceAttachment
            {
                DocumentPath = convertedFileName
            };

            convertedAttachments.Add(newDoc);
            return(convertedAttachments);
        }
コード例 #3
0
        public static List <InvoiceAttachment> ConvertToPng(string pathToDocument, string folderPath)
        {
            pathToDocument = LocalizePath(pathToDocument);
            var convertedFileName    = $"{folderPath}\\{Path.GetFileNameWithoutExtension(pathToDocument)}.png";
            var convertedAttachments = new List <InvoiceAttachment>();

            var oldImage = Image.FromFile(pathToDocument);

            oldImage.Save(convertedFileName, ImageFormat.Png);
            var newDoc = new InvoiceAttachment
            {
                DocumentPath = convertedFileName
            };

            convertedAttachments.Add(newDoc);
            return(convertedAttachments);
        }
コード例 #4
0
        public virtual int _GetUniqueIdentifier()
        {
            var hashCode = 399326290;

            hashCode = hashCode * -1521134295 + (Id?.GetHashCode() ?? 0);
            hashCode = hashCode * -1521134295 + (InvoiceNumber?.GetHashCode() ?? 0);
            hashCode = hashCode * -1521134295 + (Description?.GetHashCode() ?? 0);
            hashCode = hashCode * -1521134295 + (DateIssued?.GetHashCode() ?? 0);
            hashCode = hashCode * -1521134295 + (Amount?.GetHashCode() ?? 0);
            hashCode = hashCode * -1521134295 + (CustomerType?.GetHashCode() ?? 0);
            hashCode = hashCode * -1521134295 + (CumulativeBalance?.GetHashCode() ?? 0);
            hashCode = hashCode * -1521134295 + (TotalPrice?.GetHashCode() ?? 0);
            hashCode = hashCode * -1521134295 + (DescriptionTwo?.GetHashCode() ?? 0);
            hashCode = hashCode * -1521134295 + (Attribute?.GetHashCode() ?? 0);
            hashCode = hashCode * -1521134295 + (InvoiceAttachment?.GetHashCode() ?? 0);
            hashCode = hashCode * -1521134295 + (Status?.GetHashCode() ?? 0);
            return(hashCode);
        }
コード例 #5
0
        public async Task <IActionResult> AddAttachment(int id, IFormFile file)
        {
            var team = await GetAuthorizedTeam();

            // find item
            var invoice = await _dbContext.Invoices
                          .Include(i => i.Items)
                          .Include(i => i.Attachments)
                          .Include(i => i.Team)
                          .Where(i => i.Team.Id == team.Id)
                          .FirstOrDefaultAsync(i => i.Id == id);

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

            // upload file
            var identifier = await _storageService.UploadAttachment(file);

            // add to invoice
            var attachment = new InvoiceAttachment()
            {
                Invoice     = invoice,
                Identifier  = identifier,
                FileName    = file.FileName,
                ContentType = file.ContentType,
                Size        = file.Length,
            };

            invoice.Attachments.Add(attachment);
            await _dbContext.SaveChangesAsync();

            return(new JsonResult(new
            {
                success = true,
                identifier,
            }));
        }
コード例 #6
0
        public async Task <JsonResult> EditInvoice(InvoiceViewModel model)
        {
            if (!ModelState.IsValid)
            {
                return(Json(new { Error = "Complete all required fields" }));
            }
            if (model.Id.HasValue)
            {
                var isAdmin = User.IsInRole("admin");
                var invoice = _invoiceService.AllIncluding(item => item.Assignment, item => item.Assignment.Customer, item => item.Assignment.Invoices, item => item.InvoiceAttachments, item => item.InvoiceAttachments.Select(e => e.Attachment)).SingleOrDefault(item => item.Id == model.Id.Value && (isAdmin || item.Assignment.CustomerId == CustomerId));
                if (invoice != null)
                {
                    var assignment = invoice.Assignment;
                    if (!isAdmin && assignment.StatusId != 1)
                    {
                        return(Json(new { Error = "Cannot edit submitted or approved invoices" }));
                    }
                    _uow.BeginTransaction();
                    invoice.Amount       = model.Amount;
                    invoice.PaidAmount   = invoice.Amount - (invoice.Amount * assignment.Customer.Rate / 100);
                    invoice.CustomerName = model.CustomerName;
                    invoice.Number       = model.Number;
                    invoice.WONumber     = model.WONumber;
                    invoice.HoldReason   = model.HoldReason;
                    Attachment attachment = null;

                    //if check amount < paid amount and overpayment is null then create overpayment
                    decimal?adjustment = null;
                    if (isAdmin)
                    {
                        invoice.CheckAmount = model.CheckAmount;
                        invoice.CheckNumber = model.CheckNumber;
                        if (model.CheckDate != null)
                        {
                            invoice.CheckDate = model.CheckDate;
                        }
                        //upload check

                        if (Request.Files.Count > 0 && Request.Files["check"] != null)
                        {
                            var ext          = Request.Files["check"].FileName.Substring(Request.Files["check"].FileName.LastIndexOf(".", StringComparison.Ordinal)).ToLower();
                            var tempFileName = UploadFileService.UploadFile(Request.Files["check"]);
                            var invoiceCheck = invoice.InvoiceAttachments.Where(item => item.IsCheck).FirstOrDefault();
                            if (invoiceCheck?.Attachment != null)
                            {
                                invoiceCheck.Attachment.Path        = "/PdfFiles/" + tempFileName + ".pdf";
                                invoiceCheck.Attachment.OrgFilePath = "/OrgFiles/" + tempFileName + ext;
                                invoiceCheck.Attachment.Name        = Request.Form["Check_Name"];
                                _attachmentService.Update(invoiceCheck.Attachment);
                            }
                            else
                            {
                                invoiceCheck = new InvoiceAttachment
                                {
                                    IsCheck    = true,
                                    Attachment = new Attachment
                                    {
                                        Path        = "/PdfFiles/" + tempFileName + ".pdf",
                                        OrgFilePath = "/OrgFiles/" + tempFileName + ext,
                                        Name        = Request.Form["Check_Name"]
                                    }
                                };

                                if (invoice.InvoiceAttachments == null)
                                {
                                    invoice.InvoiceAttachments = new List <InvoiceAttachment>();
                                }
                                invoice.InvoiceAttachments.Add(invoiceCheck);
                            }
                            attachment = invoiceCheck.Attachment;
                        }
                        if (model.CheckAmount >= 0 && !string.IsNullOrEmpty(model.CheckNumber) &&
                            model.CheckDate.HasValue)
                        {
                            if (model.CheckAmount == 0)
                            {
                                invoice.StatusId = 5;
                            }
                            else
                            {
                                invoice.StatusId = 2;
                            }
                            var oldAdjustment = _adjustmentService.FindBy(item => item.OriginInvoiceId == invoice.Id).FirstOrDefault();

                            if (oldAdjustment != null)
                            {
                                oldAdjustment.Amount = invoice.CheckAmount - invoice.Amount;
                                if (oldAdjustment.Amount == 0)
                                {
                                    _adjustmentService.Delete(oldAdjustment);
                                }
                                else
                                {
                                    _adjustmentService.Update(oldAdjustment);
                                }
                            }
                            else
                            {
                                if (invoice.CheckAmount != invoice.Amount)
                                {
                                    var newAdjustment = new Adjustment
                                    {
                                        OriginInvoice = invoice,
                                        CustomerId    = assignment.CustomerId,
                                        StatusId      = 1,
                                        Amount        = invoice.CheckAmount - invoice.Amount
                                    };
                                    _adjustmentService.Insert(newAdjustment);
                                }
                            }
                        }
                        //implement hold invoices
                        if (model.StatusId.HasValue && (model.StatusId == 3 || model.StatusId == 4))
                        {
                            //create new assignment
                            var newAssignment = Mapper.Map <Assignment>(assignment);
                            SetAssignmnetLetter(newAssignment);
                            newAssignment.Invoices = new List <Invoice>();
                            _assignmentService.Insert(newAssignment);
                            _uow.SaveChanges();
                            invoice.AssignmentId = newAssignment.Id;
                            newAssignment.Invoices.Add(invoice);
                            assignment.Invoices.Remove(invoice);

                            _invoiceService.Update(invoice);
                            _uow.SaveChanges();
                            _assignmentService.Recaculate(newAssignment);
                            _uow.SaveChanges();
                            //send email to user
                            var user = UserManager.Users.SingleOrDefault(item => item.Id == invoice.Assignment.UserId);
                            var msg  = GetInvoiceHoldEmail(invoice, user);
                            MailService.SendMail(user.Email, "Invoice on Hold", msg);
                        }
                    }

                    _invoiceService.Update(invoice);
                    _assignmentService.Recaculate(assignment);
                    if (assignment.Invoices.Count == 0)
                    {
                        assignment.StatusId = 5;
                    }
                    _uow.SaveChanges();
                    _uow.Commit();
                    if (isAdmin)
                    {
                        adjustment = _adjustmentService.All.FirstOrDefault(item => item.OriginInvoiceId == invoice.Id)?.Amount;
                        assignment = _assignmentService.Find(assignment.Id);
                        return(Json(new { Done = 1, Adjustment = adjustment, Path = attachment?.Path, CheckId = attachment?.Id, Total = assignment.Total, TotalPayable = assignment.TotalPayable, Funded = assignment.Funded }));
                    }
                    return(Json(new { Done = 1, Adjustment = adjustment, CheckId = attachment?.Id }));
                }
            }
            return(Json(new { Error = "Invoice not exist." }));
        }
コード例 #7
0
        //public static Invoice Create(InvoiceAddModel model, string userId, List<Item> items)
        //{
        //    var invoice = new Invoice
        //    {
        //        CustomerId = model.CustomerId,
        //        InvoiceNumber = string.Empty,
        //        Tax = model.Tax,
        //        Discount = model.Discount,
        //        TotalAmount = model.TotalAmount,
        //        Remark = model.Remark,
        //        Status = Constants.InvoiceStatus.Pending,
        //        CreatedBy = userId,
        //        CreatedOn = Utility.GetDateTime(),
        //        Services = items.Select(x => new InvoiceService
        //        {
        //            Id = Guid.NewGuid(),
        //            ServiceId = x.Id,
        //            Rate = x.Rate
        //        }).ToList()
        //    };


        //    if (model.Attachments == null || !model.Attachments.Any())
        //    {
        //        return invoice;
        //    }

        //    foreach (var attachment in model.Attachments)
        //    {
        //        invoice.Attachments = new List<InvoiceAttachment>
        //        {
        //            new InvoiceAttachment
        //            {
        //                Title = attachment.Title,
        //                FileName = attachment.FileName,
        //                OriginalFileName = attachment.OriginalFileName,
        //                CreatedBy =userId,
        //                CreatedOn =Utility.GetDateTime()
        //            }
        //        };
        //    }

        //    return invoice;
        //}

        //public static void Create(InvoiceEditModel model, Invoice entity, string userId, List<Item> items)
        //{
        //    entity.CustomerId = model.CustomerId;
        //    entity.Tax = model.Tax;
        //    entity.Discount = model.Discount;
        //    entity.TotalAmount = model.TotalAmount;
        //    entity.Remark = model.Remark;
        //    entity.UpdatedBy = userId;
        //    entity.UpdatedOn = Utility.GetDateTime();

        //    var deletedServices = entity.Services.Where(x => !model.Items.Contains(x.ServiceId)).ToList();

        //    foreach (var deletedService in deletedServices)
        //    {
        //        entity.Services.Remove(deletedService);
        //    }

        //    var addedServices = items
        //        .Where(x => !entity.Services.Select(y => y.ServiceId).Contains(x.Id))
        //        .ToList();

        //    foreach (var service in addedServices)
        //    {
        //        entity.Services.Add(new InvoiceService
        //        {
        //            Id = Guid.NewGuid(),
        //            ServiceId = service.Id,
        //            Rate = service.Rate
        //        });
        //    }

        //    if (model.Attachments == null || !model.Attachments.Any())
        //    {
        //        return;
        //    }

        //    var deletedAttachemntFiles = entity.Attachments.Select(x => x.FileName)
        //        .Except(model.Attachments.Select(y => y.FileName)).ToList();

        //    foreach (var deletedAttachemntFile in deletedAttachemntFiles)
        //    {
        //        var attachemnt = entity.Attachments.Single(x => x.FileName.Equals(deletedAttachemntFile));
        //        entity.Attachments.Remove(attachemnt);
        //    }

        //    foreach (var attachment in model.Attachments)
        //    {
        //        var invoiceAttachment = entity.Attachments.SingleOrDefault(x => x.FileName.Equals(attachment.FileName));

        //        if (invoiceAttachment == null)
        //        {
        //            invoiceAttachment = new InvoiceAttachment
        //            {
        //                Title = attachment.Title,
        //                FileName = attachment.FileName,
        //                OriginalFileName = attachment.OriginalFileName,
        //                CreatedBy = userId,
        //                CreatedOn = Utility.GetDateTime()
        //            };
        //        }
        //        else
        //        {
        //            invoiceAttachment.Title = attachment.Title;
        //            invoiceAttachment.FileName = attachment.FileName;
        //            invoiceAttachment.OriginalFileName = attachment.OriginalFileName;
        //        }

        //        entity.Attachments.Add(invoiceAttachment);
        //    }
        //}


        public static void EditInvoice(InvoiceEditModel model, Invoice entity, string userId)
        {
            entity.CustomerId         = model.CustomerId;
            entity.Tax                = model.Tax;
            entity.Discount           = model.Discount;
            entity.TotalAmount        = model.TotalAmount;
            entity.Remark             = model.Remark;
            entity.UpdatedBy          = userId ?? "0";
            entity.UpdatedOn          = Utility.GetDateTime();
            entity.InvoiceDate        = model.InvoiceDate;
            entity.StrInvoiceDate     = model.InvoiceDate.ToString("yyyy-MM-dd");
            entity.DueDate            = model.DueDate;
            entity.StrDueDate         = model.DueDate.ToString("yyyy-MM-dd");
            entity.PoSoNumber         = model.PoSoNumber;
            entity.SubTotal           = model.SubTotal;
            entity.LineAmountSubTotal = model.LineAmountSubTotal;

            //int[] arr = new int[100];
            ArrayList tempArr = new ArrayList();

            //for (int i=0;i<model.Items.Count; i++)
            //{
            //    arr[i] = model.Items[i].ServiceId;
            //}

            foreach (var item in model.Items)
            {
                tempArr.Add(item.ServiceId);
                var alreadyExistServices = entity.Services.Where(x => item.ServiceId == x.ServiceId).FirstOrDefault();
                //entity.Services.Where(x => item.ServiceId == x.ServiceId).Select(c => { c.CreditLimit = 1000; return c; });
                if (alreadyExistServices != null)
                {
                    alreadyExistServices.Price         = item.Price;
                    alreadyExistServices.TaxId         = item.TaxId;
                    alreadyExistServices.TaxPercentage = item.TaxPercentage;
                    alreadyExistServices.Rate          = item.Rate;
                    alreadyExistServices.Quantity      = item.Quantity;
                    alreadyExistServices.TaxPrice      = item.TaxPrice;
                    alreadyExistServices.LineAmount    = item.LineAmount;
                    entity.Services.Add(alreadyExistServices);
                }
            }

            var deletedServices = entity.Services.Where(x => !tempArr.Contains(x.ServiceId)).ToList();

            //var alreadyExistServices = entity.Services.Where(x => tempArr.Contains(x.ServiceId)).ToList();
            //var resultAll = items.Where(i => filter.All(x => i.Features.Any(f => x == f.Id)));


            foreach (var deletedService in deletedServices)
            {
                entity.Services.Remove(deletedService);
            }

            var addedServices = model.Items
                                .Where(x => !entity.Services.Select(y => y.ServiceId).Contains(x.ServiceId))
                                .ToList();

            foreach (var service in addedServices)
            {
                entity.Services.Add(new InvoiceService
                {
                    Id            = Guid.NewGuid(),
                    ServiceId     = service.ServiceId,
                    Rate          = service.Rate,
                    TaxId         = service.TaxId,
                    Price         = service.Price,
                    TaxPrice      = service.TaxPrice,
                    Quantity      = service.Quantity,
                    TaxPercentage = service.TaxPercentage,
                    LineAmount    = service.LineAmount
                });
            }

            if (model.Attachments == null || !model.Attachments.Any())
            {
                return;
            }

            var deletedAttachemntFiles = entity.Attachments.Select(x => x.FileName)
                                         .Except(model.Attachments.Select(y => y.FileName)).ToList();

            foreach (var deletedAttachemntFile in deletedAttachemntFiles)
            {
                var attachemnt = entity.Attachments.SingleOrDefault(x => x.FileName.Equals(deletedAttachemntFile));
                entity.Attachments.Remove(attachemnt);
            }

            foreach (var attachment in model.Attachments)
            {
                var invoiceAttachment = entity.Attachments.SingleOrDefault(x => x.FileName.Equals(attachment.FileName));

                if (invoiceAttachment == null)
                {
                    invoiceAttachment = new InvoiceAttachment
                    {
                        Title            = attachment.Title,
                        FileName         = attachment.FileName,
                        OriginalFileName = attachment.OriginalFileName,
                        CreatedBy        = userId ?? "0",
                        CreatedOn        = Utility.GetDateTime()
                    };
                }
                else
                {
                    invoiceAttachment.Title            = attachment.Title;
                    invoiceAttachment.FileName         = attachment.FileName;
                    invoiceAttachment.OriginalFileName = attachment.OriginalFileName;
                }

                entity.Attachments.Add(invoiceAttachment);
            }
        }