ingmar1601
Aktives Mitglied
In XT-Commerce gibt es Zahlungsmodule z.b. Paypal Express oder Moneybookers, mit denen es möglich, den Zahlungsstatus autmatisch im shop zu setzen.
Leider werden aber alle erfolreichen und abgebrochenden Zahlungen über den connector in die Wawi übertagen und man muss hier nochmal den Abgleich für jede Bestellung machen und die Zahlung nochmal manuell auf bezahlt setzen oder nicht.
Das fand ich ziemlich umständlich und unbefriedigend und habe deshalb das Problem wie folgt gelöst:
1) Damit die Zahlungsart richtig in der Wawi erkannt wird und nicht nur bei den Anmerkungen steht, muss man erstmal das mapping richtig anpassen. Das macht man in der Datei
/admin/includes/modules/jtlwawi_connector/dbeS/GetBestellung.php
Folgende Switch Anweisungen müssen angepasst werden um die XTC Zahlungsarten (case 'xyz') den Wawi Zahlungsarten(Zahlungsweise: xyz) zugerpdnet werden.
2) Wenn man folgenden SQL im Wawi Connector anpasst, dann werden nur die gewünschten Bestellstati übertragen:
/admin/includes/modules/jtlwawi_connector/dbeS/GetBestellung.php
Den gewünschten orders_status bekommt man aus der Tabelle "orders_status" . Ich übertrage z.b. folgende Stati (Vorkasse, Moneybookers ok, Paypal ok,Nachnahme, Versendet). Negative (abgebrochen,offen etc) werden nicht übertragen.
3) Jetzt werden nur die gewünschten Bestellungen in die Wawi übertragen. Aber steht z.B. bei Moneybookers- oder Paypal Zahlungen der "Bezahlt" Status immer noch auf "N"
Um das zu lösen, habe ich 2 trigger in der WAWI Datenbank erstellt. Diese kann man z.B. mit Microsft SQL 2005 Express auf dem Server erstellen.
Der erste trigger schaut nach, wenn ein neuer Auftrag erstellt wird. Wenn bestimmte Zahlungen (die ungleich 'Vorkasse','Scheck/Vorkasse','Überweisung' sind'), also Kreditkarte, Paypal etc. dann wird ein Eintrag in der Tabelle tZahlung erstellt mit dem Daten aus den neuen Auftrag. Leider ist zu diesem Zeitpunkt noch nicht der Zahlbetrag bekannt und deswegen braucht man noch einen 2. Trigger.
1. Trigger
Der 2. Trigger ermittelt den Zahlbetrag aus der tbestellpos Tabelle und fügt diesen zu den oben erstellt zu den oben erstellten Eintrag in der Tabelle tZahlung hinzu.
2. Trigger
Jetzt sollten die gwünschten Zahlungen automatisch als bezahlt markiert sein nach dem Import.
Ich würde mich sehr freuen, wenn hier ein JTL Entwickler mal rüberschauen kann, ob alles so seine Richtigkeit hat. Noch viel mehr würde es mich freuen wenn die WAWI sowas von Haus aus unterstützen würde.
Leider werden aber alle erfolreichen und abgebrochenden Zahlungen über den connector in die Wawi übertagen und man muss hier nochmal den Abgleich für jede Bestellung machen und die Zahlung nochmal manuell auf bezahlt setzen oder nicht.
Das fand ich ziemlich umständlich und unbefriedigend und habe deshalb das Problem wie folgt gelöst:
1) Damit die Zahlungsart richtig in der Wawi erkannt wird und nicht nur bei den Anmerkungen steht, muss man erstmal das mapping richtig anpassen. Das macht man in der Datei
/admin/includes/modules/jtlwawi_connector/dbeS/GetBestellung.php
Folgende Switch Anweisungen müssen angepasst werden um die XTC Zahlungsarten (case 'xyz') den Wawi Zahlungsarten(Zahlungsweise: xyz) zugerpdnet werden.
Code:
switch ($Bestellung->payment_method)
{
case 'banktransfer':
$Bestellung->zahlungsweise = "Zahlungsweise: Lastschrift";
$VersandKey = -1;
break;
case 'cc':
$Bestellung->zahlungsweise = "Zahlungsweise: Kreditkarte";
$VersandKey = -1;
break;
case 'moneybookers_cc':
$Bestellung->zahlungsweise = "Zahlungsweise: Kreditkarte";
$VersandKey = -1;
break;
case 'moneybookers_elv':
$Bestellung->zahlungsweise = "Zahlungsweise: Bankeinzug";
break;
case 'cod':
$Bestellung->zahlungsweise = "Zahlungsweise: Nachnahme";
break;
case 'invoice':
$Bestellung->zahlungsweise = "Zahlungsweise: Auf Rechnung";
break;
case 'paypal':
$Bestellung->zahlungsweise = "Zahlungsweise: PayPal";
break;
case 'paypalexpress':
$Bestellung->zahlungsweise = "Zahlungsweise: PayPal Express";
break;
case 'moneyorder':
$Bestellung->zahlungsweise = "Zahlungsweise: Vorkasse";
break;
case 'ipayment':
$Bestellung->zahlungsweise = "Zahlungsweise: Kreditkarte";
break;
case 'ipaymentelv':
$Bestellung->zahlungsweise = "Zahlungsweise: Lastschrift";
break;
default:
$Bestellung->zahlungsweise = "Zahlungsweise: $Bestellung->payment_method";
break;
}
/admin/includes/modules/jtlwawi_connector/dbeS/GetBestellung.php
Code:
[B][I]//hole alle neuen order [/I]
$cur_query = eS_execute_query("select orders.payment_method, orders.orders_id, orders.customers_id, orders.comments, date_format(orders.date_purchased, \"%d.%m.%Y\") as ErstelltDatumF from orders LEFT JOIN eazysales_sentorders ON orders.orders_id=eazysales_sentorders.orders_id where eazysales_sentorders.orders_id is NULL AND[COLOR=Red][B] orders_status in(3,4,9,10,16)[/B][/COLOR] limit 1");[/B]
3) Jetzt werden nur die gewünschten Bestellungen in die Wawi übertragen. Aber steht z.B. bei Moneybookers- oder Paypal Zahlungen der "Bezahlt" Status immer noch auf "N"
Um das zu lösen, habe ich 2 trigger in der WAWI Datenbank erstellt. Diese kann man z.B. mit Microsft SQL 2005 Express auf dem Server erstellen.
Der erste trigger schaut nach, wenn ein neuer Auftrag erstellt wird. Wenn bestimmte Zahlungen (die ungleich 'Vorkasse','Scheck/Vorkasse','Überweisung' sind'), also Kreditkarte, Paypal etc. dann wird ein Eintrag in der Tabelle tZahlung erstellt mit dem Daten aus den neuen Auftrag. Leider ist zu diesem Zeitpunkt noch nicht der Zahlbetrag bekannt und deswegen braucht man noch einen 2. Trigger.
1. Trigger
Code:
USE [eazybusiness]
GO
/****** Object: Trigger [dbo].[trig_zahlstatus] Script Date: 09/03/2009 23:29:02 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TRIGGER [dbo].[trig_zahlstatus]
ON [dbo].[tbestellung]
FOR INSERT
AS
SET NOCOUNT ON;
DECLARE @zahlart varchar(100)
SELECT @zahlart = (Select CName from tZahlungsart z,Inserted i where z.kZahlungsArt=i.kZahlungsArt)
[B][COLOR=Red]IF (@zahlart != 'Vorkasse' AND @zahlart != 'Scheck/Vorkasse' AND @zahlart != 'Überweisung')[/COLOR][/B]
BEGIN
DECLARE @maxID int
SELECT @maxID = (Select ISNULL(max(kZahlung),0)+1 from tZahlung)
DECLARE @orderid int
SELECT @orderid = (SELECT kBestellung FROM Inserted)
INSERT INTO tZahlung (kZahlung, cName, dDatum, fBetrag, kBestellung, kBenutzer, nAnzahlung)
Select @maxID,@zahlart, dErstellt,99 ,kBestellung,tBenutzer_kBenutzer,0 from Inserted
END
2. Trigger
Code:
USE [eazybusiness]
GO
/****** Object: Trigger [dbo].[trig_ordervalue] Script Date: 09/03/2009 23:28:18 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TRIGGER [dbo].[trig_ordervalue]
ON [dbo].[tbestellpos]
FOR INSERT
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
DECLARE @orderid int
SELECT @orderid = (SELECT tBestellung_kBestellung FROM Inserted)
UPDATE tZahlung SET fBetrag=(SELECT sum(fVKPreis*nAnzahl)FROM tbestellpos WHERE kBestellung=tBestellung_kBestellung) WHERE kBestellung=@orderid
END
Ich würde mich sehr freuen, wenn hier ein JTL Entwickler mal rüberschauen kann, ob alles so seine Richtigkeit hat. Noch viel mehr würde es mich freuen wenn die WAWI sowas von Haus aus unterstützen würde.