Ajutor în xCode sau AppleScript

Salut,
Sunt vp unei asociații și printre îndatoriri se numără și asigurarea părții legislative. Asociația contractează diferiți artiști cu care trebuie să încheie diferite contracte. Am niște tipuri de contracte în pages care au prea multe variabile, voi vorbi despre contractul de prestări servicii pentru a mă exprima mai ușor.
În funcție de persoana, cauză și rezultat, contractul de prestări servicii are mici diferențe de la caz la caz. Adică, în cazul unui dramaturg acesta scrie o piesă de teatru, în cazul unui actor acesta joacă/interpretează, în cazul unui compozitor - compune etc. Contractele sunt în principiu cam aceeași chestie, doar că am conceput un contract imens care cuprinde toate posibilitățile și eu trebuie să le șterg pe fiecare în parte de fiecare dat. Adică, în cazul încheierii unui contract de prestări servicii cu un actor, trebuie să modific cuvintele să se înțeleagă că acesta interpretează un rol, și de aici încep variabilele: șterg toate clauzele ce conțin drepturile de autor, dacă reprezentația va fi în scop caritabil, dacă actorul este remunerat, cu cât, cum se face plata, pe ce perioadă, se plătesc repetițiile, pe scurt șterg/modific o mulțime de variabile.
Aș vrea să îmi fac un program în care să introduc datele personale, prestarea, etc. (toate celelalte variabile să fie butoane de tip pop-up și butoane „da/nu”) i-ar programul să-mi genereze automat documentul dorit și să-l pot trimite către print-are.
Știu că este o grămadă de muncă, dar sunt situații în care eu nu pot formula anumite contracte și atunci rămân colegele mele care nu au studii juridice și nici nu știu să utilizeze pages-ul măcar în mod decent. Pe lângă acest aspect, aș prefera să muncesc 30 de zile intensiv la acest program că apoi să-l pot utiliza liniștit următorii ani.
Are cineva idee de unde ar trebui să încep studierea xCode? Pe YouTube și google găsesc niște tutoriale pentru cum să creezi o anumită aplicație (să-ți ascundă toate ferestrele deschise sau alte aplicații prea basic)
Aș putea crea acest document în automator?

Edit: Am uitat să spun că mă interesează și păstrarea unor fonduri:)

E mișto chestia asta, fie și numai întrebarea în sine! Cîte variante posibile ai? actor, scenarist, lumini etc. Nu ar fi mai simplu un template pt fiecare categorie? Oricum tot acolo cred că ajungi, să definești cîmpurile și cuvintele pt fiecare model. Zic și eu…

Sunt foarte multe variabile la fiecare prestare. De exemplu dramaturgul poate solicita păstrarea denumirii sau ne poate lăsa să o modificăm; piesa scrisă de el poate fi jucată de un nr. infinit de ori sau de un anumit nr. de ori; poate fi remunerat o singură dată ori lunar ori pe nr. de reprezentații; poate să ne lase să montăm piesa scrisă de el în orice spațiu vrem sau numai în anumite spații; fiecare din aceste variabile are o mulțime de articole pe care le modifică în continuare contractului. Adică, când voi ajunge la capitolul „Plată”, iar am o mulțime de articole, în funcție de cum se face remunerarea.
Deși eu am formatul complet eu pierd 30-45 de min cu fiecare contract, și deoarece l-am citit de o multe ori mă concentrez foarte greu, citesc mecanic și am impresia că am uitat să șterg anumite clauze/reglementări care nu sunt cele care trebuie.

Nu sunt 100% sigur dar cred că ai putea face aplicația de care ai nevoie folosind AppleScript. Iar dacă am dreptate și merge atunci ar fi mult mai ușor decât cu Xcode.

Am citit un pic și despre AppleScript, dar cred că mi-am folosit toată atenția și răbdarea „bugetată” pe astăzi și mă chinui inutil acum.
Îți mulțumesc și voi reveni după cercetări:)

Salut, revin cu noi informații:
Am stat blocat 2 zile într-o prostie de cod în care nu înțelegeam ce greșesc, am citit o grămadă despre AppleScript și într-un final, în seara asta am deslușit misterul: dădeam comandă la Pages, dar nu dădeam comandă la body text-ul din interiorul Pages-ului…
Rezultate:
De când am aflat unde-i greșeala, în 2 ore am reușit să fac 4 pagini din documentul meu, astfel încât să îmi adapteze variabilele în funcție de nevoile mele.
În momentul de față AppleScript-ul mă întreabă tipul contractului pe care vrea să-l închei, deschide template-ul creat de mine în Pages cu contractul respectiv, îi dă număr contractului, îmi dă ferestre în care să scriu datele persoanelor cu care închei contractul și completează aceste date acolo unde trebuie, îmi scoate paragrafele de care nu am nevoie în funcție de întrebările la care trebuie să răspund.
Îmi pare rău că nu l-am folosit și înainte.
Amintesc că acum 3-4 zile nici nu știam bine ce e AppleScript, și acum sunt uimit de felul cum mă poate ajuta și de ușurința în care faci chestiile să meargă.
Dacă are cineva nedumeriri să întrebe aici și dacă știu să răspund, o fac cu cea mai mare plăcere.
Cred că poate fi schimbat și titlul topicului.
Mulțumesc mult Tudor pentru sugestie.

