Rabatt abhängig von Zahlungsweise

Begonnen von parimo, Juni 20, 2009, 15:02:36

« vorheriges - nächstes »

0 Mitglieder und 1 Gast betrachten dieses Thema.

parimo

Hallo dobra,

ja, das stimmt.
Aber sie war zweimal auf dem Server - einmal im Shopverzeichnis, wo ich sie manuell über FTP gelöscht hatte.
Und dann noch einmal in diesem cgi-bin-Verzeichnis.

Gott, bin ich froh, dass nun wieder alles klappt.
Nochmals vielen Dank.

LG - parimo

parimo

Hallo Dobra,

ich greife dieses Thema noch mal auf, weil ich das immer noch nicht hinbekommen habe.
Ich habe inzwischen begriffen, dass mit dem Identifier __show::myrabatt2__ im WK ausgegeben wird: "Ihr persönlicher Rabatt beträgt x%".

Das klappt auch. Allerdings habe ich immer noch nicht herausgefunden, welchen Identifier ich für __zahlartbetrag__ einsetzen muss, damit die Kalkulation im WK stimmt.
Wäre schön, wenn du mir da behilflich sein könntest. Ich möchte das jetzt gern einrichten, damit die Vorkasse-Kunden nicht immer erst warten müssen, bis ich ihnen ihren Zahlbetrag per Email mitteile.

LG - parimo

dobra

Hallo parimo,

ihmmmm, st ja schon ne ganze Weile her, dass ich mich damit beschäftigt habe....
Habe aber jetzt mal mein "altes" Callbackscript von damals in einen Demoshop eingebaut.

