QuoteContractProposal.cs 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. using System.Linq;
  2. using FluentResults;
  3. using InABox.Core;
  4. namespace Comal.Classes
  5. {
  6. [UserTracking(typeof(Quote))]
  7. public class QuoteContractProposal : Entity, IRemotable, IPersistent, IQuoteContractProposal, IManyToMany<QuoteContract, QuoteProposal>,
  8. ILicense<QuotesManagementLicense>, ITaxable
  9. {
  10. [NullEditor]
  11. [EntityRelationship(DeleteAction.Cascade)]
  12. public QuoteContractLink Contract { get; set; }
  13. private class QuoteContractProposalLookup : LookupDefinitionGenerator<QuoteProposal, QuoteContractProposal>
  14. {
  15. public override Filter<QuoteProposal> DefineFilter(QuoteContractProposal[] items)
  16. {
  17. if (items?.Any() != true)
  18. return LookupFactory.DefineFilter<QuoteProposal>();
  19. return new Filter<QuoteProposal>(x => x.Quote.ID).IsEqualTo(items.First().Contract.Quote.ID);
  20. }
  21. public override Columns<QuoteProposal> DefineColumns()
  22. {
  23. return base.DefineColumns()
  24. .Add(x=>x.ProposalExTax)
  25. .Add(x=>x.ProposalTax)
  26. .Add(x=>x.ProposalIncTax);
  27. }
  28. public override Columns<QuoteContractProposal> DefineFilterColumns()
  29. => new Columns<QuoteContractProposal>(ColumnTypeFlags.Required);
  30. }
  31. [LookupDefinition(typeof(QuoteContractProposalLookup))]
  32. [EntityRelationship(DeleteAction.Cascade)]
  33. [EditorSequence(1)]
  34. public QuoteProposalLink Proposal { get; set; }
  35. [NullEditor]
  36. public long Sequence { get; set; }
  37. [EditorSequence(2)]
  38. public bool OverridePrice { get; set; }
  39. [CurrencyEditor(Visible = Visible.Default, Summary = Summary.Sum)]
  40. [EditorSequence(3)]
  41. public double ExTax { get; set; }
  42. [EditorSequence(4)]
  43. public TaxCodeLink TaxCode { get; set; }
  44. [NullEditor]
  45. public double TaxRate { get; set; }
  46. [CurrencyEditor(Visible = Visible.Default, Summary = Summary.Sum)]
  47. [EditorSequence(5)]
  48. public double Tax { get; set; }
  49. [CurrencyEditor(Visible = Visible.Default, Summary = Summary.Sum)]
  50. [EditorSequence(6)]
  51. public double IncTax { get; set; }
  52. static QuoteContractProposal()
  53. {
  54. LinkedProperties.Register<QuoteContractProposal, TaxCodeLink, double>(x => x.TaxCode, x => x.Rate, x => x.TaxRate);
  55. LinkedProperties.Register<QuoteContractProposal, QuoteProposalLink, double>(x => x.Proposal, x => x.ProposalExTax, x => x.ExTax, CheckProposalOverride);
  56. LinkedProperties.Register<QuoteContractProposal, QuoteProposalLink, double>(x => x.Proposal, x => x.ProposalTax, x => x.Tax, CheckProposalOverride);
  57. LinkedProperties.Register<QuoteContractProposal, QuoteProposalLink, double>(x => x.Proposal, x => x.ProposalIncTax, x => x.IncTax, CheckProposalOverride);
  58. }
  59. private static Result<double> CheckProposalOverride(QuoteContractProposal? proposal, double value)
  60. {
  61. return proposal?.OverridePrice == true ? Result.Fail("") : Result.Ok(value);
  62. }
  63. }
  64. }