/// <summary>
            /// Registers the clock in/ clock out request from the employee.
            /// </summary>
            /// <param name="context">The request context.</param>
            /// <param name="isClockIn">Whether this is a clockIn request (true) or clockOut (false).</param>
            /// <returns>Returns the activity DateTimeOffset in channel local time zone.</returns>
            private static DateTimeOffset RegisterClockInAndOut(RequestContext context, bool isClockIn)
            {
                ThrowIf.Null(context, "context");

                var request = new EmployeeClockInOutRealtimeRequest(
                    context.GetPrincipal().UserId,
                    context.GetTerminal().TerminalId,
                    isClockIn);

                return(context.Execute <SingleEntityDataServiceResponse <DateTimeOffset> >(request).Entity);
            }
            /// <summary>
            /// Invoked after request has been processed by <see cref="IRequestHandler"/>.
            /// </summary>
            /// <param name="request">The request message processed by handler.</param>
            /// <param name="response">The response message generated by handler.</param>
            public void OnExecuted(Request request, Response response)
            {
                ThrowIf.Null(request, "request");

                Type requestType = request.GetType();

                if (requestType == typeof(GetCartsDataRequest))
                {
                    OnGetCartsExecuted((GetCartsDataRequest)request, (EntityDataServiceResponse <SalesTransaction>)response);
                }
            }
            /// <summary>
            /// Adds or updates reason code lines for cart level reason code lines.
            /// </summary>
            /// <param name="salesTransaction">The sales transaction.</param>
            /// <param name="cart">The cart to update or add.</param>
            public static void AddOrUpdateReasonCodeLinesOnTransaction(SalesTransaction salesTransaction, Cart cart)
            {
                ThrowIf.Null(salesTransaction, "salesTransaction");
                ThrowIf.Null(cart, "cart");

                if (cart.ReasonCodeLines != null &&
                    cart.ReasonCodeLines.Any())
                {
                    AddOrUpdateReasonCodeLinesHelper(salesTransaction.ReasonCodeLines, cart.ReasonCodeLines, salesTransaction.Id, string.Empty, ReasonCodeLineType.Header);
                }
            }
        public PutCustomPropertyRequest(IFabricClient fabricClient, Uri name, string propertyName, T data, TimeSpan timeout)
            : base(fabricClient, timeout)
        {
            ThrowIf.Null(name, "name");
            ThrowIf.NullOrEmpty(propertyName, "propertyName");

            this.Name         = name;
            this.PropertyName = propertyName;
            this.Data         = data;
            this.ConfigureErrorCodes();
        }
            /// <summary>
            /// Gets a button grids by identifiers.
            /// </summary>
            /// <param name="request">The get button grids data request.</param>
            /// <returns>
            /// Collection of matching button grids.
            /// </returns>
            private EntityDataServiceResponse <ButtonGrid> GetButtonsGrids(GetButtonGridsDataRequest request)
            {
                ThrowIf.Null(request, "request");
                ThrowIf.Null(request.ButtonGridIds, "request.ButtonGridIds");
                ThrowIf.Null(request.QueryResultSettings, "request.QueryResultSettings");

                PagedResult <ButtonGrid> buttonGrids = null;

                // Default query to retrieve all the button grids.
                var query = new SqlPagedQuery(request.QueryResultSettings)
                {
                    From    = ButtonGridsView,
                    OrderBy = ButtonGrid.ButtonGridIdColumn
                };

                // Update query when only one button grid is retrieved.
                if (request.ButtonGridIds.Count() == 1)
                {
                    query.Where = string.Format("{0} = @{0}", ButtonGrid.ButtonGridIdColumn);
                    query.Parameters[string.Format("@{0}", ButtonGrid.ButtonGridIdColumn)] = request.ButtonGridIds.FirstOrDefault();
                }

                // Update query for retrieving multiple button grids.
                if (request.ButtonGridIds.HasMultiple())
                {
                    using (StringIdTableType buttonGridIdTableType = new StringIdTableType(request.ButtonGridIds, ButtonGrid.ButtonGridIdColumn))
                    {
                        query.Parameters[ButtonGridIdTableTypeParameterName] = buttonGridIdTableType;

                        // Query execution for retrieving multiple button grids.
                        buttonGrids = this.ExecuteQuery <ButtonGrid>(query, request.RequestContext);
                    }
                }
                else
                {
                    // Query execution for retrieving one or all the button grids.
                    buttonGrids = this.ExecuteQuery <ButtonGrid>(query, request.RequestContext);
                }

                // Get the button grid buttons.
                if (buttonGrids != null && buttonGrids.Results != null)
                {
                    var buttonGridIds = buttonGrids.Results.Select(b => b.Id);

                    ReadOnlyCollection <ButtonGridButton> buttons = this.GetButtonGridButtons(buttonGridIds, request.RequestContext).Results;

                    foreach (var buttonGrid in buttonGrids.Results)
                    {
                        buttonGrid.Buttons = buttons.Where(b => string.Equals(b.ButtonGridId, buttonGrid.Id, StringComparison.OrdinalIgnoreCase));
                    }
                }

                return(new EntityDataServiceResponse <ButtonGrid>(buttonGrids));
            }
            /// <summary>
            /// Executes the workflow to retrieve changed products.
            /// </summary>
            /// <param name="request">The request.</param>
            /// <returns>The response.</returns>
            protected override VerifyProductExistenceResponse Process(VerifyProductExistenceRequest request)
            {
                ThrowIf.Null(request, "request");

                VerifyProductExistenceDataRequest       dataRequest = new VerifyProductExistenceDataRequest(request.Criteria, request.QueryResultSettings);
                ReadOnlyCollection <ProductExistenceId> ids         = this.Context.Runtime.Execute <EntityDataServiceResponse <ProductExistenceId> >(dataRequest, this.Context).PagedEntityCollection.Results;

                VerifyProductExistenceResponse response = new VerifyProductExistenceResponse(ids);

                return(response);
            }
            /// <summary>
            /// Sets the line level delivery options.
            /// </summary>
            /// <param name="salesTransaction">The sales transaction being updated.</param>
            /// <param name="lineDeliverySpecifications">The delivery specifications at the line level.</param>
            /// <returns>Updated sales transaction.</returns>
            private SalesTransaction UpdateLineLevelDeliveryOptions(SalesTransaction salesTransaction, IEnumerable <LineDeliverySpecification> lineDeliverySpecifications)
            {
                ThrowIf.Null(lineDeliverySpecifications, "lineDeliverySpecifications");

                // Clear header level delivery information.
                salesTransaction.DeliveryMode    = null;
                salesTransaction.ShippingAddress = null;

                Dictionary <string, LineDeliverySpecification> lineDeliverySpecificationsByLineId = lineDeliverySpecifications.ToDictionary(k => k.LineId);

                foreach (var salesLine in salesTransaction.SalesLines)
                {
                    if (salesLine != null)
                    {
                        LineDeliverySpecification currentLineDeliverySpecification;

                        if (lineDeliverySpecificationsByLineId.TryGetValue(salesLine.LineId, out currentLineDeliverySpecification))
                        {
                            ClearLineLevelDeliveryValues(salesLine);

                            DeliverySpecification currentDeliverySpecification = currentLineDeliverySpecification.DeliverySpecification;

                            this.ValidateDeliveryMode(currentDeliverySpecification.DeliveryModeId);

                            salesLine.DeliveryMode = currentDeliverySpecification.DeliveryModeId;

                            switch (currentDeliverySpecification.DeliveryPreferenceType)
                            {
                            case DeliveryPreferenceType.ShipToAddress:
                                salesLine.ShippingAddress = currentDeliverySpecification.DeliveryAddress;
                                break;

                            case DeliveryPreferenceType.PickupFromStore:
                                salesLine.ShippingAddress    = currentDeliverySpecification.DeliveryAddress;
                                salesLine.FulfillmentStoreId = currentDeliverySpecification.PickUpStoreId;
                                break;

                            case DeliveryPreferenceType.ElectronicDelivery:
                                UpdateElectronicDeliveryInfo(
                                    salesLine,
                                    currentDeliverySpecification.ElectronicDeliveryEmailAddress,
                                    currentDeliverySpecification.ElectronicDeliveryEmailContent);
                                break;

                            default:
                                var message = string.Format("Unsupported delivery preference type [{0}] is specified.", currentDeliverySpecification.DeliveryPreferenceType);
                                throw new InvalidOperationException(message);
                            }
                        }
                    }
                }

                return(salesTransaction);
            }
