
    :j              	          d Z ddlmZmZmZmZmZmZmZm	Z	 ddl
mZ ddlmZmZ ddlmZ ddlZddlZej&                  j)                  ej&                  j+                  ej&                  j+                  ej&                  j-                  e                         ddlmZ  ede      Zej9                  d	      d
        Zej9                  d      d        Zej9                  d      d        Zej9                  d      d        Z ej9                  d      d        Z!ej9                  d      d        Z"ej9                  d      d        Z#ej9                  d      d        Z$ej9                  d      d        Z%ej9                  ddg      d        Z&ej9                  ddg      d         Z'ej9                  d!dg      d"        Z(ej9                  d#dg      d$        Z)ej9                  d%dg      d&        Z*y)'zf
Business Routes Blueprint
Contains routes for managing restaurants, markets, adventures, and beaches
    )	Blueprintrequestrender_templateredirecturl_forflashjsonifysession)login_required)create_enginetext)sessionmakerN)ADMIN_CONFIGbusinessz/marketsc                  <   t        j                  d      s t        dd       t        t	        d            S t
        j                  j                  dd      j                         } dt
        j                  v }|st        dg dd	dd
d
ddd
      S 	 t        d   }t        |      }t        d
d
|      } |       }t
        j                  j                  ddt              }d}|dz
  |z  }g }	i }
| r|	j                  d       d|  d|
d<   |	rddj                  |	      z   nd}d| }|j                  t!        |      |
      j#                         }|r|d	   nd	}d| d}||
d<   ||
d<   |j                  t!        |      |
      j%                         }||z   dz
  |z  }|dkD  }||k  }|r|dz
  nd}|r|dz   nd}|j'                          t        d||||||||| 
      S # t(        $ r7}t        dt+        |       d       t        dg dd	dd
d
dd| 
      cY d}~S d}~ww xY w)zMarket management pageis_admin>You must be logged in as an administrator to access this page.erroradmin.admin_loginsearch zadmin/markets.html   r   FN)	marketspagetotal_counttotal_pageshas_prevhas_nextprev_numnext_numsearch_termDATABASE_URL
autocommit	autoflushbindr   type
   zO(m.market_name ILIKE :search OR m.phone ILIKE :search OR m.email ILIKE :search)%WHERE  AND zSELECT COUNT(*) FROM markets m ab  
            SELECT m.market_id, m.market_name, m.address, m.city,
                   c.company_name, co.country_name, m.phone, m.email,
                   m.created_at, m.updated_at
            FROM markets m
            LEFT JOIN companies c ON m.company_id = c.company_id
            LEFT JOIN countries co ON m.country_id = co.country_id
            zT
            ORDER BY m.market_name
            LIMIT :limit OFFSET :offset
        limitoffsetzError loading markets: r
   getr   r   r   r   argsstripr   r   r   r   intappendjoinexecuter   fetchonefetchallclose	Exceptionstr)r!   is_search_requestr"   engineSessionLocaldbr   per_pager.   where_conditionsparamswhere_clausecount_querycount_resultr   markets_queryr   r   r   r   r   r    es                          </var/www/bookbeach.app/backend/app/routes/business_routes.pyr   r      s    ;;z"NPWX 3455 ,,""8R0668K !GLL0 3%'"#)*)*&+&+&*&*)+	- 		-M6#N3|,#uFS^ ||4(h& ##$uv!";-q1F8DTx',,/?"@@Z\ 8~Fzz${"3V<EEG)5l1o1 N 	
 #w!x**T-0&9BBD #X-1h>!8+%'4!8T'4!8T

3%,"&)4)4&.&.&.&.)4	6 		6  6'Ax0':3%'"#)*)*&+&+&*&*)4	6 		66   EG 	H$,HHHz/adventuresc                  <   t        j                  d      s t        dd       t        t	        d            S t
        j                  j                  dd      j                         } dt
        j                  v }|st        dg dd	dd
d
ddd
      S 	 t        d   }t        |      }t        d
d
|      } |       }t
        j                  j                  ddt              }d}|dz
  |z  }g }	i }
| r|	j                  d       d|  d|
d<   |	rddj                  |	      z   nd}d| }|j                  t!        |      |
      j#                         }|r|d	   nd	}d| d}||
d<   ||
d<   |j                  t!        |      |
      j%                         }||z   dz
  |z  }|dkD  }||k  }|r|dz
  nd}|r|dz   nd}|j'                          t        d||||||||| 
      S # t(        $ r7}t        dt+        |       d       t        dg dd	dd
d
dd| 
      cY d}~S d}~ww xY w)zAdventure management pager   r   r   r   r   r   zadmin/adventures.htmlr   r   FN)	
