Informacje ogólne o koszcie dostawy (dostawa o typie 5)
Od wersji Comarch e-Sklep 2020 dodano możliwość określenia kolejnego sposobu wyliczania kosztów dostawy na podstawie danych przesłanych przez Comarch e-Sklep Sync. Dzięki temu możliwe jest przygotowanie własnej macierzy dostaw obsługującej nawet najbardziej skomplikowane scenariusze wyliczania kosztów dostawy.
Worker erpDataDeliveryCost
Ten typ dostawy dostępny jest w panelu administracyjnym wówczas, gdy:
- Comarch e-Sklep będzie w wersji B2B,
- usługa Comarch e-Sklep Sync będzie skonfigurowana i włączona,
- zostanie wykorzystany worker erpDataDeliveryCost.
Po spełnieniu powyższych warunków w menu Ustawienia > Płatności i dostawy na zakładce Dostawy, po dodaniu nowego sposobu dostawy lub podczas edycji już używanych dostaw, w sekcji Sposób liczenia kosztu dostawy pojawi się piąta opcja: Koszt wyliczany przez eShop.Sync.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Comarch.eShop.ISync;
using System.Threading.Tasks;
namespace ExternalDeliveryCost
{
public class Request
{
public Customer Customer;
public Employee Employee;
public int EshopId;
public T Message;
}
public class Employee
{
public int Id;
public int EshopEmployeeId;
public string Email;
}
public class Customer
{
public int Id { get; set; }
public int EshopCustomerId { get; set; }
public string Email { get; set; }
}
public class ExternalDeliveryCostQuery
{
public int[] MethodId; ID sposobu dostawy w sklepie
public string Country; Kraj dostawy
public string City; miasto dostawy
public string ZipCode;
public List Elements;
}
public class ExternalDeliveryCostElementQuery
{
public int Id;
public decimal Quantity; ilość w jednostce podstawowej
}
public class ExternalDeliveryCostCl
{
public int MethodId;
public decimal Cost;
public bool FreePayment;
}
public class Worker : Comarch.eShop.ISync.Worker
{
public override Task Execute(Msg msgOuter)
{
return Task.Factory.StartNew(() =>
{
var req = Newtonsoft.Json.JsonConvert.DeserializeObject<Request>(msgOuter.Message);
msgOuter.Response = Newtonsoft.Json.JsonConvert.SerializeObject
(
req.Message.MethodId.Select(z => new ExternalDeliveryCostCl() { MethodId = z, Cost = z, FreePayment = z % 2 == 0 })
);
return msgOuter;
});
}
}
}
Dalsza konfiguracja tego sposobu wyliczania kosztów dostawy w panelu e-Sklepu pozostaje taka sama jak w przypadku pozostałych typów kosztów i została opisana w tym artykule.
Worker erpDataDeliveryCost2
W wersji 2021.5 udostępniono kolejny worker do wyliczania kosztu dostawy przez usługę Comarch e-Sklep Sync.
Ten typ dostawy dostępny jest w panelu administracyjnym wówczas, gdy:
- Comarch e-Sklep będzie w wersji B2B,
- usługa Comarch e-Sklep Sync będzie skonfigurowana i włączona,
- w panelu administracyjnym w menu Ustawienia/ Ustawienia sklepu/ Ogólne/ Comarch e-Sklep Sync włączony jest parametr Nowa wersja obliczania kosztów dostawy,
- zostanie wykorzystany worker erpDataDeliveryCost2.
Po spełnieniu powyższych warunków w menu Ustawienia/ Płatności i dostawy na zakładce Dostawy, po dodaniu nowego sposobu dostawy lub podczas edycji już używanych dostaw, w sekcji Sposób liczenia kosztu dostawy pojawi się piąta opcja: Koszt wyliczany przez eShop.Sync.
Worker o kluczu (w pliku config usługi) erpDataDeliveryCost2 ma następującą nową strukturę danych:
- SubtotalValue i TotalValue to wartość towarów, zawsze w walucie domyślnej sklepu,
- Elements (z erpDataDeliveryCost) jest tutaj zastąpiony przez Sets (są to „zestawy” w koszyku),
- Zestaw:
- Id=0 oznacza zwykły towar,
- Id>0 oznacza zestaw sklepowy,
- Id=-2 oznacza rabat pakietowy (w przypadku Comarch ERP Altum),
- Id=-3 oznacza ofertę (przy czym nie będą przesyłane oferty, które mają już określony koszt w panelu administracyjnym e-Sklepu),
- Id=-4 oznacza „zestaw” towarów pochodzący z akcji Cart/ExternalAdd.
-
- BundleGratis – czy jest to gratis z pakietu rabatowego,
- ExtId – zewnętrzny identyfikator pozycji, jeśli pozycja pochodzi z akcji Cart/ExternalAdd.
- CustomDeliveryTotalValue to koszt dostawy (ustalony w ofercie lub pochodzący z akcji ExternalAdd). Jeśli nie ma tego kosztu, to worker będzie zwracał null (wartość może być użyta lub może być zignorowana).
- CalculationId to id kalkulacji na podstawie, której wyliczono koszt dostawy. Kalkulacja może zawierać informację o cenie wyjściowej, udzielonych rabatach, cenie transportu, cenie załadunku oraz innych elementach, które wpłynęły na kosz dostawy. Kalkulację należy zapisać we własnej infrastrukturze (np. baza danych, lub plik xml na dysku). Id kalkulacji dostępne jest także na obiekcie zamówienia. W koszyku można pobrać kalkulację i wyświetlić potrzebne elementy na interfejsie.
namespace DeliveryCost
{
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Comarch.eShop.ISync;
public class ExternalDeliveryCostQuery2
{
public int[] MethodId;
public string Country;
public string City;
public string ZipCode;
public decimal TotalValue;
public decimal SubtotalValue;
public List Sets;
}
public class ExternalDeliveryCostSetQuery2
{
public int Id; // >0 – regular set, 0 – regular product, -2 – bundle, -3 – offer, -4 – Cart/ExternalAdd
public int? BundleId;
public decimal? CustomDeliveryTotalValue;
public List Elements;
}
public class ExternalDeliveryCostElementQuery2
{
public int? Id;
public int EshopProductId;
public decimal Quantity;
public short? MapType;
public string MapForeignId;
public bool? BundleGratis;
public bool? BundleAddHeaderDiscount;
public string ExtId;
}
public class ExternalDeliveryCostCl2
{
public int MethodId;
public decimal Cost;
public bool FreePayment;
public string CalculationId;
}
public class DeliveryCost2 : Worker
{
public override System.Threading.Tasks.Task Execute(Msg msgOuter)
{
var req = Newtonsoft.Json.JsonConvert.DeserializeObject<Request>(msgOuter.Message);
var cena = 789 + req.Message.Sets.Where(z => z.CustomDeliveryTotalValue.HasValue).Sum(z => z.CustomDeliveryTotalValue.Value);
return Task.Factory.StartNew(cenaIn =>
{
msgOuter.Response = Newtonsoft.Json.JsonConvert.SerializeObject
(
req.Message.MethodId.Select(z => new ExternalDeliveryCostCl2() { MethodId = z, Cost = (decimal)cenaIn, CalculationId = „foo-bar2” })
);
return msgOuter;
}, cena);
}
}
}
Dalsza konfiguracja tego sposobu wyliczania kosztów dostawy w panelu e-Sklepu pozostaje taka sama jak w przypadku pozostałych typów kosztów i została opisana w tym artykule.