QuoteContractProposal.cs 3.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  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>
  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.ExTax)
  24. .Add(x=>x.Tax)
  25. .Add(x=>x.IncTax);
  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 double Price { get; set; }
  38. private class ExTaxFormula : ComplexFormulaGenerator<QuoteContractProposal, double>
  39. {
  40. public override IComplexFormulaNode<QuoteContractProposal, double> GetFormula() => If<double>(
  41. x => Property(x => x.Price),
  42. Condition.Equals,
  43. x => Constant(0.0))
  44. .Then(Property(x=>x.Proposal.ExTax))
  45. .Else(Property(x=>x.Price));
  46. }
  47. [CurrencyEditor(Visible = Visible.Optional, Editable = Editable.Hidden, Summary = Summary.Sum)]
  48. [ComplexFormula(typeof(ExTaxFormula))]
  49. [EditorSequence(3)]
  50. public double ExTax { get; set; }
  51. private class TaxFormula : ComplexFormulaGenerator<QuoteContractProposal, double>
  52. {
  53. public override IComplexFormulaNode<QuoteContractProposal, double> GetFormula() => If<double>(
  54. x => Property(x => x.Price),
  55. Condition.Equals,
  56. x => Constant(0.0))
  57. .Then(Property(x=>x.Proposal.Tax))
  58. .Else(Formula(FormulaOperator.Multiply, Property(x=>x.Price), Property(x=>x.Proposal.TaxCode.Rate), Constant(0.01)));
  59. }
  60. [CurrencyEditor(Visible = Visible.Optional, Editable = Editable.Hidden, Summary = Summary.Sum)]
  61. [ComplexFormula(typeof(TaxFormula))]
  62. [EditorSequence(5)]
  63. public double Tax { get; set; }
  64. private class IncTaxFormula : ComplexFormulaGenerator<QuoteContractProposal, double>
  65. {
  66. public override IComplexFormulaNode<QuoteContractProposal, double> GetFormula() => If<double>(
  67. x => Property(x => x.Price),
  68. Condition.Equals,
  69. x => Constant(0.0))
  70. .Then(Property(x=>x.Proposal.IncTax))
  71. .Else(Formula(FormulaOperator.Add, Property(x=>x.Price), Property(x=>x.Tax)));
  72. }
  73. [CurrencyEditor(Visible = Visible.Default, Editable = Editable.Hidden, Summary = Summary.Sum)]
  74. [ComplexFormula(typeof(IncTaxFormula))]
  75. [EditorSequence(6)]
  76. public double IncTax { get; set; }
  77. }
  78. }