public DeliverSalesOrderConfirmViewModel(
     IServiceBundle serviceBundle,
     ISalesOrderWorkItemRepository salesOrderWorkItemRepository,
     ISignatureWorkItemRepository signatureWorkItemRepository,
     ISalesOrderRepository salesOrderRepository,
     ISalesOrderDeliveryNotificationRepository salesOrderDeliveryNotificationRepositoy,
     ISyncService syncService
     ) : base(serviceBundle)
 {
     _salesOrderWorkItemRepository            = salesOrderWorkItemRepository;
     _signatureWorkItemRepository             = signatureWorkItemRepository;
     _salesOrderRepository                    = salesOrderRepository;
     _salesOrderDeliveryNotificationRepositoy = salesOrderDeliveryNotificationRepositoy;
     _syncService = syncService;
 }
        /// <inheritdoc />
        public async Task <bool> CompleteSalesOrderDelivery(
            ISalesOrderWorkItemRepository salesOrderWorkItemRepository,
            ISignatureWorkItemRepository signatureWorkItemRepository,
            bool isDriverSignature,
            string salesOrderNumber,
            string encodedSignature,
            bool sendNotification = true
            )
        {
            // Signature is required, do nothing.
            if (string.IsNullOrWhiteSpace(encodedSignature))
            {
                return(false);
            }

            var workItems = await salesOrderWorkItemRepository.TryGetSalesOrderWorkItems(salesOrderNumber).ConfigureAwait(false);

            // No work items (weird), do nothing.
            if (workItems.Count == 0)
            {
                return(false);
            }

            var position = await _locationService.GetPositionAsync().ConfigureAwait(false);

            var userId = _configurationService.GetString(Constants.Config.UserId);

            // Set all sales order work item instances to delivered state.
            await Task.WhenAll(workItems.Select(item => SetSalesOrderWorkItemToDelivered(
                                                    salesOrderWorkItemRepository,
                                                    item,
                                                    position,
                                                    userId
                                                    )));

            // Create a new SignatureWorkItem instance.
            await signatureWorkItemRepository.TryCreateSignatureWorkItem(new SignatureWorkItem
            {
                SalesOrderNumber      = salesOrderNumber,
                EncodedSignatureImage = encodedSignature,
                IsDriverSignature     = isDriverSignature,
                SendNotification      = sendNotification
            }).ConfigureAwait(false);

            return(true);
        }