-
Posts
437 -
Joined
-
Last visited
-
Days Won
5
Content Type
Profiles
Forums
Gallery
Downloads
Articles
Store
Blogs
Posts posted by Pedalman
-
-
I added today two collumns to oder overview I need and like to see in the overview:
1.) invoice no.
2.) date of order status update
These were more than easy to add since Thirtybees uses a bootstrap admin template and columns fit more or less when you add some. You will find the additions in the added code snippet.
However, I need a third collumn and this is the most important one for me
3.) If order status history contains payment option "pay via invoice" & not order status ID "payed" then show date of delivery (order status date of deliverstatus ID) and add e.g. 14 days to it and color it red. Else do not show or string 'OK' in green 🙂
You dig it. I use a 'private' payment option that allow customers to buy via inhouse invoice. After 14 days they should have paid the order. Thing is I very much often forget those orders and have problems to controll them. Ok, well, I have an extra order status for them saying "waiting for payment of invoice" but I also forget some time to set this one. So, this collumn could be handy to me since I would see at a glance which orders were checked out via "my inhouse invoice payment" and where I have not set the status "payment received".
PS:
Best, or an enhancement would be to to add function to invoice payment module to set a certain status automatically (could check via cron). Actually, my pretty old invoice payment options claims to have this functions but it never worked 😞 Advantage of this approach is that I can bundle order status with reminder email for customer.
/override/controllers/admin/AdminOrdersController.php
<?php class AdminOrdersController extends AdminOrdersControllerCore { // @codingStandardsIgnoreStart /** @var string $toolbar_title */ public $toolbar_title; /** @var array $statuses_array */ protected $statuses_array = []; // @codingStandardsIgnoreEnd /** * AdminOrdersControllerCore constructor. * * @since 1.0.0 */ public function __construct() { /*echo "__construct() OVERRIDE BORIS WORKING"; */ $this->bootstrap = true; $this->table = 'order'; $this->className = 'Order'; $this->lang = false; $this->addRowAction('view'); $this->explicitSelect = true; $this->allow_export = true; $this->deleted = false; $this->context = Context::getContext(); $this->_select = ' a.id_currency, a.id_order AS id_pdf, /* Boris add invoice and update date 2019.12*/ a.invoice_number, a.date_upd, /* //Boris add invoice and update date 2019.12*/ CONCAT(LEFT(c.`firstname`, 1), \'. \', c.`lastname`) AS `customer`, osl.`name` AS `osname`, os.`color`, IF((SELECT so.id_order FROM `'._DB_PREFIX_.'orders` so WHERE so.id_customer = a.id_customer AND so.id_order < a.id_order LIMIT 1) > 0, 0, 1) as new, country_lang.name as cname, IF(a.valid, 1, 0) badge_success'; $this->_join = ' LEFT JOIN `'._DB_PREFIX_.'customer` c ON (c.`id_customer` = a.`id_customer`) LEFT JOIN `'._DB_PREFIX_.'address` address ON address.id_address = a.id_address_delivery LEFT JOIN `'._DB_PREFIX_.'country` country ON address.id_country = country.id_country LEFT JOIN `'._DB_PREFIX_.'country_lang` country_lang ON (country.`id_country` = country_lang.`id_country` AND country_lang.`id_lang` = '.(int) $this->context->language->id.') LEFT JOIN `'._DB_PREFIX_.'order_state` os ON (os.`id_order_state` = a.`current_state`) LEFT JOIN `'._DB_PREFIX_.'order_state_lang` osl ON (os.`id_order_state` = osl.`id_order_state` AND osl.`id_lang` = '.(int) $this->context->language->id.')'; $this->_orderBy = 'id_order'; $this->_orderWay = 'DESC'; $this->_use_found_rows = true; $statuses = OrderState::getOrderStates((int) $this->context->language->id); foreach ($statuses as $status) { $this->statuses_array[$status['id_order_state']] = $status['name']; } $this->fields_list = [ 'id_order' => [ 'title' => $this->l('ID'), 'align' => 'text-center', 'class' => 'fixed-width-xs', ], 'reference' => [ 'title' => $this->l('Reference'), ], 'new' => [ 'title' => $this->l('New client'), 'align' => 'text-center', 'type' => 'bool', 'tmpTableFilter' => true, 'orderby' => false, 'callback' => 'printNewCustomer', ], 'customer' => [ 'title' => $this->l('Customer'), 'havingFilter' => true, ], ]; if (Configuration::get('PS_B2B_ENABLE')) { $this->fields_list = array_merge( $this->fields_list, [ 'company' => [ 'title' => $this->l('Company'), 'filter_key' => 'c!company', ], ] ); } $this->fields_list = array_merge( $this->fields_list, [ 'total_paid_tax_incl' => [ 'title' => $this->l('Total'), 'align' => 'text-right', 'type' => 'price', 'currency' => true, 'callback' => 'setOrderCurrency', 'badge_success' => true, ], 'payment' => [ 'title' => $this->l('Payment'), ], 'osname' => [ 'title' => $this->l('Status'), 'type' => 'select', 'color' => 'color', 'list' => $this->statuses_array, 'filter_key' => 'os!id_order_state', 'filter_type' => 'int', 'order_key' => 'osname', ], 'date_add' => [ 'title' => $this->l('Date'), 'align' => 'text-right', 'type' => 'datetime', 'filter_key' => 'a!date_add', ], /*BORIS 2019.12 'invoice_date' => [ 'title' => $this->l('Invoice Date'), 'align' => 'text-right', 'type' => 'datetime', 'filter_key' => 'a!invoice_date' ],*/ 'invoice_number' => [ 'title' => $this->l('Invoice No'), 'align' => 'text-right', 'type' => 'int', 'filter_key' => 'a!invoice_number' ], 'date_upd' => [ 'title' => $this->l('Update OS'), 'align' => 'text-right', 'type' => 'datetime', 'filter_key' => 'a!date_upd' ], /* //BORIS 2019.12*/ 'id_pdf' => [ 'title' => $this->l('PDF'), 'align' => 'text-center', 'callback' => 'printPDFIcons', 'orderby' => false, 'search' => false, 'remove_onclick' => true, ], ] ); if (Country::isCurrentlyUsed('country', true)) { $result = Db::getInstance(_PS_USE_SQL_SLAVE_)->ExecuteS( ' SELECT DISTINCT c.id_country, cl.`name` FROM `'._DB_PREFIX_.'orders` o '.Shop::addSqlAssociation('orders', 'o').' INNER JOIN `'._DB_PREFIX_.'address` a ON a.id_address = o.id_address_delivery INNER JOIN `'._DB_PREFIX_.'country` c ON a.id_country = c.id_country INNER JOIN `'._DB_PREFIX_.'country_lang` cl ON (c.`id_country` = cl.`id_country` AND cl.`id_lang` = '.(int) $this->context->language->id.') ORDER BY cl.name ASC' ); $countryArray = []; foreach ($result as $row) { $countryArray[$row['id_country']] = $row['name']; } $part1 = array_slice($this->fields_list, 0, 3); $part2 = array_slice($this->fields_list, 3); $part1['cname'] = [ 'title' => $this->l('Delivery'), 'type' => 'select', 'list' => $countryArray, 'filter_key' => 'country!id_country', 'filter_type' => 'int', 'order_key' => 'cname', ]; $this->fields_list = array_merge($part1, $part2); } $this->shopLinkType = 'shop'; $this->shopShareDatas = Shop::SHARE_ORDER; if (Tools::isSubmit('id_order')) { // Save context (in order to apply cart rule) $order = new Order((int) Tools::getValue('id_order')); $this->context->cart = new Cart($order->id_cart); $this->context->customer = new Customer($order->id_customer); } $this->bulk_actions = [ 'updateOrderStatus' => ['text' => $this->l('Change Order Status'), 'icon' => 'icon-refresh'], ]; parent::__construct(); } }
-
I would give it another try since I see it as Rampage suggested. I had his problem often in the last 8 years and always it was related to caching problems.
(These are not only the settings you set in your BO but also those used by your '
host'. In my case I I had issues some times in the past with php additions like APC and OPcache. Also with activated mod_pagespeed I had issues. But all this is not my domain but if you know those terms and know where to de-/activate them you could give it a try.)Make also sure that in your performance settings cache (APC etc.) and full page caching (both more at the bottom part of performance settings) are disabled for testing your problem. I had excactly the same problems as said and sometimes a translations appeared correctly literally the next day on front/back.
-
I try to clean up my product descriptiond and meta data from old html tags like span and div.
I did export my data via Datakick module and also via csv export from /bo/catalog.
I openend the data in my two favorite tools VisualCode and Scalc and did some search and replace routines. Regex does help here immensely but I am all than used to regex.
So I wonder if iht would not be nice to have all in one place, namely Thirtybees. Would be great to expand its export capabilities with some cleaning functions. I do not know but assume that the HtmlPurifier does something like this and perhaps it is quickly doable to habe a product/categorie data export feature with splitscreen (left real data/right preview). I think data shold be presented in tables like Scalc does.
Anyhow, how do you groom your product data?
-
I am sorry about me complaining too early. My issue was related to my local db set up. The override works fine. As always you have to delete class_index.php in /cache/ to make override work.
If it is ok please delete my posts here since they are obsolete. Thanks
-
Moreover, crucial things like invoices and credit slips should work. If merchants notice irregualarities or even bugs I assume it'd be appropriate if a team leader shows he took notice of it and does all a fix is introduced.
Merchants use live shops and no test shops 🙂
So, I am asking for help here for a proper order-slip.total-tab.tpl
-
looking for way to sort invoice articles via article ref
-
I triesd the override but it reported to be incompatible with latest TB (debug on). Could please someone capable check, cause I like this override and'd be very handy.
-
Da hatte ich wohl was falsch in Erinnerung. Ich dachte immer, "Setze Bestellung auf "Bezahlt"" sorgt für mind. zwei Dinge: a) Rechnung wird generiert b) Statistik im Dashbooard arbeitet richtig
Sieht so aus, dass ich die Rechnung auch mit dem "Download der PDF Rechnung erlauben" generieren kann. Damit wäre das geklärt. Danke für den Screenshot!
-
I bought some years ago a module called: PrestaVaultMalware | Virus | Trojan Protection
by prestashopaddons.prestaheroes.com .
What I bought was the Prestaversion. Since ca. two years he or they support also THIRTYBEES !
Sad for me is he wanted me to buy the module again extra for Thirtybees. I denied and use since years the Presta version on my Thirtybees shop.
Thing is it seems to work. If I could I would enhance the module with the function to show also who used the back office and when. You can see this of course in logs but I 'd like to have it in once place.
File monitoring (size and date) that is what the module does and also a view for backoffice use times. Best would be a detailed view that could break down if files where changes when xzy was logged into bo. Best would be if you could also implement FTP connection via server log 🙂
Oh, and btw the module seems to do its job via doing a backup of all files, storing some hash in db with the original files (your table for the module will grow very big in db 😉 ) and the do a comparrison check.
In a nutshell you got also a back up you can restore from module gui. All in all a very fine module that is worth its price!
-
Wie in alten Zeiten occam 🙂 Wir reden an einander vorbei. Aber ist meine Schuld. ... " muss ich 'einen' Status haben, der auf bezahlt steht. " damit meinte ich, einen Status, der die Bestellung als bezahlt=1 setzt in der db. Oder wie auch immer, Du hast es treffend ausgedrückt und geholfen. Danke sehr.
-
Ich bin glücklicher Chex Kunde, aber diese erweiterten Merkmale werden bei mir auch nicht angezeigt. Ich hoffe ehrlich, dass dieses bei unseren Artikeln auch unnötig ist, da es den checkout unübersichtlich gestalten würden (mobilview).
-
Als ich schrieb " Aber um eine Rechnung aus zu drucken, muss die Order auf "bezahlt" stehen. ", da meinte ich es generell, also nicht wörtlich. Ich wollte damit sagen, wenn ich eine Rechnung generieren und ausdrucken will, so muss ich 'einen' Status haben, der auf bezahlt steht. Unsere Kunden, die auf Rechnung kaufen, bekommen ja auch eine Rechnung beigelegt...
Und somit habe ich natürlich auch immer mal wieder Rechnungen im Sytem (inkrementelle RE-Nr...), für die kein Geld geflossen ist.* Und somit sollte es auch richtig sein, dass ich diese dann ebenfalls via Teil-/Rückerstattung, welches ja für die Generierung des Rückerstattungsdokuments nötig ist, aufhebe.
Für diesen Vorgang brauche ich nicht das RMA System in TB aktivieren und eigentlich auch den Bestellstatus 'storniert' nicht.
*) entweder, weil der Kunde vor Versand vom Kauf zurücktritt, oder nach erhalt der Ware sich entscheidet zu Widerrufen oder Mängel feststellt und nicht zahlen will
-
Sorry, but I mostly I am just a merchant and I do not know the tools to get things done nicely.
Frist question is if there is a way to highlight visually all the hooks of a certain page? I am thinking about a "dev mode" I switch on and on each pages {hookxyz} is being highlighted. I can so quickly see what is supported and what not.
Second I totally failed the most easiest part obviously. I always wanted a custom action bar in my bo/orders & bo/ordersdetails in order to batch create orderstatus and print invoice etc. I know the button at the buttom but I am lazy and do repetitive stuff a handy action bar at the top would be nice (like the ancient kpi bar I modified in the past but I like cutom block hooks more! It is great Lesly).
My code I tried to hook into admin office tab adminorder is
<div class="well hidden-print"> <a class="btn btn-default"> <i class="icon-print"></i> Print order </a><a data-selenium-id="view_invoice" class="btn btn-default _blank" href="index.php?controller=AdminPdf&&submitAction=generateInvoicePDF&id_order=SELECTED" target="_blank"> <i class="icon-file"></i> View invoice </a> <span class="span label label-inactive"> <i class="icon-remove"></i> No delivery slip </span> <a id="desc-order-partial_refund" class="btn btn-default" href="#refundForm"> <i class="icon-exchange"></i> Partial refund </a></div>
<div class="well hidden-print"> <a class="btn btn-default"> <i class="icon-print"></i> Print order </a> <a data-selenium-id="view_invoice" class="btn btn-default _blank" href="index.php?controller=AdminPdf&&submitAction=generateInvoicePDF&id_order=SELECTED" target="_blank"> <i class="icon-file"></i> View invoice </a> <span class="span label label-inactive"> <i class="icon-remove"></i> No delivery slip </span> <a id="desc-order-partial_refund" class="btn btn-default" href="#refundForm"> <i class="icon-exchange"></i> Partial refund </a></div>
You see it is just a copy but should show. In my case it does not 😞
-
You could try the German agency Silbersaiten. I remember they had such a module in the past but do not expect best service or modern gui style of modules.
-
1
-
-
Ihr habt ja recht, es nervt.
Ich werde mir bei Zeiten dann mal die Warenkorbregeln genauer ansehen und Datakick hat ja auch ein super IFTT Modul geschrieben, welches hier weiter helfen könnte. Ob ich es so weit auf die Spitze treibe oder einfach mit dem Übel lebe, muss ich mal sehen 🙂
-
Ich wollte den schon vorhandenen Beitrags-thread nicht nutzen, da ich eine Lösung bzw. Lösungswege von deutschen Nutzern für Deutschland suche. Ich hoffe, dass das in Ordnung geht.
Original: how to handle returns
Hallo
ich habe mir heute auch mal unseren workflow angesehen und mir so meine Gedanken gemacht. Das Problem ist bei uns, dass wir immer! eine Rechung dem Paket beilegen. Das handhaben wir so seid Jahren und ich halte es für gut, weil sonst immer wieder mal Kunden anrufen, nur wegen der fehlenden Rechnung. Auch rechtlich gesehen ist es so in Ordnung denke ich, denn nur via email eine Rechnung zu versenden...Aber vielleicht bin ich da altbacken.
Aber um eine Rechnung aus zu drucken, muss die Order auf "bezahlt" stehen. Das hat zwei merkwürdige Konsequenzen:
a) Kunde bekommt eine email mit Inhalt, der hätte die Order bezahlt, obwohl er ja via 'Kredit' sprich Rechnungskauf eingekauft hat.
b) Überlegt der Kunde es sich anders und ich versende nicht, habe ich das Problem, dass schon eine Rechung erstellt wurde. In der Datenbank und beim Kunden, via Email. Ich habe es immer so verstanden, dass diese dann auch 'wieder aufgehoben werden muss' via Rückerstattung, damit alles stimmt. Sonst würde ja eine RE vorliegen, die nie bezahlt wurde. Aber eine Rückerstattung, wenn gar kein Geld transferiert wurde? Scheint mir auch nicht zu stimmen.
-
Well, I am interested in learning new stuff and I want to improve my daily workflow constantly. So, instead of dealing any further with XAMPP under Windows I would like to know which is the proper way to go.
I use since years virtual machines and have stick with VirtualBox. As far as I good dig Bitnami for example hosts ready to go images for virtual machines. Especially interesting might be here the bitnami-lampstack-7.3.9-0-linux-debian-9-x86_64.ova .
I also have a nas running with XPenology and some docker containers. Is this a good idea for testing new modules and functions in TB or too complicated and less user friendly than a virtual machine. This I could take anywhere (Mac, Linus, 'Win) and blow it up with software i usually use when doing stuff on my TB install.
-
Hallo,
wie geht Ihr mit niederpreisigen Bestellungen um, die die Marge auffressen?
Eine rechtlich korrekte Lösung wäre der Mindermengenzuschlag, wenn korrekt umgesetzt. Hat jemand eine Lösung im Betrieb?
-
I had always thought that a proper pdf template for slips would do the trick. I had to edit my pdf templates during Prestashop times and migrated them to TB two years ago.
Anyway, this is not how it should be done and the core system should work flawless in this case. So, I really vote for a proper guide how to use these (old) functions a)RMA a) partial refund (that can also fully refund^^) with the relates order statuses and possible emails going out to customer with nice screenshots for dumb merchants as me.
-
1
-
-
I need to create 6500 chars long order message.
I tried to override ordermessage with an increased max allowed chars but I had to learn that I can only override functions and no definitions.
Can you help me here?
*/ public static $definition = [ 'table' => 'order_message', 'primary' => 'id_order_message', 'multilang' => true, 'fields' => [ 'date_add' => ['type' => self::TYPE_DATE, 'validate' => 'isDate' ], 'name' => ['type' => self::TYPE_STRING, 'lang' => true, 'validate' => 'isGenericName', 'required' => true, 'size' => 128 ], 'message' => ['type' => self::TYPE_STRING, 'lang' => true, 'validate' => 'isMessage', 'required' => true, 'size' => 6500], ], ];
-
It is a hijack but I still dream about an order edit / credit-slip edit / order status delete/add/edit function for orderid in TB. Would be very handy in many situations.
-
1
-
-
Hello
since I am lazy and since I am also looking for the best way to optimize my off line seo I thought about a way to combine shor and long description of products.
For compatiblity reasons both database entries should still be used but in a template it could be solved differently. Moreover via module's like Datakick's that also integrate into backoffice product edit form it might be possbile to annex those fields and graft on them into one form. So I could happily enter one! product description like it is naturally to my writing style and thinking about a product and the template could split the description via js in order to satisfy customers used way to scan a product page and seo as google feed etc. modules that derive data from both or either db field could be used the usual way.
In short, I stumbled about this online shop that shows it:
What do you think about it and is this doable via module?
-
And now since I know that Petr has an adress in L.A. 😊 while doing tests I can tell you that our orders for Sep. and Oct. increased three times while the numer of open carts decreased by two times in comparission to last year.
I am confident that this is mainly due to Petr's CHEX module.
Thank you to all who tested and for Datakick's constant development of his modules.
-
2
-
-
And in addtion it is good to know that when you go to translations in your back office and choose to translate/edit emails you choose your template. Then these alterations are constricted on the files in the /themes/yourtheme/mails .
Question about Advanced Stock Management System
in Technical help
Posted
And it helps me (better helped since I abandoned ASM years ago due to constanst trouble with it) to controll stock update orders I do. I seldomly receive the amount of articles I ordered to sell and I can remember that ASM gave me here some more controll. May be I only thought so OO