Example #8
0
            /// <summary>
            /// Executes the workflow to retrieve customer loyalty information.
            /// </summary>
            /// <param name="request">The request.</param>
            /// <returns>The response.</returns>
            protected override UpdateCustomerResponse Process(UpdateCustomerRequest request)
            {
                ThrowIf.Null(request, "request");

                CustomerHelper.ValidateAddresses(this.Context, request.UpdatedCustomer.Addresses);

                var saveCustomerServiceRequest  = new SaveCustomerServiceRequest(request.UpdatedCustomer);
                var saveCustomerServiceResponse = this.Context.Execute <SaveCustomerServiceResponse>(saveCustomerServiceRequest);

                return(new UpdateCustomerResponse(saveCustomerServiceResponse.UpdatedCustomer));
            }
        public StartNodeTransitionRequest(IFabricClient fabricClient, NodeTransitionDescription description, TimeSpan timeout)
            : base(fabricClient, timeout)
        {
            ThrowIf.Null(description, "description");

            this.Description = description;

            this.RetryErrorCodes.Add((uint)NativeTypes.FABRIC_ERROR_CODE.FABRIC_E_NOT_READY);
            this.RetryErrorCodes.Add((uint)NativeTypes.FABRIC_ERROR_CODE.FABRIC_E_RECONFIGURATION_PENDING);

            this.SucceedErrorCodes.Add((uint)NativeTypes.FABRIC_ERROR_CODE.FABRIC_E_TEST_COMMAND_OPERATION_ID_ALREADY_EXISTS);
        }
            /// <summary>
            /// Helper methods to calculates the required reason codes.
            /// </summary>
            /// <param name="requestContext">The request context.</param>
            /// <param name="serviceRequest">The service request.</param>
            /// <exception cref="ConfigurationException">Required Service missing: {0}.</exception>
            private static void CalculateRequiredReasonCodesHelper(RequestContext requestContext, CalculateRequiredReasonCodesServiceRequest serviceRequest)
            {
                ThrowIf.Null(serviceRequest.SalesTransaction, "serviceRequest.SalesTransaction");

                // Reason codes are only calculated for retail stores and carts that are not customer orders.
                if ((requestContext.GetChannelConfiguration().ChannelType == RetailChannelType.RetailStore) &&
                    (serviceRequest.SalesTransaction.CartType != CartType.CustomerOrder))
                {
                    var serviceResponse = requestContext.Execute <CalculateRequiredReasonCodesServiceResponse>(serviceRequest);
                    ReasonCodesWorkflowHelper.ThrowIfRequiredReasonCodesMissing(serviceResponse);
                }
            }
        public RemoveApplicationPackageRequest(
            IFabricClient fabricClient,
            string imageStoreConnectionString,
            string applicationPackagePathInImageStore,
            TimeSpan timeout)
            : base(fabricClient, timeout)
        {
            ThrowIf.Null(applicationPackagePathInImageStore, "applicationPackagePathInImageStore");

            this.ImageStoreConnectionString         = imageStoreConnectionString;
            this.ApplicationPackagePathInImageStore = applicationPackagePathInImageStore;
        }
            /// <summary>
            /// Unlocks the gift cards that are on active sales lines.
            /// </summary>
            /// <param name="context">The context.</param>
            /// <param name="salesTransaction">The sales transaction.</param>
            internal static void UnlockGiftCardsOnActiveSalesLines(RequestContext context, SalesTransaction salesTransaction)
            {
                ThrowIf.Null(context, "context");
                ThrowIf.Null(salesTransaction, "salesTransaction");

                IEnumerable <SalesLine> activeGiftCardLines = salesTransaction.SalesLines.Where(l => l.IsGiftCardLine && !l.IsVoided);

                foreach (SalesLine line in activeGiftCardLines)
                {
                    GiftCardWorkflowHelper.UnlockGiftCard(context, line.GiftCardId);
                }
            }
        public UpdateApplicationRequest(
            IFabricClient fabricClient,
            ApplicationUpdateDescription updateDescription,
            TimeSpan timeout)
            : base(fabricClient, timeout)
        {
            ThrowIf.Null(updateDescription, "ApplicationUpdateDescription");

            this.UpdateDescription = updateDescription;

            this.ConfigureErrorCodes();
        }