adventuresr   r   r   r   r   r   r    r!   r"   r#   r   r'   r)   zR(a.adventure_name ILIKE :search OR a.phone ILIKE :search OR a.email ILIKE :search)r*   r+   r,   z"SELECT COUNT(*) FROM adventures a a  
            SELECT a.adventure_id, a.adventure_name, a.address, a.city,
                   c.company_name, co.country_name, a.phone, a.email,
                   a.duration_minutes, a.max_participants, a.price,
                   a.created_at, a.updated_at
            FROM adventures a
            LEFT JOIN companies c ON a.company_id = c.company_id
            LEFT JOIN countries co ON a.country_id = co.country_id
            zW
            ORDER BY a.adventure_name
            LIMIT :limit OFFSET :offset
        r-   r.   zError loading adventures: r/   )r!   r<   r"   r=   r>   r?   r   r@   r.   rA   rB   rC   rD   rE   r   adventures_queryrK   r   r   r   r   r    rG   s                          rH   rK   rK      s    ;;z"NPWX 3455 ,,""8R0668K !GLL0 6(*"#)*)*&+&+&*&*)+	- 		-N6#N3|,#uFS^ ||4(h& ##$xy!";-q1F8DTx',,/?"@@Z\ ;<.Izz${"3V<EEG)5l1o1  N 	 #w!xZZ%5 6?HHJ
 #X-1h>!8+%'4!8T'4!8T

6(2"&)4)4&.&.&.&.)4	6 		6  6*3q6(3W=6(*"#)*)*&+&+&*&*)4	6 		66rI   z/beachesc                  <   t        j                  d      s t        dd       t        t	        d            S t
        j                  j                  dd      j                         } dt
        j                  v }|st        dg dd	dd
d
ddd
      S 	 t        d   }t        |      }t        d
d
|      } |       }t
        j                  j                  ddt              }d}|dz
  |z  }g }	i }
| r|	j                  d       d|  d|
d<   |	rddj                  |	      z   nd}d| }|j                  t!        |      |
      j#                         }|r|d	   nd	}d| d}||
d<   ||
d<   |j                  t!        |      |
      j%                         }||z   dz
  |z  }|dkD  }||k  }|r|dz
  nd}|r|dz   nd}|j'                          t        d||||||||| 
      S # t(        $ r7}t        dt+        |       d       t        dg dd	dd
d
dd| 
      cY d}~S d}~ww xY w)zBeach management pager   r   r   r   r   r   zadmin/beaches.htmlr   r   FN)	beachesr   r   r   r   r   r   r    r!   r"   r#   r   r'   r)   z6(bp.beach_name ILIKE :search OR bp.city ILIKE :search)r*   r+   r,   z%SELECT COUNT(*) FROM beach_places bp as  
            SELECT bp.beach_place_id, bp.beach_name, bp.address, bp.city,
                   c.company_name, co.country_name, bp.enable_beach,
                   bp.created_at, bp.updated_at
            FROM beach_places bp
            LEFT JOIN companies c ON bp.company_id = c.company_id
            LEFT JOIN countries co ON bp.country_id = co.country_id
            zT
            ORDER BY bp.beach_name
            LIMIT :limit OFFSET :offset
        r-   r.   zError loading beaches: r/   )r!   r<   r"   r=   r>   r?   r   r@   r.   rA   rB   rC   rD   rE   r   beaches_queryrN   r   r   r   r   r    rG   s                          rH   rN   rN      s    ;;z"NPWX 3455 ,,""8R0668K !GLL0 3%'"#)*)*&+&+&*&*)+	- 		-M6#N3|,#uFS^ ||4(h& ##$\]!";-q1F8DTx',,/?"@@Z\ >l^Lzz${"3V<EEG)5l1o1 N 	
 #w!x**T-0&9BBD #X-1h>!8+%'4!8T'4!8T

3%,"&)4)4&.&.&.&.)4	6 		6  6'Ax0':3%'"#)*)*&+&+&*&*)4	6 		66rI   z
/companiesc                  "   t        j                  d      s t        dd       t        t	        d            S t
        j                  j                  dd      j                         } t
        j                  j                  dd      j                         }t
        j                  j                  dd      j                         }dt
        j                  v xs& dt
        j                  v xs dt
        j                  v }|st        d	g d
dd
dddddddg       S 	 t        d   }t        |      }t        dd|      } |       }d}t
        j                  j                  dd
t              }	d}
|	d
z
  |
z  }g }i }| r|j                  d       d|  d|d<   |r|j                  d       ||d<   |r|j                  d       ||d<   |rddj                  |      z   nd}d| }|j                  t!        |      |      j#                         }|r|d   nd}d| d| d}|
|d<   ||d<   |j                  t!        |      |      j%                         }||
z   d
z
  |
z  }|	d
kD  }|	|k  }|r|	d
z
  nd}|r|	d
z   nd}g }	 |j                  t!        d             j%                         }|D cg c]  }|d   |d
   d! }}|j+                          t)        d#t-        |       d$|        t        d	||	||||||| |||      S c c}w # t&        $ r}t)        d"|        Y d}~cd}~ww xY w# t&        $ re}t        d%t/        |       d       t)        d&t/        |              ddl}|j3                          t        d	g d
