forum.ge
reklama
FORUM.GE წესები  · დახმარება  · ძებნა  · წევრები  · კალენდარი  · ჩატი
Pages: (50) « პირველი ... 48 49 [50]   ( გადავიდეთ პირველ წაუკითხავ წერილზე ) გამოხმაურება · ახალი თემა · ახალი გამოკითხვა

> ჩაინიკური შეკითხვები Python-ში
NinjaRacer
Conducting an orchestra


*****
ჯგუფი: Registered
წერილები: 1697
წევრი No.: 241880
რეგისტრ.: 2-April 18

გამოგზავნილია: 18 Aug 2019, 11:51  #55125632      · პროფილი · პირადი მიმოწერა · ჩატი · ელფოსტა · ვებგვერდი
QUOTE
პატარა კოდი მქონდა :დ


სწრაფი კოდი გინდა პითონში?

გადაწერე სი/სიპიპი-ში.

მარტივად biggrin.gif


--------------------
__signature__

I have not failed, I've just found
10,000 ways that won't work. (Thomas Edison)
RexxaR
Crazy Member


*****
ჯგუფი: Registered
წერილები: 1343
წევრი No.: 98449
რეგისტრ.: 25-August 09

გამოგზავნილია: 18 Aug 2019, 12:35  #55125780      · პროფილი · პირადი მიმოწერა · ჩატი · ელფოსტა
QUOTE
ეს კოდი წინა კვირისაა რომელიც ამ 5000-დან 200 ლინკი მოაქვს, ერთი ლუპია დასამატებელი და 5000-ვეს წამოიღებს. ოღონდ სწრაფი არანაირად არაა.


სწრაფი ფიზიკურად ვერ იქნება ვერასდროს სელენიუმის პონტში ვამბობ

პირდაპირი სქრეპინგი არ გიცდია? ხო არ დაგბლოკეს უკვე biggrin.gif


PS:

user posted image

implicit_wait-ი მხოლოდ ერთჯერადად უნდა გაიწეროს, შენ რომ რამოდენიმე ადგილას გიწერია ისე არ მუშაობს როგორც გგონია.

თუ რაიმეზე დალოდება გინდა EC მოდული გამოიყენე

user posted image
NinjaRacer
Conducting an orchestra


*****
ჯგუფი: Registered
წერილები: 1697
წევრი No.: 241880
რეგისტრ.: 2-April 18

გამოგზავნილია: 18 Aug 2019, 13:38  #55125995      · პროფილი · პირადი მიმოწერა · ჩატი · ელფოსტა · ვებგვერდი
QUOTE
implicit_wait-ი მხოლოდ ერთჯერადად უნდა გაიწეროს, შენ რომ რამოდენიმე ადგილას გიწერია ისე არ მუშაობს როგორც გგონია.

ვიცი ეგ

მანდ დაჟე თავში ერთი 300 წამიანი უნდა მიმეცა და ეგ იყო. პროსტა რაღაცეები რო არ მუშაობდა. იმის გამო რომ სწრაფად იტვირთებოდა და DOM არ იყო მთლიანად აგებული რაღაც დატაზე არ მქონდა წვდომა (ამიტომ დამჭირდა სლიფი 0.1 წამი) და დავიწყე ჩალიჩი რომ გამერკვია და მერე არ წავშალე.
ეგ როგორ მუშაობს მერე წავიკითხე და მივხვდი რომ ერთხელ უნდოდა.


ჰო მულტიპროცესინგზე რაც დაწერე არ მიპასუხია.

მულტისტრედინგი პროცესზე სწრაფი არის და შეარდ მემორიც აქვს და ამიტომ გინდა locking(mutex), ასევე race condition-ებისგანაც უნდა დაიცვა თავი
(ეს ვიგულისხმე შარში) მაგრამ მაგას აქვს ერთი დიდი ლიმიტი. GIL
ყველა სრედი მიდის არა პარალელურად არამედ მონაცვლეობით, პროცესებზე კიდევ:

1. იყენებ ყველა ქორს ბოლომდე. (სრედინგზე მარტო ერთ ქორს იყენებ რეალურად)
2. კონტექსტ სვიჩები ძალიან ძვირი ოპერაციაა. ძალიან ნელი და ძალიან არაეფიშენთი.
3. გაქვს ნამდვილი პარალელიზმი და არა მოჩვენებითი, როგორც სრედინგზე.


ამიტომ რაღაც შემთხევებში პროცესებს ვერანაირად ვერ აჯობებს.
დავანებოთ request-ების გაგზავნას თავი.
მაგას while ლუპით დავწერთ და წამში მილიარდ რექუესტს გავაგზავნი, სიტყვაზე ან რამე სხვა უკეთთესი მეთოდით.

