QuoteContractProposal.cs 3.3 KB

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