Ejemplo n.º 1
0
        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));
        }
Ejemplo n.º 2
0
        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));
        }