ზოგადად ვამბობდი მე რომ პროცესინგი უფრო სწრაფია. იმიტომ რომ კი ბატონო მეტი მეხსიერება მიაქვს. კი არ აქვთ ერთმანეთის დატაზე წვდომა, ნუ თუ შვილი არაა იმ პროცესის. შვილებს პარენტის დატაზე აქვთ წვმოდა. კი გინდა IPC, მაგრამ რეალურად სრედინგი არის 1 ქორზე შეზღუდული, როცა მე 8 ქორი მაქვს

8 > 1

არა არავის დავუბლოკივარ.

თავიდან როცა დავწერე ცოტა სხვანაირად 300 რექუესტზე მეტი რომ გავუგზავნე წამში მითხრა სლოუ დაუნო და ცოტახანი ტაიმატუში გამიშვა სერვერმა მერე გადავაკეთე და გასწორდა gigi.gif

სკრეპინგით კი ვიფიქრე მარა ვერანაირად ვერ გამოვდიდა ეგ ამბავი (მე მგონი biggrin.gif)


მანდ ვიდეოზე თუ არ დააკლიკე და ეგ საიტი თუ არ გახსენი ლექცია ისე არამგონია გიახსნას ეგ ერთი და მეორე პროსტა სელენიუმით ჩალიჩის მურამი მქონდა. ტესტინგში გამოვიყენებ მერე რაღაცეებზე.

ეს ბოლო არის მუშა კოდი
https://github.com/gurguration/Useful-Pytho...d_downloader.py

This post has been edited by NinjaRacer on 18 Aug 2019, 14:05
RexxaR
Crazy Member


*****
ჯგუფი: Registered
წერილები: 1343
წევრი No.: 98449
რეგისტრ.: 25-August 09

გამოგზავნილია: 18 Aug 2019, 14:19  #55126097      · პროფილი · პირადი მიმოწერა · ჩატი · ელფოსტა
QUOTE
დავანებოთ request-ების გაგზავნას თავი.


ზუსტად ვებ სქრეპინგის პონტში დავწერე რო thread-ები გაცილებით ეფექტურია, მილიონჯერ. თორე ზოგადად რასაც წერ მართალი ხარ, კონკრეტულად სქრეპინგ თასქებშია კარგი thread-ები

მიზეზი:

როდესაც რექუესტს აგზავნი საიტზე მომენტალურად არ ხდება რესპონსი ხო თავისთავად (ჭირდება მილიწამებიდან ზემოთ ძირითადად 1 წამის რეინჯში), შესაბამისად სრეადინგი (ან ასინქრონული სქრეპინგი) არის გაააცილებით ეფექტური და სწრაფი 1 კორზე ვიდრე მხოლოდ მულტიპროცესინგზე დაკიდებული სქრეპინგი თუნდაც 32 კორზე. იმიტო რო შეიძლება 100 და მეტი სრეადი მქონდეს გაშვებული პარალელურად.

ანუ შენს შემთხვევაში პროცესინგი ჯობდა ცალსახად იმიტო რო ვიდეოს იწერ თითო პროცესით და დაყოვნება ფიზიკურად არ გაქვს, აი მაგ შემთხვევაში რომ სრეადინგი გამოიყენო ვერანაირ ბენეფიტს ვერ მიიღებ გარდა ტასკიდან ტასკზე მოხტუნავე პროცესორისა, შესაბამისად ნელი იქნებოდა

QUOTE
მაგას while ლუპით დავწერთ და წამში მილიარდ რექუესტს გავაგზავნი, სიტყვაზე ან რამე სხვა უკეთთესი მეთოდით.


ვაილ ლუპით მილიარდ რექუესტს ვერ გააგზავნი 1 წამში შანსი არაა თუ ასინქრონულობა/პარალელიზმი არ ჩართე საქმეში

QUOTE
სკრეპინგით კი ვიფიქრე მარა ვერანაირად ვერ გამოვდიდა ეგ ამბავი (მე მგონი )


თუ გინდა მომე წვდომა და გამოვიყვან 99%
NinjaRacer
Conducting an orchestra


*****
ჯგუფი: Registered
წერილები: 1697
წევრი No.: 241880
რეგისტრ.: 2-April 18

გამოგზავნილია: 18 Aug 2019, 14:28  #55126122      · პროფილი · პირადი მიმოწერა · ჩატი · ელფოსტა · ვებგვერდი
RexxaR
QUOTE
როდესაც რექუესტს აგზავნი საიტზე მომენტალურად არ ხდება რესპონსი ხო თავისთავად (ჭირდება მილიწამებიდან ზემოთ ძირითადად 1 წამის რეინჯში), შესაბამისად სრეადინგი (ან ასინქრონული სქრეპინგი) არის გაააცილებით ეფექტური და სწრაფი 1 კორზე ვიდრე მხოლოდ მულტიპროცესინგზე დაკიდებული სქრეპინგი თუნდაც 32 კორზე. იმიტო რო შეიძლება 100 და მეტი სრეადი მქონდეს გაშვებული პარალელურად.