Example #14
0
            /// <summary>
            /// The data service method to execute the data manager to get the device configuration.
            /// </summary>
            /// <param name="request">The data service request.</param>
            /// <returns>The data service response.</returns>
            private SingleEntityDataServiceResponse <DeviceConfiguration> GetDeviceConfiguration(GetDeviceConfigurationDataRequest request)
            {
                ThrowIf.Null(request, "request");
                ThrowIf.Null(request.RequestContext, "request.RequestContext");
                ThrowIf.Null(request.QueryResultSettings, "request.QueryResultSettings");

                ICommercePrincipal principal = request.RequestContext.GetPrincipal();

                if (principal.IsChannelAgnostic || principal.IsTerminalAgnostic || string.IsNullOrWhiteSpace(principal.DeviceNumber))
                {
                    throw new InvalidOperationException("Current request context is not associated to a device.");
                }

                Terminal terminal = request.RequestContext.GetTerminal();

                ParameterSet parameters = new ParameterSet();
                Tuple <PagedResult <DeviceConfiguration>,
                       ReadOnlyCollection <HardwareConfiguration>,
                       ReadOnlyCollection <HardwareConfiguration>,
                       ReadOnlyCollection <HardwareConfiguration> > dataSets = null;

                parameters[DatabaseAccessor.ChannelIdVariableName] = terminal.ChannelId;
                parameters[TerminalIdVariableName]    = terminal.TerminalId;
                parameters[IncludeImagesVariableName] = request.IncludeImages;

                using (SqlServerDatabaseContext databaseContext = new SqlServerDatabaseContext(request.RequestContext, request.QueryResultSettings))
                {
                    dataSets = databaseContext.ExecuteStoredProcedure <DeviceConfiguration, HardwareConfiguration, HardwareConfiguration, HardwareConfiguration>(GetDeviceConfigurationSprocName, parameters);
                }

                DeviceConfiguration deviceConfiguration             = dataSets.Item1.SingleOrDefault();
                ReadOnlyCollection <HardwareConfiguration> drawers  = dataSets.Item2;
                ReadOnlyCollection <HardwareConfiguration> printers = dataSets.Item3;
                ReadOnlyCollection <HardwareConfiguration> pinpads  = dataSets.Item4;

                if (deviceConfiguration != null)
                {
                    deviceConfiguration.HardwareConfigurations = new HardwareConfigurations();
                    deviceConfiguration.HardwareConfigurations.CashDrawerConfigurations.AddRange(drawers);
                    deviceConfiguration.HardwareConfigurations.PrinterConfigurations.AddRange(printers);
                    deviceConfiguration.HardwareConfigurations.PinPadConfiguration = pinpads.SingleOrDefault();
                }

                GetDeviceDataRequest getDeviceRequest = new GetDeviceDataRequest(principal.DeviceNumber);
                Device device = request.RequestContext.Execute <SingleEntityDataServiceResponse <Device> >(getDeviceRequest).Entity;

                if (deviceConfiguration != null && device != null)
                {
                    deviceConfiguration.UseInMemoryDeviceDataStorage = device.UseInMemoryDeviceDataStorage;
                }

                return(new SingleEntityDataServiceResponse <DeviceConfiguration>(deviceConfiguration));
            }
