Jump to content
thirty bees forum

Pedalman

Members
  • Posts

    422
  • Joined

  • Last visited

  • Days Won

    5

Posts posted by Pedalman

  1. Hello

    I am a long time user of Iquit's Warehouse template for Prestashop. Since I am with Thirtybees for about 2 or 3 years I am looking for an actively supported and compatible theme.

    I am opting for the Panda theme at the moment despite I think that the Thirtybees community theme Niara is nice too.

    I want to ask here if you have got some advice for me how to set up Panda theme in general or explicitly if want to migrate from Warehouse theme.

    Very important for me is the possibility to change and adopt the homepage / landingpage of the shop via nice visual aid. As far as I know Panda template comes without such a visual content editor and I am looking therefore for nice alternatives that run smoothly with Panda theme!

    I heavily customized this theme over the years and I also want to underline that I started with Prestashop 8 years ago. I always upgraded and am sure that there is lot of 'debris' in my DB relating to those old versions.

     

    So, I believe it might also be a good idea to start from scratch. But here I surely need all the 'old' data of our business. Customer, invoice, opt in opt out newsletter settings in db etc. You know it... 🙂

    Only module that says it can help here to migrate data is the cool one of Musicmaster aka https://www.prestools.com/info/copy-shopdata

    Can you share some experiences and tips for me?

     

     

  2. Hello

    I want to add some content about general product information. Like for example eco sustainability criteria: hand work, resources/material etc.

    At first hand I think that this information is best placed in a FAQ section of the shop. At least this is what I had done 10 years ago...

    I wonder if this is still the modern way to do since I want best SEO effect of it. Second comes user-friendly information. I am aware that this goes hand in hand but I noticed that some shops display this information differently.

    So, do you have got any tips for me?

  3. Your are absoultely right. Old problem but you have to know it. When I know about it than I can most often help myself. For exampe when dealing with csv I skip Pentaho Spoon and use "awk". But as said here it is very much misleading when you set the shop to a local. Moreover, when you can use your local decimal seperator at every other input field (as far as I know of) and if it looks like this:

     

    partial refund decimal seperator.png

    • Like 1
  4. I noticed today that it is a must to enter total with American/English "." as seperator for decimals.

    I run our shop in my local German and we use "," for small sums like delivery charge. This in my case is 2,90€ but when I enter this in "partial refund" for generating an order slip things go wrong!

    It totals -2.00 though it should be -2.90€.

     

    If I enter the delivery charge with a dot: 2.90€ all is fine.

    This was not easy to understand for me since all numbers shown in backoffice use visually the comma as seperator. I think this should be adressed.

    Happy New Year to all happy ThirtyBees!

  5. I fail to display the total paid tax in invoice.tax-tab.tpl .

     

    code pasted from invoice.total-tab.tpl :

    {if $footer.total_taxes > 0}
    	<tr>
    		<td class="small">
    			{l s='Total Tax' pdf='true'}
    		</td>
    		<td></td>
    		<td></td>
    		<td class="right small">
    			{displayPrice currency=$order->id_currency price=$footer.total_taxes}
    		</td>
    	</tr>
    {/if}

     

  6. 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();
        }
    
    }

     

  7. 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.

  8. 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?

  9. 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

  10. 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!

     

     

  11. 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

  12. 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 😞

  13. 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.

×
×
  • Create New...