ჰო როცა ქსელთან გაქვს შემთხვევა 100% ეგრეა. ლეიტენსები გაქვს და ტყუილად პროცესების დასპაუნება რესურის ფლანგვაა.
როცა სტრიმი მოდის მანდ უკვე ხტუნაობა ზედმეტია ეგეც მართალია.


QUOTE
ვაილ ლუპით მილიარდ რექუესტს ვერ გააგზავნი 1 წამში შანსი არაა თუ ასინქრონულობა/პარალელიზმი არ ჩართე საქმეში



ზემოთ რაკოდიც დავდე კაკრაზ ვაილ ლუპი ამოძრავებს მაგათ მთელი სისწრაფით (1 ქორს რაც შეუძლია)
ანუ სანამ Queue-ში მაქვს დარჩენილი ლინკები მანამდე გიჟივით (100%-ით) ამოწურავს 1 ქორის შესაძლებლობებს ამ 3 სრედის მეშვეობით.

არ დამითვლია თანაფარდობა, რამდენი სრედი ჯობია რამდენს ქორზე და რამდენ პროცესზე სიმართლე გითხრა. კაკრაზ პროცესინგი გინდა როცა ბევრი რექუესტის გაგზავნა გინდა.
თითო ქორზე თითო while loop და 100% ამოწურავ ყველა ქორს. ეგრე არაა?

QUOTE
თუ გინდა მომე წვდომა და გამოვიყვან 99%

სამსახურის კომპზე აქვს თანამშრომელს ქრედენშალები თორე მოგცემდი smile.gif
თუ გამოყვანადია მეც გამოვიყვან 100% smile.gif უბრალოდ როგორც გითხარი არც სრედინგში არც პროცესინგში და არც ეისინქში.
კარგად არ მიმუშავია. ყველა გაომიყენებია. მარტივი კოდი დამიწერია დავალება შემმისრულებია მგრამ 100% რომ ამომეწურის ყველას შესაძლებლობა ეგრე არა. არც სქრეფინგი არ მიჩალიჩია ბევრი. ამიტომ არ ვიცოდი თუ გამოყვანადია.
მაგაზეც წავივარჯიშებ. ჰოდა ორშაბათი- თუმმოვიცალე ვიზამ ან სამშაფათს და წავივარჯიშოთ არ იქნება ნამდვილად ცუდი smile.gif

* * *
RexxaR
მადლობა ძალიან დამეხმარე ისე smile.gif <3
ანეეეს რო დავუწერე აქ ამ თემაში,
lambda, generator, asyncio, multithreading, multiprocessing კაი მეთქი ეგ დებილიბისთვისაა, MIT არ ასწავლისო biggrin.gif ჩეკიოზე კიდევ კარგი დამიჯერა givi.gif


მე კიდევ მგონი რომ მთელი პითონი asyncio-ს გარშემო დაიწყებს ტრუალს. ნუ კიდევ ბევრი რამეა რაც ამ ენას აცოცხლებს და ძალიან მაგარს ხდის მაგრამ ერთერთი ეგაა.



ეს კაცი ძაან ჯიგაროა. სრედებზე რო ჯოინს აკებთებ ან queue-ზე ამ კაცის დაწერილია ეგ API და არამარტო ეგ პითონის ალბათ 30% ამან დაწერა დანარჩენი Guido-მ (პითონის შემქნელმა მამამ givi.gif)

This post has been edited by NinjaRacer on 18 Aug 2019, 16:21
RexxaR
Crazy Member


*****
ჯგუფი: Registered
წერილები: 1343
წევრი No.: 98449
რეგისტრ.: 25-August 09

გამოგზავნილია: 19 Aug 2019, 11:38  #55128997      · პროფილი · პირადი მიმოწერა · ჩატი · ელფოსტა
QUOTE
მადლობა ძალიან დამეხმარე ისე  <3


რაში? biggrin.gif მეღადავები?
NinjaRacer
Conducting an orchestra


*****
ჯგუფი: Registered
წერილები: 1697
წევრი No.: 241880
რეგისტრ.: 2-April 18

გამოგზავნილია: 19 Aug 2019, 11:40  #55129003      · პროფილი · პირადი მიმოწერა · ჩატი · ელფოსტა · ვებგვერდი
RexxaR
QUOTE
რაში? biggrin.gif მეღადავები?

რას გეღადავები კაცო, ბევრი რამე გავიგე და გავიაზრე ახალი + თან გამოცდილებაც რო გაგვიზიარე კაია.

არ გეღადავები.
NinjaRacer
Conducting an orchestra


*****
ჯგუფი: Registered
წერილები: 1697
წევრი No.: 241880
რეგისტრ.: 2-April 18

გამოგზავნილია: 20 Aug 2019, 19:03  #55134864      · პროფილი · პირადი მიმოწერა · ჩატი · ელფოსტა · ვებგვერდი
https://docs.python.org/3/library/ipc.html


ამას ვუზივარ,

ადრე ტორნადოზე რაღაც დავწერე და გული გამისკდა თავიდან ისეთი რთული იყო. ახლა ბევრად დალაგებულად გავდივარ.

