<?xml version="1.0" encoding="utf-8" ?>
<?xml-stylesheet href="/templates/default/atom.css" type="text/css" ?>

<feed 
   xmlns="http://www.w3.org/2005/Atom"
   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
   xmlns:dc="http://purl.org/dc/elements/1.1/"
   xmlns:admin="http://webns.net/mvcb/"
   xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
   xmlns:wfw="http://wellformedweb.org/CommentAPI/">
    <link href="http://www.nutwerk.de/feeds/atom.xml" rel="self" title="Octavians Nutwerk" type="application/atom+xml" />
    <link href="http://nutwerk.de/"                        rel="alternate"    title="Octavians Nutwerk" type="text/html" />
    <link href="http://nutwerk.de/rss.php?version=2.0"     rel="alternate"    title="Octavians Nutwerk" type="application/rss+xml" />
    <title type="html">Octavians Nutwerk</title>
    <subtitle type="html">&quot;Oh Nutwerk. Wo der grilbe Wakwak-Vogel zirbelt grell wie Tee-Service. Des wachen Mundes arg geschlauchter Gartenkohl, von Honigmoehnchen kandelabert, a.&quot; - Switch</subtitle>
    <icon>http://nutwerk.de/templates/square/img/s9y_banner_small.png</icon>
    <id>http://nutwerk.de/</id>
    <updated>2011-06-15T15:50:55Z</updated>
    <generator uri="http://www.s9y.org/" version="1.5.3">Serendipity 1.5.3 - http://www.s9y.org/</generator>
    <dc:language>de</dc:language>

    <entry>
        <link href="http://nutwerk.de/archives/30-Magento-Konfigurationsuebersicht-und-Verlauf.html" rel="alternate" title="Magento Konfigurationsübersicht und Verlauf" />
        <author>
            <name>Marc Jakubowski</name>
                    </author>
    
        <published>2011-06-15T07:26:02Z</published>
        <updated>2011-06-15T15:50:55Z</updated>
        <wfw:comment>http://nutwerk.de/wfwcomment.php?cid=30</wfw:comment>
    
        <slash:comments>0</slash:comments>
        <wfw:commentRss>http://nutwerk.de/rss.php?version=atom1.0&amp;type=comments&amp;cid=30</wfw:commentRss>
    
            <category scheme="http://nutwerk.de/categories/12-Module" label="Module" term="Module" />
    
        <id>http://nutwerk.de/archives/30-guid.html</id>
        <title type="html">Magento Konfigurationsübersicht und Verlauf</title>
        <content type="xhtml" xml:base="http://nutwerk.de/">
            <div xmlns="http://www.w3.org/1999/xhtml">
                Während des diesjährigen <a href="http://magento-developers-paradise.com/">Magento Developer Paradise auf Ibiza</a> wurde an einem Abend ein Hackathon veranstaltet, bei dem Teams innerhalb von 4 Stunden kleine Magento Projekte umsetzen konnten.<br />
<br />
Zusammen mit <a href="http://kasn.de">Karsten</a> haben wir als Team <a href="https://github.com/2Boys1Shop">2Boys1Shop</a> die Extension <a href="https://github.com/2Boys1Shop/Twoboysoneshop_Configr">Twoboysoneshop_Configr</a> realisiert. Dabei handelt es sich um eine Übersicht über die Konfigurationen aller Stores einer Installation, um diese dann einfach miteinander vergleichen zu können.<br />
<br />
Gerade bei Installationen mit 5 oder mehr Websites/StoreViews ist es nahezu unmöglich den Überblick zu behalten, wie welcher Shop konfiguriert ist, vor allem wenn für diese unterschiedliche Sprachen, Währungen, Ländern, Zahlungsarten etc eingestellt sind. Zudem hat der Kunde oftmals die Möglichkeit direkt auf dem Produktionssystem die Konfiguration zu verändern und bei der Fehleranalyse ist es dann hilfreich sofort die getätigten Änderungen identifizieren zu können.<br />
<br />
Die Extension bietet bislang folgende Features:<br />
<br />
<strong>Übersicht</strong>:<br />
 - alle Werte aller Stores anzeigen<br />
 - Stores auswählen, die man miteinander vergleichen möchte<br />
 - farbliche Hervorhebung der überschriebenen Werte (konfigurierbar)<br />
 - Suche nach Config Keys<br />
 - Tooltips für die Werte aller Scopes<br />
 - Optionale Berechtigungsprüfung, um nur erlaubte Configbereiche anzuzeigen<br />
