long query takes a long time
Several optimizations tips:


Left joins to inner joins

You can probably simplify the views a little bit by converting some LEFT JOINs into INNER JOINs. For instance, for the first view, you have a WHERE clause of c.tct_voided = 0, this will make the involved join behave like an inner join instead of a left one. If the row on c were not found, the c.tct_voided = 0 won't be true, and won't be returned. Explicitly changing the LEFT to INNER will help the database some. That might improve a little bit the execution time. 

Some of the other LEFT JOINs might already by INNER JOINs just because of referential integrity, or the nature of your data. If you know for sure that there's always a corresponding row on your right table, change the LEFT to INNER. 
Indexes on the expressions that are part of a join

If you have a join condition that is

(ht_counters_sales_items_b a
LEFT JOIN ht_counters_sales_b b
    ON a.tcsi_tcs_id = b.tcs_id)
LEFT JOIN ht_counters_trans_b c
    ON b.tcs_no = c.tct_ref_no


You are likely to gain a lot of speed if there is a KEY(tct_ref_no) on table ht_counters_trans_b. The same might apply to KEY(tcs_no) on table ht_counters_sales_b (if the LEFT JOIN were an INNER JOIN and MySQL would decide to process it right-to-left, instead of left-to-right).
Not forcing order of join execution

In some occasions (and this really needs to be tested, I don't know how good is MySQL at it), not putting any (...) on the JOINs gives the database more freedom to process them in the order it seems more appropriate. This is normally true for INNER JOINs, but shouldn't have a significant effect on LEFT JOINs.
WHERE clauses

SELECT * FROM v_summary WHERE MONTH(trx_date) = 7


If you want to look for all the data for July this year, you're more likely to get a much faster result if trx_date is indexed, and you write your query like:

SELECT * FROM v_summary WHERE trx_date BETWEEN '2017-07-01' and '2017-07-31'


This will allow the database to use the index. Having a function applied to the column will prevent it from using it, and force a sequential scan on all the results. And that's not what you want.