ეისინქი 50% მაინც არის ამ ენის. ჰოდა თავიდან ბოლომდე უნდა დავუთმო ერთი 10 დღე.
Lilith
¡ŋ ђθς ş¡ģŋθ ұ¡ŋςəş


*******
ჯგუფი: Members
წერილები: 10036
წევრი No.: 370
რეგისტრ.: 8-October 01

გამოგზავნილია: 20 Aug 2019, 19:11  #55134907      · პროფილი · პირადი მიმოწერა · ჩატი · ვებგვერდი
NinjaRacer
უჰ, ტორნადოს ენაცვალოს ჩემი თავი smile.gif სხვას არც ვიყენებ, flask-ის სწავლა მინდოდა რამდენჯერმე, მაგრამ ისევ და ისევ tornado forever bis.gif


--------------------
აფრენით ყველა ვაფრენთ შე კაცო, ასაფრენი ბილიკების მეტი რა გვაქვს, დასაფრენი ბილიკები თქვი შენ... (c) gia1970
NinjaRacer
Conducting an orchestra


*****
ჯგუფი: Registered
წერილები: 1697
წევრი No.: 241880
რეგისტრ.: 2-April 18

გამოგზავნილია: 20 Aug 2019, 19:50  #55135082      · პროფილი · პირადი მიმოწერა · ჩატი · ელფოსტა · ვებგვერდი
Lilith

YEP up.gif

ხო 1 თვე წავიმუშავე odoo-ზე, ცოტა ფლასკი, ცოტა ჯდანგო, ერთხელ wsgi მოდულითაც ვიჩალიჩე პატარა მეილ სერვერი, მე რავიჩალიჩე python cookbook 3-ში იყო მზა კოდი და სავარჯიშოსავით გადავწერე.
ყველა ფრეიმვორკი მომეწონა მაგრამ ტორნადო ძმაა. 10 000 req/sec შეუძლია გაატაროს. ერთი სრედშია ჩაკეტილი. ყველა asyncio-ს კოდი და ბიბლიოთეკის მხარდაჭერა აქვს. რა გინდა მეტი). დახასიათებაც ეგეთი უნდა.

ფბ-ს დაწერილია და მერე გააოფესნსორსა. სამწუხარდ კარგად არცერთზე არ მიმუშავია რა :/ პატარ-პატარა-რაღაცეები ვიჩალიჩე სხვისი კოდი გადავაკეთე და ა.შ აი 0 -დან ჯერ არა.

იქეთ თვეში მინდა დავწერო multicast igmp proxy router-ი, რომელიც რომელიმე არსებულ iptv-ს სერვისს დაუკავშირდება.
ექნება ჩენელების საბსქრიფშენი, ერთროულად რამდენიმე ჩენელის ნახვაც უნდა შეეძლოს და ეს ყველაფერი უნდა იყოს raspbery pi-ზე და ტორნადოს გამოვიყენებ ვებისთვის რათქმაუნდა და უნდა შეეძლოს რეტრანსალაცია/გასტრიმვა ამ ყველაფრის. ჯერ ვერ ჩამოვყალიბდი მეც smile.gif
* * *
საკუთარ myvideo-ს ვხსნი bis.gif


:dddddd
RexxaR
Crazy Member


*****
ჯგუფი: Registered
წერილები: 1343
წევრი No.: 98449
რეგისტრ.: 25-August 09

გამოგზავნილია: 22 Aug 2019, 09:52  #55140880      · პროფილი · პირადი მიმოწერა · ჩატი · ელფოსტა
QUOTE
საკუთარ myvideo-ს ვხსნი 


biggrin.gif

დაწერე რამე?
NinjaRacer
Conducting an orchestra


*****
ჯგუფი: Registered
წერილები: 1697
წევრი No.: 241880
რეგისტრ.: 2-April 18

გამოგზავნილია: 22 Aug 2019, 10:05  #55140915      · პროფილი · პირადი მიმოწერა · ჩატი · ელფოსტა · ვებგვერდი
RexxaR
არა დღეს მეორე დღეა ასინქიოს ვუზივარ. ცოტა კარგად და სიღრმისეულად მინდა გავერკვე.
gevent-იც მაინტერესებს. aiohttp და ყველაფერი რაც აისინქს ეხება. ცოტა ხადავოი რაცაა.

იმიტომ რომ მართლა საჭირო თემაა საინტერესოც და პითონს საერთოდ არ გავს.
უფრო სწორედ ზუსტად პითონიკ სტილშია გაკეთებული ძალიან რთული რაღაც. JS-ში სულ სხვანაირადაა.
call back ჰელები და რამეები :დ

პითონი უნდა ვისწავლო მაქსიმალურად ბოლომდე. მერე C-ი და დავაექსთენდებ ხოლმე ან კოდს ჩავასწორებ ქორში თუ დამჭირდა :დ