dd
dddd| ||g       cY d}~S d}~ww xY w)'zCompany management pager   r   r   r   r   r   status
country_idzadmin/companies.htmlr   r   FN)	companiesr   r   r   r   r   r   r    r!   company_statusselected_country_id	countriesr"   r#   a  
            SELECT 
                c.company_id,
                c.company_name,
                c.website,
                c.email AS contact_email,
                c.phone AS contact_phone,
                c.company_logo_path AS logo_path,
                c.create_date AS created_at,
                c.update_date AS updated_at,
                c.vat_number,
                c.city,
                c.province,
                c.country_id,
                c.company_status,
                co.country_name,
                COALESCE(beach_counts.count, 0) AS beaches_count,
                COALESCE(restaurant_counts.count, 0) AS restaurants_count,
                COALESCE(market_counts.count, 0) AS markets_count,
                COALESCE(adventure_counts.count, 0) AS adventures_count
            FROM companies c
            LEFT JOIN countries co ON c.country_id = co.country_id
            LEFT JOIN (
                SELECT company_id, COUNT(*) AS count
                FROM beach_places
                GROUP BY company_id
            ) beach_counts ON c.company_id = beach_counts.company_id
            LEFT JOIN (
                SELECT company_id, COUNT(*) AS count
                FROM restaurants
                GROUP BY company_id
            ) restaurant_counts ON c.company_id = restaurant_counts.company_id
            LEFT JOIN (
                SELECT company_id, COUNT(*) AS count
                FROM markets
                GROUP BY company_id
            ) market_counts ON c.company_id = market_counts.company_id
            LEFT JOIN (
                SELECT company_id, COUNT(*) AS count
                FROM adventures
                GROUP BY company_id
            ) adventure_counts ON c.company_id = adventure_counts.company_id
        r   r'   r)   zn(c.company_name ILIKE :search OR c.email ILIKE :search OR c.phone ILIKE :search OR c.vat_number ILIKE :search)r*   zc.company_status = :statuszc.country_id = :country_idr+   r,   z!SELECT COUNT(*) FROM companies c z
            zU
            ORDER BY c.company_name
            LIMIT :limit OFFSET :offset
        r-   r.   DSELECT country_id, country_name FROM countries ORDER BY country_namerR   country_namezError loading countries: zCompanies route - Found z companies, total count: zError loading companies: zError in companies route: )r
   r0   r   r   r   r   r1   r2   r   r   r   r   r3   r4   r5   r6   r   r7   r8   r:   printr9   lenr;   	traceback	print_exc)r!   rT   rU   r<   r"   r=   r>   r?   
base_queryr   r@   r.   rA   rB   rC   rD   rE   r   paginated_queryrS   r   r   r   r   r    rV   countries_resultrowrG   r\   s                                 rH   rS   rS   Z  s   
 ;;z"NPWX 3455 ,,""8R0668K\\%%h399;N!,,**<<BBD !GLL0lH4LlP\`g`l`lPl 5')"#)*)*&+&+&*&*)+,.13')+ 	+Q+#N3|,#uFS^*
Z ||4(h& ##  %U  V!";-q1F8##$@A-F8##$@A#6F< DTx',,/?"@@Z\ :,Hzz${"3V<EEG)5l1o1L N 	 #w!xJJtO4f=FFH	 #X-1h>!8+%'4!8T'4!8T 		3!zz$/u*vw   A   A   CScdCAAGdId 	
(Y(88QR]Q^_`5'0"&)4)4&.&.&.&.)4,:1D'02 	2 e 	3-aS122	3*  +)#a&2G<*3q6(345')"#)*)*&+&+&*&*)4,:1D')+ 	++s]   EL  5,K< !K73K< 5AL  7K< <	LLL  LL   	N)AN	N	Nz /restaurant/<restaurant_id>/editc                 4   t        j                  d      s t        dd       t        t	        d            S 	 t
        d   }t        |      }t        dd|      } |       }d}|j                  t        |      d	| i      j                         }|s t        d
d       t        t	        d            S |j                  t        d            j                         }|D cg c]  }|d   |d   d }	}|j                  t        d            j                         }
|
D cg c]  }|d   |d   d }}|j                          t        d||	|      S c c}w c c}w # t        $ r6}t        dt        |       d       t        t	        d            cY d}~S d}~ww xY w)zEdit restaurant pager   r   r   r   r"   Fr#   a  
            SELECT r.*, c.company_name, co.country_name
            FROM restaurants r
            LEFT JOIN companies c ON r.company_id = c.company_id
            LEFT JOIN countries co ON r.country_id = co.country_id
            WHERE r.restaurant_id = :restaurant_id
        restaurant_idzRestaurant not found.business.restaurantsDSELECT company_id, company_name FROM companies ORDER BY company_namer   r   
company_idcompany_namerW   rX   zadmin/edit_restaurant.html)
restaurantrS   rV   zError loading restaurant: Nr
   r0   r   r   r   r   r   r   r6   r   r7   r8   r9   r   r:   r;   )rc   r"   r=   r>   r?   restaurant_queryrestaurant_resultcompanies_resultra   rS   r`   rV   rG   s                rH   edit_restaurantrn     s    ;;z"NPWX 3455(9#N3|,#uFS^ JJt,<'=Q^?_`iik )73G$:;<< ::d+q&rs||~O_`CFCFC`	` ::d+q&rs||~O_`CFCFC`	`

;(9'0'02 	2 a a  9*3q6(3W= 67889B   A7E /,E E-.E E- E 
E 	F!+FFFz/market/<market_id>/editc                 4   t        j                  d      s t        dd       t        t	        d            S 	 t
        d   }t        |      }t        dd|      } |       }d}|j                  t        |      d	| i      j                         }|s t        d