<br />
<strong>Verlauf</strong>:<br />
 - Konfigurationsänderungen aufzeichnen<br />
 - Alle Änderungen in einer Übersicht anzeigen (wer hat wann welchen Werte worauf geändert)<br />
<br />
Das Feedback nach der Vorstellung unseres Projektes auf der Konferenz hat gezeigt, dass viele Agenturen Interesse an solch einer Extension haben, was uns ermutigt diese weiter auszubauen.<br />
<br />
Link zur Extension auf Github: <a href="https://github.com/2Boys1Shop/Twoboysoneshop_Configr">Twoboysoneshop_Configr</a><br />
  
            </div>
        </content>
        
    </entry>
    <entry>
        <link href="http://nutwerk.de/archives/29-Magento-Steuern-abhaengig-von-Lieferland-bei-Bruttopreisen.html" rel="alternate" title="Magento: Steuern abhängig von Lieferland bei Bruttopreisen" />
        <author>
            <name>Marc Jakubowski</name>
                    </author>
    
        <published>2011-05-27T14:38:15Z</published>
        <updated>2011-05-27T15:09:03Z</updated>
        <wfw:comment>http://nutwerk.de/wfwcomment.php?cid=29</wfw:comment>
    
        <slash:comments>1</slash:comments>
        <wfw:commentRss>http://nutwerk.de/rss.php?version=atom1.0&amp;type=comments&amp;cid=29</wfw:commentRss>
    
            <category scheme="http://nutwerk.de/categories/11-Magento" label="Magento" term="Magento" />
    
        <id>http://nutwerk.de/archives/29-guid.html</id>
        <title type="html">Magento: Steuern abhängig von Lieferland bei Bruttopreisen</title>
        <content type="xhtml" xml:base="http://nutwerk.de/">
            <div xmlns="http://www.w3.org/1999/xhtml">
                Wir hatten kürzlich das Problem, dass wir einen Magento Shop so konfigurieren sollten, dass sich der Steueranteil abhängig vom Steuersatz des Lieferlandes ändern soll.<br />
<br />
Wenn man die Produktpreise als Netto im Admin pflegt ist dies kein Problem (wie z.B. in den USA), aber wenn man Wert auf ordentliche Preiswerte legt, sollte man diese in Brutto anlegen. Im Warenkorb sollen ebenfalls ausschließlich Bruttopreise angezeigt werden, wie dies in Deutschland üblich ist.<br />
<br />
<strong>Problem</strong><br />
<br />
Wenn man nun für die diversen Zielländer eigene Steuersätze definiert macht Magento folgendes:<br />
1. Vom Bruttopreis des Produktes den Steuersatz des als Steuer-Ursprung des Shops definierten Landes (hier Deutschland, also 19%) abziehen um den Nettopreis zu erhalten<br />
2. Den Steuersatz des Ziellandes aufrechnen (z.B. 21% für Belgien)<br />
<br />
Daraus ergibt sich beispielsweise für einen vorherigen Bruttopreis von 24€ nach der Umrechnung ein Bruttopreis von 24,40€ für Belgien.<br />
Dies ist natürlich völlig korrekt, wenn man den gleichen Nettopreis beibehalten möchte, so dass für alle Lieferländer der Umsatz nach Steuerabzug gleich bleibt.<br />
<br />
In unserem Fall aber sollte der Bruttopreis immer gleich bleiben und nur der enthaltene Steueranteil sollte dem Lieferland angepasst werden, ungeachtet der Tatsache, dass sich dadurch der Nettopreis und damit auch der Umsatz ändern kann.<br />
<br />
<strong>Lösung</strong><br />
<br />
Um dies zu erreichen muss Magento dazu gezwungen werden (im o.g. Schritt 1.) statt dem Prozentsatz des Steuer-Ursprungs den Prozentsatz des Ziellandes für die Nettoberechnung zu verwenden, damit beim anschließenden Aufrechnen des neuen Steuersatzes wieder der ursprüngliche Bruttobetrag herauskommt.<br />
<br />
Um dies zu erreichen kann man die Methode Mage_Tax_Model_Calculation::getStoreRate() wiefolgt überschreiben:<br />
<br />
<script src="https://gist.github.com/995353.js?file=Custom_Tax_Model_Calculation.php"></script><br />
<br />
Zunächst wird standardmäßig der Steuersatz des Steuer-Ursprungs ermittelt.<br />
<br />
Wenn nun<br />
1. für den Store die Steuerberechnung anhand des Versandlandes konfiguriert ist<br />
2. eine Versandadresse und damit ein Zielland vorhanden ist<br />
3. die Preise für den Store in Brutto gepflegt werden<br />
4. der vorher ermittelte Steuersatz nicht 0% ist<br />
wird der Steuersatz des Ziellandes ermittelt um diesen für die Berechnung des Nettopreises zu verwenden.<br />
<br />
Die 4. Bedingung hat den Grund, dass bei Ländern oder Bedingungen, wo keine Umsatzsteuer ausgewiesen wird (z.B. bei der Schweiz oder B2B Bestellungen) weiterhin der Steuersatz des Steuer-Ursprungs für die Nettoberechnung verwendet werden soll.<br />
<br />
Wie handhabt ihr solche Besonderheiten bei der Steuerberechnung?  
            </div>
        </content>
        
    </entry>
    <entry>
        <link href="http://nutwerk.de/archives/28-Magento-Unit-Tests,-so-gehts.html" rel="alternate" title="Magento Unit Tests, so geht's" />
        <author>
            <name>Marc Jakubowski</name>
                    </author>
    
        <published>2011-05-23T13:48:26Z</published>
        <updated>2011-05-23T14:18:14Z</updated>
        <wfw:comment>http://nutwerk.de/wfwcomment.php?cid=28</wfw:comment>
    
        <slash:comments>0</slash:comments>
        <wfw:commentRss>http://nutwerk.de/rss.php?version=atom1.0&amp;type=comments&amp;cid=28</wfw:commentRss>
    
            <category scheme="http://nutwerk.de/categories/12-Module" label="Module" term="Module" />
    
        <id>http://nutwerk.de/archives/28-guid.html</id>
        <title type="html">Magento Unit Tests, so geht's</title>
        <content type="xhtml" xml:base="http://nutwerk.de/">
            <div xmlns="http://www.w3.org/1999/xhtml">
                Einer der großen Schwachpunkte von Magento ist, dass es trotz damaliger Ankündigung offensichtlich nicht Unit-getestet ist. <br />