Example #15
0
            /// <summary>
            /// Processes the GetXZReportReceiptRequest to return the X or Z report receipts. The request should not be null.
            /// </summary>
            /// <param name="request">The request parameter.</param>
            /// <returns>The GetReceiptResponse.</returns>
            protected override GetReceiptResponse Process(GetXAndZReportReceiptRequest request)
            {
                ThrowIf.Null(request, "request");

                var getReceiptServiceRequest  = this.CreateXZReportReceiptServiceRequest(request);
                var getReceiptServiceResponse = this.Context.Execute <GetReceiptServiceResponse>(getReceiptServiceRequest);

                // Save the transaction log for printing X or X report
                this.LogTransaction(request);

                return(new GetReceiptResponse(getReceiptServiceResponse.Receipts));
            }
Example #16
0
        protected static CommandDefinition CreateCommand(string commandText, object?parameters, IDbTransaction?transaction, CancellationToken cancellationToken)
        {
            ThrowIf.Null(commandText, nameof(commandText));

            return(new CommandDefinition
                   (
                       commandText: commandText,
                       parameters: parameters,
                       transaction: transaction,
                       cancellationToken: cancellationToken
                   ));
        }
Example #17
0
            /// <summary>
            /// Executes the workflow for a get price check for a product.
            /// </summary>
            /// <param name="request">The request.</param>
            /// <returns>The response.</returns>
            protected override PriceCheckResponse Process(PriceCheckRequest request)
            {
                ThrowIf.Null(request, "request");

                ItemBarcode itemBarcode = null;

                if (string.IsNullOrEmpty(request.Barcode) && string.IsNullOrEmpty(request.ItemId))
                {
                    throw new DataValidationException(DataValidationErrors.Microsoft_Dynamics_Commerce_Runtime_ItemIdBarcodeMissing, "Either an item identifier or barcode is required.");
                }

                if (string.IsNullOrEmpty(request.ItemId))
                {
                    GetProductBarcodeDataRequest dataRequest = new GetProductBarcodeDataRequest(request.Barcode);
                    itemBarcode = this.Context.Runtime.Execute <GetProductBarcodeDataResponse>(dataRequest, this.Context).Barcode;
                }

                SalesTransaction salesTransaction = new SalesTransaction()
                {
                    Id         = Guid.NewGuid().ToString(),
                    CustomerId = request.CustomerAccountNumber,
                };

                SalesLine salesLine = new SalesLine()
                {
                    ItemId = request.ItemId,
                    InventoryDimensionId    = request.InventoryDimensionId ?? itemBarcode.InventoryDimensionId,
                    SalesOrderUnitOfMeasure = request.UnitOfMeasureSymbol ?? itemBarcode.UnitId,
                    Quantity = 1m,
                    LineId   = Guid.NewGuid().ToString()
                };

                salesTransaction.SalesLines.Add(salesLine);

                GetIndependentPriceDiscountServiceRequest priceRequest = new GetIndependentPriceDiscountServiceRequest(salesTransaction);

                GetPriceServiceResponse pricingServiceResponse = this.Context.Execute <GetPriceServiceResponse>(priceRequest);

                SalesLine resultLine = pricingServiceResponse.Transaction.SalesLines[0];

                ProductPrice productPrice = GetProductPrice(
                    resultLine.ItemId,
                    resultLine.InventoryDimensionId,
                    resultLine.BasePrice,
                    resultLine.TotalAmount,
                    this.Context.GetChannelConfiguration().Currency);

                var productPrices = new List <ProductPrice> {
                    productPrice
                };

                return(new PriceCheckResponse(productPrices.AsPagedResult()));
            }
            /// <summary>
            /// Register the time for employee break.
            /// </summary>
            /// <param name="context">The request context.</param>
            /// <param name="jobId">The job identifier.</param>
            /// <returns>Returns the activity DateTimeOffset in channel local time zone.</returns>
            public static DateTimeOffset RegisterEmployeeBreak(RequestContext context, string jobId)
            {
                ThrowIf.Null(context, "context");
                ThrowIf.NullOrWhiteSpace(jobId, "jobId");

                var request = new RegisterEmployeeBreakRealtimeRequest(
                    context.GetPrincipal().UserId,
                    context.GetTerminal().TerminalId,
                    jobId);

                return(context.Execute <SingleEntityDataServiceResponse <DateTimeOffset> >(request).Entity);
            }
