public async Task <Order> UpdateAsync(Order order) { var query = new QuerySet(); query.Include.Fields = new string[] { "customer", "building", "contact", "offer", "vat-rate", "technicians" }; var existingOrder = await _orderDataProvider.GetByIdAsync(order.Id, query); if (order.Id != existingOrder.Id) { throw new IllegalArgumentException("IllegalAttribute", "Order id cannot be updated."); } if (order.OfferNumber != existingOrder.OfferNumber) { throw new IllegalArgumentException("IllegalAttribute", "Offer number cannot be updated."); } if (order.RequestNumber != existingOrder.RequestNumber) { throw new IllegalArgumentException("IllegalAttribute", "Request number cannot be updated."); } if (order.OrderDate == null) { throw new IllegalArgumentException("IllegalAttribute", "Order-date is required."); } await EmbedRelations(order, existingOrder); if (order.Customer == null) { throw new IllegalArgumentException("IllegalAttribute", "Customer is required."); } if (order.Offer == null) { throw new IllegalArgumentException("IllegalAttribute", "Offer is required."); } if (order.Contact != null && order.Contact.Customer != null && order.Contact.Customer.Id != order.Customer.Id) { throw new IllegalArgumentException("IllegalAttribute", $"Contact is not attached to customer {order.Contact.Id}."); } if (order.Building != null && order.Building.Customer != null && order.Building.Customer.Id != order.Customer.Id) { throw new IllegalArgumentException("IllegalAttribute", $"Building is not attached to customer {order.Customer.Id}."); } return(await _orderDataProvider.UpdateAsync(order)); }
public async Task <Order> UpdateAsync(Order order) { var query = new QuerySet(); query.Include.Fields = new string[] { "customer", "building", "contact", "offer", "vat-rate" }; var existingOrder = await _orderDataProvider.GetByIdAsync(order.Id, query); if (order.Id != existingOrder.Id) { throw new IllegalArgumentException("IllegalAttribute", "Order id cannot be updated."); } if (order.OfferNumber != existingOrder.OfferNumber) { throw new IllegalArgumentException("IllegalAttribute", "Offer number cannot be updated."); } if (order.RequestNumber != existingOrder.RequestNumber) { throw new IllegalArgumentException("IllegalAttribute", "Request number cannot be updated."); } if (order.OrderDate == null) { throw new IllegalArgumentException("IllegalAttribute", "Order-date is required."); } if (order.PlanningMsObjectId != existingOrder.PlanningMsObjectId) { throw new IllegalArgumentException("IllegalAttribute", "Calendar properties cannot be updated."); } await EmbedRelations(order, existingOrder); if (order.Customer == null) { throw new IllegalArgumentException("IllegalAttribute", "Customer is required."); } if (order.Offer == null) { throw new IllegalArgumentException("IllegalAttribute", "Offer is required."); } if (order.Contact != null && order.Contact.Customer != null && order.Contact.Customer.Id != order.Customer.Id) { throw new IllegalArgumentException("IllegalAttribute", $"Contact is not attached to customer {order.Contact.Id}."); } if (order.Building != null && order.Building.Customer != null && order.Building.Customer.Id != order.Customer.Id) { throw new IllegalArgumentException("IllegalAttribute", $"Building is not attached to customer {order.Customer.Id}."); } if (order.PlanningMsObjectId != null && order.PlanningDate == null) { order = await _graphApiService.DeleteEventForPlanningAsync(order); } else if (order.PlanningMsObjectId != null && order.PlanningDate != existingOrder.PlanningDate) { // TODO check on other properties than date only whether event must be updated order = await _graphApiService.UpdateEventForPlanningAsync(order); } else if (order.PlanningMsObjectId == null && order.PlanningDate != null) { order = await _graphApiService.CreateEventForPlanningAsync(order); } return(await _orderDataProvider.UpdateAsync(order)); }