
    P1i5<                     F   d dl mZmZmZ d dlmZ d dlmZ d dlm	Z	 d dl
mZmZmZmZmZ d dlmZmZ d dlmZmZ d dlmZ d d	lmZmZmZ d d
lmZ d dlZd dlmZ ddl m!Z!m"Z" d dl#m$Z$ d dl%m&Z& d dl'm(Z(m)Z) ed        Z* G d de      Z+ G d dee      Z, G d dee      Z-y)    )renderredirectget_object_or_404)login_required)LoginRequiredMixin)messages)ListViewFormView
CreateView
UpdateView
DetailView)HttpResponseRedirectJsonResponse)reversereverse_lazy)settings)datedatetimetime)loginN)Person   )NumberPowerFormNumberPowerCalculateForm)NumberPower)make_json_serializable)create_temporary_userextract_first_last_namec                     t        t        || j                        }| j                  dk(  r?|j	                          t        j                  | d|j                   d       t        d      S t        | dd|i      S )u0   删除一个人及其相关的数字能量数据)pk
created_byPOSTu
   已删除 u    及其相关数据。znumber:chartsznumber/confirm_delete.htmlperson)
r   r   usermethoddeleter   successnamer   r   )requestr    r#   s      ./home/cursorai/projects/iching/number/views.pydelete_personr+      si     v"FF~~Jv{{m;Q"RS(('7(F9KLL    c                   0     e Zd ZdZeZdZ fdZd Z xZ	S )NumberPowerCalculatorViewz+
    View for calculating NumberPower.
    znumber/calculate.htmlc                 j   t        |   di |}d| j                  j                  v r| j                  j                  d   |d<   | j                  j                  j	                  d      |d<   | j                  j                  d= d| j                  j                  v r| j                  j                  d= |S )Nnumber_resultperson_datar#    )superget_context_datar)   sessionget)selfkwargscontext	__class__s      r*   r4   z*NumberPowerCalculatorView.get_context_data&   s    '*4V4dll222'+||';';O'LGO$ $ 4 4 8 8 GGH$$_5 4 44LL((7r,   c                 n   |j                   d   j                  d      |j                   d   r|j                   d   j                  d      nd|j                   d   |j                   d   r|j                   d   j                  d      nd |j                   d   r|j                   d   j                  d      nd d	}t        j                  |      }|j                   d
   |j                   d   |j                   d   j                  d      |j                   d   r|j                   d   j                  d      nd|j                   d   |j                   d   r|j                   d   j                  d      nd|j                   d   r|j                   d   j                  d      ndd}| j                  j
                  j                  s|j                   d
   xs d}t        |      \  }}|j                   d
   |||j                   d   |j                   d   r|j                   d   j                  d      nd |j                   d   r|j                   d   j                  d      nd |j                   d   |j                   d   r|j                   d   j                  d      nd |j                   d   r|j                   d   j                  d      nd d	}t        |      }	t        | j                  |	       	 t        j                  j                  |	d      }
||
_        |
j                          |
}t'        j(                  | j                  d|j*                          t-        d|j.                        S t        j                  j!                  | j                  j
                        j#                         }|dk(  }t        j                  j%                  |j                   d
   |j                   d   |j                   d   |j                   d   |j                   d   |j                   d   |j                   d   | j                  j
                  ||
      }t1        | j                  j
                  d      r7| j                  j
                  j2                  rd|_        |j                          t'        j(                  | j                  d|j*                          t-        d|j.                        S # t        j                  $ r t        j                  j!                  |	      j#                         }|dk(  }t        j                  j%                  |j                   d
   |j                   d   |j                   d   |j                   d   |j                   d   |j                   d   |j                   d   |	d||      }Y w xY w)N