Wer bereits das Vergnügen hatte sich etwas länger mit dem Code von Magento zu befassen wird feststellen, dass es äußerst unwahrscheinlich ist, dass Varien (bzw. Magento Inc.) wenigstens intern über eine Testsuite verfügt. Die Masse an Bugs und die Softwarearchitektur lassen zumindest nicht darauf schließen.<br />
<br />
Nun möchte man aber durchaus selbstgeschriebene Module durch UnitTests abdecken, die exzessive Verwendung von Singletons macht dies allerdings weitestgehend unmöglich. <br />
<br />
Da die Businesslogik der Applikation meist ordentlich in Models oder Helper gekapselt ist, möchte man diese z.B. durch vorkonfigurierte Objekte oder MockObjects ersetzen um diverse Szenarien abzubilden und automatisiert zu testen.<br />
<br />
Hierfür habe ich kürzlich das <a href="https://github.com/mjakubowski/Nutwerk_MageTestable" title="Nutwerk_MageTestable Modul">Nutwerk_MageTestable</a> Modul auf <a href="https://github.com/mjakubowski" title="github Account von Marc Jakubowski">github</a> veröffentlicht, welches schlichtweg gepatchte Mage.php Klassen für verschiedene Magento Versionen bereitstellt, mit denen UnitTests zumindest ermöglicht werden. Die Mage-Klasse wird dabei um folgende Methoden erweitert:<br />
<br />
 - Mage::setStoreConfig($path, $value, $store = null)<br />
 - Mage::setModel($modelClass, $model)<br />
 - Mage::setResourceModel($modelClass, $model)<br />
 - Mage::setResourceSingleton($modelClass, $model)<br />
 - Mage::setHelper($name, $helper)<br />
<br />
Diese Methoden tun nichts weiter, als Objekte unter dem angegebenen Namespace in einer Registry zu hinterlegen, um sie dann bei der Verwendung der entsprechenden Getter Methoden bevorzugt zurückzugeben und dadurch Magentos eigenen Classloader zu umgehen. 
            </div>
        </content>
        
    </entry>
    <entry>
        <link href="http://nutwerk.de/archives/27-Magento-Rundungsfehler-beheben.html" rel="alternate" title="Magento Rundungsfehler beheben" />
        <author>
            <name>Marc Jakubowski</name>
                    </author>
    
        <published>2011-02-02T23:13:10Z</published>
        <updated>2011-02-02T23:13:10Z</updated>
        <wfw:comment>http://nutwerk.de/wfwcomment.php?cid=27</wfw:comment>
    
        <slash:comments>0</slash:comments>
        <wfw:commentRss>http://nutwerk.de/rss.php?version=atom1.0&amp;type=comments&amp;cid=27</wfw:commentRss>
    
            <category scheme="http://nutwerk.de/categories/11-Magento" label="Magento" term="Magento" />
    
        <id>http://nutwerk.de/archives/27-guid.html</id>
        <title type="html">Magento Rundungsfehler beheben</title>
        <content type="xhtml" xml:base="http://nutwerk.de/">
            <div xmlns="http://www.w3.org/1999/xhtml">
                Um die Rundungsfehler zu beheben, die vor allem dann auftreten, wenn man einen Shop mit Bruttopreisen konfiguriert und im Warenkorb oder zusätzlich einen Gutschein einlöst, muss man einfach nur die Rundungsgenauigkeit erhöhen.<br />
