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); } }
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); } }
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)); }
private PowerofficeMessageDispatcher( ILogger logger, WebcrmClientFactory webcrmClientFactory, PowerofficeClientFactory powerofficeClientFactory, PowerofficeConfigService powerofficeConfigService) { Logger = logger; WebcrmClientFactory = webcrmClientFactory; PowerofficeClientFactory = powerofficeClientFactory; PowerofficeConfigService = powerofficeConfigService; }
public PowerofficeConfigServiceTester() { // It's safe to use .Result in the tests. ConfigService = Task.Run(() => PowerofficeConfigService.Create(TestTypedEnvironment.DatabaseCredentials)).Result; }
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."); } }