Пример #1
0
 public override string ToString()
 {
     AddReasonEntryRange(Assent?.GetReasonEntries());
     AddReasonEntryRange(Consideration?.GetReasonEntries());
     AddReasonEntryRange(Offer?.GetReasonEntries());
     return(base.ToString());
 }
Пример #2
0
        public override bool IsValid(params ILegalPerson[] persons)
        {
            var offeror = persons.Offeror();
            var offeree = persons.Offeree();

            if (!IsEnforceableInCourt)
            {
                AddReasonEntry("The contract is not enforceable in court and is therefore void.");
                return(false);
            }

            if (Consideration == null)
            {
                AddReasonEntry($"{nameof(Consideration)} is null");
                return(false);
            }

            if (!Consideration.IsValid(offeror, offeree))
            {
                AddReasonEntry($"{nameof(Consideration)}.{nameof(IsValid)} returned false");
                AddReasonEntryRange(Consideration.GetReasonEntries());
                return(false);
            }

            if (Offer == null)
            {
                AddReasonEntry($"{nameof(Offer)} is null");
                return(false);
            }

            if (!Offer.IsValid(offeror, offeree))
            {
                AddReasonEntry("the offer in invalid");
                AddReasonEntryRange(Offer.GetReasonEntries());
                return(false);
            }

            //short-circuit since this allows for no return promise
            var promissoryEstoppel = Consideration as PromissoryEstoppel <T>;

            if (promissoryEstoppel != null)
            {
                return(true);
            }

            if (!Offer.IsEnforceableInCourt)
            {
                AddReasonEntry("the offer is not enforceable in court");
                AddReasonEntryRange(Offer.GetReasonEntries());
                return(false);
            }

            if (Acceptance == null)
            {
                AddReasonEntry($"{nameof(Acceptance)} is null");
                return(false);
            }

            var returnPromise = Acceptance(Offer);

            if (returnPromise == null)
            {
                AddReasonEntry($"{nameof(returnPromise)} is null");
                return(false);
            }

            if (!returnPromise.IsEnforceableInCourt)
            {
                AddReasonEntry("the return promise is not enforceable in court");
                AddReasonEntryRange(returnPromise.GetReasonEntries());
                return(false);
            }

            if (!returnPromise.IsValid(offeror, offeree))
            {
                AddReasonEntry("the return promise is invalid");
                AddReasonEntryRange(returnPromise.GetReasonEntries());
                return(false);
            }

            if (Assent != null && !Assent.IsValid(offeror, offeree))
            {
                AddReasonEntry($"{nameof(Assent)}.{nameof(IsValid)} returned false");
                AddReasonEntryRange(Assent.GetReasonEntries());
                return(false);
            }

            return(true);
        }