კაი ამბიციები მაქვს ხო? biggrin.gif'
ეურო პითონის ვიდეობს ვუყურებდი გუშინ დილამდე. ესინქზე ერთი 5 მოსაუბრეა.

არ მინდა ეს AI და მაშინ ლერნინგი არ მაინტერესებს და რავქნა. lol.gif
ჩავაცივდი რაღაცას ვსიო. პიზდეცი ექნება gigi.gif

This post has been edited by NinjaRacer on 22 Aug 2019, 10:10
RexxaR
Crazy Member


*****
ჯგუფი: Registered
წერილები: 1343
წევრი No.: 98449
რეგისტრ.: 25-August 09

გამოგზავნილია: 22 Aug 2019, 10:09  #55140929      · პროფილი · პირადი მიმოწერა · ჩატი · ელფოსტა
NinjaRacer
QUOTE
კაი ამბიციები მაქვს ხო?



თეთრი შურით მშურს შენი მიზანმიმართულობის.

ეგ ამბიციებია ზუსტად წარმატების და განვითარების მკვებავი
NinjaRacer
Conducting an orchestra


*****
ჯგუფი: Registered
წერილები: 1697
წევრი No.: 241880
რეგისტრ.: 2-April 18

გამოგზავნილია: 22 Aug 2019, 10:12  #55140937      · პროფილი · პირადი მიმოწერა · ჩატი · ელფოსტა · ვებგვერდი
RexxaR
QUOTE
თეთრი შურით მშურს შენი მიზანმიმართულობის.

მადლობა.
არაფერიც
ჩემი მკვებავი ქომუნითია!!! :DDDDD

თუნდაც ეს პატარა პითონიკ ქომუნითი და საინტერესო ხალხი თუნდაც შენნაირი wink.gif

და კიდევ OCD -ალბათ.
მადლობა.
RexxaR
Crazy Member


*****
ჯგუფი: Registered
წერილები: 1343
წევრი No.: 98449
რეგისტრ.: 25-August 09

გამოგზავნილია: 22 Aug 2019, 15:28  #55142360      · პროფილი · პირადი მიმოწერა · ჩატი · ელფოსტა
QUOTE
call back ჰელები და რამეები :დ


აი ეს 1.5 წლის წინ დავწერე მგონი და ახლა მომიწია რაღაცის გადახედვა და პირღია ვუყურებ როგორ დავწერე ეს თქო

ასინქრონული ჰელის გამოა ზუსტად ამხელა ჰენდლერები დანესტილი

CODE

var ACCR_DATE,
   START_TIME,
   REMAINING_ITEMS,
   ACCR_DATE_EXCHANGE_RATE = 0,
   PARENT_SITE = '/sites/accounting/Borrowings',
   PRINC_LEDGER = 'Principal Ledger',
   INT_LEDGER = 'Interest Ledger';

functi0n round(num) {
   return Math.round(num * 10 * 10) / 100;
}

functi0n num_to_str(num) {
   return round(num).toFixed(2).replace(/\B(?=(\d{3})+(?!\d))/g, ',');
}

functi0n clone_date(date) {
   return new Date(date.getTime());
}

functi0n get_day_diff(old_date, new_date) {
   return (new_date - old_date) / 86400000;
}

functi0n date_to_str(date, format) {
   if (format === 'ddmmyyyy') {
       return ('0' + date.getDate()).slice(-2) + '' + ('0' + (date.getMonth() + 1)).slice(-2) + '' + date.getFullYear();
   } else if (format === 'dd-mm-yyyy') {
       return ('0' + date.getDate()).slice(-2) + '-' + ('0' + (date.getMonth() + 1)).slice(-2) + '-' + date.getFullYear();
   } else if (format === 'iso') {
       return date.getFullYear() + '-' + ('0' + (date.getMonth() + 1)).slice(-2) + '-' + ('0' + date.getDate()).slice(-2) + 'T00:00:00Z';
   }
}

functi0n is_leap_year(year) {
   return year % 4 === 0 && (year % 100 !== 0 || year % 400 === 0);
}

functi0n get_month_days(month, year) {
   return [31, is_leap_year(year) ? 29 : 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][month] || 0;
}

functi0n to_date(date_str) {
   date_str = date_str.split('/');
   if (date_str.length === 3 && date_str[1] > 0 && date_str[1] <= get_month_days(date_str[0]-1, date_str[2])) {
       return new Date(date_str[2], date_str[0]-1, date_str[1]);
   }
   return 0;
}

functi0n add_month(date) {
   var old_year = date.getFullYear(),
       old_month = date.getMonth(),
       old_day = date.getDate(),
       new_year = old_month === 11 ? old_year + 1 : old_year,
       new_month = old_month === 11 ? 0 : old_month + 1,
       new_month_days = get_month_days(new_month, new_year),
       new_day = old_day > new_month_days ? new_month_days : old_day;

   return new Date(new_year, new_month, new_day);
}