Nu faci un tutorial pas cu pas? Cred ne-ar fi util tuturor.

Cred că în 2-3 zile mă apuc de el. Mai întâi vreau să-mi termin treaba și apoi îl fac.
Între timp voi încerca să inserez data, pentru că nu reușesc nu știu din ce motiv, și trebuie să caut niște soluții pentru pop up button sau o alternativă. Apple script-ul nu permite crearea de ferestre cu mai mult de 3 butoane, sincer, cred că ar arătat destul de debusolant o fereastră cu 8 butoane:))
Revin cu precizări în 2-3 zile.

Păi nu e grabă, rezolvă tot, după aia scrii.

Salut,
Scuze că revin așa de greu, dar acum am avut un pic de timp și chef. Scuze.
Pentru cine vrea să se apuce de făcut un cod în applescript vreau să precizez faptul că un astfel de cod se scrie foarte ușor, problema pe care eu am întâmpinat-o este, în cazul meu cu o mulțime de variabile, trebuie să comunici cu foarte multe ferestre, fiecare variabilă fiind o fereastră nouă. Nu m-am chinuit foarte mult, dar nu am găsit ușor cum să adaug un buton de „back”. În cazul în care ai greșit ceva ori dai „cancel” (dacă ai pus un asemenea buton pe fiecare fereastră cu care interacționezi, ori dai stop din applescrip, ori mergi până la sfârșitul scriptului și corectezi manual documentul acolo unde ai greșit.
Din cauză că o variabilă poate modifica mai multe articole sau clauze în contractele create în acest fel, trebuia să aleg să o iau de la capăt.
Pentru că vreau ca contractele să nu fie făcute doar de mine, am ales să fac o interfață scriptului și așa am ajuns să învăț și un pic de xCode, care este într-adevăr un pic mai complex (un pic însemnând foarte puțin), dar și ușurința de lucru și satisfacția e mult mai mare. E important să înțelegi limbajul. În momentul de față am refăcut tot scriptul și interfața în ~6 ore și acum pot redacta un contract în ~3-4 minute, iar dacă cu aceeași persoană trebuie să închei 3-5 contracte diferite (cum se întâmplă de cele mai multe ori), le pot redacta în ~5 min. Cel mai mult pierzând la introducerea datelor de identificare, apoi variabilele sunt ori în check box-uri ori în butoane de tip popUp și e foarte ușor să o selectezi pe cea potrivită. În cazul în care trebuie să închei aceleași tipuri de contracte cu mai multe persoane (în cazul unui concert de operă trebuie să închei contract de prestare artistică și de cesiune a drepturilor conexe drepturilor de autor cu ~ 60 de persoane), setările rămân în interfață, eu trebuind să modific doar datele de identificare și eventual câteva variabile, dacă diferă ceva. Cred că mi-ar lua în jur de 15 min pentru încheierea a 3-5 tipuri de contracte cu 10 persoane. Sunt foarte încântat de reușită.
Ca să nu mai mănânc mult @ am să trec direct la subiect.
Am să limitez tot codul că să nu umplu aici topicul aiurea.
În applescript:
AppleScriptul funcționează cu „set” (setezi variabila), „return” răspunsul variabilei, „tell” (spui ce să facă)
pentru a seta o fereastră cu butoane trebuie să scrii următorul script:

set tipContract to display dialog "Ce fel de contract vrei să redactezi?" with title "Tip Contract" buttons {"Prestări artistice", "Confidențialitate", "Drepturi de autor"} default button "Prestări artistice"
---- codul va afișa o fereastră în care ai 3 butoane, cele puse între {} și între "".

set rasTipContract to button returned of result
---- codul preia butonul pe care utilizatorul l-a apăsat.

set rasTipContract to display dialog {"Ați selectat " & rasTipContract}
---- codul afișează o fereastră cu textul  dintre {"text" și răspunsul la butonului apăsat}.

set NrContract to display dialog "Acest contract are numărul" default answer "A000001" with title "Număr Contract" buttons {"Next"} default button "Next"
---- îmi setează variabila „NrContract" să îmi afișeze fereastra cu titlul „Număr Contract” cu textul "Acest contract are numărul" în care să introduc nr. contractului, cu răspuns predefinit „A0000001”, fereastră ce va avea butonul „next”, care va fi selectat.

În acest fel se poate continua cu câte variabile sunt necesare.

Aici am să explic funcția if (dacă).
Voi seta variabila Remuneratie că fereastră cu 2 butoane ( „Sumă” și „%”)
Voi seta rasRemuneratie ca răspuns al ferestrei precedente
În funcția „if” voi seta dacă butonul apăsat este „%”să îmi afișeze fereastra cu valoarea procentului cu care artistul va fi remunerat, răspunsul acesteia „rascodProcent, cu „else if” voi seta să îmi afișeze o fereastră în care să setez valoarea cu care artistul va fi remunerat și răspunsul acesteia „rascodSuma.

set Remuneratie to display dialog "Artistul va fi remunerat cu sumă fixă sau % din încasări" with title "Remunerație" buttons {"Sumă", "%"} -----> fereastră butoane
set rasRemuneratie to button returned of result -----> răspuns fereastră butoane
if rasRemuneratie = "%" then  -----> condiție dacă butonul apăsat este „%”
	set codProcent to display dialog "Care este procentul cu care Artistul va fi remunerat" default answer "" with title "Remunerație" buttons {"Next"} default button "Next" ----->fereastră  valoare procente
	set rascodProcent to result's text returned  ------>răspuns valoare procente
else if rasRemuneratie = "Sumă" then  ------> dacă butonul apăsat în fereastră este „sumă”
	set codSuma to display dialog "Care este suma cu care Artistul va fi remunerat" default answer "" with title "Remunerație" buttons {"Next"} default button "Next"  ----->fereastră  valoare sumă
	set rascodSuma to result's text returned ------> răspuns valoare sumă
end if

Mai jos scriptul spune aplicației pages să se deschidă, să creeze un document nou, după templates cu numele din interiorul “”, să activeze documentul, și să spună textului, să schimbe fiecare cuvânt care este „ codNrContract” din document deschis cu răspunsul variabilei NrContract

tell application "Pages"
	activate
	set thisDocument to ¬
		make new document with properties {document template:template "Contract Prestări Artistice"}
	tell thisDocument
		tell body text
			set (every word whose it = "codNrContract") to rasNrContract 
			if rasRemuneratie = "%" then
				set (every word whose it = "codProcent") to (rascodProcent & "%")
			else if rasRemuneratie = "Sumă" then
				set (every word whose it = "codSumăFixă") to (rascodSuma & "lei")
			end if
end tell
end tell

Cred că ați prins ideea. Pun mai jos scriptul așa cum trebuie adăuga în applescript pentru a funcționa:

set tipContract to display dialog "Ce fel de contract vrei să redactezi?" with title "Tip Contract" buttons {"Prestări artistice", "Confidențialitate", "Drepturi de autor"} default button "Prestări artistice" ------>fereastră butoane alege contract
set rasTipContract to button returned of result ------>răspundul din fereastra de alegere a tipului de contract
set rasTipContract to display dialog {"Ați selectat " & rasTipContract} ------> fereastră de informare a tipului de contract selectat
set NrContract to display dialog "Acest contract are numărul" default answer "A000001" with title "Număr Contract" buttons {"Next"} default button "Next" ------> fereastră de selectare numărului contractului
set rasNrContract to result's text returned ------> răspunsul care ferestrei anterioare
set Remuneratie to display dialog "Artistul va fi remunerat cu sumă fixă sau % din încasări" with title "Remunerație" buttons {"Sumă", "%"} -----> fereastră tip remunerație
set rasRemuneratie to button returned of result -----> răspunsul ferestrei tip remunerație
if rasRemuneratie = "%" then ----> condiția dacă răspunsul este „%”
	set codProcent to display dialog "Care este procentul cu care Artistul va fi remunerat" default answer "" with title "Remunerație" buttons {"Next"} default button "Next" ----> fereastră în care să introduci valoarea procentelor
	set rascodProcent to result's text returned -----> răspunsul cu valoarea procentelor
else if rasRemuneratie = "Sumă" then ----> condiția dacă răspunsul este „Sumă”
	set codSuma to display dialog "Care este suma cu care Artistul va fi remunerat" default answer "" with title "Remunerație" buttons {"Next"} default button "Next" ----> fereastră în care să introduci valoarea sumei
	set rascodSuma to result's text returned -----> răspunsul cu valoarea procentelor
end if ---> sfârșitul condiției.

tell application "Pages" ----> spune aplicației Pages
	activate ------> să se activeze
	set thisDocument to ¬
		make new document with properties {document template:template "Contract Prestări Artistice"} ------> crează variabila thisDocument și să creeze un nou document din template
	tell thisDocument -----> spune documentului
		tell body text ------> spune textului
			set (every word whose it = "codNrContract") to rasNrContract ---> să modifice ficare cuvând „codNrContract” cu răspunsul variabilei NrContract
			if rasRemuneratie = "%" then -----> dacă răspunsul variabilei remunereație este „%”
				set (every word whose it = "codProcent") to (rascodProcent & "%") ----> modifică cuvântul „codProcent” cu variabila „rascodProcent” și adaugă "%"
			else if rasRemuneratie = "Sumă" then
				set (every word whose it = "codSumăFixă") to (rascodSuma & "lei")
			end if
		end tell
	end tell
end tell

Dacă nu se descurcă cineva să scrie aici și dau și alte detalii. :slight_smile: baftă.
Dacă este interes vor reveni și cu xCode-ul dar acolo e mai complicat pentru că trebuie să introduc și imagini etc.
O seară frumoasă

1 Like

O, mulțumim, este un capitol frumos de programare.