Example #19
0
        public PatientController
        (
            IPatientService patientService,
            ILogger <PatientController> logger
        )
        {
            ThrowIf.Null(patientService, nameof(patientService));
            ThrowIf.Null(logger, nameof(logger));

            _patientService = patientService;
            _logger         = logger;
        }
Example #20
0
            /// <summary>
            /// Upload an offline sales order.
            /// </summary>
            /// <param name="request">The request.</param>
            /// <returns>The response.</returns>
            protected override UploadOrderResponse Process(UploadOrderRequest request)
            {
                ThrowIf.Null(request, "request");

                request.Order.ValidateSalesOrder(this.Context);

                var saveTransactionRequest = new SaveSalesTransactionDataRequest(request.Order);

                this.Context.Runtime.Execute <NullResponse>(saveTransactionRequest, this.Context);

                return(new UploadOrderResponse());
            }
        /// <summary>
        /// Construct the Payment Device class and open the connection from it.
        /// </summary>
        /// <returns>The response.</returns>
        /// <param name="request">Open payment terminal device request.</param>
        private NullResponse Open(OpenPaymentTerminalDeviceRequest request)
        {
            ThrowIf.Null(request, nameof(request));

            // Open the device for payments
            Utilities.WaitAsyncTask(() => Task.Run(async() =>
            {
                await this.OpenAsync(request.DeviceName, request.TerminalSettings, request.DeviceConfig).ConfigureAwait(false);
            }));

            return(new NullResponse());
        }