functi0n subtract_month(date) {
   var old_year = date.getFullYear(),
       old_month = date.getMonth(),
       old_day = date.getDate(),
       new_year = old_month === 0 ? old_year - 1 : old_year,
       new_month = old_month === 0 ? 11 : old_month - 1,
       new_month_days = get_month_days(new_month, new_year),
       new_day = old_day > new_month_days ? new_month_days : old_day;

   return new Date(new_year, new_month, new_day);
}

functi0n on_fail(sender, args) {
   document.getElementById('accr_btn').disabled = false;
   document.getElementById('passed_time').innerText = num_to_str((new Date() - START_TIME) / 1000) + ' წამი';
   document.getElementById('proc_state').innerText = 'დასრულდა ხარვეზით: ' + args.get_message() + args.get_stackTrace();
}

functi0n chk_rem_itms() {
   if (REMAINING_ITEMS === 0) {
       document.getElementById('accr_btn').disabled = false;
       document.getElementById('passed_time').innerText = num_to_str((new Date() - START_TIME) / 1000) + ' წამი';
       document.getElementById('proc_state').innerText = 'დასრულდა წარმატებით';
   }
}

functi0n add_int_ledger_item(vals) {
   var ctx = new SP.ClientContext(PARENT_SITE),
       lst = ctx.get_web().get_lists().getByTitle(INT_LEDGER),
       ici = new SP.ListItemCreationInformation(),
       itm = lst.addItem(ici);
   itm.set_item('Title', vals[0]);
   itm.set_item('Investor_x0020_Full_x0020_Name_x', vals[1]);
   itm.set_item('Investor_x0020_Full_x0020_Name_x0', vals[2]);
   itm.set_item('Transaction_x0020_Date', vals[3]);
   itm.set_item('Transaction_x0020_Type', vals[4]);
   itm.set_item('Currency', vals[5]);
   itm.set_item('Amount', vals[6]);
   itm.set_item('Memo', vals[7]);
   itm.set_item('Transaction_x0020_Code', vals[8]);
   itm.set_item('USD_x002f_GEL_x0020_Rate', vals[9]);
   itm.set_item('Amount_x0020_in_x0020_GEL', vals[10]);
   itm.update();
   ctx.load(itm);
   ctx.###cuteQueryAsync(
       functi0n() {
           REMAINING_ITEMS -= 1;
           chk_rem_itms();
       },
       on_fail
   );
}

