DocSpace-client/products/ASC.CRM/Server/ApiModels/InvoiceDto.cs
2021-03-13 21:00:08 +03:00

624 lines
22 KiB
C#

/*
*
* (c) Copyright Ascensio System Limited 2010-2018
*
* This program is freeware. You can redistribute it and/or modify it under the terms of the GNU
* General Public License (GPL) version 3 as published by the Free Software Foundation (https://www.gnu.org/copyleft/gpl.html).
* In accordance with Section 7(a) of the GNU GPL its Section 15 shall be amended to the effect that
* Ascensio System SIA expressly excludes the warranty of non-infringement of any third-party rights.
*
* THIS PROGRAM IS DISTRIBUTED WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF MERCHANTABILITY OR
* FITNESS FOR A PARTICULAR PURPOSE. For more details, see GNU GPL at https://www.gnu.org/copyleft/gpl.html
*
* You can contact Ascensio System SIA by email at sales@onlyoffice.com
*
* The interactive user interfaces in modified source and object code versions of ONLYOFFICE must display
* Appropriate Legal Notices, as required under Section 5 of the GNU GPL version 3.
*
* Pursuant to Section 7 § 3(b) of the GNU GPL you must retain the original ONLYOFFICE logo which contains
* relevant author attributions when distributing the software. If the display of the logo in its graphic
* form is not reasonably feasible for technical reasons, you must include the words "Powered by ONLYOFFICE"
* in every copy of the program you distribute.
* Pursuant to Section 7 § 3(e) we decline to grant you any rights under trademark law for use of our trademarks.
*
*/
using ASC.Api.Core;
using ASC.Common;
using ASC.Core.Common.Settings;
using ASC.CRM.Classes;
using ASC.CRM.Core;
using ASC.CRM.Core.Dao;
using ASC.CRM.Core.Entities;
using ASC.CRM.Core.Enums;
using ASC.Web.Api.Models;
using ASC.Web.CRM.Classes;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
namespace ASC.CRM.ApiModels
{
/// <summary>
/// Invoice
/// </summary>
[DataContract(Name = "invoiceBase", Namespace = "")]
public class InvoiceBaseDto
{
public InvoiceBaseDto()
{
}
[DataMember(Name = "id")]
public int Id { get; set; }
public InvoiceStatusDto Status { get; set; }
public string Number { get; set; }
public ApiDateTime IssueDate { get; set; }
public InvoiceTemplateType TemplateType { get; set; }
public ContactBaseWithEmailDto Contact { get; set; }
public ContactBaseWithEmailDto Consignee { get; set; }
public EntityDto Entity { get; set; }
public ApiDateTime DueDate { get; set; }
public string Language { get; set; }
public CurrencyInfoDto Currency { get; set; }
public decimal ExchangeRate { get; set; }
public string PurchaseOrderNumber { get; set; }
public string Terms { get; set; }
public string Description { get; set; }
public int FileID { get; set; }
public ApiDateTime CreateOn { get; set; }
public EmployeeWraper CreateBy { get; set; }
public decimal Cost { get; set; }
[DataMember(IsRequired = false, EmitDefaultValue = true)]
public bool CanEdit { get; set; }
[DataMember(IsRequired = false, EmitDefaultValue = true)]
public bool CanDelete { get; set; }
}
[Scope]
public class InvoiceBaseDtoHelper
{
public InvoiceBaseDtoHelper(ApiDateTimeHelper apiDateTimeHelper,
EmployeeWraperHelper employeeWraperHelper,
CRMSecurity cRMSecurity,
SettingsManager settingsManager,
CurrencyProvider currencyProvider,
InvoiceStatusDtoHelper invoiceStatusDtoHelper,
CurrencyInfoDtoHelper currencyInfoDtoHelper,
DaoFactory daoFactory,
ContactDtoHelper contactDtoHelper,
EntityDtoHelper entityDtoHelper)
{
ApiDateTimeHelper = apiDateTimeHelper;
EmployeeWraperHelper = employeeWraperHelper;
CRMSecurity = cRMSecurity;
SettingsManager = settingsManager;
CurrencyProvider = currencyProvider;
InvoiceStatusDtoHelper = invoiceStatusDtoHelper;
DaoFactory = daoFactory;
CurrencyInfoDtoHelper = currencyInfoDtoHelper;
ContactDtoHelper = contactDtoHelper;
EntityDtoHelper = entityDtoHelper;
}
public EntityDtoHelper EntityDtoHelper { get; }
public ContactDtoHelper ContactDtoHelper { get; }
public CurrencyInfoDtoHelper CurrencyInfoDtoHelper { get; }
public InvoiceStatusDtoHelper InvoiceStatusDtoHelper { get; }
public CurrencyProvider CurrencyProvider { get; }
public SettingsManager SettingsManager { get; }
public CRMSecurity CRMSecurity { get; }
public ApiDateTimeHelper ApiDateTimeHelper { get; }
public EmployeeWraperHelper EmployeeWraperHelper { get; }
public DaoFactory DaoFactory { get; }
public InvoiceBaseDto Get(Invoice invoice)
{
var result = new InvoiceBaseDto
{
Id = invoice.ID,
Status = InvoiceStatusDtoHelper.Get(invoice.Status),
Number = invoice.Number,
IssueDate = ApiDateTimeHelper.Get(invoice.IssueDate),
TemplateType = invoice.TemplateType,
DueDate = ApiDateTimeHelper.Get(invoice.DueDate),
Currency = !String.IsNullOrEmpty(invoice.Currency) ?
CurrencyInfoDtoHelper.Get(CurrencyProvider.Get(invoice.Currency)) :
CurrencyInfoDtoHelper.Get(SettingsManager.Load<CRMSettings>().DefaultCurrency),
ExchangeRate = invoice.ExchangeRate,
Language = invoice.Language,
PurchaseOrderNumber = invoice.PurchaseOrderNumber,
Terms = invoice.Terms,
Description = invoice.Description,
FileID = invoice.FileID,
CreateOn = ApiDateTimeHelper.Get(invoice.CreateOn),
CreateBy = EmployeeWraperHelper.Get(invoice.CreateBy),
CanEdit = CRMSecurity.CanEdit(invoice),
CanDelete = CRMSecurity.CanDelete(invoice)
};
if (invoice.ContactID > 0)
{
result.Contact = ContactDtoHelper.GetContactBaseWithEmailDto(DaoFactory.GetContactDao().GetByID(invoice.ContactID));
}
if (invoice.ConsigneeID > 0)
{
result.Consignee = ContactDtoHelper.GetContactBaseWithEmailDto(DaoFactory.GetContactDao().GetByID(invoice.ConsigneeID));
}
if (invoice.EntityID > 0)
{
result.Entity = EntityDtoHelper.Get(invoice.EntityType, invoice.EntityID);
}
result.Cost = invoice.GetInvoiceCost(DaoFactory);
return result;
}
}
/// <summary>
/// Invoice
/// </summary>
[DataContract(Name = "invoice", Namespace = "")]
public class InvoiceDto : InvoiceBaseDto
{
public InvoiceDto()
{
}
public List<InvoiceLineDto> InvoiceLines { get; set; }
public static InvoiceDto GetSample()
{
return new InvoiceDto
{
Status = InvoiceStatusDto.GetSample(),
Number = string.Empty,
IssueDate = ApiDateTime.GetSample(),
TemplateType = InvoiceTemplateType.Eur,
Language = string.Empty,
DueDate = ApiDateTime.GetSample(),
Currency = CurrencyInfoDto.GetSample(),
ExchangeRate = (decimal)1.00,
PurchaseOrderNumber = string.Empty,
Terms = string.Empty,
Description = string.Empty,
FileID = -1,
CreateOn = ApiDateTime.GetSample(),
CreateBy = EmployeeWraper.GetSample(),
CanEdit = true,
CanDelete = true,
Cost = 0,
InvoiceLines = new List<InvoiceLineDto> { InvoiceLineDto.GetSample() }
};
}
}
[Scope]
public class InvoiceDtoHelper
{
public InvoiceDtoHelper(ApiDateTimeHelper apiDateTimeHelper,
EmployeeWraperHelper employeeWraperHelper,
CRMSecurity cRMSecurity,
SettingsManager settingsManager,
CurrencyProvider currencyProvider,
InvoiceStatusDtoHelper invoiceStatusDtoHelper,
InvoiceLineDtoHelper invoiceLineDtoHelper,
DaoFactory daoFactory,
CurrencyInfoDtoHelper currencyInfoDtoHelper,
CurrencyRateInfoDtoHelper currencyRateInfoDtoHelper,
ContactDtoHelper contactDtoHelper,
EntityDtoHelper entityDtoHelper)
{
ApiDateTimeHelper = apiDateTimeHelper;
EmployeeWraperHelper = employeeWraperHelper;
CRMSecurity = cRMSecurity;
SettingsManager = settingsManager;
CurrencyProvider = currencyProvider;
InvoiceStatusDtoHelper = invoiceStatusDtoHelper;
DaoFactory = daoFactory;
InvoiceLineDtoHelper = invoiceLineDtoHelper;
CurrencyInfoDtoHelper = currencyInfoDtoHelper;
CurrencyRateInfoDtoHelper = currencyRateInfoDtoHelper;
ContactDtoHelper = contactDtoHelper;
EntityDtoHelper = entityDtoHelper;
}
public ContactDtoHelper ContactDtoHelper { get; }
public CurrencyInfoDtoHelper CurrencyInfoDtoHelper { get; }
public CurrencyRateInfoDtoHelper CurrencyRateInfoDtoHelper { get; }
public DaoFactory DaoFactory { get; }
public InvoiceLineDtoHelper InvoiceLineDtoHelper { get; }
public InvoiceStatusDtoHelper InvoiceStatusDtoHelper { get; }
public CurrencyProvider CurrencyProvider { get; }
public SettingsManager SettingsManager { get; }
public ApiDateTimeHelper ApiDateTimeHelper { get; }
public EmployeeWraperHelper EmployeeWraperHelper { get; }
public CRMSecurity CRMSecurity { get; }
public EntityDtoHelper EntityDtoHelper { get; }
public InvoiceDto Get(Invoice invoice)
{
var result = new InvoiceDto
{
Id = invoice.ID,
Status = InvoiceStatusDtoHelper.Get(invoice.Status),
Number = invoice.Number,
IssueDate = ApiDateTimeHelper.Get(invoice.IssueDate),
TemplateType = invoice.TemplateType,
DueDate = ApiDateTimeHelper.Get(invoice.DueDate),
Currency = !String.IsNullOrEmpty(invoice.Currency) ?
CurrencyInfoDtoHelper.Get(CurrencyProvider.Get(invoice.Currency)) :
CurrencyInfoDtoHelper.Get(SettingsManager.Load<CRMSettings>().DefaultCurrency),
ExchangeRate = invoice.ExchangeRate,
Language = invoice.Language,
PurchaseOrderNumber = invoice.PurchaseOrderNumber,
Terms = invoice.Terms,
Description = invoice.Description,
FileID = invoice.FileID,
CreateOn = ApiDateTimeHelper.Get(invoice.CreateOn),
CreateBy = EmployeeWraperHelper.Get(invoice.CreateBy),
CanEdit = CRMSecurity.CanEdit(invoice),
CanDelete = CRMSecurity.CanDelete(invoice),
};
if (invoice.ContactID > 0)
{
result.Contact = ContactDtoHelper.GetContactBaseWithEmailDto(DaoFactory.GetContactDao().GetByID(invoice.ContactID));
}
if (invoice.ConsigneeID > 0)
{
result.Consignee = ContactDtoHelper.GetContactBaseWithEmailDto(DaoFactory.GetContactDao().GetByID(invoice.ConsigneeID));
}
if (invoice.EntityID > 0)
{
result.Entity = EntityDtoHelper.Get(invoice.EntityType, invoice.EntityID);
}
result.Cost = invoice.GetInvoiceCost(DaoFactory);
result.InvoiceLines = invoice.GetInvoiceLines(DaoFactory).Select(x => InvoiceLineDtoHelper.Get(x)).ToList();
return result;
}
}
/// <summary>
/// Invoice Item
/// </summary>
[DataContract(Name = "invoiceItem", Namespace = "")]
public class InvoiceItemDto
{
public InvoiceItemDto()
{
}
public string Title { get; set; }
public string StockKeepingUnit { get; set; }
public string Description { get; set; }
public decimal Price { get; set; }
public CurrencyInfoDto Currency { get; set; }
public decimal StockQuantity { get; set; }
public bool TrackInvenory { get; set; }
public InvoiceTaxDto InvoiceTax1 { get; set; }
public InvoiceTaxDto InvoiceTax2 { get; set; }
public ApiDateTime CreateOn { get; set; }
public EmployeeWraper CreateBy { get; set; }
[DataMember(IsRequired = false, EmitDefaultValue = true)]
public bool CanEdit { get; set; }
[DataMember(IsRequired = false, EmitDefaultValue = true)]
public bool CanDelete { get; set; }
}
[Scope]
public class InvoiceItemDtoHelper
{
public InvoiceItemDtoHelper(ApiDateTimeHelper apiDateTimeHelper,
EmployeeWraperHelper employeeWraperHelper,
CRMSecurity cRMSecurity,
SettingsManager settingsManager,
CurrencyProvider currencyProvider,
DaoFactory daoFactory,
CurrencyInfoDtoHelper currencyInfoDtoHelper,
InvoiceTaxDtoHelper invoiceTaxDtoHelper)
{
ApiDateTimeHelper = apiDateTimeHelper;
EmployeeWraperHelper = employeeWraperHelper;
CRMSecurity = cRMSecurity;
SettingsManager = settingsManager;
CurrencyProvider = currencyProvider;
DaoFactory = daoFactory;
CurrencyInfoDtoHelper = currencyInfoDtoHelper;
InvoiceTaxDtoHelper = invoiceTaxDtoHelper;
}
public InvoiceTaxDtoHelper InvoiceTaxDtoHelper { get; }
public CurrencyInfoDtoHelper CurrencyInfoDtoHelper { get; }
public DaoFactory DaoFactory { get; }
public CurrencyProvider CurrencyProvider { get; }
public SettingsManager SettingsManager { get; }
public ApiDateTimeHelper ApiDateTimeHelper { get; }
public EmployeeWraperHelper EmployeeWraperHelper { get; }
public CRMSecurity CRMSecurity { get; }
public InvoiceItemDto Get(InvoiceItem invoiceItem)
{
var result = new InvoiceItemDto {
Title = invoiceItem.Title,
StockKeepingUnit = invoiceItem.StockKeepingUnit,
Description = invoiceItem.Description,
Price = invoiceItem.Price,
StockQuantity = invoiceItem.StockQuantity,
TrackInvenory = invoiceItem.TrackInventory,
CreateOn = ApiDateTimeHelper.Get(invoiceItem.CreateOn),
CreateBy = EmployeeWraperHelper.Get(invoiceItem.CreateBy),
Currency = !String.IsNullOrEmpty(invoiceItem.Currency) ?
CurrencyInfoDtoHelper.Get(CurrencyProvider.Get(invoiceItem.Currency)) :
CurrencyInfoDtoHelper.Get(SettingsManager.Load<CRMSettings>().DefaultCurrency),
CanEdit = CRMSecurity.CanEdit(invoiceItem),
CanDelete = CRMSecurity.CanDelete(invoiceItem)
};
if (invoiceItem.InvoiceTax1ID > 0)
{
result.InvoiceTax1 = InvoiceTaxDtoHelper.Get(DaoFactory.GetInvoiceTaxDao().GetByID(invoiceItem.InvoiceTax1ID));
}
if (invoiceItem.InvoiceTax2ID > 0)
{
result.InvoiceTax2 = InvoiceTaxDtoHelper.Get(DaoFactory.GetInvoiceTaxDao().GetByID(invoiceItem.InvoiceTax2ID));
}
return result;
}
}
//public static class InvoiceItemDtoHelperExtension
//{
// public static DIHelper AddInvoiceItemDtoHelperService(this DIHelper services)
// {
// services.TryAddTransient<InvoiceDtoHelper>();
// return services.AddCurrencyProviderService()
// .AddSettingsManagerService()
// .AddApiDateTimeHelper()
// .AddEmployeeWraper()
// .AddCRMSecurityService();
// }
//}
/// <summary>
/// Invoice Tax
/// </summary>
[DataContract(Name = "invoiceTax", Namespace = "")]
public class InvoiceTaxDto
{
public InvoiceTaxDto()
{
}
[DataMember(Name = "id")]
public int Id { get; set; }
public string Name { get; set; }
public string Description { get; set; }
public decimal Rate { get; set; }
public ApiDateTime CreateOn { get; set; }
public EmployeeWraper CreateBy { get; set; }
[DataMember(IsRequired = false, EmitDefaultValue = true)]
public bool CanEdit { get; set; }
[DataMember(IsRequired = false, EmitDefaultValue = true)]
public bool CanDelete { get; set; }
}
[Scope]
public class InvoiceTaxDtoHelper
{
public InvoiceTaxDtoHelper(ApiDateTimeHelper apiDateTimeHelper,
EmployeeWraperHelper employeeWraperHelper,
CRMSecurity cRMSecurity)
{
ApiDateTimeHelper = apiDateTimeHelper;
EmployeeWraperHelper = employeeWraperHelper;
CRMSecurity = cRMSecurity;
}
public ApiDateTimeHelper ApiDateTimeHelper { get; }
public EmployeeWraperHelper EmployeeWraperHelper { get; }
public CRMSecurity CRMSecurity { get; }
public InvoiceTaxDto Get(InvoiceTax invoiceTax)
{
return new InvoiceTaxDto
{
Id = invoiceTax.ID,
Name = invoiceTax.Name,
Description = invoiceTax.Description,
Rate = invoiceTax.Rate,
CreateOn = ApiDateTimeHelper.Get(invoiceTax.CreateOn),
CreateBy = EmployeeWraperHelper.Get(invoiceTax.CreateBy),
CanEdit = CRMSecurity.CanEdit(invoiceTax),
CanDelete = CRMSecurity.CanDelete(invoiceTax)
};
}
}
/// <summary>
/// Invoice Line
/// </summary>
[DataContract(Name = "invoiceLine", Namespace = "")]
public class InvoiceLineDto
{
public InvoiceLineDto()
{
}
[DataMember(Name = "id")]
public int Id { get; set; }
public int InvoiceID { get; set; }
public int InvoiceItemID { get; set; }
public int InvoiceTax1ID { get; set; }
public int InvoiceTax2ID { get; set; }
public int SortOrder { get; set; }
public string Description { get; set; }
public decimal Quantity { get; set; }
public decimal Price { get; set; }
public decimal Discount { get; set; }
public static InvoiceLineDto GetSample()
{
return new InvoiceLineDto
{
Description = string.Empty,
Discount = (decimal)0.00,
InvoiceID = 0,
InvoiceItemID = 0,
InvoiceTax1ID = 0,
InvoiceTax2ID = 0,
Price = (decimal)0.00,
Quantity = 0
};
}
}
[Singletone]
public class InvoiceLineDtoHelper
{
public InvoiceLineDtoHelper()
{
}
public InvoiceLineDto Get(InvoiceLine invoiceLine)
{
return new InvoiceLineDto
{
Id = invoiceLine.ID,
InvoiceID = invoiceLine.InvoiceID,
InvoiceItemID = invoiceLine.InvoiceItemID,
InvoiceTax1ID = invoiceLine.InvoiceTax1ID,
InvoiceTax2ID = invoiceLine.InvoiceTax2ID,
SortOrder = invoiceLine.SortOrder,
Description = invoiceLine.Description,
Quantity = invoiceLine.Quantity,
Price = invoiceLine.Price,
Discount = invoiceLine.Discount
};
}
}
/// <summary>
/// Invoice Status
/// </summary>
[DataContract(Name = "invoiceStatus", Namespace = "")]
public class InvoiceStatusDto
{
public InvoiceStatusDto()
{
}
[DataMember(Name = "id")]
public int Id { get; set; }
public string Title { get; set; }
public static InvoiceStatusDto GetSample()
{
return new InvoiceStatusDto
{
Id = (int)InvoiceStatus.Draft,
Title = InvoiceStatus.Draft.ToLocalizedString()
};
}
}
[Singletone]
public class InvoiceStatusDtoHelper
{
public InvoiceStatusDtoHelper()
{
}
public InvoiceStatusDto Get(InvoiceStatus status)
{
return new InvoiceStatusDto
{
Id = (int)status,
Title = status.ToLocalizedString()
};
}
}
}