Example #22
0
            /// <summary>
            /// Creates the mapped exception for <see cref="Exception"/> returned during invoking realtime transaction service method.
            /// </summary>
            /// <param name="methodName">The method name.</param>
            /// <param name="exception">The exception.</param>
            /// <param name="errorResourceId">The <see cref="CommunicationErrors"/> enumeration.</param>
            /// <param name="errorMessage">The error message in the communication exception.</param>
            /// <returns>The <see cref="CommunicationException"/>.</returns>
            public static CRT.CommunicationException CreateCommunicationException(string methodName, Exception exception, CommunicationErrors errorResourceId, string errorMessage = "")
            {
                ThrowIf.Null(methodName, "methodName");
                ThrowIf.Null(exception, "exception");

                errorMessage = string.IsNullOrWhiteSpace(errorMessage) ? string.Format("Exception while calling invoke method {0}: {1}", methodName, exception.Message) : errorMessage;

                return(new CRT.CommunicationException(
                           errorResourceId,
                           exception,
                           errorMessage));
            }
Example #23
0
        public static T UiThread <T>(this Control control, Func <T> func)
        {
            ThrowIf.Null(control, nameof(control));
            ThrowIf.Null(func, nameof(func));

            if (control.InvokeRequired)
            {
                return((T)control.Invoke(func));
            }

            return(func());
        }
            /// <summary>
            /// Adds loyalty card tier table schema into the data table.
            /// </summary>
            /// <param name="table">The data table.</param>
            private static void AddLoyaltyCardTierTableTypeSchema(DataTable table)
            {
                ThrowIf.Null(table, "table");

                // NOTE: The order of colums here MUST match the @TVP_LOYALTYCARDTIERTABLETYPE.
                table.Columns.Add(LoyaltySqlServerDataService.RecIdColumn, typeof(long));
                table.Columns.Add(LoyaltySqlServerDataService.AffiliationColumn, typeof(long));
                table.Columns.Add(LoyaltySqlServerDataService.LoyaltyCardColumn, typeof(long));
                table.Columns.Add(LoyaltySqlServerDataService.LoyaltyTierColumn, typeof(long));
                table.Columns.Add(LoyaltySqlServerDataService.ValidFromColumn, typeof(DateTime));
                table.Columns.Add(LoyaltySqlServerDataService.ValidToColumn, typeof(DateTime));
            }
Example #25
0
            /// <summary>
            /// Initializes a new instance of the <see cref="IndiaPriceHelper"/> class.
            /// </summary>
            /// <param name="channelConfiguration">The channel configuration.</param>
            /// <param name="pricingDataManager">Pricing data manager.</param>
            /// <param name="transaction">Current transaction.</param>
            /// /// <param name="priceGroup">Customer price group.</param>
            /// <returns>The instance of IndiaPriceHelper.</returns>
            public IndiaPriceHelper(ChannelConfiguration channelConfiguration, IPricingDataAccessor pricingDataManager, SalesTransaction transaction, string priceGroup)
            {
                ThrowIf.Null(channelConfiguration, "channelConfiguration");
                ThrowIf.Null(pricingDataManager, "pricingDataManager");
                ThrowIf.Null(transaction, "transaction");

                this.channelConfiguration = channelConfiguration;
                this.pricingDataManager   = pricingDataManager;
                this.salesTransaction     = transaction;
                this.customerId           = transaction.CustomerId;
                this.priceGroup           = priceGroup;
            }