birth_date%Y-%m-%d
birth_time%H:%Mz00:00	twin_type
father_dob
mother_dobdobdobtimetwinfdobmdobr(   genderu   %Y年%m月%d日 )r(   rI   r<   r>   r@   rA   rB   )	r(   
first_name	last_namerI   r<   r>   r@   rA   rB   Tr!   ownerr!   r   )r(   rI   r<   r>   r@   rA   rB   r!   created_by_temp_userrN   r0   u   数字能量计算成功: znumber:chart)r    )
r(   rI   r<   r>   r@   rA   rB   r!   rN   r0   is_temporary_user)cleaned_datastrftimer   	calculater)   r$   is_authenticatedr   r   r   r   objectsr6   r0   saveDoesNotExistfiltercountcreater   r'   r(   r   r    hasattrrQ   rP   )r7   formdataresultr1   	full_namerK   rL   	user_data	temp_userexisting_ownerr#   existing_recordsis_first_records                 r*   
form_validz$NumberPowerCalculatorView.form_valid1   s0    $$\2;;JGLPL]L]^jLkt((6??Hqx%%k2LPL]L]^jLkD%%l3<<ZHquLPL]L]^jLkD%%l3<<ZHqu
 &&t, %%f-''1++L9BBCTUOSO`O`amOn$++L9BB7Ktv**;7Y]YjYjkwYx$++L9BBCTU  AY]YjYjkwYx$++L9BBCTU  A
 ||  11))&17RI$;I$F!J	
 ))&1(&++H5VZVgVghtVud//=FFzR{SWSdSdeqSrd//=FFwOx|!..{;VZVgVghtVud//=FFzR{VZVgVghtVud//=FFzR{
I .i8I$,,	*!'!3!3yPT!3!U/5,##%'( T\\-G}+UVNvyy99  &~~44@Q@Q4RXXZ.!3O^^**&&v.((2,,\:,,\:++K8,,\:,,\:<<,,%$ + F t||((*=>4<<CTCTCfCf.2+T\\-G}+UVNvyy99Y && #)>>#8#8I#8#N#T#T#V "2a"7..**62,,X6#00>#00>"//<#00>#00>()-)"( / s   -:S% %CV43V4)
__name__
__module____qualname____doc__r   
form_classtemplate_namer4   rf   __classcell__r:   s   @r*   r.   r.      s     !J+M	c:r,   r.   c                   H     e Zd ZdZeZdZdZdZ fdZ	 fdZ
d Zd Z xZS )	NumberPowerResultsViewzH
    View for displaying a list of people with NumberPower results.
    znumber/charts_list.htmlpersons
   c                     t         |          j                  | j                  j                  d      j                  d      }|D ]   }|j                  r| j                  |       " |S )z`Return all people except the owner record, calculating NumberPower results for any without them.FrM   z-created_at)r3   get_querysetrY   r)   r$   order_byr0   calculate_number_result)r7   querysetr#   r:   s      r*   rt   z#NumberPowerResultsView.get_queryset   si    7')00||(( 1 
 (=
! 	 F'',,V4 
 r,   c                 t   t        |   di |}	 t        j                  j	                  | j
                  j                  d      }|j                  s| j                  |       ||d<   | j
                  j                  j	                  dd      }||d<   g d|d<   |d	   }|d
   }g }|j                  }|j                  }	|	dk  rt        d|	dz         }nAt        |dz
  d      }
t        |
dz   |	      }||	k(  rt        |dz
  d      }
