Monday 11.January 2010
geposted in Magento
um 6:09 pm
von alewo
Das Löschen von Testbestellungen ist leider in Magento standardmäßig nicht vorgesehen, daher muss man sich im Moment leider noch selbst darum zu kümmern. Zum Glück gibt es mit der Delete Orders Extension eine Erweiterung, die einem die meiste Arbeit abnimmt, jedoch ist sie nicht vollkommen und lässt einen im Stich, wenn man Bestellungen löschen will, für die man eine Rechnung erstellt hat.
Unglücklicherweise bleiben also noch einige Bestellungen bestehen. Da ich natürlich nicht der erste bin, der damit Probleme hat, gibt es auch schon einen schönen Thread im Magento-Forum dazu.
Hier ist eine schöne Lösung der Problematik beschrieben, die aber mitunter bei einigen Installationen wegen der Kollation zu Problemen führt. Deswegen ist es nötig, die dort beschriebene Lösung anzupassen.
Auch die Temporary Tables die erstellt werden, werden in der Lösung hier als Tables erstellt, da ich nicht die Möglichkeit zum Grant der entsprechenden Rechte hatte.
Also eine Lösung die bei mir funktioniert und bei der man nur bei @orderid die ID der Bestellung die gelöscht werden soll setzen muss:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
| SET @orderId = '100000001' COLLATE 'utf8_general_ci';
SET FOREIGN_KEY_CHECKS = 1;
SET @salesFlatQuoteId = (
SELECT entity_id
FROM sales_flat_quote
WHERE reserved_order_id = @orderId
);
SET @salesOrderId = (
SELECT entity_id
FROM sales_order
WHERE increment_id = @orderId
);
/* temp table used as an array */
CREATE TABLE del_sales(
id INT AUTO_INCREMENT PRIMARY KEY,
salesId INT(10)
)
COLLATE 'utf8_general_ci';
/* temp table used as an array */
CREATE TABLE del_statusSales(
id INT AUTO_INCREMENT PRIMARY KEY,
salesId INT(10)
) COLLATE 'utf8_general_ci';
INSERT INTO del_statusSales (salesId)
SELECT entity_id
FROM sales_order_entity_int
WHERE value = @salesOrderId
AND attribute_id = ANY (
SELECT attribute_id
FROM eav_attribute
WHERE attribute_code = 'order_id'
)
AND entity_id = ANY (
SELECT entity_id
FROM sales_order_entity
WHERE entity_type_id = ANY (
SELECT entity_type_id
FROM eav_entity_type
WHERE entity_type_code = 'invoice'
OR entity_type_code = 'shipment'
OR entity_type_code = 'creditmemo'
)
);
INSERT INTO del_sales (salesId)
SELECT entity_id
FROM sales_order_entity
WHERE parent_id = ANY (
SELECT salesId
FROM del_statusSales
)
AND entity_type_id = ANY (
SELECT entity_type_id
FROM eav_entity_type
WHERE entity_type_code = 'invoice_item'
OR entity_type_code = 'invoice_comment'
OR entity_type_code = 'shipment_item'
OR entity_type_code = 'shipment_comment'
OR entity_type_code = 'shipment_track'
OR entity_type_code = 'creditmemo_item'
OR entity_type_code = 'creditmemo_comment'
);
INSERT INTO del_sales (salesId)
SELECT salesId
FROM del_statusSales;
INSERT INTO del_sales (salesId)
SELECT entity_id
FROM sales_order_entity
WHERE parent_id = @salesOrderId;
DELETE FROM sales_order_entity
WHERE entity_id = ANY (
SELECT salesId
FROM del_sales
);
DELETE FROM sales_flat_quote
WHERE reserved_order_id = @orderId;
DELETE FROM sales_flat_order_item
WHERE quote_item_id = @salesFlatQuoteId;
DELETE FROM sales_order
WHERE increment_id = @orderId;
/* drop temp tables */
DROP TABLE del_sales;
DROP TABLE del_statusSales; |
Permalink
geposted in Magento
um 5:25 pm
von alewo
Eines der größten Probleme bei Magento ist leider der fest vorgegebene Workflow. Der Besteht standardmäßig ja aus den Statuus “Pending, Hold, Processing, Canceled, Complete und Closed” und unterscheidet zwischen online und offline-Payment. Leider bilden diese Statuus nie wirklich jeden Workflow ab und eigentlich wäre es sowieso schöner, wenn man sich diesen Workflow gestalten könnte, wie man sich es wünscht. Eine recht anschauliche grafische Darstellung des Workflows habe ich hier gefunden.
Ich habe mich jetzt noch nicht im Detail mit der Umsetzung beschäftigt, aber am Ende habe ich mir zum Ziel gesetzt, soll mein Wunschworkflow so aussehen:

Selbstverständlich soll jede dieser Stufen in dem Workflow noch einzelne Unterstufen enthalten können. Also mal los, mal schauen obs was wird.
Als erste habe ich mal mit dem Order_Status Plugin rumgespielt, was allerdings nicht die mir gewünschte Funktionalität beinhaltet bzw. bei mir nicht so funktioniert hat, wie es funktionieren sollte. Also hab ich das jetzt mal wieder deinstalliert und versuch es auf eigene Faust =) . Mit dem durch das Order_Status-Plugin gewonnen Vorwissen, wird es hoffentlich ein wenig einfacher…
Als erstes habe ich mich einmal auf die Suche gemacht, nach einer Möglichkeit, den Workflow zu ändern. Also neue Verknüpfungen zwischen den bereits bestehenden Statuus zu finden. Und Voila, fündig geworden bin ich in “app\code\core\Mage\Sales\etc\config.xml” ab etwa Zeile 544.
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
| <order>
<statuses>
<pending translate="label"><label>Pending</label></pending>
<pending_paypal translate="label"><label>Pending PayPal</label></pending_paypal>
<processing translate="label"><label>Processing</label></processing>
<holded translate="label"><label>On Hold</label></holded>
<complete translate="label"><label>Complete</label></complete>
<closed translate="label"><label>Closed</label></closed>
<canceled translate="label"><label>Canceled</label></canceled>
</statuses>
<states>
<new translate="label">
<label>New</label>
<statuses>
<pending/>
</statuses>
<visible_on_front/>
</new>
<pending_payment translate="label">
<label>Pending Payment</label>
<statuses>
<pending_paypal/>
</statuses>
</pending_payment>
<processing translate="label">
<label>Processing</label>
<statuses>
<processing/>
</statuses>
<visible_on_front/>
</processing>
<complete translate="label">
<label>Complete</label>
<statuses>
<complete/>
</statuses>
<visible_on_front/>
</complete>
<closed translate="label">
<label>Closed</label>
<statuses>
<closed/>
</statuses>
<visible_on_front/>
</closed>
<canceled translate="label">
<label>Canceled</label>
<statuses>
<canceled/>
</statuses>
<visible_on_front/>
</canceled>
<holded translate="label">
<label>On Hold</label>
<statuses>
<holded/>
</statuses>
<visible_on_front/>
</holded>
</states>
</order> |
Hier habe ich einfach mal jedem Status jeden anderen Status als übergang zugeordnet, um zu sehen ob der gewünschte Vorgang eintritt.
Das Resultat sah dann also folgendermaßen aus:
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
| <order>
<statuses>
<pending translate="label"><label>Pending</label></pending>
<pending_paypal translate="label"><label>Pending PayPal</label></pending_paypal>
<processing translate="label"><label>Processing</label></processing>
<holded translate="label"><label>On Hold</label></holded>
<complete translate="label"><label>Complete</label></complete>
<closed translate="label"><label>Closed</label></closed>
<canceled translate="label"><label>Canceled</label></canceled>
</statuses>
<states>
<new translate="label">
<label>New</label>
<statuses>
<pending/>
<pending_paypal/>
<processing/>
<complete/>
<closed/>
<canceled/>
<holded/>
</statuses>
<visible_on_front/>
</new>
<pending_payment translate="label">
<label>Pending Payment</label>
<statuses>
<pending/>
<pending_paypal/>
<processing/>
<complete/>
<closed/>
<canceled/>
<holded/>
</statuses>
</pending_payment>
<processing translate="label">
<label>Processing</label>
<statuses>
<pending/>
<pending_paypal/>
<processing/>
<complete/>
<closed/>
<canceled/>
<holded/>
</statuses>
<visible_on_front/>
</processing>
<complete translate="label">
<label>Complete</label>
<statuses>
<pending/>
<pending_paypal/>
<processing/>
<complete/>
<closed/>
<canceled/>
<holded/>
</statuses>
<visible_on_front/>
</complete>
<closed translate="label">
<label>Closed</label>
<statuses>
<pending/>
<pending_paypal/>
<processing/>
<complete/>
<closed/>
<canceled/>
<holded/>
</statuses>
<visible_on_front/>
</closed>
<canceled translate="label">
<label>Canceled</label>
<statuses>
<pending/>
<pending_paypal/>
<processing/>
<complete/>
<closed/>
<canceled/>
<holded/>
</statuses>
<visible_on_front/>
</canceled>
<holded translate="label">
<label>On Hold</label>
<statuses>
<pending/>
<pending_paypal/>
<processing/>
<complete/>
<closed/>
<canceled/>
<holded/>
</statuses>
<visible_on_front/>
</holded>
</states>
</order> |
Ein Test im Adminbereich bestätigt das funktionieren der Änderung. Unabhängig vom gesetzten Status der Bestellung, kann ich nun im Kommentarlauf jeden Beliebigen anderen Status setzen.
Überzeugt von diesem ersten Erfolg, will ich nun als nächstes einmal einen neuen Status mit Übergängen zu den anderen erstellen.
Ich erweitere den Code also um einen Zustand “Test”.
<order>
<statuses>
...
<test translate="label"><label>Test</label></test>
</statuses>
<states>
...
<test translate="label">
<label>test</label>
<statuses>
<test/>
<pending/>
<pending_paypal/>
<processing/>
<complete/>
<closed/>
<canceled/>
<holded/>
</statuses>
<visible_on_front/>
</test>
...
</states>
</order>
Da nun auch der neue Testzustand wunschgemäß arbeitet, mach ich mich nun mal an den ersten richtig großen Schritt, ich erstelle alle Statuus, die ich in meinem Workflow haben möchte und entferne die unnötigen =).
Es ergab sich also folgender Inhalt…
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
| <order>
<statuses>
<pending translate="label"><label>Pending</label></pending>
<processing translate="label"><label>Processing</label></processing>
<distributed translate="label"><label>Versendet</label></distributed>
<complete translate="label"><label>Fertig</label></complete>
<retour translate="label"><label>Closed</label></retour>
<canceled translate="label"><label>Canceled</label></canceled>
<correction translate="label"><label>Korrektur</label></correction>
</statuses>
<states>
<new translate="label">
<label>New</label>
<statuses>
<pending/>
<processing/>
<distributed/>
<complete/>
<retour/>
<correction/>
<canceled/>
</statuses>
<visible_on_front/>
</new>
<pending translate="label">
<label>Pending</label>
<statuses>
<pending/>
<processing/>
<canceled/>
</statuses>
<visible_on_front/>
</pending>
<processing translate="label">
<label>Processing</label>
<statuses>
<processing/>
<distributed/>
</statuses>
<visible_on_front/>
</processing>
<distributed translate="label">
<label>Versendet</label>
<statuses>
<distributed/>
<complete/>
<retour/>
</statuses>
<visible_on_front/>
</distributed>
<complete translate="label">
<label>Fertig</label>
<statuses>
<complete/>
<retour/>
<canceled/>
</statuses>
<visible_on_front/>
</complete>
<retour translate="label">
<label>Retour</label>
<statuses>
<retour/>
<correction/>
</statuses>
<visible_on_front/>
</retour>
<correction translate="label">
<label>Korrektur</label>
<statuses>
<correction/>
<processing/>
<canceled/>
</statuses>
<visible_on_front/>
</correction>
<canceled translate="label">
<label>Canceled</label>
<statuses>
<canceled/>
<pending/>
</statuses>
<visible_on_front/>
</canceled>
</states>
</order> |
nachdem nun auch dieser veränderte Workflow seine Arbeit getan hat, hat mich nun mein Größenwahn gepackt. Ich hab mir gedacht, wenn ich den Workflow Grob nachbilden kann, warum dann nicht auch im Detail. Also nächstes Ziel soll sein, diesen ersten Detailierten Workflow abzubilden:

Da mir im Moment die Zeit fehlt rumzuexperimentieren, werde ich das Ganze im Auge behalten und bei Gelegenheit umsetzen. Dann werde ich hier natürlich drüber berichten…
Permalink
Tuesday 01.December 2009
geposted in Uncategorized
um 7:49 pm
von alewo
So nur als Kurznachricht, damit ichs wenn ichs mal wieder brauch wieder finde. Wenn irgendne blöde Webseite mein Firefox dazu zwingt, dass die Größe angepasst wird, zum Beispiel Fußball-Ticker machen sowas gerne oder Jobbörsen, dann muss ich das Fenster erst wieder umständlich auf Vollbild stellen. Das will ich aber nicht =) .
Wer das auch nicht will:
in der config vom Firefox (about:config) die Variable dom.disable_window_move_resize auf true setzen.
fertig.
Danke
Permalink
Friday 30.October 2009
geposted in Magento
um 7:16 pm
von alewo
Der folgende hoffentlich regelmäßig aktualisierte Beitrag stellt eine Sammlung von nützlichen Informationen über die Ordnerstrukturen und den Aufbau von Magento dar.
Ich nehme auch gern Vorschläge an, was die Liste sinnvoll ergänzen könnte.
| Inhalt |
Beschreibung |
Link |
| Frontend CSS |
Gerade wenn man die Darstellungen im Shop nach seinen Wünschen hin vereinheitlichen will oder muss, weil alles den gleichen Farbton braucht oder was weiss ich warum, so muss man wissen, in welcher CSS-Datei welche Elemente zu finden sind und wo man diese Dateien findet. |
html |
| … |
… |
… |
Permalink
geposted in Magento
um 7:10 pm
von alewo
Der folgende hoffentlich regelmäßig geupdatete (^^ tolles neues deutsches Wort) Beitrag stellt eine Sammlung von nützlichen bereits verfügbaren How-To’s um Magento dar.
Die meisten Links werden vermutlich direkt auf einige Wikiseiten von magentocommerce verweisen, aber nicht nur. Ich nehme übrigens auch gern Vorschläge an, welche How-To’s noch nützlich sind, speziell beim Aufbau eines deutschen Webshops.
| Problem |
Beschreibung |
Link |
| Buttons statt Image via CSS |
Einige Buttons von Magento werden in der Standardinstallation auf Basis von Grafiken erzeugt. Da die dargestellte Schrift aber leider Englisch ist, muss man entweder die Grafiken ersetzen oder man lässt sie gleich aus CSS und einer Basisgrafik erstellen. Das How-To beschreibt wie |
html |
| … |
… |
… |
Permalink