Jump to content
thirty bees forum

the.rampage.rado

Silver member
  • Posts

    1,237
  • Joined

  • Last visited

  • Days Won

    112

Posts posted by the.rampage.rado

  1. As I said in the SQL manager, you are using there are forbidden statements or nested queries, etc.

    The export functionality in Customers is prepared query that does not run through thirty bees' SQL manager.

    As DRMasterChief said - if you have tool at hosting level similar to phpMyAdmin and you're confortable using it - do so but always keep a fresh copy of your db so not to end in a bad situation (only one deleted column in this table can brick your shop).

    You want a list containing those columns?
     

    SELECT 
      c.id_customer,
      c.id_shop_group,
      c.id_lang,
      c.firstname,
      c.lastname,
      c.email,
      c.newsletter,
      c.date_add
    FROM ps_customer c;

    Of course edit the table prefix to match yours.

  2. Yes, I would start troubleshooting with your hosting first or the person that is maintaining your server. Because they have made some changes recently and we're here just guessing.

    In general if the thirty bees settings work - they work. Most of the issues are changes - of the merchants or hosting environments.

    It's not necesary an account/password issue - it might be some additional configuration of the mail server regarding transport/security.

    • Like 1
  3. Sorry, now I remembered that if the generator tag is present core automatically changes it to thirty bees from one of it's classes. You found the solution - just remove it, that way core does not play with it.

    Regarding the top line look for Block Links module - it is reposnsible for adding links in the header top bar.

    The module Block Top Menu is the one with the drop down menus. Everything above it is header teritory.

  4. <meta name="generator" is used to identify the CMS under the website (for noobs). You can safely remove the whole tag if you do not wish to advertise thirty bees.

    In your example it does nothing (brings no SEO).

  5. image.png.4e2b3848b4618404df2718cd2018b2d9.png

    Title comes from SEO URL settings - adjust your meta title for index.

    Generator tag is located in header.tpl of the theme you work with. Note that if you edit Niara's header file it will not be updated for Community.

    After that, go to Performance and clear your caches. Both mentions should be gone.

  6. It's not a bug but the way the system works - it creates connections table record which then is used in quite many places to track connected events.

    Ask your module developer to simply add this discount voucher only for carts >0.00 and the module will work.

    Me personally - if I find out that you give such discounts and I want to be a regular at your shop I will always abuse this.

    Cron job is planned for this functionality with the development of the maintanance class but more pressing bugs/features are in the pipeline before this class is polished. You don't loos lots of performance if you have 1000 records with 0.00 carts. I put those buttons so a merchant can have quick and easy way to scrub this section once every few months, don't hang over those rows too much.

  7. Could you post more detailed repro steps as I'm unable to replicate this.

    I have 2 shops, If I have the same currencies in both - I'm unable to disable/enable them per shop. If I switch to Shop 2 context and disable a currency it gets disabled for shop 1 also.

    If I put a new currency in shop 2 only then I can disable it and it's not visible in shop 1 but then when I run the cron the disabled currencies stay at the same status.

    Also what currency update module do you use?

  8. Can you describe more detailed repro steps for this bug?

    I'm unable to replicate it for now.



    EDIT: Never mind, I replicated it. We should move the category on the same level and we should not have a category with the same position in the new place.

    Can you try this if it's working for you so I can make a PR?

    Category::update

    public function update($nullValues = false)
    {
        if ($this->id_parent == $this->id) {
            throw new PrestaShopException('a category cannot be its own parent');
        }
    
        if (PageCache::isEnabled()) {
            PageCache::invalidateEntity('category', $this->id);
        }
    
        // Read current persisted parent (and level) before we write anything
        $row = Db::readOnly()->getRow(
            (new DbQuery())
                ->select('`id_parent`, `level_depth`')
                ->from('category')
                ->where('`id_category` = ' . (int) $this->id)
        );
        $oldParentId   = $row ? (int) $row['id_parent'] : 0;
        $oldLevelDepth = $row ? (int) $row['level_depth'] : null;
    
        if ($this->is_root_category && $this->id_parent != (int) Configuration::get('PS_ROOT_CATEGORY')) {
            $this->is_root_category = 0;
        }
    
        // Update group selection, if provided
        if (is_array($this->groupBox)) {
            $this->updateGroup($this->groupBox);
        }
    
        // Compute target depth from the new parent
        $calculatedLevelDepth = $this->calcLevelDepth(); // throws if parent invalid
        $parentChanged        = ($oldParentId !== (int) $this->id_parent);
        $levelChanged         = ($oldLevelDepth === null) ? true : ($oldLevelDepth !== (int) $calculatedLevelDepth);
        $this->level_depth    = $calculatedLevelDepth;
    
        // If parent changed we must reseat position; otherwise do it only if duplicate exists
        $needReposition = $parentChanged || (bool) $this->getDuplicatePosition();
    
        // === Multistore-safe shop list to touch ===
        $shopIdsToTouch = [];
        if ($needReposition) {
            if (Tools::isSubmit('checkBoxShopAsso_category')) {
                // Admin form posted: only the explicitly associated shops
                $assoc = Tools::getArrayValue('checkBoxShopAsso_category');
                $shopIdsToTouch = array_map('intval', array_keys((array) $assoc));
            } elseif (Shop::getContext() == Shop::CONTEXT_SHOP) {
                // Single shop context
                $shopIdsToTouch = [ (int) Context::getContext()->shop->id ];
            } else {
                // Fallback: only shops already associated with the category
                $rows = static::getShopsByCategory((int) $this->id);
                foreach ($rows as $r) {
                    $shopIdsToTouch[] = (int) $r['id_shop'];
                }
                if (!$shopIdsToTouch) {
                    // If somehow none, at least touch default shop to keep data consistent
                    $shopIdsToTouch = [ (int) Configuration::get('PS_SHOP_DEFAULT') ];
                }
            }
    
            // Reseat position per associated shop
            foreach ($shopIdsToTouch as $idShop) {
                $this->addPosition((int) static::getLastPosition((int) $this->id_parent, (int) $idShop), (int) $idShop);
            }
        }
    
        $ret = parent::update($nullValues);
    
        if ($ret) {
            // Clean positions in both branches when moved; always clean in the new parent when we reseated
            if ($needReposition) {
                static::cleanPositions((int) $this->id_parent);
                if ($parentChanged && $oldParentId) {
                    static::cleanPositions((int) $oldParentId);
                }
            }
    
            // Any parent change or depth change requires a full ntree rebuild
            if ((!isset($this->doNotRegenerateNTree) || !$this->doNotRegenerateNTree) && ($parentChanged || $levelChanged || $needReposition)) {
                static::regenerateEntireNtree();
                $this->recalculateLevelDepth($this->id); // fix depths of descendants
            }
    
            Hook::triggerEvent('actionCategoryUpdate', ['category' => $this]);
        }
    
        return $ret;
    }

     

  9. Regarding the modules - I mean that I think there could be modules that change the shipping status via API. Regarding the statistics - I'm sure there is none. 🙂

    Those KPIs are internal parameters and every large organization is tracking them.

    I'm working on a module that could track such data and I'm thinking if we can modify the delivery date-time when we set the Delivered status. 

    image.thumb.png.f873b111a5deff8eb14035d3e74a5439.png

  10. Hi there,

    I'm curious if any of us is tracking those two vital KPIs for their shops?

    Handling time (TTS - time to ship) - the time between receiving an order and shipping it.

    Shipping time - the time between shipping from your warehouse and delivery to the customer.

    Delivery time - sum of both.

    So are any of us using modules or internal tools to measure those KPIs? This is useful for inner workings optimizations and, of course, for comparing carriers serving the same delivery zones.

    I'm curious if editing the delivery timestamp in the table during marking it as Delivered or at a later point is a viable option for making those stats more accurate. I, as a small merchant, do this in bulk when I have free time to clear the 'Shipped' orders from my list. I imagine there are shipping modules that also track delivery and will mark the orders as Delivered or Returned, etc, but I've never worked with similar.

  11. How do you hide your 'weight' courier when the price goes over $60? The customer should see your 'free' courier with FREE and under it same courier with some cost for the weight bracket the order falls into.

    For me this is very confusing both from customer UI perspective and from administration side.

  12. 7 hours ago, beetea2 said:

    I just installed a brand new TB installation on a sub directory of my main site to test the currency conversion and free shipping. Free shipping does not work as expected when converting from one currency to another.

    Am I doing something wrong?

    __________________________

    US$ - no free shipping:

     

    Screenshot_20250831_231037.jpeg

    _____________________________________________________

    CAD dollars - same product and quantity - gets free shipping:

    Screenshot_20250831_231127.jpeg

    _____________________________________________________________

    My Settings for the free shipping carrier:

    Screenshot_20250831_231802.jpeg

    __________________________________________

    Screenshot_20250831_231830.jpeg

    You're misusing the settings.

    You should have only one carrier for every single carrier you work with and assign free shipping according to weight/price in it as follows:

    image.thumb.png.035a7c80a388528bb8a73df805ca245b.png

    In my case - I offer free shipping over 100 BGN, as you can see you have to add second range (upwards of 100 BGN) and assign 0.00 as cost.

    Then in FO in BGN (ignore the double currency, this is a local requirement currently as we are addopting the Euro from Januar 1st):image.png.5a78ecfbc9c911a9ff38521a406d2d01.png

    And in Euro:
    image.png.5b4be7f368e67700c53dc3819cf6fbf7.png

    In general don't make 'paid' courier up to your free delivery and then second courier for free deliveries for over XXX. This will skew your statistics for courier usage later on.

    • Thanks 1
×
×
  • Create New...