Example #26
0
        public static DbTempTableColumn <TRow> From <TValue>(string name, string dbType, Func <TRow, TValue> getValue)
        {
            ThrowIf.NullOrWhiteSpace(name, nameof(name));
            ThrowIf.NullOrWhiteSpace(dbType, nameof(dbType));
            ThrowIf.Null(getValue, nameof(getValue));

            var type = typeof(TValue);

            object?GetBoxedValue(TRow obj) => getValue(obj);

            return(new DbTempTableColumn <TRow>(name, dbType, type, GetBoxedValue));
        }
            /// <summary>
            /// Voids active gift card lines on the transaction.
            /// </summary>
            /// <param name="context">The context.</param>
            /// <param name="salesTransaction">The sales transaction.</param>
            internal static void VoidGiftCardSalesLines(RequestContext context, SalesTransaction salesTransaction)
            {
                ThrowIf.Null(context, "context");
                ThrowIf.Null(salesTransaction, "salesTransaction");

                IEnumerable <SalesLine> activeGiftCardLines = salesTransaction.SalesLines.Where(l => l.IsGiftCardLine && !l.IsVoided);

                foreach (SalesLine line in activeGiftCardLines)
                {
                    GiftCardWorkflowHelper.VoidGiftCardOperation(context, salesTransaction, line.GiftCardId, line.GiftCardCurrencyCode, line.GiftCardOperation, line.TotalAmount);
                }
            }
Example #28
0
        public DbTempTableColumn(string name, string dbType, Type type, Func <TRow, object?> getValue)
        {
            ThrowIf.NullOrWhiteSpace(name, nameof(name));
            ThrowIf.NullOrWhiteSpace(dbType, nameof(dbType));
            ThrowIf.Null(type, nameof(type));
            ThrowIf.Null(getValue, nameof(getValue));

            Name     = name;
            DbType   = dbType;
            Type     = type;
            GetValue = getValue;
        }
        public UpdateServiceGroupRequest(IFabricClient fabricClient, ServiceKind serviceKind, Uri serviceGroupName, int targetReplicaSetSize, TimeSpan replicaRestartWaitDuration, TimeSpan quorumLossWaitDuration, int instanceCount, TimeSpan timeout)
            : base(fabricClient, timeout)
        {
            ThrowIf.Null(serviceGroupName, "serviceNameGroup");

            this.ServiceGroupName           = serviceGroupName;
            this.ServiceKind                = serviceKind;
            this.TargetReplicaSetSize       = targetReplicaSetSize;
            this.ReplicaRestartWaitDuration = replicaRestartWaitDuration;
            this.QuorumLossWaitDuration     = quorumLossWaitDuration;
            this.InstanceCount              = instanceCount;
        }
            /// <summary>
            /// Executes the workflow to do user authentication.
            /// </summary>
            /// <param name="request">The request.</param>
            /// <returns>The response.</returns>
            protected override UserAuthenticationResponse Process(UserAuthenticationRequest request)
            {
                ThrowIf.Null(request, "request");
                Device           device = null;
                CommerceIdentity identity;
                Employee         employee;
                string           deviceId = string.IsNullOrWhiteSpace(request.DeviceId)
                    ? request.RequestContext.GetPrincipal().DeviceNumber
                    : request.DeviceId;

                string deviceToken = string.IsNullOrWhiteSpace(request.DeviceToken)
                    ? request.RequestContext.GetPrincipal().DeviceToken
                    : request.DeviceToken;

                try
                {
                    // Authenticate device only when the device token is specified
                    if (!string.IsNullOrWhiteSpace(deviceToken))
                    {
                        device = AuthenticationHelper.AuthenticateDevice(
                            this.Context,
                            deviceToken);
                    }

                    // User logs on.
                    employee = AuthenticationHelper.AuthenticateAndAuthorizeUser(request, device);

                    identity = new CommerceIdentity(employee, device);

                    // If the request is for elevate operation
                    if (request.RetailOperation != RetailOperation.None)
                    {
                        // Add the Elevation properties to the claim.
                        identity.OriginalUserId          = this.Context.GetPrincipal().UserId;
                        identity.ElevatedRetailOperation = request.RetailOperation;

                        // successful manager override for operation with id and operator with id
                        var message = string.Format(
                            "Manager with id '{0}' has approved override for operation with id '{1}' to the operator with id '{2}'.",
                            request.StaffId,
                            identity.ElevatedRetailOperation,
                            identity.OriginalUserId);
                        LogAuditEntry(request.RequestContext, "ElevateUser", message);
                    }

                    return(new UserAuthenticationResponse(employee, device, identity));
                }
                catch (Exception exception)
                {
                    RetailLogger.Log.CrtWorkflowUserAuthenticationRequestHandlerFailure(request.StaffId, deviceId, exception);
                    throw;
                }
            }