<br />
Da alle Datenbankfelder, die Preise speichern, ohnehin als Decimal(12,4) angelegt sind, kann man dies auch nutzen und die standardmäßig eingestellte Rundungsgenauigkeit von "2" auf "4" erhöhen. Bei nur zwei Nachkommastellen kommen recht schnell Rundungsfehler zustande wenn mit mehreren gerundeten Werte gerechnet wird, wie man sich leicht vorstellen kann.<br />
<br />
<strong>Lösung:</strong><br />
In der Klasse Mage_Core_Model_Store den zweiten Parameter verändern:<br />
<code><br />
    public function roundPrice($price)<br />
    {<br />
        //return round($price, 2);<br />
        return round($price, 4);<br />
    }<br />
</code><br />
<br />
Im Frontend werden ohnehin alle Preisangaben durch den formatPrice() Filter auf zwei Nachkommastellen gerundet, so dass der Kunde nichts davon mitbekommt. Das einzige, was eventuell problematisch sein kann ist, dass Preise, die direkt aus der Datenbank oder über das Model exportiert und an Schnittstellen übergeben werden Fehler verursachen, wenn nun plötzlich vier Stellen nach dem Komma ausgegeben werden. <br />
Allerdings sind mir bis jetzt keine Fehler diesbezüglich in den gängigen Extensions oder Zahlungsschnittstellen begegnet.  
            </div>
        </content>
        
    </entry>
    <entry>
        <link href="http://nutwerk.de/archives/26-Magento-Admin-Login-geht-nicht.html" rel="alternate" title="Magento Admin Login geht nicht" />
        <author>
            <name>Marc Jakubowski</name>
                    </author>
    
        <published>2011-02-02T22:43:46Z</published>
        <updated>2011-02-02T22:43:46Z</updated>
        <wfw:comment>http://nutwerk.de/wfwcomment.php?cid=26</wfw:comment>
    
        <slash:comments>0</slash:comments>
        <wfw:commentRss>http://nutwerk.de/rss.php?version=atom1.0&amp;type=comments&amp;cid=26</wfw:commentRss>
    
            <category scheme="http://nutwerk.de/categories/11-Magento" label="Magento" term="Magento" />
    
        <id>http://nutwerk.de/archives/26-guid.html</id>
        <title type="html">Magento Admin Login geht nicht</title>
        <content type="xhtml" xml:base="http://nutwerk.de/">
            <div xmlns="http://www.w3.org/1999/xhtml">
                Dies ist lediglich eine Notiz an mich, falls es mal wieder partout nicht funktioniert sich in der lokalen Entwicklungsumgebung im Adminbereich einzuloggen. <br />
<br />
Das Problem tritt meistens auf, wenn man Magento in einem Unterverzeichnis des Document Roots betreibt. Auf Grund der Cookie Domain ist es dann unter Umständen nicht möglich sich einzuloggen. Man erkennt es daran, dass man keine Fehlermeldung erhält und einfach wieder auf das Loginformular zurückgeleitet wird.<br />
<br />
<strong>Variante1: </strong><br />
In der Methode Mage_Core_Model_Session_Abstract_Varien::start() ein paar Cookie Parameter leeren<br />
<code><br />
        // session cookie params<br />
        $cookieParams = array(<br />
            'lifetime' => $cookie->getLifetime(),<br />
            'path'     => $cookie->getPath(),<br />
            'domain'   => '', //$cookie->getConfigDomain(),<br />
            'secure'   => '', //$cookie->isSecure(),<br />
            'httponly' => '', //$cookie->getHttponly()<br />
        );<br />
</code><br />
<br />
<strong>Variante2:</strong><br />
In der Datenbanktabelle core_config_data die entsprechenden Werte setzen<br />
<code><br />
path: web/cookie/cookie_domain | value: -leer-<br />
path: web/cookie/cookie_httponly | value: -leer-<br />
</code><br />
<br />
  
            </div>
        </content>
        
    </entry>

</feed>