functi0n set_daily_accr(itm) {
   var loan = itm.get_item('Title'),
       currency = itm.get_item('Currency'),
       accr_day = itm.get_item('Interest_x0020_Accrual_x0020_Day'),
       accr_type = itm.get_item('Interest_x0020_Accrual_x0020_Typ'),
       rate_gross = itm.get_item('Monthly_x0020_interest_x0020_rat'),
       investor_name_geo = itm.get_item('Investor_x0020_Full_x0020_Name_x'),
       investor_name_eng = itm.get_item('Investor_x0020_Full_x0020_Name_x0'),
       tr_code = loan + '_' + date_to_str(ACCR_DATE, 'ddmmyyyy');
   (functi0n() {
       var ctx = new SP.ClientContext(PARENT_SITE);
       var lst = ctx.get_web().get_lists().getByTitle(INT_LEDGER);
       var cq = new SP.CamlQuery();
       cq.set_viewXml("<View><Query><Where><Eq><FieldRef Name='Transaction_x0020_Code'/><Value Type='Text'>"+tr_code+"</Value></Eq></Where></Query></View>");
       var itms = lst.getItems(cq);
       ctx.load(itms, 'Include(ID)');
       ctx.###cuteQueryAsync(
           functi0n() {
               if (itms.get_count() === 0) {
                   (functi0n() {
                       var ctx = new SP.ClientContext(PARENT_SITE);
                       var lst = ctx.get_web().get_lists().getByTitle(PRINC_LEDGER);
                       var cq = new SP.CamlQuery();
                       cq.set_viewXml("<View><Query><Where><And><Eq><FieldRef Name='Title'/><Value Type='Computed'>"+loan+"</Value></Eq><Leq><FieldRef Name='Transaction_x0020_Date'/><Value Type='DateTime' IncludeTimevаlue='FALSE'>"+date_to_str(ACCR_DATE, 'iso')+"</Value></Leq></And></Where></Query></View>");
                       var itms = lst.getItems(cq);
                       ctx.load(itms, 'Include(Amount)');
                       ctx.###cuteQueryAsync(
                           functi0n() {
                               var itm,
                                   princ_bal = 0,
                                   i = itms.get_count();
                               while (i--) {
                                   itm = itms.getItemAtIndex(i);
                                   princ_bal += itm.get_item('Amount');
                               }
                               princ_bal = round(princ_bal);
                               if (princ_bal > 0) {
                                   (functi0n() {
                                       var ctx = new SP.ClientContext(PARENT_SITE);
                                       var lst = ctx.get_web().get_lists().getByTitle(INT_LEDGER);
                                       var cq = new SP.CamlQuery();
                                       cq.set_viewXml("<View><Query><Where><And><Eq><FieldRef Name='Title'/><Value Type='Computed'>"+loan+"</Value></Eq><Leq><FieldRef Name='Transaction_x0020_Date'/><Value Type='DateTime' IncludeTimevаlue='FALSE'>"+date_to_str(ACCR_DATE, 'iso')+"</Value></Leq></And></Where></Query></View>");
                                       var itms = lst.getItems(cq);
                                       ctx.load(itms, 'Include(Amount)');
                                       ctx.###cuteQueryAsync(
                                           functi0n() {
                                               var itm,
                                                   int_bal = 0,
                                                   i = itms.get_count();
                                               while (i--) {
                                                   itm = itms.getItemAtIndex(i);
                                                   int_bal += itm.get_item('Amount');
                                               }
                                               var int_calc_base = accr_type === 'Simple' ? princ_bal : princ_bal + int_bal;
                                               var next_pmt_date,
                                                   prev_pmt_date;
                                               if (accr_day > 28) {
                                                   if (ACCR_DATE.getDate() < 29 && ACCR_DATE.getDate() < accr_day) {
                                                       var accr_date_days = get_month_days(ACCR_DATE.getMonth());
                                                       next_pmt_date = accr_day > accr_date_days ? new Date(clone_date(ACCR_DATE).setDate(accr_date_days)) : new Date(clone_date(ACCR_DATE).setDate(accr_day));
                                                       prev_pmt_date = subtract_month(next_pmt_date);
                                                   } else {
                                                       prev_pmt_date = new Date(clone_date(ACCR_DATE).setDate(accr_day));
                                                       next_pmt_date = add_month(prev_pmt_date);
                                                   }
                                               } else {
                                                   if (ACCR_DATE.getDate() < accr_day) {
                                                       next_pmt_date = new Date(clone_date(ACCR_DATE).setDate(accr_day));
                                                       prev_pmt_date = subtract_month(next_pmt_date);
                                                   } else {
                                                       prev_pmt_date = new Date(clone_date(ACCR_DATE).setDate(accr_day));
                                                       next_pmt_date = add_month(prev_pmt_date);
                                                   }
                                               }
                                               var daily_rate = accr_type === 'Compounded 365' ? rate_gross / 365 : rate_gross / 12 / get_day_diff(prev_pmt_date, next_pmt_date);
                                               var int_charge = int_calc_base * daily_rate;
                                               if (int_bal < 0 && -int_bal > int_charge * 0.95) {
                                                   (functi0n() {
                                                       var ctx = new SP.ClientContext(PARENT_SITE);
                                                       var lst = ctx.get_web().get_lists().getByTitle(INT_LEDGER);
                                                       var cq = new SP.CamlQuery();
                                                       cq.set_viewXml("<View><Query><Where><And><And><Eq><FieldRef Name='Title'/><Value Type='Computed'>"+loan+"</Value></Eq><Eq><FieldRef Name='Transaction_x0020_Type'/><Value Type='Text'>Interest Payment</Value></Eq></And><Leq><FieldRef Name='Transaction_x0020_Date'/><Value Type='DateTime' IncludeTimevаlue='FALSE'>"+date_to_str(ACCR_DATE, 'iso')+"</Value></Leq></And></Where><OrderBy><FieldRef Name='Transaction_x0020_Date' Ascending='FALSE'/></OrderBy></Query></View>");
                                                       var itms = lst.getItems(cq);
                                                       ctx.load(itms, 'Include(Transaction_x0020_Date)');
                                                       ctx.###cuteQueryAsync(
                                                           functi0n() {
                                                               var itm = itms.getItemAtIndex(0);
                                                               var exch_rate_date = itm.get_item('Transaction_x0020_Date');
                                                               (functi0n() {
                                                                   var ctx = new SP.ClientContext('/sites/accounting');
                                                                   var lst = ctx.get_web().get_lists().getByTitle('Official NBG Rates');
                                                                   var cq = new SP.CamlQuery();
                                                                   cq.set_viewXml("<View><Query><Where><Eq><FieldRef Name='Date' IncludeTimevаlue='FALSE'/><Value Type='DateTime'>"+date_to_str(exch_rate_date, 'iso')+"</Value></Eq></Where></Query></View>");
                                                                   var itms = lst.getItems(cq);
                                                                   ctx.load(itms, 'Include(USD)');
                                                                   ctx.###cuteQueryAsync(
                                                                       functi0n() {
                                                                           var itm = itms.getItemAtIndex(0);
                                                                           var exchange_rate = itm.get_item('USD');
                                                                           var memo = accr_type === 'Compounded 365' ? '=' + int_calc_base + '*(' + rate_gross + '/365)' : '=' + int_calc_base + '*(' + rate_gross + '/12)/' + date_to_str(next_pmt_date, 'dd-mm-yyyy') + '-' + date_to_str(prev_pmt_date, 'dd-mm-yyyy');
                                                                           add_int_ledger_item([loan,investor_name_geo,investor_name_eng,ACCR_DATE,'Interest Accrual',currency,int_charge,memo,tr_code,exchange_rate,int_charge * exchange_rate]);
                                                                       },
                                                                       on_fail
                                                                   );
                                                               })();
                                                           },
                                                           on_fail
                                                       );
                                                   })();
                                               } else {
                                                   if (ACCR_DATE_EXCHANGE_RATE === 0) {
                                                       (functi0n() {
                                                           var ctx = new SP.ClientContext('/sites/accounting');
                                                           var lst = ctx.get_web().get_lists().getByTitle('Official NBG Rates');
                                                           var cq = new SP.CamlQuery();
                                                           cq.set_viewXml("<View><Query><Where><Eq><FieldRef Name='Date' IncludeTimevаlue='FALSE'/><Value Type='DateTime'>"+date_to_str(ACCR_DATE, 'iso')+"</Value></Eq></Where></Query></View>");
                                                           var itms = lst.getItems(cq);
                                                           ctx.load(itms, 'Include(USD)');
                                                           ctx.###cuteQueryAsync(
                                                               functi0n() {
                                                                   var itm = itms.getItemAtIndex(0);
                                                                   ACCR_DATE_EXCHANGE_RATE = itm.get_item('USD');
                                                                   var memo = accr_type === 'Compounded 365' ? '=' + int_calc_base + '*(' + rate_gross + '/365)' : '=' + int_calc_base + '*(' + rate_gross + '/12)/(' + date_to_str(next_pmt_date, 'dd-mm-yyyy') + ' - ' + date_to_str(prev_pmt_date, 'dd-mm-yyyy') + ')';
                                                                   add_int_ledger_item([loan,investor_name_geo,investor_name_eng,ACCR_DATE,'Interest Accrual',currency,int_charge,memo,tr_code,ACCR_DATE_EXCHANGE_RATE,int_charge * ACCR_DATE_EXCHANGE_RATE]);
                                                               },
                                                               on_fail
                                                           );
                                                       })();
                                                   } else {
                                                       var memo = accr_type === 'Compounded 365' ? '=' + int_calc_base + '*(' + rate_gross + '/365)' : '=' + int_calc_base + '*(' + rate_gross + '/12)/(' + date_to_str(next_pmt_date, 'dd-mm-yyyy') + ' - ' + date_to_str(prev_pmt_date, 'dd-mm-yyyy') + ')';
                                                       add_int_ledger_item([loan,investor_name_geo,investor_name_eng,ACCR_DATE,'Interest Accrual',currency,int_charge,memo,tr_code,ACCR_DATE_EXCHANGE_RATE,int_charge * ACCR_DATE_EXCHANGE_RATE]);
                                                   }
                                               }
                                           },
                                           on_fail
                                       );
                                   })();
                               } else {
                                   REMAINING_ITEMS -= 1;
                                   chk_rem_itms();
                               }
                           },
                           on_fail
                       );
                   })();
               } else {
                   REMAINING_ITEMS -= 1;
                   chk_rem_itms();
               }
           },
           on_fail
       );
   })();
}