Der Rabatt wird ja beim Rechnungsbetrag korrekt abgerechnet, aber nicht ausgewiesen
(konnte nicht mehr rekonstuieren, wie ich das damals gemacht hatte  :( )

aber SO gehts:

in stdall.ipl unterhalb vom Callback-Script (dann kannst Du auf allen Seiten - also auch den Bestellvorlagen und Mails darauf zugreifen) diesen Code schreiben
<!--spmacro:module(rabatt)
sub rsumme  {
   main::mprint(main::fp($Callback::rabattsumme));
   return 0;
}
-->


und im Warenkorb dann mit
__rabatt::rsumme__ 
ausgeben


mfG
dobra

parimo

Danke Dobra, jetzt hab ich's fast.

Es sieht jetzt so aus:



Es wird also noch der 4%-Rabatt, den alle Vorkasse-Kunden bekommen, angezeigt und in Abzug gebracht.
Der muss ja auch für diese Kundengruppe bestehen bleiben.
Nur bei den Kunden, die einen höheren Treuerabatt bekommen, müsste der wegfallen.

LG - parimo

dobra

wie gibst Du den Treuerabatt aus?

wenn Du das mit __myrabatt__ machst, sollte es so funktionieren:
im Callback-Script myrabatt abfragen und die Bedingung ergänzen

         .....
         my ($zahlart) = ssp::get_cart_zahlart();
         my $myrabatt = ssp::get_cart_myrabatt();
            if ($zahlart = 1 && $myrabatt == 0) { # Zahlart "Vorauskasse" gewählt aber kein kundenspezifischer Rabatt
         ....

$zahlart = 1  -> da natürlich deine zahlartnr.
mfG
dobra

parimo

Die normalen 4% bei Vorkasse habe ich bei der Zahlungsart (= 1) hinterlegt (-4%).

Für den Userrabatt habe ich im Warenkorb dein Script hinterlegt:

<!--spmacro:module(show)
sub myrabatt2 {
my $userrabatt = ssp::get_var_user("USERRABATT");
$userrabatt =~ s/,/./g;
my ($zahlart) = ssp::get_cart_zahlart();
my $rabatt;
my $rabattsumme;

    if (length($main::userid) && ($userrabatt > 0) && ($zahlart = 1)) {
   my $anzahl = ssp::get_cart_items();   
      for (my $i = 0;$i <= $anzahl;++$i) {
            $rabatt = (ssp::get_var_cart('preis',$i) * $userrabatt) / 100;                           
            $rabattsumme += $rabatt * ssp::get_var_cart('anzahl',$i);
            }   
         if ($rabattsumme > 0) {
            $rabattsumme = main::fp($rabattsumme);
            main::mprint(qq|
               Ihr pers&ouml;nlicher Rabatt betr&auml;gt $userrabatt%
            |);
      }
    }
}
-->


Und die stdcart.ipl habe ich auch so übernommen:

<!--spmacro:module(Callback)
$rabattsumme = 0;
sub invoice_addpos {
my $userrabatt = ssp::get_var_user("USERRABATT");
$userrabatt =~ s/,/./g;  # dadurch ist es egal, ob ein Kommabetrag mit "," oder "." eingetragen wird
   if (length($userrabatt)) { # Feld USERRABATT ist nicht leer
                  
   my $ref_gesamt = $_[0];
   my $ref_gesamt_steuer = $_[2];
   my $ust = $_[3]/100;
   my $netto = $_[4];
   my $anzahl = ssp::get_cart_items();   
      for (my $i = 0;$i <= $anzahl;++$i) {
         my ($zahlart) = ssp::get_cart_zahlart();
         if ($zahlart = 1) { # Zahlart "Vorauskasse" gewählt
            my $rabatt = (ssp::get_var_cart('preis',$i) * $userrabatt) / 100;
                           
            $rabattsumme += $rabatt * ssp::get_var_cart('anzahl',$i);
            }
            }
               if ($netto > 0) {
                  $$ref_gesamt -= $rabattsumme;
                  $$ref_gesamt_steuer -= $rabattsumme*$ust;
               } else {
                  $$ref_gesamt -= $rabattsumme;
                  $$ref_gesamt_steuer -= $rabattsumme*(1-1/(1+$ust));
               }
         return 0;
   }   else { # kein spezieller Kundenrabatt eingetragen -> also 4% Rabatt für alle anderen
                  
   my $ref_gesamt = $_[0];
   my $ref_gesamt_steuer = $_[2];
   my $ust = $_[3]/100;
   my $netto = $_[4];
   my $anzahl = ssp::get_cart_items();   
      for (my $i = 0;$i <= $anzahl;++$i) {
         my ($zahlart) = ssp::get_cart_zahlart();
         if ($zahlart = 1) { # Zahlart "Vorauskasse" gewählt
            my $rabatt = (ssp::get_var_cart('preis',$i) * 4) / 100;
                           
            $rabattsumme += $rabatt * ssp::get_var_cart('anzahl',$i);
            }
            }
               if ($netto > 0) {
                  $$ref_gesamt -= $rabattsumme;
                  $$ref_gesamt_steuer -= $rabattsumme*$ust;
               } else {
                  $$ref_gesamt -= $rabattsumme;
                  $$ref_gesamt_steuer -= $rabattsumme*(1-1/(1+$ust));
               }
         return 0;
      }   
   }
-->
<!--spmacro:module(rabatt)
sub rsumme  {
   main::mprint(main::fp($Callback::rabattsumme));
   return 0;
}
-->

Ich verstehe ja von dieser ganzen Programmierung nischt, daher habe ich das einfach mal so übernommen. Klappt ja auch schon fast.

LG - parimo

dobra

ach soooooooo

na dann nimm mal die "- 4%" bei derZahlart raus.
Wenn jetzt jemand keinen user-rabatt hat, müssten ihm so wie Du das jetzt hast, eigentlich die 4% doppelt abgezogen werden?
1x als eingetragener zahlertrabatt und dann nochmal von Script

  if (length($userrabatt)) { # Feld USERRABATT ist nicht leer                 
   ....   
   }   else { # kein spezieller Kundenrabatt eingetragen -> also 4% Rabatt für alle anderen
  ....   
}

mfG
dobra

parimo

Habe die 4% rausgenommen, dann stimmte es zumindest.
Das Problem ist nun, dass der Treuerabatt auch bei all den anderen Zahlarten aufgeführt wird.
Und bei den Kunden, die mit Vorkasse zahlen und die üblichen 4% haben, steht nun nichts mehr in dem Feld __zahlarttext__.

Es ist verflixt, kaum löst man ein Problem, kommt schon das nächste.

LG - parimo

dobra

mit
__rabatt::rsumme__
sollte aber sowohl der 4% Vorauszahlungsrabatt als auch der Treuerabatt ausgegeben werden

Zahlarttext (__zahlarttext__) gibt - wie der Name ja schon sagt - nur der "Text" aus wenn da etwas definiert ist.

Diesen Identifier kannst Du also nicht mehr verwenden.

Versuchs mal so:
<!--spmacro:module(show)
sub myrabatt2 {
my $userrabatt = ssp::get_var_user("USERRABATT");
$userrabatt =~ s/,/./g;
my ($zahlart) = ssp::get_cart_zahlart();
my $rabatt;
my $rabattsumme;

   if (length($main::userid) && $userrabatt > 0 && $zahlart = 1) {
  my $anzahl = ssp::get_cart_items();  
     for (my $i = 0;$i <= $anzahl;++$i) {
           $rabatt = (ssp::get_var_cart('preis',$i) * $userrabatt) / 100;                          
           $rabattsumme += $rabatt * ssp::get_var_cart('anzahl',$i);
           }  
        if ($rabattsumme > 0) {
           $rabattsumme = main::fp($rabattsumme);
           main::mprint(qq|
              Ihr pers&ouml;nlicher Rabatt betr&auml;gt $userrabatt%
           |);
     }
   }
if ($userrabatt <= 0 && $zahlart = 1) {
main::mprint (qq|Vorauszahlungsrabatt 4%|);
}
}
-->


mfG
dobra

parimo

Nun bekomme ich folgende Fehlermeldung:

This Error has occured:
parsing error 123-6 in GLOB(0x33a2e30): Can't modify logical and (&&) in scalar assignment at (eval 6) line 9, near "1) "


1 main - 2609 - main::syserr - 1
2 main - 2561 - main::read_templ_work - 1
3 main - 109 - main::read_templ - 1
4 main - 1815 - main::myshowcart - 1
5 main - 622 - main::myplacecart - 1
6 main - 371 - main::placecart - 1

Danke für deine unendliche Geduld!

LG - parimo

dobra

sorry - Klammern falsch gesetzt
ich sollte keinen ungetesteten Code posten  :-\

hier der korrigierte und getestete Code
(habe auch noch was geändert, dass bei "keinem Rabatt" nicht 0,00 sondern nichts ausgegeben wird)

<!--spmacro:module(Callback)
$rabattsumme = 0;
sub invoice_addpos {
my $userrabatt = ssp::get_var_user("USERRABATT");
$userrabatt =~ s/,/./g;  # dadurch ist es egal, ob ein Kommabetrag mit "," oder "." eingetragen wird
if (length($userrabatt)) { # Feld USERRABATT ist nicht leer

my $ref_gesamt = $_[0];
my $ref_gesamt_steuer = $_[2];
my $ust = $_[3]/100;
my $netto = $_[4];
my $anzahl = ssp::get_cart_items();
for (my $i = 0;$i <= $anzahl;++$i) {
my ($zahlart) = ssp::get_cart_zahlart();
my $myrabatt = ssp::get_cart_myrabatt();
if ($zahlart == 1 && $myrabatt == 0) { # Zahlart "Vorauskasse" gewählt
my $rabatt = (ssp::get_var_cart('preis',$i) * $userrabatt) / 100;

$rabattsumme += $rabatt * ssp::get_var_cart('anzahl',$i);
}
}
if ($netto > 0) {
$$ref_gesamt -= $rabattsumme;
$$ref_gesamt_steuer -= $rabattsumme*$ust;
} else {
$$ref_gesamt -= $rabattsumme;
$$ref_gesamt_steuer -= $rabattsumme*(1-1/(1+$ust));
}
return 0;
} else { # kein spezieller Kundenrabatt eingetragen -> also 4% Rabatt für alle anderen

my $ref_gesamt = $_[0];
my $ref_gesamt_steuer = $_[2];
my $ust = $_[3]/100;
my $netto = $_[4];
my $anzahl = ssp::get_cart_items();
for (my $i = 0;$i <= $anzahl;++$i) {
my ($zahlart) = ssp::get_cart_zahlart();
if ($zahlart == 1) { # Zahlart "Vorauskasse" gewählt
my $rabatt = (ssp::get_var_cart('preis',$i) * 4) / 100;

$rabattsumme += $rabatt * ssp::get_var_cart('anzahl',$i);
}
}
if ($netto > 0) {
$$ref_gesamt -= $rabattsumme;
$$ref_gesamt_steuer -= $rabattsumme*$ust;
} else {
$$ref_gesamt -= $rabattsumme;
$$ref_gesamt_steuer -= $rabattsumme*(1-1/(1+$ust));
}
return 0;
}
}
-->

<!--spmacro:module(rabatt)
sub rsumme  {
if ($Callback::rabattsumme >0) {
  main::mprint("-" . main::fp($Callback::rabattsumme));
  return 0;
  }
}
-->


<!--spmacro:module(show)
sub myrabatt2 {
my $userrabatt = ssp::get_var_user("USERRABATT");
$userrabatt =~ s/,/./g;
my ($zahlart) = ssp::get_cart_zahlart();
my $rabatt;
my $rabattsumme;

   if (length($main::userid) && ($userrabatt > 0) && ($zahlart == 1)) {
  my $anzahl = ssp::get_cart_items();  
     for (my $i = 0;$i <= $anzahl;++$i) {
           $rabatt = (ssp::get_var_cart('preis',$i) * $userrabatt) / 100;                          
           $rabattsumme += $rabatt * ssp::get_var_cart('anzahl',$i);
           }  
        if ($rabattsumme > 0) {
           $rabattsumme = main::fp($rabattsumme);
           main::mprint(qq|
              Ihr pers&ouml;nlicher Rabatt betr&auml;gt $userrabatt%
           |);
     }
   }
if (!length($userrabatt) && ($zahlart == 1)) {
main::mprint (qq|Vorauszahlungsrabatt 4%|);
}
}
-->
mfG
dobra

parimo

Hi Dobra,

der Wahnsinn ... das klappt tatsächlich .. und einwandfrei. :D
Vielen, vielen Dank.

Liebe Grüße - parimo