Exemplo n.º 1
0
        public static async Task CopyToPoweroffice(
            // Trigger every six minutes, offset by three.
            [TimerTrigger("30 3-59/6 * * * *")] TimerInfo timer,
            ILogger logger)
        {
            try
            {
                var webcrmClientFactory     = new WebcrmClientFactory(logger, TypedEnvironment.WebcrmApiBaseUrl);
                var powerofficeQueueFactory = new PowerofficeQueueFactory(logger, TypedEnvironment.AzureWebJobsStorage);
                var webcrmChangeTracker     = await WebcrmToPowerofficeChangeTracker.Create(logger, webcrmClientFactory, powerofficeQueueFactory);

                var configService = await PowerofficeConfigService.Create(TypedEnvironment.DatabaseCredentials);

                var configurations = configService.LoadEnabledPowerofficeConfigurations();
                foreach (var configuration in configurations)
                {
                    var dateTimeBeforeSync = DateTime.UtcNow;
                    await webcrmChangeTracker.EnqueueUpsertedItemsToPoweroffice(configuration.LastSuccessfulCopyToErpHeartbeat, configuration);

                    await configService.UpdateLastSuccessfulCopyToErpHeartbeat(configuration.WebcrmSystemId, dateTimeBeforeSync);
                }
            }
            catch (SwaggerException ex)
            {
                SwaggerExceptionLogger.Log(ex);
            }
        }
Exemplo n.º 2
0
        public static async Task CopyFromPoweroffice(
            // Trigger every six minutes.
            [TimerTrigger("30 */6 * * * *")] TimerInfo timer,
            ILogger logger)
        {
            try
            {
                var configService = await PowerofficeConfigService.Create(TypedEnvironment.DatabaseCredentials);

                var powerofficeClientFactory = new PowerofficeClientFactory(TypedEnvironment.PowerofficeApiSettings);
                var powerofficeChangeTracker = await PowerofficeChangeTracker.Create(logger, TypedEnvironment.AzureWebJobsStorage, powerofficeClientFactory);

                var configurations = configService.LoadEnabledPowerofficeConfigurations();
                foreach (var configuration in configurations)
                {
                    var dateTimeBeforeSync = DateTime.UtcNow;

                    await powerofficeChangeTracker.EnqueueUpsertedItemsForOneSystem(configuration.LastSuccessfulCopyFromErpHeartbeat, configuration);

                    await configService.UpdateLastSuccessfulCopyFromErpHeartbeat(configuration.WebcrmSystemId, dateTimeBeforeSync);
                }
            }
            catch (SwaggerException ex)
            {
                SwaggerExceptionLogger.Log(ex);
            }
        }
Exemplo n.º 3
0
        public static async Task <PowerofficeMessageDispatcher> Create(
            ILogger logger,
            WebcrmClientFactory webcrmClientFactory,
            DatabaseCredentials databaseCredentials,
            PowerofficeClientFactory powerofficeClientFactory)
        {
            var powerofficeConfigService = await PowerofficeConfigService.Create(databaseCredentials);

            return(new PowerofficeMessageDispatcher(logger, webcrmClientFactory, powerofficeClientFactory, powerofficeConfigService));
        }
Exemplo n.º 4
0
 private PowerofficeMessageDispatcher(
     ILogger logger,
     WebcrmClientFactory webcrmClientFactory,
     PowerofficeClientFactory powerofficeClientFactory,
     PowerofficeConfigService powerofficeConfigService)
 {
     Logger = logger;
     WebcrmClientFactory      = webcrmClientFactory;
     PowerofficeClientFactory = powerofficeClientFactory;
     PowerofficeConfigService = powerofficeConfigService;
 }
Exemplo n.º 5
0
 public PowerofficeConfigServiceTester()
 {
     // It's safe to use .Result in the tests.
     ConfigService = Task.Run(() => PowerofficeConfigService.Create(TestTypedEnvironment.DatabaseCredentials)).Result;
 }
Exemplo n.º 6
0
        public async Task HandleDequeuedMessage(PowerofficeQueueMessage message)
        {
            switch (message.Action)
            {
            case PowerofficeQueueAction.UpsertPowerofficeDelivery:
            {
                var(payload, dataCopier) = await GetPayloadAndDataCopier <UpsertDeliveryToPowerofficePayload>(message);

                await dataCopier.CopyDeliveryToPoweroffice(payload.WebcrmDelivery, payload.WebcrmDeliveryLines);
            }
            break;

            case PowerofficeQueueAction.UpsertPowerofficeOrganisation:
            {
                var(payload, dataCopier) = await GetPayloadAndDataCopier <UpsertOrganisationToPowerofficePayload>(message);

                await dataCopier.CopyOrganisationToPoweroffice(payload.WebcrmOrganisation);
            }
            break;

            case PowerofficeQueueAction.UpsertPowerofficePerson:
            {
                var(payload, dataCopier) = await GetPayloadAndDataCopier <UpsertPersonToPowerofficePayload>(message);

                await dataCopier.CopyPersonToPoweroffice(payload.WebcrmPerson);
            }
            break;

            case PowerofficeQueueAction.UpsertWebcrmDelivery:
            {
                var(payload, dataCopier) = await GetPayloadAndDataCopier <UpsertDeliveryFromPowerofficePayload>(message);

                var configuration     = PowerofficeConfigService.LoadPowerofficeConfiguration(payload.WebcrmSystemId);
                var powerofficeClient = await PowerofficeClientFactory.Create(configuration.PowerofficeClientKey);

                var powerofficeDeliveryWithDeliveryLines = await powerofficeClient.GetInvoice(payload.PowerofficeDelivery.Id);

                await dataCopier.CopyDeliveryFromPoweroffice(powerofficeDeliveryWithDeliveryLines);
            }
            break;

            case PowerofficeQueueAction.UpsertWebcrmOrganisation:
            {
                var(payload, dataCopier) = await GetPayloadAndDataCopier <UpsertOrganisationFromPowerofficePayload>(message);

                await dataCopier.CopyOrganisationFromPoweroffice(payload.PowerofficeOrganisation);
            }
            break;

            case PowerofficeQueueAction.UpsertWebcrmPerson:
            {
                var(payload, dataCopier) = await GetPayloadAndDataCopier <UpsertPersonFromPowerofficePayload>(message);

                await dataCopier.CopyPersonFromPoweroffice(payload.PowerofficePerson, payload.PowerofficeOrganisationId);
            }
            break;

            case PowerofficeQueueAction.UpsertWebcrmProduct:
            {
                var(payload, dataCopier) = await GetPayloadAndDataCopier <UpsertProductFromPowerofficePayload>(message);

                await dataCopier.CopyProductFromPoweroffice(payload.PowerofficeProduct);
            }
            break;

            case PowerofficeQueueAction.Unknown:
            default:
                throw new ApplicationException($"The action '{message.Action}' is not supported.");
            }
        }