t        |
|dz         }||d<   |S # t        j                  $ r d |d<   Y w xY w)NTrM   user_recordpagination_preferencerr   items_per_page)rr      2   d   pagination_options	paginatorpage_obj   r         
page_ranger2   )r3   r4   r   rV   r6   r)   r$   r0   rv   rX   r5   number	num_pagesrangemaxmin)r7   r8   r9   ry   r{   r   r   r   current_pagetotal_pages
start_pageend_pager:   s               r*   r4   z'NumberPowerResultsView.get_context_data   sf   '*4V4
	* ..,,<<,, - K
 ,,,,[9%0GM"
 --112I2N %3 !(9$% K(	:& 
)) !q+/2J \A-q1J:>;7H ;& Aq1
z8a<8J *G "" 	*%)GM"	*s   AD D76D7c                 d   | j                   j                  j                  d      }|r|S | j                   j                  j                  d      }|r0|j	                         r dt        |      cxk  rdk  rt        |      S  t        j                  j                  dt        j                  d         S )zQ
        Get the number of items to paginate by, or use settings default
        number_items_per_pageper_pager   r~   r   default)r)   r5   r6   GETisdigitintr   PAGINATE_BY)r7   rw   session_value	url_values       r*   get_paginate_byz&NumberPowerResultsView.get_paginate_by   s    
 ,,001HI   LL$$((4	**,c)n1K1Ky>! 2L ##''(2F2Fy2QRRr,   c           
         |j                   sy|j                  |j                  j                         |j                   |j                  |j
                  |j                  r|j                  j                  dk(  rdndd|j                  |j                  d	}|d   j                  d      }d}|d	   r|d	   j                  d
      }|||d   |d   r|d   j                  d      nd|d   r|d   j                  d      ndd}t               }|j                  |      }t        |      }||_        |j                  dg       yz3Calculate and save NumberPower result for a person.N   before_midnightafter_midnightF)	r(   rI   r<   r>   r@   zi_hour_type
is_adoptedfather_birth_datemother_birth_dater<   r=   r>   r?   r@   r   r   rC   r0   )update_fieldsr<   r(   rI   lowerr>   r@   hourrA   rB   rS   r   rT   r   r0   rW   r7   r#   r^   rD   rE   np_data
calculatorr_   s           r*   rv   z.NumberPowerResultsView.calculate_number_result   Q      KKmm))+ ++ ++))171B1BvGXGXG]G]acGc-iy!'!2!2!'!2!2

 < ))*5 <(11':G %FJK^F_D,-66zBeiFJK^F_D,-66zBei
 !]
%%g. (/  &?"34r,   )rg   rh   ri   rj   r   modelrl   context_object_namepaginate_byrt   r4   r   rv   rm   rn   s   @r*   rp   rp      s5     E-M#K0dS",5r,   rp   c                   :     e Zd ZdZeZdZdZd Z fdZ	d Z
 xZS )NumberPowerDetailViewzD
    View for displaying a person's NumberPower result details.
    znumber/result_detail.htmlr#   c                 j    t         j                  j                  | j                  j                        S )NrO   )r   rV   rY   r)   r$   )r7   s    r*   rt   z"NumberPowerDetailView.get_queryset'  s$    ~~$$0A0A$BBr,   c                     t        |   di |}| j                         }|j                  s| j	                  |       |S )Nr2   )r3   r4   
get_objectr0   rv   )r7   r8   r9   r#   r:   s       r*   r4   z&NumberPowerDetailView.get_context_data+  s?    '*4V4" ##((0r,   c           
         |j                   sy|j                  |j                  j                         |j                   |j                  |j
                  |j                  r|j                  j                  dk(  rdndd|j                  |j                  d	}|d   j                  d      }d}|d	   r|d	   j                  d
      }|||d   |d   r|d   j                  d      nd|d   r|d   j                  d      ndd}t               }|j                  |      }t        |      }||_        |j                  dg       yr   r   r   s           r*   rv   z-NumberPowerDetailView.calculate_number_result5  r   r,   )rg   rh   ri   rj   r   r   rl   r   rt   r4   rv   rm   rn   s   @r*   r   r     s*     E/M"C,5r,   r   ).django.shortcutsr   r   r   django.contrib.auth.decoratorsr   django.contrib.auth.mixinsr   django.contribr   django.views.genericr	   r
   r   r   r   django.httpr   r   django.urlsr   r   django.confr   r   r   r   django.contrib.authr   jsonbazi.modelsr   formsr   r   iching.utils.numberpowerr   iching.utils.serializersr   accounts.utilsr   r   r+   r.   rp   r   r2   r,   r*   <module>r      s    @ @ 9 9 # W W : -   ) ) %   < 0 ; I	M 	Mu: u:nG5/ G5RB5.
 B5r,   