Dodano możliwość wysyłki dostawy w drodze (bez płatności)
Począwszy od V7Preview3, możesz przygotować swoją przesyłkę do wysyłki, wydrukować list przewozowy, przypisać kuriera i wysłać ją w drogę.
Nowości
- Ustawienie czasu płatności za dostawę PluginContext.Operations.GetHostDeliverySettings().DeliveryPaymentTimeOption — przed wysyłką lub przed zamknięciem. Płatność za dostawy przez API nie jest jeszcze obsługiwana, więc działać będzie tylko wysyłka bez płatności.
- Ustawienie czasu drukowania listu przewozowego - ręcznie lub automatycznie, a jeśli automatycznie, to w którym momencie: PluginContext.Operations.GetHostDeliverySettings().DeliveryBillPrintTimeOption.
- Przygotowanie dostawy do wysyłki (zmiana statusu na „Oczekująca”): PluginContext.Operations.PrepareDeliveryForSending(credentials, delivery). Tutaj zostaną sprawdzone harmonogram pracy oraz ograniczenia mapowania, a także dodane automatycznie potrawy i usługi. Możesz określić opcjonalny parametr throwOnChanges, który spowoduje przerwanie operacji, jeśli zawartość lub wartość zamówienia ulegnie zmianie, co pozwoli wtyczce zareagować na zmiany i sprawdzić, czy chce wysłać dostawę z tymi zmianami. Domyślnie parametr jest wyłączony; wtyczka zgadza się na dowolne automatyczne zmiany.
- Drukowanie listu przewozowego: PluginContext.Operations.PrintDeliveryBill(credentials, delivery). Tutaj również zostaną wydrukowane naklejki na dostawę, jeśli ustawienia wskazują drukowanie ich wraz z fakturą.
- Wysyłka dostawy w drogę: PluginContext.Operations.SendDelivery(credentials, delivery).
- Jeśli list przewozowy jest skonfigurowany do automatycznego drukowania na początku przygotowania lub przy wysyłce, zostanie wydrukowany podczas wywoływania metod wtyczki PrintOrderItems oraz SendDelivery odpowiednio.
Przykład użycia
private void CreateAndSendDelivery()
{
if (PluginContext.Operations.GetHostDeliverySettings().DeliveryPaymentTimeOption == DeliveryPaymentTimeOption.BeforeSending)
return; // jeszcze nieobsługiwane
var credentials = PluginContext.Operations.AuthenticateByPin(pin);
var delivery = CreateDelivery(false); // metoda EditorTester.CreateDelivery z SamplePlugin
if (PluginContext.Operations.IsDeliveryConfirmationActive())
{
Debug.Assert(delivery.DeliveryStatus == DeliveryStatus.Unconfirmed);
PluginContext.Operations.ChangeDeliveryConfirmTime(DateTime.Now, delivery, credentials);
delivery = PluginContext.Operations.GetDeliveryOrderById(delivery.Id);
}
PluginContext.Operations.PrintOrderItems(credentials, delivery, delivery.Items.OfType<IOrderCookingItem>().ToList());
Debug.Assert(delivery.DeliveryStatus == DeliveryStatus.New);
PluginContext.Operations.PrepareDeliveryForSending(credentials, delivery);
delivery = PluginContext.Operations.GetDeliveryOrderById(delivery.Id);
Debug.Assert(delivery.DeliveryStatus == DeliveryStatus.Waiting);
var courier = PluginContext.Operations.GetUsers().Single(x => x.Name == courierName);
Debug.Assert(delivery.Courier == null);
PluginContext.Operations.ChangeDeliveryCourier(true, delivery, courier, credentials);
delivery = PluginContext.Operations.GetDeliveryOrderById(delivery.Id);
Debug.Assert(Equals(delivery.Courier, courier));
Debug.Assert(!delivery.IsPrintedBillActual);
PluginContext.Operations.PrintDeliveryBill(credentials, delivery);
delivery = PluginContext.Operations.GetDeliveryOrderById(delivery.Id);
Debug.Assert(delivery.IsPrintedBillActual);
PluginContext.Operations.SendDelivery(credentials, delivery);
delivery = PluginContext.Operations.GetDeliveryOrderById(delivery.Id);
Debug.Assert(delivery.DeliveryStatus == DeliveryStatus.OnWay);
}