public Agreement(Guid id, Store store, Producer producer, ProfileKind createdByKind, DeliveryMode delivery = null) { Id = id; StoreId = store.Id; Store = store; CreatedByKind = createdByKind; DeliveryModeId = delivery?.Id; DeliveryMode = delivery; ProducerId = producer.Id; Producer = producer; if (CreatedByKind == ProfileKind.Store) { Status = AgreementStatus.WaitingForProducerApproval; } else { Status = AgreementStatus.WaitingForStoreApproval; if (delivery == null) { throw SheaftException.Validation("Le mode de livraison est requis pour créer un partenariat avec un magasin."); } } DomainEvents = new List <DomainEvent> { new AgreementCreatedEvent(Id, createdByKind) }; }
public void SetVat(decimal?newVat) { if (Producer.NotSubjectToVat) { newVat = 0; } if (!newVat.HasValue) { throw SheaftException.Validation("La TVA est requise."); } if (newVat < 0) { throw SheaftException.Validation("La TVA ne peut être inférieure à 0%."); } if (newVat > 100) { throw SheaftException.Validation("La TVA ne peut être supérieure à 100%."); } Vat = newVat.Value; RefreshPrices(); }
public void SetConditioning(ConditioningKind conditioning, decimal quantity, UnitKind unit = UnitKind.NotSpecified) { if (conditioning == ConditioningKind.Not_Specified) { throw SheaftException.Validation("Le conditionnement est requis."); } if (conditioning != ConditioningKind.Bulk) { unit = UnitKind.NotSpecified; } if (conditioning == ConditioningKind.Bouquet || conditioning == ConditioningKind.Bunch) { quantity = 1; } if (quantity <= 0) { throw SheaftException.Validation("La quantité par conditionnement ne peut pas être inférieure à 0."); } if (conditioning == ConditioningKind.Bulk && unit == UnitKind.NotSpecified) { throw SheaftException.Validation("L'unité du type de conditionnement est requis."); } Conditioning = conditioning; QuantityPerUnit = quantity; Unit = unit; RefreshPrices(); }
public void AcceptAgreement(DeliveryMode delivery, ProfileKind acceptedByKind) { if (Status != AgreementStatus.WaitingForProducerApproval && Status != AgreementStatus.WaitingForStoreApproval) { throw SheaftException.Validation("Le partenariat ne peut pas être accepté, il n'est en attente d'acceptation."); } if (Status == AgreementStatus.WaitingForProducerApproval && acceptedByKind != ProfileKind.Producer) { throw SheaftException.Validation("Le partenariat doit être accepté par le producteur."); } if (Status == AgreementStatus.WaitingForStoreApproval && acceptedByKind != ProfileKind.Store) { throw SheaftException.Validation("Le partenariat doit être accepté par le magasin."); } if (delivery != null) { ChangeDelivery(delivery); } if (!DeliveryModeId.HasValue) { throw SheaftException.Validation("Le partenariat doit avoir un mode de livraison rattaché."); } Store.IncreaseProducersCount(); Status = AgreementStatus.Accepted; DomainEvents.Add(new AgreementAcceptedEvent(Id, acceptedByKind)); }
protected Address(string line1, string line2, string zipcode, string city, CountryIsoCode country) { if (string.IsNullOrWhiteSpace(line1)) { throw SheaftException.Validation("La ligne d'adresse est requise."); } if (string.IsNullOrWhiteSpace(zipcode)) { throw SheaftException.Validation("Le code postal est requis."); } if (string.IsNullOrWhiteSpace(city)) { throw SheaftException.Validation("La ville est requise."); } Line1 = line1; Line2 = line2; City = city; Country = country; if (zipcode.Length == 5) { Zipcode = zipcode; } }
public void SetDeliveryFees(DeliveryFeesApplication?feesApplication, decimal?fees, decimal?minAmount) { if (fees is <= 0) { throw SheaftException.Validation("Le forfait de livraison doit être supérieur à 0€"); } if (minAmount is <= 0) { throw SheaftException.Validation("Le montant minimum de commande pour appliquer le forfait doit être supérieur à 0€"); } if (feesApplication is DeliveryFeesApplication.TotalLowerThanPurchaseOrderAmount && !minAmount.HasValue) { throw SheaftException.Validation("Le montant minimum de commande pour appliquer le forfait est requis."); } if (feesApplication is DeliveryFeesApplication.TotalLowerThanPurchaseOrderAmount && minAmount < AcceptPurchaseOrdersWithAmountGreaterThan) { throw SheaftException.Validation("Le montant minimum de commande pour appliquer le forfait de livraison doit être supérieur au montant minimum d'acceptation de commande."); } ApplyDeliveryFeesWhen = feesApplication; DeliveryFeesMinPurchaseOrdersAmount = minAmount; DeliveryFeesWholeSalePrice = fees.HasValue ? Math.Round(fees.Value, 2, MidpointRounding.AwayFromZero) : null; DeliveryFeesVatPrice = DeliveryFeesWholeSalePrice.HasValue ? Math.Round(DeliveryFeesWholeSalePrice.Value * 0.20m, 2, MidpointRounding.AwayFromZero) : null; DeliveryFeesOnSalePrice = DeliveryFeesWholeSalePrice.HasValue && DeliveryFeesVatPrice.HasValue ? Math.Round(DeliveryFeesWholeSalePrice.Value * 1.20m, 2, MidpointRounding.AwayFromZero) : null; }
public void AddPurchaseOrders(IEnumerable <PurchaseOrder> purchaseOrders) { if (purchaseOrders == null || !purchaseOrders.Any()) { throw SheaftException.Validation("La préparation requiert une commande à minima."); } if (purchaseOrders.Any(po => po.Status != PurchaseOrderStatus.Waiting && po.Status != PurchaseOrderStatus.Accepted && po.Status != PurchaseOrderStatus.Processing)) { throw SheaftException.Validation( "Seule des commandes en attente ou acceptées peuvent être ajoutées à une préparation."); } if (Status == PickingStatus.Completed) { throw SheaftException.Validation( "Impossible de modifier les commandes d'une préparation qui est terminée."); } PurchaseOrders ??= new List <PurchaseOrder>(); foreach (var purchaseOrder in purchaseOrders) { if (purchaseOrder.PickingId.HasValue) { purchaseOrder.Picking.RemovePurchaseOrders(new List <PurchaseOrder> { purchaseOrder }); } if (purchaseOrder.Status == PurchaseOrderStatus.Waiting) { purchaseOrder.Accept(true); } PurchaseOrders.Add(purchaseOrder); } ProductsToPrepare ??= new List <PickingProduct>(); foreach (var purchaseOrder in purchaseOrders) { foreach (var purchaseOrderProduct in purchaseOrder.Products) { ProductsToPrepare.Add(new PickingProduct(purchaseOrderProduct, purchaseOrder.Id, purchaseOrderProduct.Quantity)); } } if (Status == PickingStatus.InProgress) { foreach (var purchaseOrder in purchaseOrders) { purchaseOrder.SetStatus(PurchaseOrderStatus.Processing, true); } } Refresh(); }
public void SkipDelivery() { if (Status is DeliveryStatus.Delivered) { throw SheaftException.Validation("La livraison est déjà validée."); } Status = DeliveryStatus.Skipped; }
public void SetCommand <T>(T command) where T : class { if (command == null) { throw SheaftException.Validation("La commande à executer par cette tâche est requise."); } Command = JsonConvert.SerializeObject(command); }
public void SetReference(string reference) { if (string.IsNullOrWhiteSpace(reference)) { throw SheaftException.Validation("La référence est requise."); } Reference = reference; }
public void SetEmail(string email) { if (string.IsNullOrWhiteSpace(email)) { throw SheaftException.Validation("L'email de contact de l'entreprise est requis."); } Email = email; }
public void SetAsBilled() { if (Status != DeliveryStatus.Delivered) { throw SheaftException.Validation("La livraison n'a pas encore été validée."); } BilledOn = DateTimeOffset.UtcNow; }
public void Pause() { if (Status != PickingStatus.InProgress) { throw SheaftException.Validation("La préparation n'est pas en cours de traitement."); } Status = PickingStatus.Paused; }
public void SetEmail(string email) { if (email.IsNotNullAndIsEmptyOrWhiteSpace()) { throw SheaftException.Validation("L'email est requis."); } Email = email; }
public void SetLastname(string lastName) { if (string.IsNullOrWhiteSpace(lastName)) { throw SheaftException.Validation("Le nom du représentant légal est requis."); } LastName = lastName; }
public void SetFirstname(string firstName) { if (string.IsNullOrWhiteSpace(firstName)) { throw SheaftException.Validation("Le prénom du représentant légal est requis."); } FirstName = firstName; }
public void SetAsReady() { if (Status != RecallStatus.Waiting) { throw SheaftException.Validation("La campagne n'est pas en attente."); } Status = RecallStatus.Ready; }
public void SetName(string name) { if (string.IsNullOrEmpty(name)) { throw SheaftException.Validation("Le nom du catalogue est requis."); } Name = name; }
public void SetWholeSalePrice(decimal newPrice) { if (newPrice <= 0) { throw SheaftException.Validation("Le prix doit être supérieur à 0€."); } WholeSalePrice = Math.Round(newPrice, DIGITS_COUNT, MidpointRounding.AwayFromZero); }
public void SetAcceptPurchaseOrdersWithAmountGreaterThan(decimal?amount) { if (amount is < 0) { throw SheaftException.Validation("Le montant minimum de commande doit être supérieur ou égal à 0€"); } AcceptPurchaseOrdersWithAmountGreaterThan = amount; }
public void SetName(string name) { if (string.IsNullOrWhiteSpace(name)) { throw SheaftException.Validation("Le nom de l'entreprise est requis."); } Name = name; }
public void SetName(string name) { if (string.IsNullOrWhiteSpace(name)) { throw SheaftException.Validation("Le nom du mode de livraison est requis."); } Name = name; }
public void SetSiret(string siret) { if (siret.IsNotNullAndIsEmptyOrWhiteSpace()) { throw SheaftException.Validation("Le numéro de SIRET est requis."); } Siret = siret.Trim(); }
public void SetVatIdentifier(string vatNumber) { if (vatNumber.IsNotNullAndIsEmptyOrWhiteSpace()) { throw SheaftException.Validation("Le numéro de TVA est requis."); } VatIdentifier = vatNumber; }
public override void SetKind(LegalKind kind) { if (kind == LegalKind.Natural) { throw SheaftException.Validation("Une statut légal d'une société ne peut pas être de type personnel."); } base.SetKind(kind); }
protected void SetUserName(string name) { if (name.IsNotNullAndIsEmptyOrWhiteSpace()) { throw SheaftException.Validation("Le nom d'utilisateur est requis."); } Name = name; }
public override void SetKind(LegalKind kind) { if (kind != LegalKind.Natural) { throw SheaftException.Validation("Le statut légal de l'entité doit être de type personnel."); } base.SetKind(kind); }
public void RemovePurchaseOrders(IEnumerable <PurchaseOrder> purchaseOrders) { if (Status != DeliveryStatus.Waiting) { throw SheaftException.Validation( "Impossible de modifier les commandes d'une livraison qui n'est pas en attente"); } if (PurchaseOrders == null) { throw SheaftException.NotFound("Cette livraison ne contient pas de commandes."); } foreach (var purchaseOrder in purchaseOrders) { foreach (var purchaseOrderProduct in purchaseOrder.Products) { var preparedQuantity = 0; if (purchaseOrder.PickingId.HasValue) { var preparedProduct = purchaseOrder.Picking.PreparedProducts.FirstOrDefault(p => p.ProductId == purchaseOrderProduct.ProductId && p.PurchaseOrderId == purchaseOrder.Id); if (preparedProduct != null) { preparedQuantity = preparedProduct.Quantity; } } else { preparedQuantity = purchaseOrderProduct.Quantity; } var existingProduct = Products.FirstOrDefault(p => p.ProductId == purchaseOrderProduct.ProductId && p.RowKind == ModificationKind.ToDeliver); if (existingProduct == null) { continue; } existingProduct.RemoveQuantity(preparedQuantity); if (existingProduct.Quantity <= 0) { foreach (var productToRemove in Products .Where(p => p.ProductId == purchaseOrderProduct.ProductId).ToList()) { Products.Remove(productToRemove); } } } PurchaseOrders.Remove(purchaseOrder); } Refresh(); }
public void CompleteBatch(bool partial = false) { if (Deliveries.Any(d => d.Status != DeliveryStatus.Delivered && d.Status != DeliveryStatus.Rejected)) { throw SheaftException.Validation("La tournée contient des livraisons en cours."); } CompletedOn = DateTimeOffset.UtcNow; Status = partial ? DeliveryBatchStatus.Partial : DeliveryBatchStatus.Completed; }
public StoreTag(Tag tag) { if (tag == null) { throw SheaftException.Validation("Le tag du magasin est introuvable."); } Tag = tag; TagId = tag.Id; }