d       t        t	        d            S |j                  t        d            j                         }|D cg c]  }|d   |d   d }	}|j                  t        d            j                         }
|
D cg c]  }|d   |d   d }}|j                          t        d||	|      S c c}w c c}w # t        $ r6}t        dt        |       d       t        t	        d            cY d}~S d}~ww xY w)zEdit market pager   r   r   r   r"   Fr#   a  
            SELECT m.*, c.company_name, co.country_name
            FROM markets m
            LEFT JOIN companies c ON m.company_id = c.company_id
            LEFT JOIN countries co ON m.country_id = co.country_id
            WHERE m.market_id = :market_id
        	market_idzMarket not found.business.marketsre   r   r   rf   rW   rX   zadmin/edit_market.html)marketrS   rV   zError loading market: Nrj   )rq   r"   r=   r>   r?   market_querymarket_resultrm   ra   rS   r`   rV   rG   s                rH   edit_marketrv   B  s    ;;z"NPWX 3455(5#N3|,#uFS^ 

4#5Y7OPYY[%w/G$6788 ::d+q&rs||~O_`CFCFC`	` ::d+q&rs||~O_`CFCFC`	`

7$1'0'02 	2 a a  5&s1vh/9 23445ro   z/adventure/<adventure_id>/editc                 4   t        j                  d      s t        dd       t        t	        d            S 	 t
        d   }t        |      }t        dd|      } |       }d}|j                  t        |      d	| i      j                         }|s t        d
d       t        t	        d            S |j                  t        d            j                         }|D cg c]  }|d   |d   d }	}|j                  t        d            j                         }
|
D cg c]  }|d   |d   d }}|j                          t        d||	|      S c c}w c c}w # t        $ r6}t        dt        |       d       t        t	        d            cY d}~S d}~ww xY w)zEdit adventure pager   r   r   r   r"   Fr#   a  
            SELECT a.*, c.company_name, co.country_name
            FROM adventures a
            LEFT JOIN companies c ON a.company_id = c.company_id
            LEFT JOIN countries co ON a.country_id = co.country_id
            WHERE a.adventure_id = :adventure_id
        adventure_idzAdventure not found.business.adventuresre   r   r   rf   rW   rX   zadmin/edit_adventure.html)	adventurerS   rV   zError loading adventure: Nrj   )rx   r"   r=   r>   r?   adventure_queryadventure_resultrm   ra   rS   r`   rV   rG   s                rH   edit_adventurer}   t  s    ;;z"NPWX 3455(8#N3|,#uFS^ ::d?&;nl=[\eeg('2G$9:;; ::d+q&rs||~O_`CFCFC`	` ::d+q&rs||~O_`CFCFC`	`

:'7'0'02 	2 a a  8)#a&2G< 56778ro   z/beach/<beach_id>/editc                 4   t        j                  d      s t        dd       t        t	        d            S 	 t
        d   }t        |      }t        dd|      } |       }d}|j                  t        |      d	| i      j                         }|s t        d
d       t        t	        d            S |j                  t        d            j                         }|D cg c]  }|d   |d   d }	}|j                  t        d            j                         }
|
D cg c]  }|d   |d   d }}|j                          t        d||	|      S c c}w c c}w # t        $ r6}t        dt        |       d       t        t	        d            cY d}~S d}~ww xY w)zEdit beach pager   r   r   r   r"   Fr#   a  
            SELECT bp.*, c.company_name, co.country_name
            FROM beach_places bp
            LEFT JOIN companies c ON bp.company_id = c.company_id
            LEFT JOIN countries co ON bp.country_id = co.country_id
            WHERE bp.beach_place_id = :beach_id
        beach_idzBeach not found.business.beachesre   r   r   rf   rW   rX   zadmin/edit_beach.html)beachrS   rV   zError loading beach: Nrj   )r   r"   r=   r>   r?   beach_querybeach_resultrm   ra   rS   r`   rV   rG   s                rH   
edit_beachr     s    ;;z"NPWX 3455(5#N3|,#uFS^ zz${"3j(5KLUUW$g.G$6788 ::d+q&rs||~O_`CFCFC`	` ::d+q&rs||~O_`CFCFC`	`

6#/'0'02 	2 a a  5%c!fX.8 23445ro   z/company/<company_id>/editc                    t        j                  d      s t        dd       t        t	        d            S 	 t
        d   }t        |      }t        dd|      } |       }d}|j                  t        |      d	| i      j                         }|s t        d
d       t        t	        d            S |j                  t        d            j                         }|D cg c]  }|d   |d   d }	}|j                          t        d||	      S c c}w # t        $ r6}
t        dt        |
       d       t        t	        d            cY d}
~
S d}
~
ww xY w)zEdit company pager   r   r   r   r"   Fr#   z
            SELECT c.*, co.country_name
            FROM companies c
            LEFT JOIN countries co ON c.country_id = co.country_id
            WHERE c.company_id = :company_id
        rg   zCompany not found.business.companiesrW   r   r   rX   zadmin/edit_company.html)companyrV   zError loading company: Nrj   )rg   r"   r=   r>   r?   company_querycompany_resultr`   ra   rV   rG   s              rH   edit_companyr     sD    ;;z"NPWX 3455"7#N3|,#uFS^ D$7,