functi0n run_AAE() {
   START_TIME = new Date();
   ACCR_DATE_EXCHANGE_RATE = 0;
   document.getElementById('passed_time').innerText = '';
   document.getElementById('proc_state').innerText = '';
   ACCR_DATE = to_date(document.getElementById('accr_date').value);
   if (ACCR_DATE && ACCR_DATE < new Date()) {
       document.getElementById('accr_btn').disabled = true;
       document.getElementById('proc_state').innerText = 'მიმდინარეობს, არ დახუროთ ბრაუზერის ფანჯარა დასრულებამდე!';
       var ctx = new SP.ClientContext(PARENT_SITE),
           lst = ctx.get_web().get_lists().getByTitle('Loans Received'),
           cq = new SP.CamlQuery.createAllItemsQuery(),
           itms = lst.getItems(cq);
       ctx.load(itms);
       ctx.###cuteQueryAsync(
           functi0n() {
               var i = REMAINING_ITEMS = itms.get_count();
               while (i--) {
                   set_daily_accr(itms.getItemAtIndex(i));
               }
           },
           on_fail
       );
   } else {
       document.getElementById('proc_state').innerHTML = '<span style="color: #cc6666;">თარიღის ფორმატი ან არასწორია ან არ არის მიმდინარე თარიღზე ნაკლები</span>';
   }
}


This post has been edited by RexxaR on 22 Aug 2019, 15:36
1 წევრი ათვალიერებს ამ თემას (1 სტუმარი და 0 უჩინარი წევრი)
0 წევრი:
Topic Options Pages: (50) « პირველი ... 48 49 [50]  გამოხმაურება · ახალი თემა · ახალი გამოკითხვა

 



ფორუმის სერვერების განთავსებას და ინტერნეტთან კავშირს უზრუნველყოფს: CLOUD9
[ Script Execution time: 0.0695 ]   [ 12 queries used ]   [ GZIP Disabled ]