using System; using System.Collections.Generic; using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations.Schema; using System.Linq; using System.Threading.Tasks; using EveryThing.Models.CodeTable; using EveryThing.Models.Invoice; namespace EveryThing.Models.Project { public class ProjectPartItemStatusAttribute : Attribute { public int Order { get; set; } public ProjectPartItemStatusAttribute(int order) { Order = order; } } public enum ProjectPartItemStatus { [ProjectPartItemStatus(1)] [Display(Name = "Odprto")] Opened = 0, [ProjectPartItemStatus(2)] [Display(Name = "V izdelavi")] InProduction = 1, [ProjectPartItemStatus(3)] [Display(Name = "V koop.")] InCooperation = 10, [ProjectPartItemStatus(4)] [Display(Name = "Zaključeno")] Finished = 2, [ProjectPartItemStatus(5)] [Display(Name = "Odpremljeno")] Shipped = 3 } public class ProjectPartItem { [Key] public int IdProjectPartItem { get; set; } [Required] [ForeignKey("ProjectPart")] public int IdProjectPartFk { get; set; } [ForeignKey("Item")] [Display(Name = "Artikel")] public int? IdItemFk { get; set; } [Required] [Display(Name = "Število kosov")] public float NumberOfItems { get; set; } [Display(Name = "Število kompletov")] public float NumberOfSets { get; set; } [ForeignKey("Material")] [Display(Name = "Material")] public int? IdMaterialFk { get; set; } [Display(Name = "Dimenzije surovca")] public string MaterialDimensions { get; set; } [Required] [ForeignKey("MaterialSupplier")] [Display(Name = "Dobavitelj materiala")] public int? IdMaterialSupplierFk { get; set; } [Display(Name = "Cena - Material")] public float MaterialPrice { get; set; } [Display(Name = "Cena - Delo")] public float WorkPrice { get; set; } [Display(Name = "Prodajna cena")] public float SellingPrice { get; set; } = 0; [Display(Name = "Število kosov - Zaključeno")] public float NumberOfItemsFinished { get; set; } [NotMapped] [Display(Name = "Vrednost - Delo")] public double WorkValue { get => Convert.ToDouble(NumberOfSets) * Convert.ToDouble(NumberOfItems) * Convert.ToDouble(WorkPrice); set => WorkPrice = Convert.ToSingle(Convert.ToDouble(NumberOfSets) * Convert.ToDouble(NumberOfItems == 0 ? 0 : value / (Convert.ToDouble(NumberOfSets) * Convert.ToDouble(NumberOfItems)))); } [NotMapped] [Display(Name = "Vrednost - Delo")] public double MaterialValue { get => Convert.ToDouble(NumberOfSets) * Convert.ToDouble(NumberOfItems) * Convert.ToDouble(MaterialPrice); set => MaterialPrice = Convert.ToSingle(Convert.ToDouble(NumberOfSets) * Convert.ToDouble(NumberOfItems == 0 ? 0 : value / (Convert.ToDouble(NumberOfSets) * Convert.ToDouble(NumberOfItems)))); } [NotMapped] [Display(Name = "Vrednost - cena")] public double CostPrice=> Convert.ToDouble(WorkPrice) + Convert.ToDouble(MaterialPrice); [NotMapped] [Display(Name = "Vrednost - strošek")] public double CostValue => Convert.ToDouble(NumberOfSets) * Convert.ToDouble(NumberOfItems) * Convert.ToDouble(CostPrice); [NotMapped] [Display(Name = "Prodajna vrednost")] public double SellingValue { get => Convert.ToDouble(NumberOfSets) * Convert.ToDouble(NumberOfItems) * Convert.ToDouble(SellingPrice); set => SellingPrice = Convert.ToSingle(Convert.ToDouble(NumberOfSets) * Convert.ToDouble(NumberOfItems == 0 ? 0 : value / (Convert.ToDouble(NumberOfSets) * Convert.ToDouble(NumberOfItems)))); } [NotMapped] [Display(Name = "RVC")] public double DifferenceInPrice { get => SellingPrice - (MaterialPrice + WorkPrice); set => SellingPrice = Convert.ToSingle(value + (MaterialPrice + WorkPrice)); } [NotMapped] [Display(Name = "RVC")] public double DifferenceInPriceValue => SellingValue - (MaterialValue + WorkValue); [NotMapped] [Display(Name = "RVC")] public double DifferenceInPricePercentage => (Convert.ToDouble(MaterialValue) + Convert.ToDouble(WorkValue)) == 0 ? 100 : ((SellingValue / (MaterialValue + WorkValue) - 1) * 100); [Required] [Display(Name = "Status")] public ProjectPartItemStatus Status { get; set; } = ProjectPartItemStatus.Opened; [Display(Name = "Datum zaključka")] [DisplayFormat(DataFormatString = "{0:dd.MM.yyyy}", ApplyFormatInEditMode = true)] public DateTime? FinishedDate { get; set; } [Display(Name = "Datum odpreme")] [DisplayFormat(DataFormatString = "{0:dd.MM.yyyy}", ApplyFormatInEditMode = true)] public DateTime? ShippingDate { get; set; } [Display(Name = "Dobavni rok")] [DisplayFormat(DataFormatString = "{0:dd.MM.yyyy}", ApplyFormatInEditMode = true)] public DateTime? DeliveryDate { get; set; } [Display(Name = "Spremenjeno")] public DateTime DateModified { get; set; } = DateTime.Now; [Required] public int ProjectPartItemNumber { get; set; } = 0; [NotMapped] public string ProjectPartNumberFormatted => (ProjectPart != null ? ProjectPart.ProjectPartNumberFormatted : "") + $"-{ProjectPartItemNumber:D4}"; // ForeignKey public ProjectPart ProjectPart { get; set; } public CodeTablePartner MaterialSupplier { get; set; } public CodeTableItem Item { get; set; } public CodeTableItem Material { get; set; } //Invoice item [InverseProperty("ProjectPartItem")] public virtual ICollection InvoiceItem { get; set; } } }