9ST]]_&0G$89:: ::d+q&rs||~O_`CFCFC`	`

8%3'02 	2	 a  7'Ax0': 45667s6   A7D /,D D-D D 	E+EEEz"/restaurant/<restaurant_id>/updatePOST)methodsc                    t        j                  d      s t        dd       t        t	        d            S 	 t
        j                  j                  dd      j                         }t
        j                  j                  dd      j                         }t
        j                  j                  dd      j                         }t
        j                  j                  d	d      j                         }t
        j                  j                  d
d      j                         }t
        j                  j                  dd      j                         }t
        j                  j                  dd      j                         }t
        j                  j                  dd      j                         }t
        j                  j                  dd      j                         }	t
        j                  j                  dd      j                         }
t
        j                  j                  dd      j                         }t
        j                  j                  dd      j                         }t
        j                  j                  dd      j                         }t
        j                  j                  dd      j                         }t
        j                  j                  dd      j                         }|r|s"t        dd       t        t	        d|             S t        d   }t        |      }t        dd|      } |       }d}d }d }d }d }d  }i d|d ||      d|r|nd!d	|r|nd!d
|r|nd!d|r|nd!d ||      d ||      d ||	      d ||
      d ||      d ||      d|r|nd!d|r|nd!d ||      d"| }|j                  t        |      |       |j                          |j                          t        d#d$       t        t	        d%            S # t        $ r8}t        d&t!        |       d       t        t	        d|             cY d!}~S d!}~ww xY w)'zUpdate restaurantr   r   r   r   restaurant_namer   rg   phoneemailaddresscityrR   latitude	longitudeopening_timeclosing_time	is_activedescriptioncuisine_typebeach_place_idz)Restaurant name and company are required.zbusiness.edit_restaurant)rc   r"   Fr#   a  
            UPDATE restaurants 
            SET restaurant_name = :restaurant_name,
                company_id = :company_id,
                phone = :phone,
                email = :email,
                address = :address,
                city = :city,
                country_id = :country_id,
                latitude = :latitude,
                longitude = :longitude,
                opening_time = :opening_time,
                closing_time = :closing_time,
                is_active = :is_active,
                description = :description,
                cuisine_type = :cuisine_type,
                beach_place_id = :beach_place_id,
                updated_at = NOW()
            WHERE restaurant_id = :restaurant_id
        c                 >    | r	 t        |       S y # t        $ r Y y w xY wNr3   
ValueErrorvalues    rH   safe_intz#update_restaurant.<locals>.safe_int@  -     u:%  "      
 	c                 >    | r	 t        |       S y # t        $ r Y y w xY wr   floatr   r   s    rH   
safe_floatz%update_restaurant.<locals>.safe_floatH  -      <'  "   r   c                 0    | r| j                         dk(  S dS NonFlowerr   s    rH   	safe_boolz$update_restaurant.<locals>.safe_boolP      ,15;;=D(<u<    c                 t    | r'	 ddl m } |j                  | d      j                         S y # t        $ r Y y w xY wNr   )datetimez%H:%Mr   strptimetimer   r   r   s     rH   	safe_timez$update_restaurant.<locals>.safe_timeS  B     1#,,UG<AACC  "      %+ 	77c                 R    | r	 dd l }|j                  |       S y # t        $ r Y y w xY wNr   uuidUUIDr   r   r   s     rH   	safe_uuidz$update_restaurant.<locals>.safe_uuid\  5     99U++  "       	&&Nrc   z Restaurant updated successfully.successrd   zError updating restaurant: r
   r0   r   r   r   r   formr2   r   r   r   r6   r   commitr9   r:   r;   )rc   r   rg   r   r   r   r   rR   r   r   r   r   r   r   r   r   r"   r=   r>   r?   update_queryr   r   r   r   r   rB   rG   s                               rH   update_restaurantr     s    ;;z"NPWX 3455uZ!,,**+<bAGGI\\%%lB7==?
  "-335  "-335,,""9b1779||+113\\%%lB7==?
<<##J399;LL$$["5;;=	||'';AAC||'';AACLL$$["5;;=	ll&&}b9??A||'';AAC ))*:B?EEG j=wGG$>m\]] $N3|,#uFS^*			=		

)J/
 eU
 eU	

 'wt
 DDd
 (:.
 
8,
 I.
 Il3
 Il3
 9-
 +;4
 LLd
 i7
  ]!
& 	

4%v.
		

0)< 6788 Z+CF84g> :-XYYZs%   KP DP 	Q'-QQQz/market/<market_id>/updatec                 
   t        j                  d      s t        dd       t        t	        d            S 	 t
        j                  j                  dd      j                         }t
        j                  j                  dd      j                         }t
        j                  j                  dd      j                         }t
        j                  j                  d	d      j                         }t
        j                  j                  d
d      j                         }t
        j                  j                  dd      j                         }t
        j                  j                  dd      j                         }t
        j                  j                  dd      j                         }t
        j                  j                  dd      j                         }	t
        j                  j                  dd      j                         }
t
        j                  j                  dd      j                         }t
        j                  j                  dd      j                         }t
        j                  j                  dd      j                         }t
        j                  j                  dd      j                         }t
        j                  j                  dd      j                         }t
        j                  j                  dd      j                         }t
        j                  j                  dd      j                         }t
        j                  j                  dd      j                         }|r|s"t        dd       t        t	        d|             S t        d   }t        |      }t        dd|      } |       }d}d }d  }d! }d" }d# }i d|d ||      d|r|nd$d	|r|nd$d
|r|nd$d|r|nd$d ||      d ||      d ||	      d ||
      d ||      d ||      d ||      d ||      d ||      d|r|nd$d|r|nd$ ||      | d%}|j                  t        |      |       |j                          |j                          t        d&d'       t        t	        d(            S # t        $ r8}t        d)t!        |       d       t        t	        d|             cY d$}~S d$}~ww xY w)*zUpdate marketr   r   r   r   market_namer   rg   r   r   r   r   rR   r   r   r   r   delivery_availabledelivery_feemin_order_amountr   r   websiter   z%Market name and company are required.zbusiness.edit_market)rq   r"   Fr#   ae  
            UPDATE markets 
            SET market_name = :market_name,
                company_id = :company_id,
                phone = :phone,
                email = :email,
                address = :address,
                city = :city,
                country_id = :country_id,
                latitude = :latitude,
                longitude = :longitude,
                opening_time = :opening_time,
                closing_time = :closing_time,
                delivery_available = :delivery_available,
                delivery_fee = :delivery_fee,
                min_order_amount = :min_order_amount,
                is_active = :is_active,
                description = :description,
                website = :website,
                beach_place_id = :beach_place_id,
                updated_at = NOW()
            WHERE market_id = :market_id
        c                 >    | r	 t        |       S y # t        $ r Y y w xY wr   r   r   s    rH   r   zupdate_market.<locals>.safe_int  r   r   c                 >    | r	 t        |       S y # t        $ r Y y w xY wr   r   r   s    rH   r   z!update_market.<locals>.safe_float  r   r   c                 0    | r| j                         dk(  S dS r   r   r   s    rH   r   z update_market.<locals>.safe_bool  r   r   c                 t    | r'	 ddl m } |j                  | d      j                         S y # t        $ r Y y w xY wr   r   r   s     rH   r   z update_market.<locals>.safe_time  r   r   c                 R    | r	 dd l }|j                  |       S y # t        $ r Y y w xY wr   r   r   s     rH   r   z update_market.<locals>.safe_uuid  r   r   N)r   rq   zMarket updated successfully.r   rr   zError updating market: r   )rq   r   rg   r   r   r   r   rR   r   r   r   r   r   r   r   r   r   r   r   r"   r=   r>   r?   r   r   r   r   r   r   rB   rG   s                                  rH   update_marketr     s    ;;z"NPWX 3455~Nll&&}b9??A\\%%lB7==?
  "-335  "-335,,""9b1779||+113\\%%lB7==?
<<##J399;LL$$["5;;=	||'';AAC||'';AAC$\\--.BBGMMO||'';AAC"<<++,>CIIKLL$$["5;;=	ll&&}b9??A,,""9b1779 ))*:B?EEG *97CG$:iPQQ $N3|,#uFS^0			=		
;
)J/
 eU
 eU	

 'wt
 DDd
 (:.
 
8,
 I.
 Il3
 Il3
 !),>"?
 J|4
 
+; <
 9-
  +;4!
" 'wt#
$ (7"'
, 	

4%v.
		

,i8 2344 N'Ax0': 6)LMMNs%   M!S D(S 	T-S>8T>Tz /adventure/<adventure_id>/updatec                 x   t        j                  d      s t        dd       t        t	        d            S 	 t
        j                  j                  dd      j                         }t
        j                  j                  dd      j                         }t
        j                  j                  dd      j                         }t
        j                  j                  d	d      j                         }t
        j                  j                  d
d      j                         }t
        j                  j                  dd      j                         }t
        j                  j                  dd      j                         }t
        j                  j                  dd      j                         }t
        j                  j                  dd      j                         }	t
        j                  j                  dd      j                         }
|r|s"t        dd       t        t	        d|             S t        d   }t        |      }t        dd|      } |       }d}|||r|nd|r|nd|r|nd|r|nd|r|nd|rt        |      nd|	rt        |	      nd|
rt        |
      nd| d}|j                  t        |      |       |j                          |j!                          t        dd       t        t	        d            S # t"        $ r8}t        dt%        |       d       t        t	        d|             cY d}~S d}~ww xY w)zUpdate adventurer   r   r   r   adventure_namer   rg   r   r   r   r   rR   duration_minutesmax_participantspricez(Adventure name and company are required.zbusiness.edit_adventure)rx   r"   Fr#   a  
            UPDATE adventures 
            SET adventure_name = :adventure_name,
                company_id = :company_id,
                phone = :phone,
                email = :email,
                address = :address,
                city = :city,
                country_id = :country_id,
                duration_minutes = :duration_minutes,
                max_participants = :max_participants,
                price = :price,
                updated_at = NOW()
            WHERE adventure_id = :adventure_id
        N)r   rg   r   r   r   r   rR   r   r   r   rx   zAdventure updated successfully.r   ry   zError updating adventure: )r
   r0   r   r   r   r   r   r2   r   r   r   r3   r   r6   r   r   r9   r:   r;   )rx   r   rg   r   r   r   r   rR   r   r   r   r"   r=   r>   r?   r   rB   rG   s                     rH   update_adventurer     s    ;;z"NPWX 3455AW ))*:B?EEG\\%%lB7==?
  "-335  "-335,,""9b1779||+113\\%%lB7==?
"<<++,>CIIK"<<++,>CIIK  "-335 Z<gFG$=LYZZ $N3|,#uFS^" -$#U#U")wt Dd(2*9I$4 5t9I$4 5t%*U5\(
 	

4%v.
		

/; 5677 W*3q6(3W= 9UVVWs%   G1K8 )CK8 8	L9-L4.L94L9z/beach/<beach_id>/updatec                    t        j                  d      s t        dd       t        t	        d            S 	 t
        j                  j                  dd      j                         }t
        j                  j                  dd      j                         }t
        j                  j                  dd      j                         }t
        j                  j                  d	d      j                         }t
        j                  j                  d
d      j                         }t
        j                  j                  dd      j                         }t
        j                  j                  dd      j                         }t
        j                  j                  dd      j                         }t
        j                  j                  dd      j                         }	t
        j                  j                  dd      j                         }
t
        j                  j                  dd      j                         }t
        j                  j                  dd      j                         }t
        j                  j                  dd      j                         }t
        j                  j                  dd      j                         }t
        j                  j                  dd      j                         }t
        j                  j                  dd      j                         }t
        j                  j                  dd      j                         }t
        j                  j                  dd      j                         }t
        j                  j                  dd      j                         }t
        j                  j                  dd      j                         }t
        j                  j                  dd      j                         }t
        j                  j                  dd      j                         }t
        j                  j                  dd      j                         }t
        j                  j                  dd      j                         }t
        j                  j                  dd      j                         }t
        j                  j                  dd      j                         }t
        j                  j                  d d      j                         }t
        j                  j                  d!d      j                         }t
        j                  j                  d"d      j                         }t
        j                  j                  d#d      j                         }t
        j                  j                  d$d      j                         }t
        j                  j                  d%d      j                         } t
        j                  j                  d&d      j                         }!t
        j                  j                  d'd      j                         }"t
        j                  j                  d(d      j                         }#t
        j                  j                  d)d      j                         }$t
        j                  j                  d*d      j                         }%t
        j                  j                  d+d      j                         }&|r|s"t        d,d       t        t	        d-| .            S t        d/   }'t        |'      }(t        d0d0|(1      }) |)       }*d2}+d3 },d4 }-d5 }.d6 }/d7 }0i d|d |0|      d|r|nd8d	|r|nd8d
|r|nd8d |,|      d|r|nd8d |-|      d |-|	      d |,|
      d |,|      d |,|      d |/|      d |/|      d|r|nd9d |.|      d |.|      i d |.|      d |.|      d |.|      d |.|      d |.|      d |.|      d |.|      d |.|      d |.|      d  |.|      d! |.|      d" |.|      d# |.|      d$ |.|      d% |.|       d& |.|!      d' |.|"       |.|#       |.|$       |.|%      |&r|&nd8| d:}1|*j                  t        |+      |1       |*j                          |*j                          t        d;d<       t        t	        d=            S # t        $ r8}2t        d>t!        |2       d       t        t	        d-| .            cY d8}2~2S d8}2~2ww xY w)?zUpdate beachr   r   r   r   
beach_namer   rg   beach_informationr   r   rR   contact_phoner   r   	max_seatstop_rows	top_seats	starttimeendtimeopendaysenable_beachis_double_seatdisable_todayhas_umbrellahas_showershas_lockers
has_markethas_restauranthas_swimming_poolhas_parkinghas_toiletshas_free_wifi	has_musichas_safety_boxhas_access_wheelchairhas_lockers_for_babyhas_beach_volley
has_tennishas_spahas_medicalhas_lifeguard	pet_allowmaskz$Beach name and company are required.zbusiness.edit_beach)r   r"   Fr#   a  
            UPDATE beach_places 
            SET beach_name = :beach_name,
                company_id = :company_id,
                beach_information = :beach_information,
                address = :address,
                city = :city,
                country_id = :country_id,
                contact_phone = :contact_phone,
                latitude = :latitude,
                longitude = :longitude,
                max_seats = :max_seats,
                top_rows = :top_rows,
                top_seats = :top_seats,
                starttime = :starttime,
                endtime = :endtime,
                opendays = :opendays,
                enable_beach = :enable_beach,
                is_double_seat = :is_double_seat,
                disable_today = :disable_today,
                has_umbrella = :has_umbrella,
                has_showers = :has_showers,
                has_lockers = :has_lockers,
                has_market = :has_market,
                has_restaurant = :has_restaurant,
                has_swimming_pool = :has_swimming_pool,
                has_parking = :has_parking,
                has_toilets = :has_toilets,
                has_free_wifi = :has_free_wifi,
                has_music = :has_music,
                has_safety_box = :has_safety_box,
                has_access_wheelchair = :has_access_wheelchair,
                has_lockers_for_baby = :has_lockers_for_baby,
                has_beach_volley = :has_beach_volley,
                has_tennis = :has_tennis,
                has_spa = :has_spa,
                has_medical = :has_medical,
                has_lifeguard = :has_lifeguard,
                pet_allow = :pet_allow,
                mask = :mask,
                updated_at = NOW()
            WHERE beach_place_id = :beach_id
        c                 >    | r	 t        |       S y # t        $ r Y y w xY wr   r   r   s    rH   r   zupdate_beach.<locals>.safe_int  r   r   c                 >    | r	 t        |       S y # t        $ r Y y w xY wr   r   r   s    rH   r   z update_beach.<locals>.safe_float  r   r   c                 0    | r| j                         dk(  S dS r   r   r   s    rH   r   zupdate_beach.<locals>.safe_bool  r   r   c                 t    | r'	 ddl m } |j                  | d      j                         S y # t        $ r Y y w xY wr   r   r   s     rH   r   zupdate_beach.<locals>.safe_time  r   r   c                 R    | r	 dd l }|j                  |       S y # t        $ r Y y w xY wr   r   r   s     rH   r   zupdate_beach.<locals>.safe_uuid  r   r   N1234567)r   r   r   r   r   zBeach updated successfully.r   r   zError updating beach: r   )3r   r   rg   r   r   r   rR   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r"   r=   r>   r?   r   r   r   r   r   r   rB   rG   s3                                                      rH   update_beachr  V  s=    ;;z"NPWX 3455zK\\%%lB7==?
\\%%lB7==?
#LL,,-@"EKKM,,""9b1779||+113\\%%lB7==?
(("=CCE<<##J399;LL$$["5;;=	LL$$["5;;=	<<##J399;LL$$["5;;=	LL$$["5;;=	,,""9b1779<<##J399;||'';AAC ))*:B?EEG(("=CCE||'';AACll&&}b9??All&&}b9??A\\%%lB7==?
 ))*:B?EEG#LL,,-@"EKKMll&&}b9??All&&}b9??A(("=CCELL$$["5;;=	 ))*:B?EEG ' 0 01H" M S S U&||//0FKQQS"<<++,>CIIK\\%%lB7==?
,,""9b1779ll&&}b9??A(("=CCELL$$["5;;=	||+113 8'BG$9HMNN $N3|,#uFS^*X			=		(
*(
)J/(
  6G!2T(
 'wt	(

 DDd(
 (:.(
 m](
 
8,(
 I.(
 ),(
 *(
 ),(
 9-(
 y)(
 H)(
  Il3!(
" i7#(
$ Y}5%(
& Il3'(
( 9[1)(
* 9[1+(
, )J/-(
. i7/(
0  +<!=1(
2 9[13(
4 9[15(
6 Y}57(
8 9-9(
: i7;(
< $Y/D%E=(
> #I.B$C?(
@ 	*: ;A(
B )J/C(
D y)E(
F %[1&}5"9- Dd O(
T 	

4%v.
		

+Y7 2344 K&s1vh/9 5IJJKs%   [9d
 1Gd
 
	e-e eez/company/<company_id>/updatec                 F   t        j                  d      s t        dd       t        t	        d            S 	 t
        j                  j                  dd      j                         }t
        j                  j                  dd      j                         }t
        j                  j                  dd      j                         }t
        j                  j                  d	d      j                         }t
        j                  j                  d
d      j                         }t
        j                  j                  dd      j                         }t
        j                  j                  dd      j                         }t
        j                  j                  dd      j                         }t
        j                  j                  dd      j                         }	t
        j                  j                  dd      j                         }
|s"t        dd       t        t	        d|             S t        d   }t        |      }t        dd|      } |       }d}||r|nd|r|nd|r|nd|r|nd|r|nd|r|nd|r|nd|	r|	nd|
r|
nd| d}|j                  t        |      |       |j                          |j                          t        dd       t        t	        d            S # t        $ r8}t        dt!        |       d       t        t	        d|             cY d}~S d}~ww xY w)zUpdate companyr   r   r   r   rh   r   
vat_numberr   r   r   r   r   provincerR   rT   zCompany name is required.zbusiness.edit_company)rg   r"   Fr#   a  
            UPDATE companies 
            SET company_name = :company_name,
                vat_number = :vat_number,
                website = :website,
                email = :email,
                phone = :phone,
                address = :address,
                city = :city,
                province = :province,
                country_id = :country_id,
                company_status = :company_status,
                update_date = NOW()
            WHERE company_id = :company_id
        N)rh   r  r   r   r   r   r   r  rR   rT   rg   zCompany updated successfully.r   r   zError updating company: r   )rg   rh   r  r   r   r   r   r   r  rR   rT   r"   r=   r>   r?   r   rB   rG   s                     rH   update_companyr    s    ;;z"NPWX 3455AQ||'';AAC\\%%lB7==?
,,""9b1779  "-335  "-335,,""9b1779||+113<<##J399;\\%%lB7==?
 ))*:B?EEG -w7G$;
STT $N3|,#uFS^" )(2*")wt#U#U")wt Dd$,$(2*0>nD$
 	

4%v.
		

-y9 4566 Q(Q17; 7JOPPQs%   G/K 'B7K 	L (-LL L )+__doc__flaskr   r   r   r   r   r   r	   r
   flask_loginr   
sqlalchemyr   r   sqlalchemy.ormr   ossyspathr4   dirnameabspath__file__configr   __name__business_bprouter   rK   rN   rS   rn   rv   r}   r   r   r   r   r   r  r   r   rH   <module>r     s|   b a a & * ' 	 
 0I JK L  
H- :i6 i6V =!j6 "j6X :i6 i6V < s+ !s+j 56/9 7/9b -./5 //5b 34/8 5/8b +,/5 -/5b /0)7 1)7V 7&J|Z K|Z| /&BEN CENN 5xHHW IHWT -x@AK AAKF 1F8DHQ EHQr   