You can subscribe to this list here.
2006 |
Jan
|
Feb
|
Mar
(46) |
Apr
(168) |
May
(117) |
Jun
(39) |
Jul
(42) |
Aug
(11) |
Sep
(66) |
Oct
(38) |
Nov
(62) |
Dec
(36) |
---|---|---|---|---|---|---|---|---|---|---|---|---|
2007 |
Jan
(25) |
Feb
(73) |
Mar
(97) |
Apr
(19) |
May
(15) |
Jun
(7) |
Jul
(5) |
Aug
(3) |
Sep
(7) |
Oct
(6) |
Nov
(15) |
Dec
(1) |
2008 |
Jan
(7) |
Feb
(23) |
Mar
(12) |
Apr
(19) |
May
(13) |
Jun
(9) |
Jul
(5) |
Aug
(6) |
Sep
(5) |
Oct
(15) |
Nov
(45) |
Dec
(17) |
2009 |
Jan
(28) |
Feb
(21) |
Mar
(73) |
Apr
(68) |
May
(23) |
Jun
(32) |
Jul
(12) |
Aug
(2) |
Sep
(7) |
Oct
(2) |
Nov
(6) |
Dec
|
2010 |
Jan
(35) |
Feb
(9) |
Mar
(50) |
Apr
(34) |
May
(10) |
Jun
(10) |
Jul
(2) |
Aug
(2) |
Sep
(14) |
Oct
(20) |
Nov
(3) |
Dec
(8) |
2011 |
Jan
(14) |
Feb
(1) |
Mar
(10) |
Apr
(2) |
May
(1) |
Jun
(2) |
Jul
|
Aug
(3) |
Sep
(1) |
Oct
|
Nov
(18) |
Dec
(28) |
2012 |
Jan
(12) |
Feb
(11) |
Mar
(4) |
Apr
(3) |
May
(4) |
Jun
(4) |
Jul
|
Aug
(2) |
Sep
(4) |
Oct
(4) |
Nov
|
Dec
(4) |
2013 |
Jan
(3) |
Feb
(3) |
Mar
|
Apr
(1) |
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
From: <si...@us...> - 2012-01-18 16:59:41
|
Revision: 2145 http://yaacs.svn.sourceforge.net/yaacs/?rev=2145&view=rev Author: sickpig Date: 2012-01-18 16:59:32 +0000 (Wed, 18 Jan 2012) Log Message: ----------- * FIX: display of quota checking table Modified Paths: -------------- branches/external-trunk/yaacs/admin.tcl branches/external-trunk/yadmin.tcl trunk/yaacs/admin.tcl trunk/yadmin.tcl Modified: branches/external-trunk/yaacs/admin.tcl =================================================================== --- branches/external-trunk/yaacs/admin.tcl 2012-01-18 14:39:13 UTC (rev 2144) +++ branches/external-trunk/yaacs/admin.tcl 2012-01-18 16:59:32 UTC (rev 2145) @@ -1390,8 +1390,8 @@ 3 { # quote genere-eta' return [::admin::quotaGenAge $db $pjname $samplet] } - 5 - - 6 { # quote studio + 4 - + 5 { # quote studio return [::admin::quotaStudy $db $pjname $samplet] } default { Modified: branches/external-trunk/yadmin.tcl =================================================================== --- branches/external-trunk/yadmin.tcl 2012-01-18 14:39:13 UTC (rev 2144) +++ branches/external-trunk/yadmin.tcl 2012-01-18 16:59:32 UTC (rev 2145) @@ -289,12 +289,12 @@ .mbar.mquota add cascade -label [mc "Study"] -menu .mbar.mquota.st -image "sex_age16x16" -compound left .mbar.mquota.st add command -image "arrow_up_green16x16" -label [mc "Done"] -compound left \ + -command {::yadmin::quotaCheck $db $::yadmin::pj 4} +.mbar.mquota.st add command -image "arrow_down_red16x16" -label [mc "Distance"] -compound left \ -command {::yadmin::quotaCheck $db $::yadmin::pj 5} -.mbar.mquota.st add command -image "arrow_down_red16x16" -label [mc "Distance"] -compound left \ - -command {::yadmin::quotaCheck $db $::yadmin::pj 6} .mbar.mquota add command -image "delete_table16x16" -label [mc "Unrespected quotas"] -compound left \ - -command {::yadmin::quotaCheck $db $::yadmin::pj 4} + -command {::yadmin::quotaCheck $db $::yadmin::pj 6} # bbtools menu definition @@ -5515,7 +5515,7 @@ set T($r,0) "$aq(description)" set T($r,done) $aq(done) set T($r,qty) $aq(qty) - if {$type == 5} { + if {$type == 4} { set T($r,1) "$aq(done) ($aq(qty))" } else { set T($r,1) "[expr $aq(qty) - $aq(done)] ($aq(qty))" Modified: trunk/yaacs/admin.tcl =================================================================== --- trunk/yaacs/admin.tcl 2012-01-18 14:39:13 UTC (rev 2144) +++ trunk/yaacs/admin.tcl 2012-01-18 16:59:32 UTC (rev 2145) @@ -1390,8 +1390,8 @@ 3 { # quote genere-eta' return [::admin::quotaGenAge $db $pjname $samplet] } - 5 - - 6 { # quote studio + 4 - + 5 { # quote studio return [::admin::quotaStudy $db $pjname $samplet] } default { Modified: trunk/yadmin.tcl =================================================================== --- trunk/yadmin.tcl 2012-01-18 14:39:13 UTC (rev 2144) +++ trunk/yadmin.tcl 2012-01-18 16:59:32 UTC (rev 2145) @@ -289,12 +289,12 @@ .mbar.mquota add cascade -label [mc "Study"] -menu .mbar.mquota.st -image "sex_age16x16" -compound left .mbar.mquota.st add command -image "arrow_up_green16x16" -label [mc "Done"] -compound left \ + -command {::yadmin::quotaCheck $db $::yadmin::pj 4} +.mbar.mquota.st add command -image "arrow_down_red16x16" -label [mc "Distance"] -compound left \ -command {::yadmin::quotaCheck $db $::yadmin::pj 5} -.mbar.mquota.st add command -image "arrow_down_red16x16" -label [mc "Distance"] -compound left \ - -command {::yadmin::quotaCheck $db $::yadmin::pj 6} .mbar.mquota add command -image "delete_table16x16" -label [mc "Unrespected quotas"] -compound left \ - -command {::yadmin::quotaCheck $db $::yadmin::pj 4} + -command {::yadmin::quotaCheck $db $::yadmin::pj 6} # bbtools menu definition @@ -5515,7 +5515,7 @@ set T($r,0) "$aq(description)" set T($r,done) $aq(done) set T($r,qty) $aq(qty) - if {$type == 5} { + if {$type == 4} { set T($r,1) "$aq(done) ($aq(qty))" } else { set T($r,1) "[expr $aq(qty) - $aq(done)] ($aq(qty))" This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <si...@us...> - 2012-01-18 14:39:19
|
Revision: 2144 http://yaacs.svn.sourceforge.net/yaacs/?rev=2144&view=rev Author: sickpig Date: 2012-01-18 14:39:13 +0000 (Wed, 18 Jan 2012) Log Message: ----------- * quick fix Modified Paths: -------------- branches/external-trunk/yaacs/admin.tcl trunk/yaacs/admin.tcl Modified: branches/external-trunk/yaacs/admin.tcl =================================================================== --- branches/external-trunk/yaacs/admin.tcl 2012-01-18 13:02:28 UTC (rev 2143) +++ branches/external-trunk/yaacs/admin.tcl 2012-01-18 14:39:13 UTC (rev 2144) @@ -1825,9 +1825,9 @@ # 3 -> view for liste with gen/eta quotas if {[::yadb::execl $db "CREATE OR REPLACE VIEW $dataPj(pjtable)_done as \ SELECT a.sex, b.min_age, c.label, count(*) AS done \ - FROM projects.respondents a, (SELECT DISTINCT min_age, max_age FROM $tab) b, $dataPj(pjtable)_theo c \ + FROM projects.respondents a, (SELECT DISTINCT min_age, max_age, sex FROM $tab) b, $dataPj(pjtable)_theo c \ WHERE ($year - a.byear) >= b.min_age AND ($year - a.byear) <= b.max_age \ - AND lower(a.sex) = lower(c.sex) + AND lower(a.sex) = lower(b.sex) AND a.proj = $idPj \ AND c.cod_prov = trunc(a.cod_com / 1000) \ GROUP BY a.sex, b.min_age, c.label"] == -1} { Modified: trunk/yaacs/admin.tcl =================================================================== --- trunk/yaacs/admin.tcl 2012-01-18 13:02:28 UTC (rev 2143) +++ trunk/yaacs/admin.tcl 2012-01-18 14:39:13 UTC (rev 2144) @@ -1825,9 +1825,9 @@ # 3 -> view for liste with gen/eta quotas if {[::yadb::execl $db "CREATE OR REPLACE VIEW $dataPj(pjtable)_done as \ SELECT a.sex, b.min_age, c.label, count(*) AS done \ - FROM projects.respondents a, (SELECT DISTINCT min_age, max_age FROM $tab) b, $dataPj(pjtable)_theo c \ + FROM projects.respondents a, (SELECT DISTINCT min_age, max_age, sex FROM $tab) b, $dataPj(pjtable)_theo c \ WHERE ($year - a.byear) >= b.min_age AND ($year - a.byear) <= b.max_age \ - AND lower(a.sex) = lower(c.sex) + AND lower(a.sex) = lower(b.sex) AND a.proj = $idPj \ AND c.cod_prov = trunc(a.cod_com / 1000) \ GROUP BY a.sex, b.min_age, c.label"] == -1} { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <si...@us...> - 2012-01-18 13:02:34
|
Revision: 2143 http://yaacs.svn.sourceforge.net/yaacs/?rev=2143&view=rev Author: sickpig Date: 2012-01-18 13:02:28 +0000 (Wed, 18 Jan 2012) Log Message: ----------- * FIX: remove a debug puts * FIX: fix an thino in samplign step definition Modified Paths: -------------- branches/external-trunk/yaacs/sample.tcl trunk/yaacs/sample.tcl Modified: branches/external-trunk/yaacs/sample.tcl =================================================================== --- branches/external-trunk/yaacs/sample.tcl 2012-01-18 11:55:09 UTC (rev 2142) +++ branches/external-trunk/yaacs/sample.tcl 2012-01-18 13:02:28 UTC (rev 2143) @@ -521,7 +521,7 @@ set inf [expr $i * $sample::SAMPLING_STEP] if {[expr ($totProv - $inf)] < $sample::SAMPLING_STEP} { - set sup [expr ($totProv - $inf) -1] + set sup [expr $totProv - 1] } else { set sup [expr (($i + 1) * $sample::SAMPLING_STEP) - 1] } @@ -541,8 +541,6 @@ } # do sampling on subset (provInf, provSup) - # REMOVE ME - puts "select sampling.sample_prov_capo($provInf,$provSup)" if {[::yadb::execl $db "select sampling.sample_prov_capo($provInf,$provSup)"] == -1} { ::yalog::error "fatal error on sampling" return -1 @@ -1304,7 +1302,7 @@ set inf [expr $i * $sample::SAMPLING_STEP] if {[expr ($totCod - $inf)] < $sample::SAMPLING_STEP} { - set sup [expr ($totCod - $inf) -1] + set sup [expr $totCod -1 ] } else { set sup [expr (($i + 1) * $sample::SAMPLING_STEP) - 1] } Modified: trunk/yaacs/sample.tcl =================================================================== --- trunk/yaacs/sample.tcl 2012-01-18 11:55:09 UTC (rev 2142) +++ trunk/yaacs/sample.tcl 2012-01-18 13:02:28 UTC (rev 2143) @@ -521,7 +521,7 @@ set inf [expr $i * $sample::SAMPLING_STEP] if {[expr ($totProv - $inf)] < $sample::SAMPLING_STEP} { - set sup [expr ($totProv - $inf) -1] + set sup [expr $totProv - 1] } else { set sup [expr (($i + 1) * $sample::SAMPLING_STEP) - 1] } @@ -541,8 +541,6 @@ } # do sampling on subset (provInf, provSup) - # REMOVE ME - puts "select sampling.sample_prov_capo($provInf,$provSup)" if {[::yadb::execl $db "select sampling.sample_prov_capo($provInf,$provSup)"] == -1} { ::yalog::error "fatal error on sampling" return -1 @@ -1304,7 +1302,7 @@ set inf [expr $i * $sample::SAMPLING_STEP] if {[expr ($totCod - $inf)] < $sample::SAMPLING_STEP} { - set sup [expr ($totCod - $inf) -1] + set sup [expr $totCod -1 ] } else { set sup [expr (($i + 1) * $sample::SAMPLING_STEP) - 1] } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <si...@us...> - 2012-01-18 11:55:19
|
Revision: 2142 http://yaacs.svn.sourceforge.net/yaacs/?rev=2142&view=rev Author: sickpig Date: 2012-01-18 11:55:09 +0000 (Wed, 18 Jan 2012) Log Message: ----------- * FIX: add matching filter also on sex field while defining <projects_name>_done VIEW otherwise we will count completed Is twice as much Modified Paths: -------------- branches/external-trunk/yaacs/admin.tcl trunk/yaacs/admin.tcl Modified: branches/external-trunk/yaacs/admin.tcl =================================================================== --- branches/external-trunk/yaacs/admin.tcl 2012-01-17 15:12:27 UTC (rev 2141) +++ branches/external-trunk/yaacs/admin.tcl 2012-01-18 11:55:09 UTC (rev 2142) @@ -1827,6 +1827,7 @@ SELECT a.sex, b.min_age, c.label, count(*) AS done \ FROM projects.respondents a, (SELECT DISTINCT min_age, max_age FROM $tab) b, $dataPj(pjtable)_theo c \ WHERE ($year - a.byear) >= b.min_age AND ($year - a.byear) <= b.max_age \ + AND lower(a.sex) = lower(c.sex) AND a.proj = $idPj \ AND c.cod_prov = trunc(a.cod_com / 1000) \ GROUP BY a.sex, b.min_age, c.label"] == -1} { @@ -1842,6 +1843,7 @@ SELECT a.sex, c.min_age, c.max_age, c.label, count(*) AS done FROM projects.respondents a, $dataPj(pjtable) b, $tab c WHERE ($year - a.byear) BETWEEN c.min_age AND c.max_age + AND lower(a.sex) = lower(c.sex) AND a.proj = $idPj AND a.rid = b.rid and a.cod_com = b.cod_com AND b.label = c.label Modified: trunk/yaacs/admin.tcl =================================================================== --- trunk/yaacs/admin.tcl 2012-01-17 15:12:27 UTC (rev 2141) +++ trunk/yaacs/admin.tcl 2012-01-18 11:55:09 UTC (rev 2142) @@ -1827,6 +1827,7 @@ SELECT a.sex, b.min_age, c.label, count(*) AS done \ FROM projects.respondents a, (SELECT DISTINCT min_age, max_age FROM $tab) b, $dataPj(pjtable)_theo c \ WHERE ($year - a.byear) >= b.min_age AND ($year - a.byear) <= b.max_age \ + AND lower(a.sex) = lower(c.sex) AND a.proj = $idPj \ AND c.cod_prov = trunc(a.cod_com / 1000) \ GROUP BY a.sex, b.min_age, c.label"] == -1} { @@ -1842,6 +1843,7 @@ SELECT a.sex, c.min_age, c.max_age, c.label, count(*) AS done FROM projects.respondents a, $dataPj(pjtable) b, $tab c WHERE ($year - a.byear) BETWEEN c.min_age AND c.max_age + AND lower(a.sex) = lower(c.sex) AND a.proj = $idPj AND a.rid = b.rid and a.cod_com = b.cod_com AND b.label = c.label This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <si...@us...> - 2012-01-17 15:12:40
|
Revision: 2141 http://yaacs.svn.sourceforge.net/yaacs/?rev=2141&view=rev Author: sickpig Date: 2012-01-17 15:12:27 +0000 (Tue, 17 Jan 2012) Log Message: ----------- * FIX: forgot to change sampling.panel_str_theo_gen_eta population in data.sql Modified Paths: -------------- branches/external-trunk/dbyaacs/data.sql trunk/dbyaacs/data.sql Modified: branches/external-trunk/dbyaacs/data.sql =================================================================== --- branches/external-trunk/dbyaacs/data.sql 2012-01-17 14:12:01 UTC (rev 2140) +++ branches/external-trunk/dbyaacs/data.sql 2012-01-17 15:12:27 UTC (rev 2141) @@ -16558,1294 +16558,1294 @@ -- -- Italian population strcture by age, sex and province -- -COPY sampling.panel_str_theo_gen_eta (cod_prov, sex, min_age, max_age, qty) FROM stdin; -31 F 65 180 1 -31 M 15 17 0 -31 M 18 29 1 -31 M 30 44 1 -31 M 45 45 1 -31 M 55 64 1 -31 M 65 180 1 -32 F 15 17 1 -32 F 18 29 1 -32 F 30 44 2 -32 F 45 45 1 -32 F 55 64 1 -32 F 65 180 1 -32 M 15 17 1 -32 M 18 29 1 -32 M 30 44 2 -32 M 45 45 1 -32 M 55 64 1 -32 M 65 180 2 -33 F 15 17 1 -33 F 18 29 1 -33 F 30 44 2 -33 F 45 45 1 -33 F 55 64 1 -33 F 65 180 2 -33 M 15 17 1 -33 M 18 29 1 -33 M 30 44 2 -33 M 45 45 1 -33 M 55 64 1 -33 M 65 180 2 -34 F 15 17 1 -34 F 18 29 2 -34 F 30 44 4 -34 F 45 45 2 -34 F 55 64 2 -34 F 65 180 2 -34 M 15 17 1 -34 M 18 29 2 -34 M 30 44 3 -34 M 45 45 2 -34 M 55 64 2 -34 M 65 180 3 -93 F 15 17 1 -93 F 18 29 1 -93 F 30 44 2 -93 F 45 45 1 -93 F 55 64 1 -93 F 65 180 2 -93 M 15 17 1 -93 M 18 29 1 -93 M 30 44 2 -93 M 45 45 1 -93 M 55 64 1 -93 M 65 180 2 -96 F 15 17 1 -96 F 18 29 1 -96 F 30 44 2 -96 F 45 45 1 -96 F 55 64 1 -96 F 65 180 1 -96 M 15 17 1 -96 M 18 29 1 -96 M 30 44 2 -96 M 45 45 1 -96 M 55 64 1 -96 M 65 180 2 -97 F 15 17 1 -97 F 18 29 1 -97 F 30 44 3 -97 F 45 45 1 -97 F 55 64 1 -97 F 65 180 2 -97 M 15 17 1 -97 M 18 29 1 -97 M 30 44 3 -97 M 45 45 1 -97 M 55 64 1 -97 M 65 180 3 -98 F 15 17 1 -98 F 18 29 1 -98 F 30 44 2 -98 F 45 45 1 -98 F 55 64 1 -98 F 65 180 1 -98 M 15 17 1 -98 M 18 29 1 -98 M 30 44 2 -98 M 45 45 1 -98 M 55 64 1 -98 M 65 180 2 -103 F 15 17 1 -103 F 18 29 1 -103 F 30 44 1 -103 F 45 45 1 -103 F 55 64 1 -103 F 65 180 1 -103 M 15 17 0 -103 M 18 29 1 -103 M 30 44 1 -103 M 45 45 1 -103 M 55 64 1 -103 M 65 180 1 -19 F 55 64 1 -19 F 65 180 2 -19 M 15 17 1 -19 M 18 29 1 -19 M 30 44 3 -19 M 45 45 1 -19 M 55 64 1 -19 M 65 180 3 -20 F 15 17 1 -20 F 18 29 2 -20 F 30 44 3 -20 F 45 45 2 -20 F 55 64 2 -20 F 65 180 2 -20 M 15 17 1 -20 M 18 29 2 -20 M 30 44 3 -20 M 45 45 2 -20 M 55 64 2 -20 M 65 180 3 -21 F 15 17 1 -21 F 18 29 2 -21 F 30 44 4 -21 F 45 45 2 -21 F 55 64 2 -21 F 65 180 3 -21 M 15 17 1 -21 M 18 29 2 -21 M 30 44 4 -21 M 45 45 2 -21 M 55 64 2 -21 M 65 180 4 -22 F 15 17 2 -22 F 18 29 2 -22 F 30 44 4 -22 F 45 45 2 -22 F 55 64 2 -22 F 65 180 3 -22 M 15 17 1 -22 M 18 29 2 -22 M 30 44 4 -22 M 45 45 2 -22 M 55 64 2 -22 M 65 180 4 -23 F 15 17 3 -23 F 18 29 4 -23 F 30 44 7 -23 F 45 45 4 -23 F 55 64 4 -23 F 65 180 5 -23 M 15 17 2 -23 M 18 29 4 -23 M 30 44 7 -23 M 45 45 4 -23 M 55 64 4 -23 M 65 180 7 -24 F 15 17 3 -24 F 18 29 4 -24 F 30 44 7 -24 F 45 45 4 -24 F 55 64 3 -24 F 65 180 5 -24 M 15 17 2 -24 M 18 29 3 -24 M 30 44 7 -24 M 45 45 4 -24 M 55 64 4 -24 M 65 180 7 -25 F 15 17 1 -25 F 18 29 1 -25 F 30 44 2 -25 F 45 45 1 -25 F 55 64 1 -25 F 65 180 1 -25 M 15 17 1 -25 M 18 29 1 -25 M 30 44 2 -25 M 45 45 1 -25 M 55 64 1 -25 M 65 180 2 -26 F 15 17 3 -26 F 18 29 4 -26 F 30 44 7 -26 F 45 45 4 -26 F 55 64 3 -26 F 65 180 5 -26 M 15 17 2 -26 M 18 29 3 -26 M 30 44 7 -26 M 45 45 4 -26 M 55 64 4 -26 M 65 180 7 -27 F 15 17 3 -27 F 18 29 4 -27 F 30 44 7 -27 F 45 45 4 -27 F 55 64 3 -27 F 65 180 5 -27 M 15 17 2 -27 M 18 29 3 -27 M 30 44 7 -27 M 45 45 4 -27 M 55 64 4 -27 M 65 180 7 -28 F 15 17 3 -28 F 18 29 4 -28 F 30 44 7 -28 F 45 45 4 -28 F 55 64 4 -28 F 65 180 5 -28 M 15 17 3 -28 M 18 29 4 -28 M 30 44 7 -28 M 45 45 4 -28 M 55 64 4 -28 M 65 180 7 -29 F 15 17 1 -29 F 18 29 1 -29 F 30 44 2 -29 F 45 45 1 -29 F 55 64 1 -29 F 65 180 1 -29 M 15 17 1 -29 M 18 29 1 -29 M 30 44 2 -29 M 45 45 1 -29 M 55 64 1 -29 M 65 180 2 -30 F 15 17 2 -30 F 18 29 2 -30 F 30 44 5 -30 F 45 45 2 -30 F 55 64 2 -30 F 65 180 3 -30 M 15 17 2 -30 M 18 29 2 -30 M 30 44 4 -30 M 45 45 2 -30 M 55 64 2 -30 M 65 180 4 -31 F 15 17 0 -31 F 18 29 1 -31 F 30 44 1 -31 F 45 45 1 -31 F 55 64 1 -5 F 45 45 1 -5 F 55 64 1 -5 F 65 180 1 -5 M 15 17 1 -5 M 18 29 1 -5 M 30 44 2 -5 M 45 45 1 -5 M 55 64 1 -5 M 65 180 2 -6 F 15 17 1 -6 F 18 29 2 -6 F 30 44 4 -6 F 45 45 2 -6 F 55 64 2 -6 F 65 180 2 -6 M 15 17 1 -6 M 18 29 2 -6 M 30 44 3 -6 M 45 45 2 -6 M 55 64 2 -6 M 65 180 3 -7 F 15 17 0 -7 F 18 29 0 -7 F 30 44 1 -7 F 45 45 1 -7 F 55 64 0 -7 F 65 180 1 -7 M 15 17 0 -7 M 18 29 0 -7 M 30 44 1 -7 M 45 45 0 -7 M 55 64 0 -7 M 65 180 1 -8 F 15 17 1 -8 F 18 29 1 -8 F 30 44 2 -8 F 45 45 1 -8 F 55 64 1 -8 F 65 180 1 -8 M 15 17 1 -8 M 18 29 1 -8 M 30 44 2 -8 M 45 45 1 -8 M 55 64 1 -8 M 65 180 2 -9 F 15 17 1 -9 F 18 29 1 -9 F 30 44 2 -9 F 45 45 1 -9 F 55 64 1 -9 F 65 180 2 -9 M 15 17 1 -9 M 18 29 1 -9 M 30 44 2 -9 M 45 45 1 -9 M 55 64 1 -9 M 65 180 2 -12 F 15 17 3 -12 F 18 29 4 -12 F 30 44 7 -12 F 45 45 4 -12 F 55 64 3 -12 F 65 180 5 -12 M 15 17 2 -12 M 18 29 3 -12 M 30 44 7 -12 M 45 45 4 -12 M 55 64 4 -12 M 65 180 7 -13 F 15 17 2 -13 F 18 29 2 -13 F 30 44 5 -13 F 45 45 2 -13 F 55 64 2 -13 F 65 180 3 -13 M 15 17 2 -13 M 18 29 2 -13 M 30 44 4 -13 M 45 45 2 -13 M 55 64 2 -13 M 65 180 4 -14 F 15 17 1 -14 F 18 29 1 -14 F 30 44 2 -14 F 45 45 1 -14 F 55 64 1 -14 F 65 180 1 -14 M 15 17 1 -14 M 18 29 1 -14 M 30 44 1 -14 M 45 45 1 -14 M 55 64 1 -14 M 65 180 1 -15 F 15 17 12 -15 F 18 29 17 -15 F 30 44 33 -15 F 45 45 17 -15 F 55 64 16 -15 F 65 180 21 -15 M 15 17 11 -15 M 18 29 16 -15 M 30 44 30 -15 M 45 45 17 -15 M 55 64 16 -15 M 65 180 30 -16 F 15 17 3 -16 F 18 29 4 -16 F 30 44 9 -16 F 45 45 5 -16 F 55 64 4 -16 F 65 180 6 -16 M 15 17 3 -16 M 18 29 4 -16 M 30 44 8 -16 M 45 45 4 -16 M 55 64 4 -16 M 65 180 8 -17 F 15 17 4 -17 F 18 29 5 -17 F 30 44 10 -17 F 45 45 5 -17 F 55 64 5 -17 F 65 180 6 -17 M 15 17 3 -17 M 18 29 5 -17 M 30 44 9 -17 M 45 45 5 -17 M 55 64 5 -17 M 65 180 9 -18 F 15 17 2 -18 F 18 29 2 -18 F 30 44 4 -18 F 45 45 2 -18 F 55 64 2 -18 F 65 180 3 -18 M 15 17 1 -18 M 18 29 2 -18 M 30 44 4 -18 M 45 45 2 -18 M 55 64 2 -18 M 65 180 4 -19 F 15 17 1 -19 F 18 29 1 -19 F 30 44 3 -19 F 45 45 2 -92 F 30 44 4 -92 F 45 45 2 -92 F 55 64 2 -92 F 65 180 3 -92 M 15 17 2 -92 M 18 29 3 -92 M 30 44 4 -92 M 45 45 3 -92 M 55 64 2 -92 M 65 180 4 -94 F 15 17 0 -94 F 18 29 0 -94 F 30 44 1 -94 F 45 45 0 -94 F 55 64 0 -94 F 65 180 0 -94 M 15 17 0 -94 M 18 29 0 -94 M 30 44 1 -94 M 45 45 0 -94 M 55 64 0 -94 M 65 180 1 -95 F 15 17 1 -95 F 18 29 1 -95 F 30 44 1 -95 F 45 45 1 -95 F 55 64 1 -95 F 65 180 1 -95 M 15 17 1 -95 M 18 29 1 -95 M 30 44 1 -95 M 45 45 1 -95 M 55 64 1 -95 M 65 180 1 -101 F 15 17 1 -101 F 18 29 1 -101 F 30 44 1 -101 F 45 45 1 -101 F 55 64 1 -101 F 65 180 1 -101 M 15 17 1 -101 M 18 29 1 -101 M 30 44 1 -101 M 45 45 1 -101 M 55 64 1 -101 M 65 180 1 -102 F 15 17 1 -102 F 18 29 1 -102 F 30 44 1 -102 F 45 45 1 -102 F 55 64 1 -102 F 65 180 1 -102 M 15 17 1 -102 M 18 29 1 -102 M 30 44 1 -102 M 45 45 1 -102 M 55 64 1 -102 M 65 180 1 -104 F 15 17 1 -104 F 18 29 1 -104 F 30 44 1 -104 F 45 45 1 -104 F 55 64 1 -104 F 65 180 1 -104 M 15 17 1 -104 M 18 29 1 -104 M 30 44 1 -104 M 45 45 1 -104 M 55 64 1 -104 M 65 180 1 -106 F 15 17 0 -106 F 18 29 0 -106 F 30 44 1 -106 F 45 45 0 -106 F 55 64 0 -106 F 65 180 0 -106 M 15 17 0 -106 M 18 29 0 -106 M 30 44 1 -106 M 45 45 0 -106 M 55 64 0 -106 M 65 180 1 -107 F 15 17 1 -107 F 18 29 1 -107 F 30 44 1 -107 F 45 45 1 -107 F 55 64 1 -107 F 65 180 1 -107 M 15 17 1 -107 M 18 29 1 -107 M 30 44 1 -107 M 45 45 1 -107 M 55 64 1 -107 M 65 180 1 -1 F 15 17 7 -1 F 18 29 10 -1 F 30 44 19 -1 F 45 45 10 -1 F 55 64 9 -1 F 65 180 12 -1 M 15 17 6 -1 M 18 29 9 -1 M 30 44 18 -1 M 45 45 10 -1 M 55 64 10 -1 M 65 180 18 -2 F 15 17 1 -2 F 18 29 1 -2 F 30 44 2 -2 F 45 45 1 -2 F 55 64 1 -2 F 65 180 1 -2 M 15 17 1 -2 M 18 29 1 -2 M 30 44 1 -2 M 45 45 1 -2 M 55 64 1 -2 M 65 180 1 -3 F 15 17 1 -3 F 18 29 1 -3 F 30 44 3 -3 F 45 45 2 -3 F 55 64 1 -3 F 65 180 2 -3 M 15 17 1 -3 M 18 29 1 -3 M 30 44 3 -3 M 45 45 1 -3 M 55 64 1 -3 M 65 180 3 -4 F 15 17 2 -4 F 18 29 2 -4 F 30 44 5 -4 F 45 45 3 -4 F 55 64 2 -4 F 65 180 3 -4 M 15 17 2 -4 M 18 29 2 -4 M 30 44 4 -4 M 45 45 2 -4 M 55 64 2 -4 M 65 180 5 -5 F 15 17 1 -5 F 18 29 1 -5 F 30 44 2 -79 F 18 29 2 -79 F 30 44 3 -79 F 45 45 2 -79 F 55 64 1 -79 F 65 180 2 -79 M 15 17 2 -79 M 18 29 2 -79 M 30 44 3 -79 M 45 45 2 -79 M 55 64 1 -79 M 65 180 2 -80 F 15 17 2 -80 F 18 29 3 -80 F 30 44 4 -80 F 45 45 2 -80 F 55 64 2 -80 F 65 180 3 -80 M 15 17 2 -80 M 18 29 3 -80 M 30 44 4 -80 M 45 45 3 -80 M 55 64 2 -80 M 65 180 4 -81 F 15 17 2 -81 F 18 29 2 -81 F 30 44 3 -81 F 45 45 2 -81 F 55 64 1 -81 F 65 180 2 -81 M 15 17 2 -81 M 18 29 2 -81 M 30 44 3 -81 M 45 45 2 -81 M 55 64 2 -81 M 65 180 3 -82 F 15 17 5 -82 F 18 29 6 -82 F 30 44 10 -82 F 45 45 5 -82 F 55 64 4 -82 F 65 180 6 -82 M 15 17 5 -82 M 18 29 6 -82 M 30 44 10 -82 M 45 45 6 -82 M 55 64 5 -82 M 65 180 8 -83 F 15 17 3 -83 F 18 29 3 -83 F 30 44 5 -83 F 45 45 3 -83 F 55 64 2 -83 F 65 180 3 -83 M 15 17 3 -83 M 18 29 3 -83 M 30 44 5 -83 M 45 45 3 -83 M 55 64 2 -83 M 65 180 4 -84 F 15 17 2 -84 F 18 29 2 -84 F 30 44 4 -84 F 45 45 2 -84 F 55 64 2 -84 F 65 180 2 -84 M 15 17 2 -84 M 18 29 2 -84 M 30 44 4 -84 M 45 45 2 -84 M 55 64 2 -84 M 65 180 3 -85 F 15 17 1 -85 F 18 29 1 -85 F 30 44 2 -85 F 45 45 1 -85 F 55 64 1 -85 F 65 180 1 -85 M 15 17 1 -85 M 18 29 1 -85 M 30 44 2 -85 M 45 45 1 -85 M 55 64 1 -85 M 65 180 2 -86 F 15 17 1 -86 F 18 29 1 -86 F 30 44 1 -86 F 45 45 1 -86 F 55 64 1 -86 F 65 180 1 -86 M 15 17 1 -86 M 18 29 1 -86 M 30 44 1 -86 M 45 45 1 -86 M 55 64 1 -86 M 65 180 1 -87 F 15 17 5 -87 F 18 29 5 -87 F 30 44 8 -87 F 45 45 5 -87 F 55 64 4 -87 F 65 180 5 -87 M 15 17 4 -87 M 18 29 5 -87 M 30 44 8 -87 M 45 45 5 -87 M 55 64 4 -87 M 65 180 7 -88 F 15 17 1 -88 F 18 29 1 -88 F 30 44 2 -88 F 45 45 1 -88 F 55 64 1 -88 F 65 180 1 -88 M 15 17 1 -88 M 18 29 1 -88 M 30 44 2 -88 M 45 45 1 -88 M 55 64 1 -88 M 65 180 2 -89 F 15 17 2 -89 F 18 29 2 -89 F 30 44 3 -89 F 45 45 2 -89 F 55 64 1 -89 F 65 180 2 -89 M 15 17 2 -89 M 18 29 2 -89 M 30 44 3 -89 M 45 45 2 -89 M 55 64 2 -89 M 65 180 3 -90 F 15 17 1 -90 F 18 29 2 -90 F 30 44 3 -90 F 45 45 1 -90 F 55 64 1 -90 F 65 180 2 -90 M 15 17 1 -90 M 18 29 2 -90 M 30 44 3 -90 M 45 45 2 -90 M 55 64 1 -90 M 65 180 2 -92 F 15 17 2 -92 F 18 29 3 -63 F 15 17 13 -63 F 18 29 16 -63 F 30 44 24 -63 F 45 45 13 -63 F 55 64 11 -63 F 65 180 15 -63 M 15 17 13 -63 M 18 29 15 -63 M 30 44 24 -63 M 45 45 14 -63 M 55 64 12 -63 M 65 180 20 -65 F 15 17 5 -65 F 18 29 6 -65 F 30 44 8 -65 F 45 45 5 -65 F 55 64 4 -65 F 65 180 5 -65 M 15 17 4 -65 M 18 29 5 -65 M 30 44 8 -65 M 45 45 5 -65 M 55 64 4 -65 M 65 180 7 -66 F 15 17 1 -66 F 18 29 1 -66 F 30 44 2 -66 F 45 45 1 -66 F 55 64 1 -66 F 65 180 1 -66 M 15 17 1 -66 M 18 29 1 -66 M 30 44 2 -66 M 45 45 1 -66 M 55 64 1 -66 M 65 180 2 -67 F 15 17 1 -67 F 18 29 1 -67 F 30 44 2 -67 F 45 45 1 -67 F 55 64 1 -67 F 65 180 1 -67 M 15 17 1 -67 M 18 29 1 -67 M 30 44 2 -67 M 45 45 1 -67 M 55 64 1 -67 M 65 180 2 -68 F 15 17 1 -68 F 18 29 2 -68 F 30 44 2 -68 F 45 45 1 -68 F 55 64 1 -68 F 65 180 2 -68 M 15 17 1 -68 M 18 29 2 -68 M 30 44 2 -68 M 45 45 1 -68 M 55 64 1 -68 M 65 180 2 -69 F 15 17 2 -69 F 18 29 2 -69 F 30 44 3 -69 F 45 45 2 -69 F 55 64 1 -69 F 65 180 2 -69 M 15 17 2 -69 M 18 29 2 -69 M 30 44 3 -69 M 45 45 2 -69 M 55 64 1 -69 M 65 180 3 -71 F 15 17 3 -71 F 18 29 4 -71 F 30 44 5 -71 F 45 45 3 -71 F 55 64 2 -71 F 65 180 3 -71 M 15 17 3 -71 M 18 29 3 -71 M 30 44 5 -71 M 45 45 3 -71 M 55 64 3 -71 M 65 180 5 -72 F 15 17 7 -72 F 18 29 8 -72 F 30 44 12 -72 F 45 45 7 -72 F 55 64 6 -72 F 65 180 8 -72 M 15 17 6 -72 M 18 29 8 -72 M 30 44 12 -72 M 45 45 7 -72 M 55 64 6 -72 M 65 180 10 -73 F 15 17 3 -73 F 18 29 3 -73 F 30 44 5 -73 F 45 45 2 -73 F 55 64 2 -73 F 65 180 3 -73 M 15 17 2 -73 M 18 29 3 -73 M 30 44 5 -73 M 45 45 3 -73 M 55 64 2 -73 M 65 180 4 -74 F 15 17 2 -74 F 18 29 2 -74 F 30 44 3 -74 F 45 45 2 -74 F 55 64 1 -74 F 65 180 2 -74 M 15 17 2 -74 M 18 29 2 -74 M 30 44 3 -74 M 45 45 2 -74 M 55 64 1 -74 M 65 180 3 -75 F 15 17 3 -75 F 18 29 4 -75 F 30 44 6 -75 F 45 45 3 -75 F 55 64 3 -75 F 65 180 4 -75 M 15 17 3 -75 M 18 29 4 -75 M 30 44 6 -75 M 45 45 4 -75 M 55 64 3 -75 M 65 180 5 -78 F 15 17 3 -78 F 18 29 4 -78 F 30 44 6 -78 F 45 45 3 -78 F 55 64 3 -78 F 65 180 4 -78 M 15 17 3 -78 M 18 29 4 -78 M 30 44 6 -78 M 45 45 3 -78 M 55 64 3 -78 M 65 180 5 -79 F 15 17 2 -100 M 65 180 2 -105 F 15 17 0 -105 F 18 29 0 -105 F 30 44 1 -105 F 45 45 0 -105 F 55 64 0 -105 F 65 180 0 -105 M 15 17 0 -105 M 18 29 0 -105 M 30 44 0 -105 M 45 45 0 -105 M 55 64 0 -105 M 65 180 1 -43 F 15 17 1 -43 F 18 29 2 -43 F 30 44 3 -43 F 45 45 1 -43 F 55 64 1 -43 F 65 180 2 -43 M 15 17 1 -43 M 18 29 2 -43 M 30 44 3 -43 M 45 45 2 -43 M 55 64 1 -43 M 65 180 2 -44 F 15 17 2 -44 F 18 29 2 -44 F 30 44 3 -44 F 45 45 2 -44 F 55 64 1 -44 F 65 180 2 -44 M 15 17 2 -44 M 18 29 2 -44 M 30 44 3 -44 M 45 45 2 -44 M 55 64 1 -44 M 65 180 2 -46 F 15 17 2 -46 F 18 29 2 -46 F 30 44 3 -46 F 45 45 2 -46 F 55 64 1 -46 F 65 180 2 -46 M 15 17 2 -46 M 18 29 2 -46 M 30 44 3 -46 M 45 45 2 -46 M 55 64 1 -46 M 65 180 2 -53 F 15 17 1 -53 F 18 29 1 -53 F 30 44 2 -53 F 45 45 1 -53 F 55 64 1 -53 F 65 180 1 -53 M 15 17 1 -53 M 18 29 1 -53 M 30 44 2 -53 M 45 45 1 -53 M 55 64 1 -53 M 65 180 1 -56 F 15 17 1 -56 F 18 29 2 -56 F 30 44 2 -56 F 45 45 1 -56 F 55 64 1 -56 F 65 180 2 -56 M 15 17 1 -56 M 18 29 2 -56 M 30 44 2 -56 M 45 45 1 -56 M 55 64 1 -56 M 65 180 2 -57 F 15 17 1 -57 F 18 29 1 -57 F 30 44 1 -57 F 45 45 1 -57 F 55 64 1 -57 F 65 180 1 -57 M 15 17 1 -57 M 18 29 1 -57 M 30 44 1 -57 M 45 45 1 -57 M 55 64 1 -57 M 65 180 1 -58 F 15 17 16 -58 F 18 29 19 -58 F 30 44 29 -58 F 45 45 16 -58 F 55 64 13 -58 F 65 180 18 -58 M 15 17 15 -58 M 18 29 19 -58 M 30 44 29 -58 M 45 45 18 -58 M 55 64 14 -58 M 65 180 25 -59 F 15 17 2 -59 F 18 29 3 -59 F 30 44 4 -59 F 45 45 2 -59 F 55 64 2 -59 F 65 180 3 -59 M 15 17 2 -59 M 18 29 3 -59 M 30 44 4 -59 M 45 45 2 -59 M 55 64 2 -59 M 65 180 3 -60 F 15 17 2 -60 F 18 29 2 -60 F 30 44 4 -60 F 45 45 2 -60 F 55 64 2 -60 F 65 180 2 -60 M 15 17 2 -60 M 18 29 2 -60 M 30 44 4 -60 M 45 45 2 -60 M 55 64 2 -60 M 65 180 3 -61 F 15 17 4 -61 F 18 29 4 -61 F 30 44 7 -61 F 45 45 4 -61 F 55 64 3 -61 F 65 180 4 -61 M 15 17 4 -61 M 18 29 4 -61 M 30 44 7 -61 M 45 45 4 -61 M 55 64 3 -61 M 65 180 6 -62 F 15 17 1 -62 F 18 29 1 -62 F 30 44 2 -62 F 45 45 1 -62 F 55 64 1 -62 F 65 180 1 -62 M 15 17 1 -62 M 18 29 1 -62 M 30 44 2 -62 M 45 45 1 -62 M 55 64 1 -62 M 65 180 2 -49 M 55 64 1 -49 M 65 180 3 -50 F 15 17 1 -50 F 18 29 2 -50 F 30 44 3 -50 F 45 45 2 -50 F 55 64 2 -50 F 65 180 2 -50 M 15 17 1 -50 M 18 29 2 -50 M 30 44 3 -50 M 45 45 2 -50 M 55 64 2 -50 M 65 180 3 -51 F 15 17 1 -51 F 18 29 1 -51 F 30 44 3 -51 F 45 45 1 -51 F 55 64 1 -51 F 65 180 2 -51 M 15 17 1 -51 M 18 29 1 -51 M 30 44 3 -51 M 45 45 1 -51 M 55 64 1 -51 M 65 180 3 -52 F 15 17 1 -52 F 18 29 1 -52 F 30 44 2 -52 F 45 45 1 -52 F 55 64 1 -52 F 65 180 2 -52 M 15 17 1 -52 M 18 29 1 -52 M 30 44 2 -52 M 45 45 1 -52 M 55 64 1 -52 M 65 180 2 -54 F 15 17 2 -54 F 18 29 3 -54 F 30 44 5 -54 F 45 45 3 -54 F 55 64 3 -54 F 65 180 4 -54 M 15 17 2 -54 M 18 29 3 -54 M 30 44 5 -54 M 45 45 3 -54 M 55 64 3 -54 M 65 180 5 -55 F 15 17 1 -55 F 18 29 1 -55 F 30 44 2 -55 F 45 45 1 -55 F 55 64 1 -55 F 65 180 1 -55 M 15 17 1 -55 M 18 29 1 -55 M 30 44 2 -55 M 45 45 1 -55 M 55 64 1 -55 M 65 180 2 -64 F 15 17 1 -64 F 18 29 2 -64 F 30 44 3 -64 F 45 45 2 -64 F 55 64 2 -64 F 65 180 3 -64 M 15 17 1 -64 M 18 29 2 -64 M 30 44 3 -64 M 45 45 2 -64 M 55 64 2 -64 M 65 180 4 -70 F 15 17 1 -70 F 18 29 1 -70 F 30 44 2 -70 F 45 45 1 -70 F 55 64 1 -70 F 65 180 1 -70 M 15 17 1 -70 M 18 29 1 -70 M 30 44 2 -70 M 45 45 1 -70 M 55 64 1 -70 M 65 180 2 -76 F 15 17 1 -76 F 18 29 2 -76 F 30 44 3 -76 F 45 45 2 -76 F 55 64 2 -76 F 65 180 2 -76 M 15 17 1 -76 M 18 29 2 -76 M 30 44 3 -76 M 45 45 2 -76 M 55 64 2 -76 M 65 180 3 -77 F 15 17 1 -77 F 18 29 1 -77 F 30 44 2 -77 F 45 45 1 -77 F 55 64 1 -77 F 65 180 1 -77 M 15 17 1 -77 M 18 29 1 -77 M 30 44 2 -77 M 45 45 1 -77 M 55 64 1 -77 M 65 180 2 -91 F 15 17 0 -91 F 18 29 1 -91 F 30 44 1 -91 F 45 45 1 -91 F 55 64 1 -91 F 65 180 1 -91 M 15 17 0 -91 M 18 29 1 -91 M 30 44 1 -91 M 45 45 1 -91 M 55 64 1 -91 M 65 180 1 -99 F 15 17 1 -99 F 18 29 1 -99 F 30 44 2 -99 F 45 45 1 -99 F 55 64 1 -99 F 65 180 2 -99 M 15 17 1 -99 M 18 29 1 -99 M 30 44 2 -99 M 45 45 1 -99 M 55 64 1 -99 M 65 180 2 -100 F 15 17 1 -100 F 18 29 1 -100 F 30 44 2 -100 F 45 45 1 -100 F 55 64 1 -100 F 65 180 2 -100 M 15 17 1 -100 M 18 29 1 -100 M 30 44 2 -100 M 45 45 1 -100 M 55 64 1 -11 M 45 45 1 -11 M 55 64 1 -11 M 65 180 2 -35 F 15 17 1 -35 F 18 29 2 -35 F 30 44 4 -35 F 45 45 2 -35 F 55 64 2 -35 F 65 180 3 -35 M 15 17 1 -35 M 18 29 2 -35 M 30 44 4 -35 M 45 45 2 -35 M 55 64 2 -35 M 65 180 4 -36 F 15 17 2 -36 F 18 29 3 -36 F 30 44 5 -36 F 45 45 3 -36 F 55 64 3 -36 F 65 180 4 -36 M 15 17 2 -36 M 18 29 3 -36 M 30 44 5 -36 M 45 45 3 -36 M 55 64 3 -36 M 65 180 6 -37 F 15 17 3 -37 F 18 29 4 -37 F 30 44 7 -37 F 45 45 4 -37 F 55 64 4 -37 F 65 180 6 -37 M 15 17 3 -37 M 18 29 4 -37 M 30 44 7 -37 M 45 45 4 -37 M 55 64 4 -37 M 65 180 8 -38 F 15 17 1 -38 F 18 29 1 -38 F 30 44 3 -38 F 45 45 1 -38 F 55 64 1 -38 F 65 180 2 -38 M 15 17 1 -38 M 18 29 1 -38 M 30 44 3 -38 M 45 45 1 -38 M 55 64 1 -38 M 65 180 3 -39 F 15 17 1 -39 F 18 29 2 -39 F 30 44 3 -39 F 45 45 2 -39 F 55 64 1 -39 F 65 180 2 -39 M 15 17 1 -39 M 18 29 1 -39 M 30 44 3 -39 M 45 45 2 -39 M 55 64 2 -39 M 65 180 3 -40 F 15 17 1 -40 F 18 29 2 -40 F 30 44 3 -40 F 45 45 2 -40 F 55 64 2 -40 F 65 180 2 -40 M 15 17 1 -40 M 18 29 2 -40 M 30 44 3 -40 M 45 45 2 -40 M 55 64 2 -40 M 65 180 3 -41 F 15 17 1 -41 F 18 29 2 -41 F 30 44 3 -41 F 45 45 2 -41 F 55 64 2 -41 F 65 180 2 -41 M 15 17 1 -41 M 18 29 2 -41 M 30 44 3 -41 M 45 45 2 -41 M 55 64 2 -41 M 65 180 3 -42 F 15 17 1 -42 F 18 29 2 -42 F 30 44 4 -42 F 45 45 2 -42 F 55 64 2 -42 F 65 180 3 -42 M 15 17 1 -42 M 18 29 2 -42 M 30 44 4 -42 M 45 45 2 -42 M 55 64 2 -42 M 65 180 4 -45 F 15 17 1 -45 F 18 29 1 -45 F 30 44 2 -45 F 45 45 1 -45 F 55 64 1 -45 F 65 180 1 -45 M 15 17 1 -45 M 18 29 1 -45 M 30 44 1 -45 M 45 45 1 -45 M 55 64 1 -45 M 65 180 2 -47 F 15 17 1 -47 F 18 29 1 -47 F 30 44 2 -47 F 45 45 1 -47 F 55 64 1 -47 F 65 180 2 -47 M 15 17 1 -47 M 18 29 1 -47 M 30 44 2 -47 M 45 45 1 -47 M 55 64 1 -47 M 65 180 2 -48 F 15 17 3 -48 F 18 29 4 -48 F 30 44 8 -48 F 45 45 4 -48 F 55 64 4 -48 F 65 180 6 -48 M 15 17 3 -48 M 18 29 4 -48 M 30 44 7 -48 M 45 45 4 -48 M 55 64 4 -48 M 65 180 8 -49 F 15 17 1 -49 F 18 29 1 -49 F 30 44 3 -49 F 45 45 1 -49 F 55 64 1 -49 F 65 180 2 -49 M 15 17 1 -49 M 18 29 1 -49 M 30 44 3 -49 M 45 45 1 -10 F 15 17 3 -10 F 18 29 4 -10 F 30 44 7 -10 F 45 45 4 -10 F 55 64 4 -10 F 65 180 5 -10 M 15 17 2 -10 M 18 29 4 -10 M 30 44 7 -10 M 45 45 4 -10 M 55 64 4 -10 M 65 180 7 -11 F 15 17 1 -11 F 18 29 1 -11 F 30 44 2 -11 F 45 45 1 -11 F 55 64 1 -11 F 65 180 1 -11 M 15 17 1 -11 M 18 29 1 -11 M 30 44 2 + +COPY sampling.panel_str_theo_gen_eta FROM STDIN; +1 f 15 17 2 3 +1 f 18 29 10 15 +1 f 30 44 21 31 +1 f 45 54 13 19 +1 f 55 64 12 18 +1 f 65 180 23 34 +1 m 15 17 2 3 +1 m 18 29 11 16 +1 m 30 44 21 32 +1 m 45 54 13 19 +1 m 55 64 11 17 +1 m 65 180 17 25 +2 f 15 17 1 1 +2 f 18 29 1 1 +2 f 30 44 1 3 +2 f 45 54 1 2 +2 f 55 64 1 2 +2 f 65 180 1 4 +2 m 15 17 1 1 +2 m 18 29 1 2 +2 m 30 44 1 3 +2 m 45 54 1 2 +2 m 55 64 1 2 +2 m 65 180 1 3 +3 f 15 17 1 1 +3 f 18 29 1 3 +3 f 30 44 2 6 +3 f 45 54 1 4 +3 f 55 64 1 3 +3 f 65 180 3 6 +3 m 15 17 1 1 +3 m 18 29 1 3 +3 m 30 44 3 6 +3 m 45 54 2 4 +3 m 55 64 1 3 +3 m 65 180 2 4 +4 f 15 17 1 1 +4 f 18 29 1 6 +4 f 30 44 1 11 +4 f 45 54 1 7 +4 f 55 64 1 6 +4 f 65 180 1 13 +4 m 15 17 1 1 +4 m 18 29 1 6 +4 m 30 44 1 12 +4 m 45 54 1 7 +4 m 55 64 1 6 +4 m 65 180 1 10 +5 f 15 17 1 1 +5 f 18 29 1 2 +5 f 30 44 2 3 +5 f 45 54 1 2 +5 f 55 64 1 2 +5 f 65 180 2 4 +5 m 15 17 1 1 +5 m 18 29 1 2 +5 m 30 44 2 3 +5 m 45 54 1 2 +5 m 55 64 1 2 +5 m 65 180 1 3 +6 f 15 17 1 1 +6 f 18 29 1 3 +6 f 30 44 2 7 +6 f 45 54 1 5 +6 f 55 64 1 5 +6 f 65 180 3 10 +6 m 15 17 1 1 +6 m 18 29 1 4 +6 m 30 44 2 8 +6 m 45 54 1 5 +6 m 55 64 1 4 +6 m 65 180 2 7 +7 f 15 17 1 1 +7 f 18 29 1 1 +7 f 30 44 1 2 +7 f 45 54 1 1 +7 f 55 64 1 1 +7 f 65 180 1 2 +7 m 15 17 1 1 +7 m 18 29 1 1 +7 m 30 44 1 2 +7 m 45 54 1 1 +7 m 55 64 1 1 +7 m 65 180 1 2 +8 f 15 17 1 1 +8 f 18 29 1 2 +8 f 30 44 1 4 +8 f 45 54 1 3 +8 f 55 64 1 2 +8 f 65 180 1 5 +8 m 15 17 1 1 +8 m 18 29 1 2 +8 m 30 44 1 4 +8 m 45 54 1 3 +8 m 55 64 1 2 +8 m 65 180 1 4 +9 f 15 17 1 1 +9 f 18 29 1 2 +9 f 30 44 1 5 +9 f 45 54 1 3 +9 f 55 64 1 3 +9 f 65 180 2 7 +9 m 15 17 1 1 +9 m 18 29 1 2 +9 m 30 44 1 5 +9 m 45 54 1 3 +9 m 55 64 1 3 +9 m 65 180 1 5 +10 f 15 17 1 1 +10 f 18 29 6 3 +10 f 30 44 13 6 +10 f 45 54 9 4 +10 f 55 64 8 4 +10 f 65 180 19 8 +10 m 15 17 1 1 +10 m 18 29 6 3 +10 m 30 44 13 6 +10 m 45 54 8 4 +10 m 55 64 8 3 +10 m 65 180 13 6 +11 f 15 17 1 1 +11 f 18 29 1 1 +11 f 30 44 2 3 +11 f 45 54 1 2 +11 f 55 64 1 2 +11 f 65 180 3 4 +11 m 15 17 1 1 +11 m 18 29 1 1 +11 m 30 44 2 3 +11 m 45 54 1 2 +11 m 55 64 1 2 +11 m 65 180 2 3 +12 f 15 17 1 2 +12 f 18 29 1 9 +12 f 30 44 2 18 +12 f 45 54 1 11 +12 f 55 64 1 10 +12 f 65 180 2 18 +12 m 15 17 1 2 +12 m 18 29 1 9 +12 m 30 44 2 19 +12 m 45 54 1 11 +12 m 55 64 1 9 +12 m 65 180 1 13 +13 f 15 17 1 1 +13 f 18 29 1 6 +13 f 30 44 2 12 +13 f 45 54 1 7 +13 f 55 64 1 6 +13 f 65 180 2 11 +13 m 15 17 1 1 +13 m 18 29 1 6 +13 m 30 44 2 12 +13 m 45 54 1 7 +13 m 55 64 1 6 +13 m 65 180 1 8 +14 f 15 17 1 1 +14 f 18 29 1 2 +14 f 30 44 1 4 +14 f 45 54 1 2 +14 f 55 64 1 2 +14 f 65 180 1 4 +14 m 15 17 1 1 +14 m 18 29 1 2 +14 m 30 44 1 4 +14 m 45 54 1 2 +14 m 55 64 1 2 +14 m 65 180 1 3 +15 f 15 17 3 6 +15 f 18 29 14 28 +15 f 30 44 32 62 +15 f 45 54 19 36 +15 f 55 64 17 33 +15 f 65 180 31 61 +15 m 15 17 3 7 +15 m 18 29 15 29 +15 m 30 44 33 65 +15 m 45 54 18 36 +15 m 55 64 15 30 +15 m 65 180 22 43 +16 f 15 17 1 3 +16 f 18 29 2 12 +16 f 30 44 3 22 +16 f 45 54 2 13 +16 f 55 64 1 11 +16 f 65 180 2 19 +16 m 15 17 1 3 +16 m 18 29 2 12 +16 m 30 44 3 24 +16 m 45 54 2 14 +16 m 55 64 1 11 +16 m 65 180 2 13 +17 f 15 17 1 3 +17 f 18 29 2 12 +17 f 30 44 5 24 +17 f 45 54 3 14 +17 f 55 64 2 12 +17 f 65 180 4 22 +17 m 15 17 1 3 +17 m 18 29 3 13 +17 m 30 44 5 26 +17 m 45 54 3 14 +17 m 55 64 2 12 +17 m 65 180 3 15 +18 f 15 17 1 1 +18 f 18 29 1 5 +18 f 30 44 2 11 +18 f 45 54 1 6 +18 f 55 64 1 6 +18 f 65 180 2 12 +18 m 15 17 1 1 +18 m 18 29 1 5 +18 m 30 44 2 11 +18 m 45 54 1 7 +18 m 55 64 1 6 +18 m 65 180 1 8 +19 f 15 17 1 1 +19 f 18 29 1 3 +19 f 30 44 2 6 +19 f 45 54 1 4 +19 f 55 64 1 3 +19 f 65 180 2 7 +19 m 15 17 1 1 +19 m 18 29 1 3 +19 m 30 44 2 7 +19 m 45 54 1 4 +19 m 55 64 1 3 +19 m 65 180 1 5 +20 f 15 17 1 1 +20 f 18 29 1 4 +20 f 30 44 1 8 +20 f 45 54 1 5 +20 f 55 64 1 4 +20 f 65 180 1 9 +20 m 15 17 1 1 +20 m 18 29 1 4 +20 m 30 44 1 9 +20 m 45 54 1 5 +20 m 55 64 1 4 +20 m 65 180 1 6 +21 f 15 17 1 1 +21 f 18 29 1 5 +21 f 30 44 2 9 +21 f 45 54 1 5 +21 f 55 64 1 4 +21 f 65 180 2 8 +21 m 15 17 1 1 +21 m 18 29 1 5 +21 m 30 44 2 10 +21 m 45 54 1 5 +21 m 55 64 1 4 +21 m 65 180 1 6 +22 f 15 17 1 1 +22 f 18 29 1 5 +22 f 30 44 3 9 +22 f 45 54 2 6 +22 f 55 64 1 5 +22 f 65 180 3 9 +22 m 15 17 1 1 +22 m 18 29 1 5 +22 m 30 44 3 9 +22 m 45 54 2 6 +22 m 55 64 1 5 +22 m 65 180 2 6 +23 f 15 17 1 2 +23 f 18 29 3 8 +23 f 30 44 6 15 +23 f 45 54 4 8 +23 f 55 64 3 7 +23 f 65 180 6 14 +23 m 15 17 1 2 +23 m 18 29 3 8 +23 m 30 44 7 16 +23 m 45 54 4 9 +23 m 55 64 3 7 +23 m 65 180 4 10 +24 f 15 17 1 2 +24 f 18 29 1 9 +24 f 30 44 3 17 +24 f 45 54 2 10 +24 f 55 64 1 8 +24 f 65 180 2 16 +24 m 15 17 1 2 +24 m 18 29 1 9 +24 m 30 44 3 19 +24 m 45 54 2 10 +24 m 55 64 1 8 +24 m 65 180 2 11 +25 f 15 17 1 1 +25 f 18 29 1 2 +25 f 30 44 1 4 +25 f 45 54 1 3 +25 f 55 64 1 2 +25 f 65 180 1 5 +25 m 15 17 1 1 +25 m 18 29 1 2 +25 m 30 44 1 4 +25 m 45 54 1 3 +25 m 55 64 1 2 +25 m 65 180 1 3 +26 f 15 17 1 2 +26 f 18 29 1 9 +26 f 30 44 2 19 +26 f 45 54 1 11 +26 f 55 64 1 9 +26 f 65 180 2 17 +26 m 15 17 1 2 +26 m 18 29 1 10 +26 m 30 44 2 20 +26 m 45 54 1 11 +26 m 55 64 1 9 +26 m 65 180 1 12 +27 f 15 17 1 1 +27 f 18 29 3 6 +27 f 30 44 6 13 +27 f 45 54 4 8 +27 f 55 64 4 7 +27 f 65 180 7 14 +27 m 15 17 1 1 +27 m 18 29 3 6 +27 m 30 44 7 14 +27 m 45 54 4 8 +27 m 55 64 3 7 +27 m 65 180 5 10 +28 f 15 17 1 2 +28 f 18 29 3 8 +28 f 30 44 5 17 +28 f 45 54 3 10 +28 f 55 64 3 8 +28 f 65 180 5 15 +28 m 15 17 1 2 +28 m 18 29 3 8 +28 m 30 44 5 17 +28 m 45 54 3 10 +28 m 55 64 2 8 +28 m 65 180 3 11 +29 f 15 17 1 1 +29 f 18 29 1 2 +29 f 30 44 1 4 +29 f 45 54 1 3 +29 f 55 64 1 2 +29 f 65 180 1 5 +29 m 15 17 1 1 +29 m 18 29 1 2 +29 m 30 44 1 5 +29 m 45 54 1 3 +29 m 55 64 1 3 +29 m 65 180 1 3 +30 f 15 17 1 1 +30 f 18 29 1 5 +30 f 30 44 2 10 +30 f 45 54 1 6 +30 f 55 64 1 6 +30 f 65 180 3 11 +30 m 15 17 1 1 +30 m 18 29 1 5 +30 m 30 44 2 10 +30 m 45 54 1 6 +30 m 55 64 1 6 +30 m 65 180 2 8 +31 f 15 17 1 1 +31 f 18 29 1 1 +31 f 30 44 1 2 +31 f 45 54 1 1 +31 f 55 64 1 1 +31 f 65 180 1 3 +31 m 15 17 1 1 +31 m 18 29 1 1 +31 m 30 44 1 3 +31 m 45 54 1 2 +31 m 55 64 1 1 +31 m 65 180 1 2 +32 f 15 17 1 1 +32 f 18 29 2 1 +32 f 30 44 4 1 +32 f 45 54 3 1 +32 f 55 64 3 1 +32 f 65 180 7 1 +32 m 15 17 1 1 +32 m 18 29 2 1 +32 m 30 44 4 1 +32 m 45 54 3 1 +32 m 55 64 3 1 +32 m 65 180 4 1 +33 f 15 17 1 1 +33 f 18 29 1 2 +33 f 30 44 2 4 +33 f 45 54 1 2 +33 f 55 64 1 2 +33 f 65 180 3 5 +33 m 15 17 1 1 +33 m 18 29 1 2 +33 m 30 44 2 4 +33 m 45 54 1 3 +33 m 55 64 1 2 +33 m 65 180 2 4 +34 f 15 17 1 1 +34 f 18 29 2 3 +34 f 30 44 4 6 +34 f 45 54 2 3 +34 f 55 64 2 3 +34 f 65 180 5 6 +34 m 15 17 1 1 +34 m 18 29 2 3 +34 m 30 44 4 6 +34 m 45 54 2 3 +34 m 55 64 2 3 +34 m 65 180 3 5 +35 f 15 17 1 1 +35 f 18 29 2 4 +35 f 30 44 4 8 +35 f 45 54 2 5 +35 f 55 64 2 4 +35 f 65 180 4 8 +35 m 15 17 1 1 +35 m 18 29 2 4 +35 m 30 44 4 9 +35 m 45 54 2 5 +35 m 55 64 2 4 +35 m 65 180 3 6 +36 f 15 17 1 1 +36 f 18 29 2 6 +36 f 30 44 4 12 +36 f 45 54 3 7 +36 f 55 64 2 6 +36 f 65 180 4 12 +36 m 15 17 1 1 +36 m 18 29 2 6 +36 m 30 44 5 12 +36 m 45 54 3 7 +36 m 55 64 2 6 +36 m 65 180 3 9 +37 f 15 17 1 1 +37 f 18 29 4 6 +37 f 30 44 9 14 +37 f 45 54 5 8 +37 f 55 64 5 7 +37 f 65 180 10 16 +37 m 15 17 1 1 +37 m 18 29 4 6 +37 m 30 44 9 14 +37 m 45 54 5 8 +37 m 55 64 4 7 +37 m 65 180 7 11 +38 f 15 17 1 1 +38 f 18 29 1 2 +38 f 30 44 3 5 +38 f 45 54 2 3 +38 f 55 64 2 3 +38 f 65 180 4 6 +38 m 15 17 1 1 +38 m 18 29 1 2 +38 m 30 44 3 5 +38 m 45 54 2 3 +38 m 55 64 2 3 +38 m 65 180 3 5 +39 f 15 17 1 1 +39 f 18 29 2 2 +39 f 30 44 4 5 +39 f 45 54 2 3 +39 f 55 64 2 3 +39 f 65 180 4 6 +39 m 15 17 1 1 +39 m 18 29 2 2 +39 m 30 44 4 5 +39 m 45 54 2 3 +39 m 55 64 2 3 +39 m 65 180 3 5 +40 f 15 17 1 1 +40 f 18 29 2 3 +40 f 30 44 3 5 +40 f 45 54 2 3 +40 f 55 64 2 3 +40 f 65 180 4 6 +40 m 15 17 1 1 +40 m 18 29 2 3 +40 m 30 44 4 6 +40 m 45 54 2 3 +40 m 55 64 2 3 +40 m 65 180 3 4 +41 f 15 17 1 1 +41 f 18 29 1 4 +41 f 30 44 1 7 +41 f 45 54 1 4 +41 f 55 64 1 4 +41 f 65 180 2 7 +41 m 15 17 1 1 +41 m 18 29 1 4 +41 m 30 44 2 7 +41 m 45 54 1 4 +41 m 55 64 1 4 +41 m 65 180 1 6 +42 f 15 17 1 1 +42 f 18 29 1 4 +42 f 30 44 2 8 +42 f 45 54 1 5 +42 f 55 64 1 5 +42 f 65 180 3 10 +42 m 15 17 1 1 +42 m 18 29 1 4 +42 m 30 44 2 8 +42 m 45 54 1 5 +42 m 55 64 1 4 +42 m 65 180 2 7 +43 f 15 17 1 1 +43 f 18 29 1 3 +43 f 30 44 1 6 +43 f 45 54 1 4 +43 f 55 64 1 3 +43 f 65 180 1 7 +43 m 15 17 1 1 +43 m 18 29 1 3 +43 m 30 44 1 6 +43 m 45 54 1 4 +43 m 55 64 1 3 +43 m 65 180 1 5 +44 f 15 17 1 1 +44 f 18 29 1 4 +44 f 30 44 1 7 +44 f 45 54 1 5 +44 f 55 64 1 4 +44 f 65 180 1 8 +44 m 15 17 1 1 +44 m 18 29 1 4 +44 m 30 44 1 7 +44 m 45 54 1 5 +44 m 55 64 1 4 +44 m 65 180 1 6 +45 f 15 17 1 1 +45 f 18 29 1 1 +45 f 30 44 2 2 +45 f 45 54 1 1 +45 f 55 64 1 1 +45 f 65 180 3 3 +45 m 15 17 1 1 +45 m 18 29 1 1 +45 m 30 44 2 2 +45 m 45 54 1 1 +45 m 55 64 1 1 +45 m 65 180 2 2 +46 f 15 17 1 1 +46 f 18 29 1 3 +46 f 30 44 2 7 +46 f 45 54 1 4 +46 f 55 64 1 4 +46 f 65 180 2 8 +46 m 15 17 1 1 +46 m 18 29 1 3 +46 m 30 44 2 7 +46 m 45 54 1 4 +46 m 55 64 1 4 +46 m 65 180 2 6 +47 f 15 17 1 1 +47 f 18 29 1 2 +47 f 30 44 2 5 +47 f 45 54 1 3 +47 f 55 64 1 3 +47 f 65 180 2 5 +47 m 15 17 1 1 +47 m 18 29 1 2 +47 m 30 44 2 5 +47 m 45 54 1 3 +47 m 55 64 1 2 +47 m 65 180 2 4 +48 f 15 17 1 1 +48 f 18 29 4 6 +48 f 30 44 8 14 +48 f 45 54 5 8 +48 f 55 64 5 8 +48 f 65 180 10 16 +48 m 15 17 1 1 +48 m 18 29 4 7 +48 m 30 44 8 14 +48 m 45 54 5 8 +48 m 55 64 4 7 +48 m 65 180 7 12 +49 f 15 17 1 1 +49 f 18 29 2 2 +49 f 30 44 4 4 +49 f 45 54 2 3 +49 f 55 64 2 2 +49 f 65 180 4 5 +49 m 15 17 1 1 +49 m 18 29 2 2 +49 m 30 44 4 4 +49 m 45 54 2 2 +49 m 55 64 2 2 +49 m 65 180 3 4 +50 f 15 17 1 1 +50 f 18 29 1 3 +50 f 30 44 2 7 +50 f 45 54 1 4 +50 f 55 64 1 4 +50 f 65 180 2 8 +50 m 15 17 1 1 +50 m 18 29 1 4 +50 m 30 44 2 8 +50 m 45 54 1 4 +50 m 55 64 1 4 +50 m 65 180 2 6 +51 f 15 17 1 1 +51 f 18 29 1 3 +51 f 30 44 2 6 +51 f 45 54 1 3 +51 f 55 64 1 3 +51 f 65 180 2 6 +51 m 15 17 1 1 +51 m 18 29 1 3 +51 m 30 44 2 6 +51 m 45 54 1 3 +51 m 55 64 1 3 +51 m 65 180 2 5 +52 f 15 17 1 1 +52 f 18 29 1 2 +52 f 30 44 1 5 +52 f 45 54 1 3 +52 f 55 64 1 3 +52 f 65 180 2 6 +52 m 15 17 1 1 +52 m 18 29 1 2 +52 m 30 44 1 5 +52 m 45 54 1 3 +52 m 55 64 1 3 +52 m 65 180 1 4 +53 f 15 17 1 1 +53 f 18 29 1 2 +53 f 30 44 2 3 +53 f 45 54 1 2 +53 f 55 64 1 2 +53 f 65 180 2 4 +53 m 15 17 1 1 +53 m 18 29 1 2 +53 m 30 44 2 3 +53 m 45 54 1 2 +53 m 55 64 1 2 +53 m 65 180 2 3 +54 f 15 17 1 1 +54 f 18 29 2 6 +54 f 30 44 4 11 +54 f 45 54 2 7 +54 f 55 64 2 6 +54 f 65 180 4 13 +54 m 15 17 1 1 +54 m 18 29 2 6 +54 m 30 44 4 11 +54 m 45 54 2 7 +54 m 55 64 2 6 +54 m 65 180 3 9 +55 f 15 17 1 1 +55 f 18 29 1 1 +55 f 30 44 2 3 +55 f 45 54 2 2 +55 f 55 64 1 2 +55 f 65 180 3 3 +55 m 15 17 1 1 +55 m 18 29 1 1 +55 m 30 44 2 3 +55 m 45 54 1 2 +55 m 55 64 1 1 +55 m 65 180 2 2 +56 f 15 17 1 1 +56 f 18 29 1 3 +56 f 30 44 1 6 +56 f 45 54 1 4 +56 f 55 64 1 3 +56 f 65 180 1 6 +56 m 15 17 1 1 +56 m 18 29 1 3 +56 m 30 44 1 6 +56 m 45 54 1 4 +56 m 55 64 1 3 +56 m 65 180 1 4 +57 f 15 17 1 1 +57 f 18 29 1 1 +57 f 30 44 1 2 +57 f 45 54 1 2 +57 f 55 64 1 1 +57 f 65 180 1 3 +57 m 15 17 1 1 +57 m 18 29 1 1 +57 m 30 44 1 2 +57 m 45 54 1 2 +57 m 55 64 1 1 +57 m 65 180 1 2 +58 f 15 17 7 4 +58 f 18 29 33 16 +58 f 30 44 67 32 +58 f 45 54 40 19 +58 f 55 64 35 17 +58 f 65 180 62 30 +58 m 15 17 8 4 +58 m 18 29 34 16 +58 m 30 44 65 31 +58 m 45 54 37 18 +58 m 55 64 30 15 +58 m 65 180 44 21 +59 f 15 17 1 1 +59 f 18 29 2 6 +59 f 30 44 3 10 +59 f 45 54 2 6 +59 f 55 64 1 5 +59 f 65 180 2 8 +59 m 15 17 1 1 +59 m 18 29 2 6 +59 m 30 44 3 10 +59 m 45 54 2 6 +59 m 55 64 1 5 +59 m 65 180 2 6 +60 f 15 17 1 1 +60 f 18 29 1 6 +60 f 30 44 1 10 +60 f 45 54 1 6 +60 f 55 64 1 5 +60 f 65 180 1 10 +60 m 15 17 1 1 +60 m 18 29 1 7 +60 m 30 44 1 10 +60 m 45 54 1 6 +60 m 55 64 1 5 +60 m 65 180 1 7 +61 f 15 17 1 3 +61 f 18 29 1 13 +61 f 30 44 2 19 +61 f 45 54 1 11 +61 f 55 64 1 9 +61 f 65 180 1 14 +61 m 15 17 1 3 +61 m 18 29 1 13 +61 m 30 44 2 18 +61 m 45 54 1 10 +61 m 55 64 1 8 +61 m 65 180 1 10 +62 f 15 17 1 1 +62 f 18 29 1 3 +62 f 30 44 1 5 +62 f 45 54 1 3 +62 f 55 64 1 2 +62 f 65 180 1 5 +62 m 15 17 1 1 +62 m 18 29 1 3 +62 m 30 44 1 5 +62 m 45 54 1 3 +62 m 55 64 1 2 +62 m 65 180 1 4 +63 f 15 17 4 8 +63 f 18 29 16 33 +63 f 30 44 23 48 +63 f 45 54 13 28 +63 f 55 64 11 23 +63 f 65 180 16 34 +63 m 15 17 4 8 +63 m 18 29 16 33 +63 m 30 44 22 46 +63 m 45 54 12 26 +63 m 55 64 10 21 +63 m 65 180 11 24 +64 f 15 17 1 1 +64 f 18 29 1 6 +64 f 30 44 1 8 +64 f 45 54 1 5 +64 f 55 64 1 4 +64 f 65 180 1 8 +64 m 15 17 1 1 +64 m 18 29 1 6 +64 m 30 44 1 8 +64 m 45 54 1 5 +64 m 55 64 1 4 +64 m 65 180 1 6 +65 f 15 17 1 3 +65 f 18 29 2 14 +65 f 30 44 3 21 +65 f 45 54 2 14 +65 f 55 64 2 11 +65 f 65 180 3 19 +65 m 15 17 1 3 +65 m 18 29 2 15 +65 m 30 44 3 21 +65 m 45 54 2 13 +65 m 55 64 1 10 +65 m 65 180 2 14 +66 f 15 17 1 1 +66 f 18 29 1 3 +66 f 30 44 2 5 +66 f 45 54 1 3 +66 f 55 64 1 3 +66 f 65 180 2 6 +66 m 15 17 1 1 +66 m 18 29 1 3 +66 m 30 44 2 5 +66 m 45 54 1 3 +66 m 55 64 1 3 +66 m 65 180 1 4 +67 f 15 17 1 1 +67 f 18 29 1 3 +67 f 30 44 1 6 +67 f 45 54 1 3 +67 f 55 64 1 3 +67 f 65 180 1 6 +67 m 15 17 1 1 +67 m 18 29 1 4 +67 m 30 44 1 6 +67 m 45 54 1 3 +67 m 55 64 1 3 +67 m 65 180 1 4 +68 f 15 17 1 1 +68 f 18 29 2 2 +68 f 30 44 3 4 +68 f 45 54 2 3 +68 f 55 64 2 2 +68 f 65 180 3 4 +68 m 15 17 1 1 +68 m 18 29 2 2 +68 m 30 44 3 4 +68 m 45 54 2 3 +68 m 55 64 1 2 +68 m 65 180 2 3 +69 f 15 17 1 1 +69 f 18 29 1 4 +69 f 30 44 1 7 +69 f 45 54 1 5 +69 f 55 64 1 4 +69 f 65 180 1 8 +69 m 15 17 1 1 +69 m 18 29 1 5 +69 m 30 44 1 7 +69 m 45 54 1 4 +69 m 55 64 1 4 +69 m 65 180 1 6 +70 f 15 17 1 1 +70 f 18 29 1 2 +70 f 30 44 1 4 +70 f 45 54 1 2 +70 f 55 64 1 2 +70 f 65 180 1 4 +70 m 15 17 1 1 +70 m 18 29 1 2 +70 m 30 44 1 4 +70 m 45 54 1 2 +70 m 55 64 1 2 +70 m 65 180 1 3 +71 f 15 17 1 2 +71 f 18 29 2 8 +71 f 30 44 3 11 +71 f 45 54 2 7 +71 f 55 64 2 6 +71 f 65 180 3 10 +71 m 15 17 1 2 +71 m 18 29 2 8 +71 m 30 44 3 11 +71 m 45 54 2 7 +71 m 55 64 2 6 +71 m 65 180 2 8 +72 f 15 17 1 4 +72 f 18 29 5 18 +72 f 30 44 8 29 +72 f 45 54 5 17 +72 f 55 64 4 15 +72 f 65 180 6 23 +72 m 15 17 1 5 +72 m 18 29 5 19 +72 m 30 44 7 29 +72 m 45 54 4 17 +72 m 55 64 4 14 +72 m 65 180 5 18 +73 f 15 17 1 1 +73 f 18 29 3 5 +73 f 30 44 4 8 +73 f 45 54 3 5 +73 f 55 64 2 5 +73 f 65 180 4 8 +73 m 15 17 1 1 +73 m 18 29 3 6 +73 m 30 44 4 8 +73 m 45 54 3 5 +73 m 55 64 2 4 +73 m 65 180 3 6 +74 f 15 17 1 1 +74 f 18 29 1 5 +74 f 30 44 2 7 +74 f 45 54 1 4 +74 f 55 64 1 4 +74 f 65 180 2 7 +74 m 15 17 1 1 +74 m 18 29 1 5 +74 m 30 44 2 7 +74 m 45 54 1 4 +74 m 55 64 1 3 +74 m 65 180 1 5 +75 f 15 17 1 2 +75 f 18 29 1 10 +75 f 30 44 2 16 +75 f 45 54 1 10 +75 f 55 64 1 9 +75 f 65 180 2 16 +75 m 15 17 1 2 +75 m 18 29 1 10 +75 m 30 44 2 15 +75 m 45 54 1 9 +75 m 55 64 1 8 +75 m 65 180 1 12 +76 f 15 17 1 1 +76 f 18 29 1 4 +76 f 30 44 1 7 +76 f 45 54 1 4 +76 f 55 64 1 4 +76 f 65 180 2 7 +76 m 15 17 1 1 +76 m 18 29 1 5 +76 m 30 44 1 7 +76 m 45 54 1 4 +76 m 55 64 1 3 +76 m 65 180 1 5 +77 f 15 17 1 1 +77 f 18 29 1 2 +77 f 30 44 1 3 +77 f 45 54 1 2 +77 f 55 64 1 2 +77 f 65 180 1 3 +77 m 15 17 1 1 +77 m 18 29 1 2 +77 m 30 44 1 3 +77 m 45 54 1 2 +77 m 55 64 1 2 +77 m 65 180 1 2 +78 f 15 17 1 2 +78 f 18 29 1 10 +78 f 30 44 2 15 +78 f 45 54 1 9 +78 f 55 64 1 8 +78 f 65 180 1 14 +78 m 15 17 1 2 +78 m 18 29 1 10 +78 m 30 44 2 14 +78 m 45 54 1 9 +78 m 55 64 1 7 +78 m 65 180 1 11 +79 f 15 17 1 1 +79 f 18 29 1 4 +79 f 30 44 2 6 +79 f 45 54 1 4 +79 f 55 64 1 3 +79 f 65 180 2 6 +79 m 15 17 1 1 +79 m 18 29 1 4 +79 m 30 44 2 6 +79 m 45 54 1 4 +79 m 55 64 1 3 +79 m 65 180 1 4 +80 f 15 17 1 1 +80 f 18 29 3 6 +80 f 30 44 4 8 +80 f 45 54 2 5 +80 f 55 64 2 4 +80 f 65 180 4 8 +80 m 15 17 1 1 +80 m 18 29 3 6 +80 m 30 44 4 8 +80 m 45 54 2 5 +80 m 55 64 2 4 +80 m 65 180 3 6 +81 f 15 17 1 1 +81 f 18 29 1 5 +81 f 30 44 2 8 +81 f 45 54 1 5 +81 f 55 64 1 4 +81 f 65 180 2 8 +81 m 15 17 1 1 +81 m 18 29 1 5 +81 m 30 44 1 8 +81 m 45 54 1 5 +81 m 55 64 1 4 +81 m 65 180 1 6 +82 f 15 17 2 2 +82 f 18 29 10 9 +82 f 30 44 15 12 +82 f 45 54 9 8 +82 f 55 64 8 7 +82 f 65 180 13 11 +82 m 15 17 3 2 +82 m 18 29 10 9 +82 m 30 44 14 12 +82 m 45 54 8 7 +82 m 55 64 7 6 +82 m 65 180 10 8 +83 f 15 17 1 1 +83 f 18 29 3 6 +83 f 30 44 5 9 +83 f 45 54 3 6 +83 f 55 64 3 5 +83 f 65 180 6 9 +83 m 15 17 1 1 +83 m 18 29 4 6 +83 m 30 44 5 9 +83 m 45 54 3 5 +83 m 55 64 3 5 +83 m 65 180 4 7 +84 f 15 17 1 1 +84 f 18 29 1 6 +84 f 30 44 1 9 +84 f 45 54 1 5 +84 f 55 64 1 4 +84 f 65 180 1 8 +84 m 15 17 1 1 +84 m 18 29 1 6 +84 m 30 44 1 8 +84 m 45 54 1 5 +84 m 55 64 1 4 +84 m 65 180 1 6 +85 f 15 17 1 1 +85 f 18 29 1 3 +85 f 30 44 1 4 +85 f 45 54 1 3 +85 f 55 64 1 2 +85 f 65 180 1 4 +85 m 15 17 1 1 +85 m 18 29 1 3 +85 m 30 44 1 4 +85 m 45 54 1 3 +85 m 55 64 1 2 +85 m 65 180 1 3 +86 f 15 17 1 1 +86 f 18 29 1 2 +86 f 30 44 1 3 +86 f 45 54 1 2 +86 f 55 64 1 2 +86 f 65 180 1 3 +86 m 15 17 1 1 +86 m 18 29 1 2 +86 m 30 44 1 3 +86 m 45 54 1 2 +86 m 55 64 1 2 +86 m 65 180 1 2 +87 f 15 17 1 3 +87 f 18 29 5 12 +87 f 30 44 7 17 +87 f 45 54 4 11 +87 f 55 64 3 9 +87 f 65 180 6 15 +87 m 15 17 1 3 +87 m 18 29 5 12 +87 m 30 44 7 16 +87 m 45 54 4 10 +87 m 55 64 3 8 +87 m 65 180 4 11 +88 f 15 17 1 1 +88 f 18 29 1 4 +88 f 30 44 2 5 +88 f 45 54 1 3 +88 f 55 64 1 3 +88 f 65 180 1 5 +88 m 15 17 1 1 +88 m 18 29 1 4 +88 m 30 44 2 5 +88 m 45 54 1 3 +88 m 55 64 1 2 +88 m 65 180 1 4 +89 f 15 17 1 1 +89 f 18 29 2 4 +89 f 30 44 3 6 +89 f 45 54 2 4 +89 f 55 64 1 3 +89 f 65 180 2 5 +89 m 15 17 1 1 +89 m 18 29 2 4 +89 m 30 44 3 6 +89 m 45 54 2 4 +89 m 55 64 1 3 +89 m 65 180 2 4 +90 f 15 17 1 1 +90 f 18 29 2 3 +90 f 30 44 3 5 +90 f 45 54 2 3 +90 f 55 64 2 3 +90 f 65 180 3 4 +90 m 15 17 1 1 +90 m 18 29 2 3 +90 m 30 44 3 5 +90 m 45 54 2 3 +90 m 55 64 2 2 +90 m 65 180 2 3 +91 f 15 17 1 1 +91 f 18 29 1 2 +91 f 30 44 1 3 +91 f 45 54 1 2 +91 f 55 64 1 2 +91 f 65 180 1 3 +91 m 15 17 1 1 +91 m 18 29 1 2 +91 m 30 44 1 3 +91 m 45 54 1 2 +91 m 55 64 1 2 +91 m 65 180 1 2 +92 f 15 17 1 1 +92 f 18 29 2 5 +92 f 30 44 4 10 +92 f 45 54 2 6 +92 f 55 64 2 5 +92 f 65 180 3 8 +92 m 15 17 1 1 +92 m 18 29 2 5 +92 m 30 44 4 10 +92 m 45 54 2 6 +92 m 55 64 2 5 +92 m 65 180 2 6 +93 f 15 17 1 1 +93 f 18 29 1 3 +93 f 30 44 1 6 +93 f 45 54 1 3 +93 f 55 64 1 3 +93 f 65 180 1 6 +93 m 15 17 1 1 +93 m 18 29 1 3 +93 m 30 44 1 6 +93 m 45 54 1 3 +93 m 55 64 1 3 +93 m 65 180 1 4 +94 f 15 17 1 1 +94 f 18 29 1 1 +94 f 30 44 1 1 +94 f 45 54 1 1 +94 f 55 64 1 1 +94 f 65 180 1 2 +94 m 15 17 1 1 +94 m 18 29 1 1 +94 m 30 44 1 1 +94 m 45 54 1 1 +94 m 55 64 1 1 +94 m 65 180 1 1 +95 f 15 17 1 1 +95 f 18 29 1 2 +95 f 30 44 1 3 +95 f 45 54 1 2 +95 f 55 64 1 2 +95 f 65 180 1 3 +95 m 15 17 1 1 +95 m 18 29 1 2 +95 m 30 44 1 3 +95 m 45 54 1 2 +95 m 55 64 1 2 +95 m 65 180 1 2 +96 f 15 17 1 1 +96 f 18 29 1 1 +96 f 30 44 1 3 +96 f 45 54 1 2 +96 f 55 64 1 2 +96 f 65 180 1 4 +96 m 15 17 1 1 +96 m 18 29 1 1 +96 m 30 44 1 3 +96 m 45 54 1 2 +96 m 55 64 1 2 +96 m 65 180 1 3 +97 f 15 17 1 1 +97 f 18 29 1 3 +97 f 30 44 1 6 +97 f 45 54 1 4 +97 f 55 64 1 4 +97 f 65 180 1 6 +97 m 15 17 1 1 +97 m 18 29 1 4 +97 m 30 44 1 7 +97 m 45 54 1 4 +97 m 55 64 1 3 +97 m 65 180 1 5 +98 f 15 17 1 1 +98 f 18 29 1 2 +98 f 30 44 1 4 +98 f 45 54 1 2 +98 f 55 64 1 2 +98 f 65 180 1 4 +98 m 15 17 1 1 +98 m 18 29 1 2 +98 m 30 44 1 5 +98 m 45 54 1 3 +98 m 55 64 1 2 +98 m 65 180 1 3 +99 f 15 17 1 1 +99 f 18 29 2 2 +99 f 30 44 3 4 +99 f 45 54 2 2 +99 f 55 64 2 2 +99 f 65 180 3 4 +99 m 15 17 1 1 +99 m 18 29 2 2 +99 m 30 44 3 4 +99 m 45 54 2 2 +99 m 55 64 2 2 +99 m 65 180 2 3 +100 f 15 17 1 1 +100 f 18 29 2 1 +100 f 30 44 4 1 +100 f 45 54 3 1 +100 f 55 64 2 1 +100 f 65 180 4 1 +100 m 15 17 1 1 +100 m 18 29 2 1 +100 m 30 44 4 1 +100 m 45 54 3 1 +100 m 55 64 2 1 +100 m 65 180 3 1 +101 f 15 17 1 1 +101 f 18 29 1 2 +101 f 30 44 1 2 +101 f 45 54 1 1 +101 f 55 64 1 1 +101 f 65 180 1 2 +101 m 15 17 1 1 +101 m 18 29 1 2 +101 m 30 44 1 2 +101 m 45 54 1 1 +101 m 55 64 1 1 +101 m 65 180 1 2 +102 f 15 17 1 1 +102 f 18 29 1 2 +102 f 30 44 1 3 +102 f 45 54 1 2 +102 f 55 64 1 1 +102 f 65 180 1 3 +102 m 15 17 1 1 +102 m 18 29 1 2 +102 m 30 44 1 3 +102 m 45 54 1 2 +102 m 55 64 1 1 +102 m 65 180 1 2 +103 f 15 17 1 1 +103 f 18 29 1 1 +103 f 30 44 1 3 +103 f 45 54 1 2 +103 f 55 64 1 2 +103 f 65 180 1 4 +103 m 15 17 1 1 +103 m 18 29 1 1 +103 m 30 44 1 3 +103 m 45 54 1 2 +103 m 55 64 1 2 +103 m 65 180 1 2 +104 f 15 17 1 1 +104 f 18 29 1 2 +104 f 30 44 1 3 +104 f 45 54 1 2 +104 f 55 64 1 1 +104 f 65 180 1 2 +104 m 15 17 1 1 +104 m 18 29 1 2 +104 m 30 44 1 3 +104 m 45 54 1 2 +104 m 55 64 1 1 +104 m 65 180 1 2 +105 f 15 17 1 1 +105 f 18 29 1 1 +105 f 30 44 1 1 +105 f 45 54 1 1 +105 f 55 64 1 1 +105 f 65 180 1 1 +105 m 15 17 1 1 +105 m 18 29 1 1 +105 m 30 44 1 1 +105 m 45 54 1 1 +105 m 55 64 1 1 +105 m 65 180 1 1 +106 f 15 17 1 1 +106 f 18 29 1 1 +106 f 30 44 1 2 +106 f 45 54 1 1 +106 f 55 64 1 1 +106 f 65 180 1 2 +106 m 15 17 1 1 +106 m 18 29 1 1 +106 m 30 44 1 2 +106 m 45 54 1 1 +106 m 55 64 1 1 +106 m 65 180 1 2 +107 f 15 17 1 1 +107 f 18 29 1 1 +107 f 30 44 1 2 +107 f 45 54 1 1 +107 f 55 64 1 1 +107 f 65 180 1 2 +107 m 15 17 1 1 +107 m 18 29 1 1 +107 m 30 44 1 2 +107 m 45 54 1 1 +107 m 55 64 1 1 +107 m 65 180 1 1 \. - -- just an example COPY voip.pricing (prefix, price) FROM stdin; 0 0.0185 Modified: trunk/dbyaacs/data.sql =================================================================== --- trunk/dbyaacs/data.sql 2012-01-17 14:12:01 UTC (rev 2140) +++ trunk/dbyaacs/data.sql 2012-01-17 15:12:27 UTC (rev 2141) @@ -16558,1294 +16558,1294 @@ -- -- Italian population strcture by age, sex and province -- -COPY sampling.panel_str_theo_gen_eta (cod_prov, sex, min_age, max_age, qty) FROM stdin; -31 F 65 180 1 -31 M 15 17 0 -31 M 18 29 1 -31 M 30 44 1 -31 M 45 45 1 -31 M 55 64 1 -31 M 65 180 1 -32 F 15 17 1 -32 F 18 29 1 -32 F 30 44 2 -32 F 45 45 1 -32 F 55 64 1 -32 F 65 180 1 -32 M 15 17 1 -32 M 18 29 1 -32 M 30 44 2 -32 M 45 45 1 -32 M 55 64 1 -32 M 65 180 2 -33 F 15 17 1 -33 F 18 29 1 -33 F 30 44 2 -33 F 45 45 1 -33 F 55 64 1 -33 F 65 180 2 -33 M 15 17 1 -33 M 18 29 1 -33 M 30 44 2 -33 M 45 45 1 -33 M 55 64 1 -33 M 65 180 2 -34 F 15 17 1 -34 F 18 29 2 -34 F 30 44 4 -34 F 45 45 2 -34 F 55 64 2 -34 F 65 180 2 -34 M 15 17 1 -34 M 18 29 2 -34 M 30 44 3 -34 M 45 45 2 -34 M 55 64 2 -34 M 65 180 3 -93 F 15 17 1 -93 F 18 29 1 -93 F 30 44 2 -93 F 45 45 1 -93 F 55 64 1 -93 F 65 180 2 -93 M 15 17 1 -93 M 18 29 1 -93 M 30 44 2 -93 M 45 45 1 -93 M 55 64 1 -93 M 65 180 2 -96 F 15 17 1 -96 F 18 29 1 -96 F 30 44 2 -96 F 45 45 1 -96 F 55 64 1 -96 F 65 180 1 -96 M 15 17 1 -96 M 18 29 1 -96 M 30 44 2 -96 M 45 45 1 -96 M 55 64 1 -96 M 65 180 2 -97 F 15 17 1 -97 F 18 29 1 -97 F 30 44 3 -97 F 45 45 1 -97 F 55 64 1 -97 F 65 180 2 -97 M 15 17 1 -97 M 18 29 1 -97 M 30 44 3 -97 M 45 45 1 -97 M 55 64 1 -97 M 65 180 3 -98 F 15 17 1 -98 F 18 29 1 -98 F 30 44 2 -98 F 45 45 1 -98 F 55 64 1 -98 F 65 180 1 -98 M 15 17 1 -98 M 18 29 1 -98 M 30 44 2 -98 M 45 45 1 -98 M 55 64 1 -98 M 65 180 2 -103 F 15 17 1 -103 F 18 29 1 -103 F 30 44 1 -103 F 45 45 1 -103 F 55 64 1 -103 F 65 180 1 -103 M 15 17 0 -103 M 18 29 1 -103 M 30 44 1 -103 M 45 45 1 -103 M 55 64 1 -103 M 65 180 1 -19 F 55 64 1 -19 F 65 180 2 -19 M 15 17 1 -19 M 18 29 1 -19 M 30 44 3 -19 M 45 45 1 -19 M 55 64 1 -19 M 65 180 3 -20 F 15 17 1 -20 F 18 29 2 -20 F 30 44 3 -20 F 45 45 2 -20 F 55 64 2 -20 F 65 180 2 -20 M 15 17 1 -20 M 18 29 2 -20 M 30 44 3 -20 M 45 45 2 -20 M 55 64 2 -20 M 65 180 3 -21 F 15 17 1 -21 F 18 29 2 -21 F 30 44 4 -21 F 45 45 2 -21 F 55 64 2 -21 F 65 180 3 -21 M 15 17 1 -21 M 18 29 2 -21 M 30 44 4 -21 M 45 45 2 -21 M 55 64 2 -21 M 65 180 4 -22 F 15 17 2 -22 F 18 29 2 -22 F 30 44 4 -22 F 45 45 2 -22 F 55 64 2 -22 F 65 180 3 -22 M 15 17 1 -22 M 18 29 2 -22 M 30 44 4 -22 M 45 45 2 -22 M 55 64 2 -22 M 65 180 4 -23 F 15 17 3 -23 F 18 29 4 -23 F 30 44 7 -23 F 45 45 4 -23 F 55 64 4 -23 F 65 180 5 -23 M 15 17 2 -23 M 18 29 4 -23 M 30 44 7 -23 M 45 45 4 -23 M 55 64 4 -23 M 65 180 7 -24 F 15 17 3 -24 F 18 29 4 -24 F 30 44 7 -24 F 45 45 4 -24 F 55 64 3 -24 F 65 180 5 -24 M 15 17 2 -24 M 18 29 3 -24 M 30 44 7 -24 M 45 45 4 -24 M 55 64 4 -24 M 65 180 7 -25 F 15 17 1 -25 F 18 29 1 -25 F 30 44 2 -25 F 45 45 1 -25 F 55 64 1 -25 F 65 180 1 -25 M 15 17 1 -25 M 18 29 1 -25 M 30 44 2 -25 M 45 45 1 -25 M 55 64 1 -25 M 65 180 2 -26 F 15 17 3 -26 F 18 29 4 -26 F 30 44 7 -26 F 45 45 4 -26 F 55 64 3 -26 F 65 180 5 -26 M 15 17 2 -26 M 18 29 3 -26 M 30 44 7 -26 M 45 45 4 -26 M 55 64 4 -26 M 65 180 7 -27 F 15 17 3 -27 F 18 29 4 -27 F 30 44 7 -27 F 45 45 4 -27 F 55 64 3 -27 F 65 180 5 -27 M 15 17 2 -27 M 18 29 3 -27 M 30 44 7 -27 M 45 45 4 -27 M 55 64 4 -27 M 65 180 7 -28 F 15 17 3 -28 F 18 29 4 -28 F 30 44 7 -28 F 45 45 4 -28 F 55 64 4 -28 F 65 180 5 -28 M 15 17 3 -28 M 18 29 4 -28 M 30 44 7 -28 M 45 45 4 -28 M 55 64 4 -28 M 65 180 7 -29 F 15 17 1 -29 F 18 29 1 -29 F 30 44 2 -29 F 45 45 1 -29 F 55 64 1 -29 F 65 180 1 -29 M 15 17 1 -29 M 18 29 1 -29 M 30 44 2 -29 M 45 45 1 -29 M 55 64 1 -29 M 65 180 2 -30 F 15 17 2 -30 F 18 29 2 -30 F 30 44 5 -30 F 45 45 2 -30 F 55 64 2 -30 F 65 180 3 -30 M 15 17 2 -30 M 18 29 2 -30 M 30 44 4 -30 M 45 45 2 -30 M 55 64 2 -30 M 65 180 4 -31 F 15 17 0 -31 F 18 29 1 -31 F 30 44 1 -31 F 45 45 1 -31 F 55 64 1 -5 F 45 45 1 -5 F 55 64 1 -5 F 65 180 1 -5 M 15 17 1 -5 M 18 29 1 -5 M 30 44 2 -5 M 45 45 1 -5 M 55 64 1 -5 M 65 180 2 -6 F 15 17 1 -6 F 18 29 2 -6 F 30 44 4 -6 F 45 45 2 -6 F 55 64 2 -6 F 65 180 2 -6 M 15 17 1 -6 M 18 29 2 -6 M 30 44 3 -6 M 45 45 2 -6 M 55 64 2 -6 M 65 180 3 -7 F 15 17 0 -7 F 18 29 0 -7 F 30 44 1 -7 F 45 45 1 -7 F 55 64 0 -7 F 65 180 1 -7 M 15 17 0 -7 M 18 29 0 -7 M 30 44 1 -7 M 45 45 0 -7 M 55 64 0 -7 M 65 180 1 -8 F 15 17 1 -8 F 18 29 1 -8 F 30 44 2 -8 F 45 45 1 -8 F 55 64 1 -8 F 65 180 1 -8 M 15 17 1 -8 M 18 29 1 -8 M 30 44 2 -8 M 45 45 1 -8 M 55 64 1 -8 M 65 180 2 -9 F 15 17 1 -9 F 18 29 1 -9 F 30 44 2 -9 F 45 45 1 -9 F 55 64 1 -9 F 65 180 2 -9 M 15 17 1 -9 M 18 29 1 -9 M 30 44 2 -9 M 45 45 1 -9 M 55 64 1 -9 M 65 180 2 -12 F 15 17 3 -12 F 18 29 4 -12 F 30 44 7 -12 F 45 45 4 -12 F 55 64 3 -12 F 65 180 5 -12 M 15 17 2 -12 M 18 29 3 -12 M 30 44 7 -12 M 45 45 4 -12 M 55 64 4 -12 M 65 180 7 -13 F 15 17 2 -13 F 18 29 2 -13 F 30 44 5 -13 F 45 45 2 -13 F 55 64 2 -13 F 65 180 3 -13 M 15 17 2 -13 M 18 29 2 -13 M 30 44 4 -13 M 45 45 2 -13 M 55 64 2 -13 M 65 180 4 -14 F 15 17 1 -14 F 18 29 1 -14 F 30 44 2 -14 F 45 45 1 -14 F 55 64 1 -14 F 65 180 1 -14 M 15 17 1 -14 M 18 29 1 -14 M 30 44 1 -14 M 45 45 1 -14 M 55 64 1 -14 M 65 180 1 -15 F 15 17 12 -15 F 18 29 17 -15 F 30 44 33 -15 F 45 45 17 -15 F 55 64 16 -15 F 65 180 21 -15 M 15 17 11 -15 M 18 29 16 -15 M 30 44 30 -15 M 45 45 17 -15 M 55 64 16 -15 M 65 180 30 -16 F 15 17 3 -16 F 18 29 4 -16 F 30 44 9 -16 F 45 45 5 -16 F 55 64 4 -16 F 65 180 6 -16 M 15 17 3 -16 M 18 29 4 -16 M 30 44 8 -16 M 45 45 4 -16 M 55 64 4 -16 M 65 180 8 -17 F 15 17 4 -17 F 18 29 5 -17 F 30 44 10 -17 F 45 45 5 -17 F 55 64 5 -17 F 65 180 6 -17 M 15 17 3 -17 M 18 29 5 -17 M 30 44 9 -17 M 45 45 5 -17 M 55 64 5 -17 M 65 180 9 -18 F 15 17 2 -18 F 18 29 2 -18 F 30 44 4 -18 F 45 45 2 -18 F 55 64 2 -18 F 65 180 3 -18 M 15 17 1 -18 M 18 29 2 -18 M 30 44 4 -18 M 45 45 2 -18 M 55 64 2 -18 M 65 180 4 -19 F 15 17 1 -19 F 18 29 1 -19 F 30 44 3 -19 F 45 45 2 -92 F 30 44 4 -92 F 45 45 2 -92 F 55 64 2 -92 F 65 180 3 -92 M 15 17 2 -92 M 18 29 3 -92 M 30 44 4 -92 M 45 45 3 -92 M 55 64 2 -92 M 65 180 4 -94 F 15 17 0 -94 F 18 29 0 -94 F 30 44 1 -94 F 45 45 0 -94 F 55 64 0 -94 F 65 180 0 -94 M 15 17 0 -94 M 18 29 0 -94 M 30 44 1 -94 M 45 45 0 -94 M 55 64 0 -94 M 65 180 1 -95 F 15 17 1 -95 F 18 29 1 -95 F 30 44 1 -95 F 45 45 1 -95 F 55 64 1 -95 F 65 180 1 -95 M 15 17 1 -95 M 18 29 1 -95 M 30 44 1 -95 M 45 45 1 -95 M 55 64 1 -95 M 65 180 1 -101 F 15 17 1 -101 F 18 29 1 -101 F 30 44 1 -101 F 45 45 1 -101 F 55 64 1 -101 F 65 180 1 -101 M 15 17 1 -101 M 18 29 1 -101 M 30 44 1 -101 M 45 45 1 -101 M 55 64 1 -101 M 65 180 1 -102 F 15 17 1 -102 F 18 29 1 -102 F 30 44 1 -102 F 45 45 1 -102 F 55 64 1 -102 F 65 180 1 -102 M 15 17 1 -102 M 18 29 1 -102 M 30 44 1 -102 M 45 45 1 -102 M 55 64 1 -102 M 65 180 1 -104 F 15 17 1 -104 F 18 29 1 -104 F 30 44 1 -104 F 45 45 1 -104 F 55 64 1 -104 F 65 180 1 -104 M 15 17 1 -104 M 18 29 1 -104 M 30 44 1 -104 M 45 45 1 -104 M 55 64 1 -104 M 65 180 1 -106 F 15 17 0 -106 F 18 29 0 -106 F 30 44 1 -106 F 45 45 0 -106 F 55 64 0 -106 F 65 180 0 -106 M 15 17 0 -106 M 18 29 0 -106 M 30 44 1 -106 M 45 45 0 -106 M 55 64 0 -106 M 65 180 1 -107 F 15 17 1 -107 F 18 29 1 -107 F 30 44 1 -107 F 45 45 1 -107 F 55 64 1 -107 F 65 180 1 -107 M 15 17 1 -107 M 18 29 1 -107 M 30 44 1 -107 M 45 45 1 -107 M 55 64 1 -107 M 65 180 1 -1 F 15 17 7 -1 F 18 29 10 -1 F 30 44 19 -1 F 45 45 10 -1 F 55 64 9 -1 F 65 180 12 -1 M 15 17 6 -1 M 18 29 9 -1 M 30 44 18 -1 M 45 45 10 -1 M 55 64 10 -1 M 65 180 18 -2 F 15 17 1 -2 F 18 29 1 -2 F 30 44 2 -2 F 45 45 1 -2 F 55 64 1 -2 F 65 180 1 -2 M 15 17 1 -2 M 18 29 1 -2 M 30 44 1 -2 M 45 45 1 -2 M 55 64 1 -2 M 65 180 1 -3 F 15 17 1 -3 F 18 29 1 -3 F 30 44 3 -3 F 45 45 2 -3 F 55 64 1 -3 F 65 180 2 -3 M 15 17 1 -3 M 18 29 1 -3 M 30 44 3 -3 M 45 45 1 -3 M 55 64 1 -3 M 65 180 3 -4 F 15 17 2 -4 F 18 29 2 -4 F 30 44 5 -4 F 45 45 3 -4 F 55 64 2 -4 F 65 180 3 -4 M 15 17 2 -4 M 18 29 2 -4 M 30 44 4 -4 M 45 45 2 -4 M 55 64 2 -4 M 65 180 5 -5 F 15 17 1 -5 F 18 29 1 -5 F 30 44 2 -79 F 18 29 2 -79 F 30 44 3 -79 F 45 45 2 -79 F 55 64 1 -79 F 65 180 2 -79 M 15 17 2 -79 M 18 29 2 -79 M 30 44 3 -79 M 45 45 2 -79 M 55 64 1 -79 M 65 180 2 -80 F 15 17 2 -80 F 18 29 3 -80 F 30 44 4 -80 F 45 45 2 -80 F 55 64 2 -80 F 65 180 3 -80 M 15 17 2 -80 M 18 29 3 -80 M 30 44 4 -80 M 45 45 3 -80 M 55 64 2 -80 M 65 180 4 -81 F 15 17 2 -81 F 18 29 2 -81 F 30 44 3 -81 F 45 45 2 -81 F 55 64 1 -81 F 65 180 2 -81 M 15 17 2 -81 M 18 29 2 -81 M 30 44 3 -81 M 45 45 2 -81 M 55 64 2 -81 M 65 180 3 -82 F 15 17 5 -82 F 18 29 6 -82 F 30 44 10 -82 F 45 45 5 -82 F 55 64 4 -82 F 65 180 6 -82 M 15 17 5 -82 M 18 29 6 -82 M 30 44 10 -82 M 45 45 6 -82 M 55 64 5 -82 M 65 180 8 -83 F 15 17 3 -83 F 18 29 3 -83 F 30 44 5 -83 F 45 45 3 -83 F 55 64 2 -83 F 65 180 3 -83 M 15 17 3 -83 M 18 29 3 -83 M 30 44 5 -83 M 45 45 3 -83 M 55 64 2 -83 M 65 180 4 -84 F 15 17 2 -84 F 18 29 2 -84 F 30 44 4 -84 F 45 45 2 -84 F 55 64 2 -84 F 65 180 2 -84 M 15 17 2 -84 M 18 29 2 -84 M 30 44 4 -84 M 45 45 2 -84 M 55 64 2 -84 M 65 180 3 -85 F 15 17 1 -85 F 18 29 1 -85 F 30 44 2 -85 F 45 45 1 -85 F 55 64 1 -85 F 65 180 1 -85 M 15 17 1 -85 M 18 29 1 -85 M 30 44 2 -85 M 45 45 1 -85 M 55 64 1 -85 M 65 180 2 -86 F 15 17 1 -86 F 18 29 1 -86 F 30 44 1 -86 F 45 45 1 -86 F 55 64 1 -86 F 65 180 1 -86 M 15 17 1 -86 M 18 29 1 -86 M 30 44 1 -86 M 45 45 1 -86 M 55 64 1 -86 M 65 180 1 -87 F 15 17 5 -87 F 18 29 5 -87 F 30 44 8 -87 F 45 45 5 -87 F 55 64 4 -87 F 65 180 5 -87 M 15 17 4 -87 M 18 29 5 -87 M 30 44 8 -87 M 45 45 5 -87 M 55 64 4 -87 M 65 180 7 -88 F 15 17 1 -88 F 18 29 1 -88 F 30 44 2 -88 F 45 45 1 -88 F 55 64 1 -88 F 65 180 1 -88 M 15 17 1 -88 M 18 29 1 -88 M 30 44 2 -88 M 45 45 1 -88 M 55 64 1 -88 M 65 180 2 -89 F 15 17 2 -89 F 18 29 2 -89 F 30 44 3 -89 F 45 45 2 -89 F 55 64 1 -89 F 65 180 2 -89 M 15 17 2 -89 M 18 29 2 -89 M 30 44 3 -89 M 45 45 2 -89 M 55 64 2 -89 M 65 180 3 -90 F 15 17 1 -90 F 18 29 2 -90 F 30 44 3 -90 F 45 45 1 -90 F 55 64 1 -90 F 65 180 2 -90 M 15 17 1 -90 M 18 29 2 -90 M 30 44 3 -90 M 45 45 2 -90 M 55 64 1 -90 M 65 180 2 -92 F 15 17 2 -92 F 18 29 3 -63 F 15 17 13 -63 F 18 29 16 -63 F 30 44 24 -63 F 45 45 13 -63 F 55 64 11 -63 F 65 180 15 -63 M 15 17 13 -63 M 18 29 15 -63 M 30 44 24 -63 M 45 45 14 -63 M 55 64 12 -63 M 65 180 20 -65 F 15 17 5 -65 F 18 29 6 -65 F 30 44 8 -65 F 45 45 5 -65 F 55 64 4 -65 F 65 180 5 -65 M 15 17 4 -65 M 18 29 5 -65 M 30 44 8 -65 M 45 45 5 -65 M 55 64 4 -65 M 65 180 7 -66 F 15 17 1 -66 F 18 29 1 -66 F 30 44 2 -66 F 45 45 1 -66 F 55 64 1 -66 F 65 180 1 -66 M 15 17 1 -66 M 18 29 1 -66 M 30 44 2 -66 M 45 45 1 -66 M 55 64 1 -66 M 65 180 2 -67 F 15 17 1 -67 F 18 29 1 -67 F 30 44 2 -67 F 45 45 1 -67 F 55 64 1 -67 F 65 180 1 -67 M 15 17 1 -67 M 18 29 1 -67 M 30 44 2 -67 M 45 45 1 -67 M 55 64 1 -67 M 65 180 2 -68 F 15 17 1 -68 F 18 29 2 -68 F 30 44 2 -68 F 45 45 1 -68 F 55 64 1 -68 F 65 180 2 -68 M 15 17 1 -68 M 18 29 2 -68 M 30 44 2 -68 M 45 45 1 -68 M 55 64 1 -68 M 65 180 2 -69 F 15 17 2 -69 F 18 29 2 -69 F 30 44 3 -69 F 45 45 2 -69 F 55 64 1 -69 F 65 180 2 -69 M 15 17 2 -69 M 18 29 2 -69 M 30 44 3 -69 M 45 45 2 -69 M 55 64 1 -69 M 65 180 3 -71 F 15 17 3 -71 F 18 29 4 -71 F 30 44 5 -71 F 45 45 3 -71 F 55 64 2 -71 F 65 180 3 -71 M 15 17 3 -71 M 18 29 3 -71 M 30 44 5 -71 M 45 45 3 -71 M 55 64 3 -71 M 65 180 5 -72 F 15 17 7 -72 F 18 29 8 -72 F 30 44 12 -72 F 45 45 7 -72 F 55 64 6 -72 F 65 180 8 -72 M 15 17 6 -72 M 18 29 8 -72 M 30 44 12 -72 M 45 45 7 -72 M 55 64 6 -72 M 65 180 10 -73 F 15 17 3 -73 F 18 29 3 -73 F 30 44 5 -73 F 45 45 2 -73 F 55 64 2 -73 F 65 180 3 -73 M 15 17 2 -73 M 18 29 3 -73 M 30 44 5 -73 M 45 45 3 -73 M 55 64 2 -73 M 65 180 4 -74 F 15 17 2 -74 F 18 29 2 -74 F 30 44 3 -74 F 45 45 2 -74 F 55 64 1 -74 F 65 180 2 -74 M 15 17 2 -74 M 18 29 2 -74 M 30 44 3 -74 M 45 45 2 -74 M 55 64 1 -74 M 65 180 3 -75 F 15 17 3 -75 F 18 29 4 -75 F 30 44 6 -75 F 45 45 3 -75 F 55 64 3 -75 F 65 180 4 -75 M 15 17 3 -75 M 18 29 4 -75 M 30 44 6 -75 M 45 45 4 -75 M 55 64 3 -75 M 65 180 5 -78 F 15 17 3 -78 F 18 29 4 -78 F 30 44 6 -78 F 45 45 3 -78 F 55 64 3 -78 F 65 180 4 -78 M 15 17 3 -78 M 18 29 4 -78 M 30 44 6 -78 M 45 45 3 -78 M 55 64 3 -78 M 65 180 5 -79 F 15 17 2 -100 M 65 180 2 -105 F 15 17 0 -105 F 18 29 0 -105 F 30 44 1 -105 F 45 45 0 -105 F 55 64 0 -105 F 65 180 0 -105 M 15 17 0 -105 M 18 29 0 -105 M 30 44 0 -105 M 45 45 0 -105 M 55 64 0 -105 M 65 180 1 -43 F 15 17 1 -43 F 18 29 2 -43 F 30 44 3 -43 F 45 45 1 -43 F 55 64 1 -43 F 65 180 2 -43 M 15 17 1 -43 M 18 29 2 -43 M 30 44 3 -43 M 45 45 2 -43 M 55 64 1 -43 M 65 180 2 -44 F 15 17 2 -44 F 18 29 2 -44 F 30 44 3 -44 F 45 45 2 -44 F 55 64 1 -44 F 65 180 2 -44 M 15 17 2 -44 M 18 29 2 -44 M 30 44 3 -44 M 45 45 2 -44 M 55 64 1 -44 M 65 180 2 -46 F 15 17 2 -46 F 18 29 2 -46 F 30 44 3 -46 F 45 45 2 -46 F 55 64 1 -46 F 65 180 2 -46 M 15 17 2 -46 M 18 29 2 -46 M 30 44 3 -46 M 45 45 2 -46 M 55 64 1 -46 M 65 180 2 -53 F 15 17 1 -53 F 18 29 1 -53 F 30 44 2 -53 F 45 45 1 -53 F 55 64 1 -53 F 65 180 1 -53 M 15 17 1 -53 M 18 29 1 -53 M 30 44 2 -53 M 45 45 1 -53 M 55 64 1 -53 M 65 180 1 -56 F 15 17 1 -56 F 18 29 2 -56 F 30 44 2 -56 F 45 45 1 -56 F 55 64 1 -56 F 65 180 2 -56 M 15 17 1 -56 M 18 29 2 -56 M 30 44 2 -56 M 45 45 1 -56 M 55 64 1 -56 M 65 180 2 -57 F 15 17 1 -57 F 18 29 1 -57 F 30 44 1 -57 F 45 45 1 -57 F 55 64 1 -57 F 65 180 1 -57 M 15 17 1 -57 M 18 29 1 -57 M 30 44 1 -57 M 45 45 1 -57 M 55 64 1 -57 M 65 180 1 -58 F 15 17 16 -58 F 18 29 19 -58 F 30 44 29 -58 F 45 45 16 -58 F 55 64 13 -58 F 65 180 18 -58 M 15 17 15 -58 M 18 29 19 -58 M 30 44 29 -58 M 45 45 18 -58 M 55 64 14 -58 M 65 180 25 -59 F 15 17 2 -59 F 18 29 3 -59 F 30 44 4 -59 F 45 45 2 -59 F 55 64 2 -59 F 65 180 3 -59 M 15 17 2 -59 M 18 29 3 -59 M 30 44 4 -59 M 45 45 2 -59 M 55 64 2 -59 M 65 180 3 -60 F 15 17 2 -60 F 18 29 2 -60 F 30 44 4 -60 F 45 45 2 -60 F 55 64 2 -60 F 65 180 2 -60 M 15 17 2 -60 M 18 29 2 -60 M 30 44 4 -60 M 45 45 2 -60 M 55 64 2 -60 M 65 180 3 -61 F 15 17 4 -61 F 18 29 4 -61 F 30 44 7 -61 F 45 45 4 -61 F 55 64 3 -61 F 65 180 4 -61 M 15 17 4 -61 M 18 29 4 -61 M 30 44 7 -61 M 45 45 4 -61 M 55 64 3 -61 M 65 180 6 -62 F 15 17 1 -62 F 18 29 1 -62 F 30 44 2 -62 F 45 45 1 -62 F 55 64 1 -62 F 65 180 1 -62 M 15 17 1 -62 M 18 29 1 -62 M 30 44 2 -62 M 45 45 1 -62 M 55 64 1 -62 M 65 180 2 -49 M 55 64 1 -49 M 65 180 3 -50 F 15 17 1 -50 F 18 29 2 -50 F 30 44 3 -50 F 45 45 2 -50 F 55 64 2 -50 F 65 180 2 -50 M 15 17 1 -50 M 18 29 2 -50 M 30 44 3 -50 M 45 45 2 -50 M 55 64 2 -50 M 65 180 3 -51 F 15 17 1 -51 F 18 29 1 -51 F 30 44 3 -51 F 45 45 1 -51 F 55 64 1 -51 F 65 180 2 -51 M 15 17 1 -51 M 18 29 1 -51 M 30 44 3 -51 M 45 45 1 -51 M 55 64 1 -51 M 65 180 3 -52 F 15 17 1 -52 F 18 29 1 -52 F 30 44 2 -52 F 45 45 1 -52 F 55 64 1 -52 F 65 180 2 -52 M 15 17 1 -52 M 18 29 1 -52 M 30 44 2 -52 M 45 45 1 -52 M 55 64 1 -52 M 65 180 2 -54 F 15 17 2 -54 F 18 29 3 -54 F 30 44 5 -54 F 45 45 3 -54 F 55 64 3 -54 F 65 180 4 -54 M 15 17 2 -54 M 18 29 3 -54 M 30 44 5 -54 M 45 45 3 -54 M 55 64 3 -54 M 65 180 5 -55 F 15 17 1 -55 F 18 29 1 -55 F 30 44 2 -55 F 45 45 1 -55 F 55 64 1 -55 F 65 180 1 -55 M 15 17 1 -55 M 18 29 1 -55 M 30 44 2 -55 M 45 45 1 -55 M 55 64 1 -55 M 65 180 2 -64 F 15 17 1 -64 F 18 29 2 -64 F 30 44 3 -64 F 45 45 2 -64 F 55 64 2 -64 F 65 180 3 -64 M 15 17 1 -64 M 18 29 2 -64 M 30 44 3 -64 M 45 45 2 -64 M 55 64 2 -64 M 65 180 4 -70 F 15 17 1 -70 F 18 29 1 -70 F 30 44 2 -70 F 45 45 1 -70 F 55 64 1 -70 F 65 180 1 -70 M 15 17 1 -70 M 18 29 1 -70 M 30 44 2 -70 M 45 45 1 -70 M 55 64 1 -70 M 65 180 2 -76 F 15 17 1 -76 F 18 29 2 -76 F 30 44 3 -76 F 45 45 2 -76 F 55 64 2 -76 F 65 180 2 -76 M 15 17 1 -76 M 18 29 2 -76 M 30 44 3 -76 M 45 45 2 -76 M 55 64 2 -76 M 65 180 3 -77 F 15 17 1 -77 F 18 29 1 -77 F 30 44 2 -77 F 45 45 1 -77 F 55 64 1 -77 F 65 180 1 -77 M 15 17 1 -77 M 18 29 1 -77 M 30 44 2 -77 M 45 45 1 -77 M 55 64 1 -77 M 65 180 2 -91 F 15 17 0 -91 F 18 29 1 -91 F 30 44 1 -91 F 45 45 1 -91 F 55 64 1 -91 F 65 180 1 -91 M 15 17 0 -91 M 18 29 1 -91 M 30 44 1 -91 M 45 45 1 -91 M 55 64 1 -91 M 65 180 1 -99 F 15 17 1 -99 F 18 29 1 -99 F 30 44 2 -99 F 45 45 1 -99 F 55 64 1 -99 F 65 180 2 -99 M 15 17 1 -99 M 18 29 1 -99 M 30 44 2 -99 M 45 45 1 -99 M 55 64 1 -99 M 65 180 2 -100 F 15 17 1 -100 F 18 29 1 -100 F 30 44 2 -100 F 45 45 1 -100 F 55 64 1 -100 F 65 180 2 -100 M 15 17 1 -100 M 18 29 1 -100 M 30 44 2 -100 M 45 45 1 -100 M 55 64 1 -11 M 45 45 1 -11 M 55 64 1 -11 M 65 180 2 -35 F 15 17 1 -35 F 18 29 2 -35 F 30 44 4 -35 F 45 45 2 -35 F 55 64 2 -35 F 65 180 3 -35 M 15 17 1 -35 M 18 29 2 -35 M 30 44 4 -35 M 45 45 2 -35 M 55 64 2 -35 M 65 180 4 -36 F 15 17 2 -36 F 18 29 3 -36 F 30 44 5 -36 F 45 45 3 -36 F 55 64 3 -36 F 65 180 4 -36 M 15 17 2 -36 M 18 29 3 -36 M 30 44 5 -36 M 45 45 3 -36 M 55 64 3 -36 M 65 180 6 -37 F 15 17 3 -37 F 18 29 4 -37 F 30 44 7 -37 F 45 45 4 -37 F 55 64 4 -37 F 65 180 6 -37 M 15 17 3 -37 M 18 29 4 -37 M 30 44 7 -37 M 45 45 4 -37 M 55 64 4 -37 M 65 180 8 -38 F 15 17 1 -38 F 18 29 1 -38 F 30 44 3 -38 F 45 45 1 -38 F 55 64 1 -38 F 65 180 2 -38 M 15 17 1 -38 M 18 29 1 -38 M 30 44 3 -38 M 45 45 1 -38 M 55 64 1 -38 M 65 180 3 -39 F 15 17 1 -39 F 18 29 2 -39 F 30 44 3 -39 F 45 45 2 -39 F 55 64 1 -39 F 65 180 2 -39 M 15 17 1 -39 M 18 29 1 -39 M 30 44 3 -39 M 45 45 2 -39 M 55 64 2 -39 M 65 180 3 -40 F 15 17 1 -40 F 18 29 2 -40 F 30 44 3 -40 F 45 45 2 -40 F 55 64 2 -40 F 65 180 2 -40 M 15 17 1 -40 M 18 29 2 -40 M 30 44 3 -40 M 45 45 2 -40 M 55 64 2 -40 M 65 180 3 -41 F 15 17 1 -41 F 18 29 2 -41 F 30 44 3 -41 F 45 45 2 -41 F 55 64 2 -41 F 65 180 2 -41 M 15 17 1 -41 M 18 29 2 -41 M 30 44 3 -41 M 45 45 2 -41 M 55 64 2 -41 M 65 180 3 -42 F 15 17 1 -42 F 18 29 2 -42 F 30 44 4 -42 F 45 45 2 -42 F 55 64 2 -42 F 65 180 3 -42 M 15 17 1 -42 M 18 29 2 -42 M 30 44 4 -42 M 45 45 2 -42 M 55 64 2 -42 M 65 180 4 -45 F 15 17 1 -45 F 18 29 1 -45 F 30 44 2 -45 F 45 45 1 -45 F 55 64 1 -45 F 65 180 1 -45 M 15 17 1 -45 M 18 29 1 -45 M 30 44 1 -45 M 45 45 1 -45 M 55 64 1 -45 M 65 180 2 -47 F 15 17 1 -47 F 18 29 1 -47 F 30 44 2 -47 F 45 45 1 -47 F 55 64 1 -47 F 65 180 2 -47 M 15 17 1 -47 M 18 29 1 -47 M 30 44 2 -47 M 45 45 1 -47 M 55 64 1 -47 M 65 180 2 -48 F 15 17 3 -48 F 18 29 4 -48 F 30 44 8 -48 F 45 45 4 -48 F 55 64 4 -48 F 65 180 6 -48 M 15 17 3 -48 M 18 29 4 -48 M 30 44 7 -48 M 45 45 4 -48 M 55 64 4 -48 M 65 180 8 -49 F 15 17 1 -49 F 18 29 1 -49 F 30 44 3 -49 F 45 45 1 -49 F 55 64 1 -49 F 65 180 2 -49 M 15 17 1 -49 M 18 29 1 -49 M 30 44 3 -49 M 45 45 1 -10 F 15 17 3 -10 F 18 29 4 -10 F 30 44 7 -10 F 45 45 4 -10 F 55 64 4 -10 F 65 180 5 -10 M 15 17 2 -10 M 18 29 4 -10 M 30 44 7 -10 M 45 45 4 -10 M 55 64 4 -10 M 65 180 7 -11 F 15 17 1 -11 F 18 29 1 -11 F 30 44 2 -11 F 45 45 1 -11 F 55 64 1 -11 F 65 180 1 -11 M 15 17 1 -11 M 18 29 1 -11 M 30 44 2 + +COPY sampling.panel_str_theo_gen_eta FROM STDIN; +1 f 15 17 2 3 +1 f 18 29 10 15 +1 f 30 44 21 31 +1 f 45 54 13 19 +1 f 55 64 12 18 +1 f 65 180 23 34 +1 m 15 17 2 3 +1 m 18 29 11 16 +1 m 30 44 21 32 +1 m 45 54 13 19 +1 m 55 64 11 17 +1 m 65 180 17 25 +2 f 15 17 1 1 +2 f 18 29 1 1 +2 f 30 44 1 3 +2 f 45 54 1 2 +2 f 55 64 1 2 +2 f 65 180 1 4 +2 m 15 17 1 1 +2 m 18 29 1 2 +2 m 30 44 1 3 +2 m 45 54 1 2 +2 m 55 64 1 2 +2 m 65 180 1 3 +3 f 15 17 1 1 +3 f 18 29 1 3 +3 f 30 44 2 6 +3 f 45 54 1 4 +3 f 55 64 1 3 +3 f 65 180 3 6 +3 m 15 17 1 1 +3 m 18 29 1 3 +3 m 30 44 3 6 +3 m 45 54 2 4 +3 m 55 64 1 3 +3 m 65 180 2 4 +4 f 15 17 1 1 +4 f 18 29 1 6 +4 f 30 44 1 11 +4 f 45 54 1 7 +4 f 55 64 1 6 +4 f 65 180 1 13 +4 m 15 17 1 1 +4 m 18 29 1 6 +4 m 30 44 1 12 +4 m 45 54 1 7 +4 m 55 64 1 6 +4 m 65 180 1 10 +5 f 15 17 1 1 +5 f 18 29 1 2 +5 f 30 44 2 3 +5 f 45 54 1 2 +5 f 55 64 1 2 +5 f 65 180 2 4 +5 m 15 17 1 1 +5 m 18 29 1 2 +5 m 30 44 2 3 +5 m 45 54 1 2 +5 m 55 64 1 2 +5 m 65 180 1 3 +6 f 15 17 1 1 +6 f 18 29 1 3 +6 f 30 44 2 7 +6 f 45 54 1 5 +6 f 55 64 1 5 +6 f 65 180 3 10 +6 m 15 17 1 1 +6 m 18 29 1 4 +6 m 30 44 2 8 +6 m 45 54 1 5 +6 m 55 64 1 4 +6 m 65 180 2 7 +7 f 15 17 1 1 +7 f 18 29 1 1 +7 f 30 44 1 2 +7 f 45 54 1 1 +7 f 55 64 1 1 +7 f 65 180 1 2 +7 m 15 17 1 1 +7 m 18 29 1 1 +7 m 30 44 1 2 +7 m 45 54 1 1 +7 m 55 64 1 1 +7 m 65 180 1 2 +8 f 15 17 1 1 +8 f 18 29 1 2 +8 f 30 44 1 4 +8 f 45 54 1 3 +8 f 55 64 1 2 +8 f 65 180 1 5 +8 m 15 17 1 1 +8 m 18 29 1 2 +8 m 30 44 1 4 +8 m 45 54 1 3 +8 m 55 64 1 2 +8 m 65 180 1 4 +9 f 15 17 1 1 +9 f 18 29 1 2 +9 f 30 44 1 5 +9 f 45 54 1 3 +9 f 55 64 1 3 +9 f 65 180 2 7 +9 m 15 17 1 1 +9 m 18 29 1 2 +9 m 30 44 1 5 +9 m 45 54 1 3 +9 m 55 64 1 3 +9 m 65 180 1 5 +10 f 15 17 1 1 +10 f 18 29 6 3 +10 f 30 44 13 6 +10 f 45 54 9 4 +10 f 55 64 8 4 +10 f 65 180 19 8 +10 m 15 17 1 1 +10 m 18 29 6 3 +10 m 30 44 13 6 +10 m 45 54 8 4 +10 m 55 64 8 3 +10 m... [truncated message content] |
From: <pop...@us...> - 2012-01-17 14:12:08
|
Revision: 2140 http://yaacs.svn.sourceforge.net/yaacs/?rev=2140&view=rev Author: poppero619 Date: 2012-01-17 14:12:01 +0000 (Tue, 17 Jan 2012) Log Message: ----------- * fix italian pdf user manual (links, ids and wrong chars) Modified Paths: -------------- trunk/docs/user_manual/pdf/it/yacati.xml trunk/docs/user_manual/pdf/it/yacco.xml trunk/docs/user_manual/pdf/it/yachoo.xml trunk/docs/user_manual/pdf/it/yadmin.xml trunk/docs/user_manual/pdf/it/yamon.xml Modified: trunk/docs/user_manual/pdf/it/yacati.xml =================================================================== --- trunk/docs/user_manual/pdf/it/yacati.xml 2012-01-17 13:15:55 UTC (rev 2139) +++ trunk/docs/user_manual/pdf/it/yacati.xml 2012-01-17 14:12:01 UTC (rev 2140) @@ -4,7 +4,7 @@ Ovvero YaaCs per gli intervistatori. </para> <!-- immagine yacati CAMBIATA--> -<figure id="yacati_img"><title>Yacati</title> +<figure id="yacatiimg"><title>Yacati</title> <mediaobject> <imageobject> <imagedata fileref="images/yacati.png"> @@ -14,10 +14,10 @@ </figure> <para> -La finestra di Yacati (<xref linkend="yacati_img">) si puo' divire in diverse aree.</para> +La finestra di Yacati (<xref linkend="yacatiimg">) si puo' divire in diverse aree.</para> <!-- immagine prima sezione CAMBIATA--> -<figure id="yacati_1st"><title>Yacati per Area</title> +<figure id="yacati1st"><title>Yacati per Area</title> <mediaobject> <imageobject> <imagedata fileref="images/yacati_area.png"> @@ -112,22 +112,17 @@ <para>Quando si clicca per spedire l'email il sistema attua un check preventivo. Cio' significa che oltre a verificare la correttezza della sintassi dell'indirizzo, si verifica anche che il dominio esista veramente e che l'utente sia definito per il server di posta destinatario del messaggio.</para> <para>A seguire ecco cosa succede dopo aver fatto doppio click per inviare l'email:</para> <itemizedlist> - <listitem><para>Non apparira' piu' la scritta "stiamo spedendo la tua e-mail, bensi' "stiamo verificando l'indirizzo" (<xref linkend="verifica_img">) </para></listitem> + <listitem><para>Non apparira' piu' la scritta "stiamo spedendo la tua e-mail, bensi' "stiamo verificando l'indirizzo" </para></listitem> <listitem><para>Se l'indirizzo inserito viene validato la scritta diventa "stiamo spedendo la tua e-mail.." </para></listitem> <listitem><para>Se invece l'indirizzo non viene validato, i messaggi di errore possono essere due:</para> - <para>"Il dominio dell'email (ggggggggg.it) non esiste. Controlla di aver digitato correttamente o richiedi l'indirizzo!" (<xref linkend="user_error1_img">), oppure </para> - <para>"Il dominio dell'email (gmail.com) e' valido ma la parte prima della @(sakdjsajdlskadsalkjldksajlda) non e' corretta. Controlla di aver digitato correttamente o richiedi l'indirizzo!" (<xref linkend="user_error2_img">) </para> -</itemizedlst> -<para>Se la chiamata è in linea non viene fatto l'hang up fino a quando l'email non viene validata in modo tale che sia possibile richiedere l'indirizzo in tempo reale.</para></listitem> - - - - - + <para>"Il dominio dell'email (ggggggggg.it) non esiste. Controlla di aver digitato correttamente o richiedi l'indirizzo!", oppure </para> + <para>"Il dominio dell'email (gmail.com) e' valido ma la parte prima della @(sakdjsajdlskadsalkjldksajlda) non e' corretta. Controlla di aver digitato correttamente o richiedi l'indirizzo!" </para> + <para>Se la chiamata è in linea non viene fatto l'hang up fino a quando l'email non viene validata in modo tale che sia possibile richiedere l'indirizzo in tempo reale.</para></listitem> + </itemizedlist> </section> @@ -159,7 +154,7 @@ <section><title>Ultimo contatto</title> <section><title>Ultimo stato del contatto</title> - <para>Come in figura di esempio (<xref linkend="yacati_1st">) questo campo e' occupato dalla scritta "Occ: 14/Jan - 16:11". Indica come e' stato classificato il contatto l'ultima volta che e' stato contattato e data e ora di ritorno programmato.</para> + <para>Come in figura di esempio (<xref linkend="yacati1st">) questo campo e' occupato dalla scritta "Occ: 14/Jan - 16:11". Indica come e' stato classificato il contatto l'ultima volta che e' stato contattato e data e ora di ritorno programmato.</para> </section> <!--<section><title>Ripartizione Geografica</title> @@ -202,11 +197,11 @@ <para>La persona e' irrintracciabile nell'orario di intervista (ad esempio l'intervistato e' disponibile solo la mattina per un'indagine pomeriggio-sera) o nel periodo di intervista (ad esempio l'indagine dura una settimana e la persona e' irragiungibile per un mese).</para></listitem> <listitem><para>Non Quota: vanno salvati come "Non Quota" i contatti che non rientrano nell'universo delle persone da intervistare: fasce di popolazione escluse dall'indagine per quote concluse o non corrispondenti al profilo ricercato.</para> <para>Inoltre, ad esempio numeri di telefono corrispondenti ad aziende se stiamo intervistando la popolazione italiana, oppure numeri corrispondenti ad abitazioni se stiamo intervistando aziende.</para></listitem> - <listitem><para>Risponde: quando una persona risponde all'intervista, dopo aver completato il questionario e' necessario registrare i suoi dati anagrafici: selezionare il pulsante relativo al genere dell' intervistato (Maschio o Femmina) rendendolo attivo, immettere l'anno di nascita scrivendo il valore corrispondente nella casella Anno di nascita in quattro cifre, ad esempio 1960 (<xref linkend="yacati_2nd">).</para></listitem> + <listitem><para>Risponde: quando una persona risponde all'intervista, dopo aver completato il questionario e' necessario registrare i suoi dati anagrafici: selezionare il pulsante relativo al genere dell' intervistato (Maschio o Femmina) rendendolo attivo, immettere l'anno di nascita scrivendo il valore corrispondente nella casella Anno di nascita in quattro cifre, ad esempio 1960 (<xref linkend="yacati2nd">).</para></listitem> </itemizedlist> -<figure id="yacati_2nd"><title>Yacati - Dati Anagrafici</title> +<figure id="yacati2nd"><title>Yacati - Dati Anagrafici</title> <mediaobject> <imageobject> <imagedata fileref="images/yacati_2nd.png"> @@ -218,11 +213,9 @@ <itemizedlist> <listitem><para>Appuntamento: se l'intervistato desidera essere ricontattato in un altro momento nel periodo di durata dell'indagine, l'intervistatore dovra' cliccare due volte sul pulsante corrispondente.</para> - <para>Comparira' una prima finestra con un calendario da dove viene selezionato il giorno in cui il contattato desidera essere intervistato. Cliccando su <emphasis>Prossimo</emphasis> compare la seconda finestra in cui si deve inserire l'ora (hh:mm); infine cliccando ancora una volta su <emphasis>Prossimo</emphasis> una terza finestra chiedera' il nome di battesimo, il genere e l'anno di nascita del contattato. Per confermare l'appuntamento cliccare su <emphasis>Salva</emphasis> altrimenti su <emphasis>Cancella</emphasis> per modificare i dati inseriti (<xref linkend="yacati_app">).</para> + <para>Comparira' una prima finestra con un calendario da dove viene selezionato il giorno in cui il contattato desidera essere intervistato. Cliccando su <emphasis>Prossimo</emphasis> compare la seconda finestra in cui si deve inserire l'ora (hh:mm); infine cliccando ancora una volta su <emphasis>Prossimo</emphasis> una terza finestra chiedera' il nome di battesimo, il genere e l'anno di nascita del contattato. Per confermare l'appuntamento cliccare su <emphasis>Salva</emphasis> altrimenti su <emphasis>Cancella</emphasis> per modificare i dati inseriti (<xref linkend="yacatiapp">).</para> - - - <figure id="yacati_app"><title>Yacati - Finestra per Appuntamenti</title> + <figure id="yacatiapp"><title>Yacati - Finestra per Appuntamenti</title> <mediaobject> <imageobject> <imagedata fileref="images/yacati_app.png"> @@ -254,18 +247,16 @@ <para>Se il sistema e' configurato per l'accesso al questionario su interfaccia web, cliccando su questo tasto si aprira' il browser predefinito, puntato alla pagina iniziale del questionario.</para> </section> - <!-- NON C'È PIÙ <section><title>Next</title> + <!-- NON C'E' PIU' <section><title>Next</title> <para> Per recuperare un contatto cliccare su "Next". Se sono abilitate le funzioni di autocall in Voip sara' necessario cliccare su Next solamente quando la schermata di Yacati appare vuota (all'inizio della sessione di lavoro o dopo la pausa, ad esempio). </para> </section> --> <section><title>Fine</title> - <para>L'icona Fine determina la fine della sessione di lavoro. Comparira' quindi la schermata in <xref linkend="yacati_fine"> contenente i dati relativi al turno di lavoro (ora di inizio e fine, numero di ore lavorate e di interviste fatte, pausa utilizzata ed eventualmente la penalita').</para> + <para>L'icona Fine determina la fine della sessione di lavoro. Comparira' quindi la schermata in <xref linkend="yacatifine"> contenente i dati relativi al turno di lavoro (ora di inizio e fine, numero di ore lavorate e di interviste fatte, pausa utilizzata ed eventualmente la penalita').</para> - </section> - - <figure id="yacati_fine"><title>Yacati - Fine turno di lavoro</title> + <figure id="yacatifine"><title>Yacati - Fine turno di lavoro</title> <mediaobject> <imageobject> <imagedata fileref="images/yacati_fine.png"> @@ -273,14 +264,14 @@ <textobject><phrase>Yacati - Fine turno di lavoro</phrase></textobject> </mediaobject> </figure> + </section> - <section><title>Pausa</title> <para>Cliccando su "Pausa" inizia il periodo di pausa concesso all'intervistatore, secondo i tempi impostati dall'amministratore.</para> - <para>A pausa iniziata comparira' la finestra in <xref linkend="yacati_pausa"> riportante l'ora di inizio del periodo. Per riprendere il lavoro e' sufficiente cliccare "Ricomincia" nella finestra.</para> + <para>A pausa iniziata comparira' la finestra in <xref linkend="yacatipausa"> riportante l'ora di inizio del periodo. Per riprendere il lavoro e' sufficiente cliccare "Ricomincia" nella finestra.</para> - <figure id="yacati_pausa"><title>Yacati - Inizio turno di pausa</title> + <figure id="yacatipausa"><title>Yacati - Inizio turno di pausa</title> <mediaobject> <imageobject> <imagedata fileref="images/yacati_pausa.png"> @@ -289,7 +280,7 @@ </mediaobject> </figure> - <para> Nel caso in cui l'intervistatore superi il limite di minuti di pausa concesso, al tentativo di riprendere il lavoro verra' visualizzato un messaggio di errore che informa dell'accaduto (<xref linkend="yacati_stop">). L'intervistatore non potra' continuare il lavoro finche' non verra' sbloccato dal supervisore.</para> + <para> Nel caso in cui l'intervistatore superi il limite di minuti di pausa concesso, al tentativo di riprendere il lavoro verra' visualizzato un messaggio di errore che informa dell'accaduto. L'intervistatore non potra' continuare il lavoro finche' non verra' sbloccato dal supervisore.</para> </section> <section><title>Storia contatti</title> @@ -306,7 +297,7 @@ <section><title>Voip status bar </title> <para>Se nel client sono attive le funzionalita' voip, sul fondo della finestra comparira' una barra addizionale contenente informazioni sul processo di chiamata in corso come il numero selezionato e lo stato di avanzamento (accettato dal server, in progress, risposta o l'eventuale stato rilevato).</para> - <figure id="yacati_voip"><title>Voip status bar</title> + <figure id="yacativoip"><title>Voip status bar</title> <mediaobject> <imageobject> <imagedata fileref="images/yacati_voip.png"> @@ -317,7 +308,7 @@ <para>Per interagire con sistemi IVR o centralini telefonici e' necessario cliccare il piccolo telefono rosso posto nell'angolo destro della barra: apparira' cosi' un tastierino numerico per permettere la digitazione delle cifre richieste.</para> - <figure id="yacati_keypad"><title>Keypad</title> + <figure id="yacatikeypad"><title>Keypad</title> <mediaobject> <imageobject> <imagedata fileref="images/yacati_keypad.png"> Modified: trunk/docs/user_manual/pdf/it/yacco.xml =================================================================== --- trunk/docs/user_manual/pdf/it/yacco.xml 2012-01-17 13:15:55 UTC (rev 2139) +++ trunk/docs/user_manual/pdf/it/yacco.xml 2012-01-17 14:12:01 UTC (rev 2140) @@ -6,7 +6,7 @@ <para> Il programma e' diviso in due sezioni principali: la prima (Interviewers) e' dedicata alla gestione degli intervistatori mentre attraverso la seconda (Projects) vengono in parte gestiti i progetti. </para> <para> Ci occuperemo prima della sezione dedicata agli intervistatori e successivamente di quella relativa ai progetti. </para> -<figure id="yacco 1"><title>Schermata principale</title> +<figure><title>Schermata principale</title> <mediaobject> <imageobject> <imagedata fileref="images/new/schermata_iniziale_piccola.png"> @@ -64,13 +64,10 @@ <listitem><para><emphasis>Salary</emphasis>, ossia la paga oraria prevista;</para></listitem> <listitem><para><emphasis>Types</emphasis>, indica il tipo di indagini per cui l'intervistatore puo' operare (es. Telefonico, Vis a vis ...);</para></listitem> </itemizedlist> - </listitem> - + </listitem> </itemizedlist> - </listitem> - -<figure id="yacco 1"><title>Inserimento di un nuovo intervistatore</title> +<figure><title>Inserimento di un nuovo intervistatore</title> <mediaobject> <imageobject> <imagedata fileref="images/new/nuovo_int_piccola.png"> @@ -78,16 +75,12 @@ <textobject><phrase>Inserimento di un nuovo intervistatore</phrase></textobject> </mediaobject> </figure> + </listitem> - <listitem><para><emphasis>Sms to list</emphasis>: consente l'invio di sms ad una lista di numeri di cellulare riportati su un file .txt, a intervistatori non ancora inseriti nel database. Dopo aver scritto il testo del messaggio e selezionato il file con i numeri di cellulare con l'icona <emphasis>Sfoglia</emphasis>, sara' sufficiente cliccare su <emphasis>Upload</emphasis> per procedere all'invio del sms; </para></listitem> -<listitem><para><emphasis>Types</emphasis>: fornisce l'elenco delle tipologie di intervistatore gia' create con la possibilita' di cancellarle e di crearne di nuove.</para></listitem> +<listitem><para><emphasis>Types</emphasis>: fornisce l'elenco delle tipologie di intervistatore gia' create con la possibilita' di cancellarle e di crearne di nuove.</para> -</itemizedlist> -</section> - - -<figure id="yacco 1"><title>Tipologie intervistatori</title> +<figure><title>Tipologie intervistatori</title> <mediaobject> <imageobject> <imagedata fileref="images/new/Tipologie_int.png"> @@ -96,7 +89,11 @@ </mediaobject> </figure> +</listitem> +</itemizedlist> +</section> + <!-- PARTE SECONDA --> <section><title>Seconda Sezione</title> @@ -123,10 +120,10 @@ </para></listitem> <listitem><para><emphasis>Project</emphasis>: cliccando su questo pulsante compare una pagina divisa in due aree: in quella in alto sono elencate le indagini in corso, mentre in quella sottostante le indagini a cui l'intervistatore e' associato (sara' vuota nel caso in cui l'intervistatore non sia associato a nessun progetto).</para> <para>Affinche' l'intervistatore possa lavorare e' necessario che venga collegato ad un'indagine, trascinando l'icona dell'indagine nell'area sottostante. Per scollegare l'intervistatore dall'indagine e' sufficiente trascinare l'icona della stessa nel cestino. - </para></listitem> + </para> -<figure id="yacco 1"><title>Tool di associazione all'indagine</title> +<figure><title>Tool di associazione all'indagine</title> <mediaobject> <imageobject> <imagedata fileref="images/new/Tool_associa_piccola.png"> @@ -134,6 +131,7 @@ <textobject><phrase>Tool di associazione all'indagine</phrase></textobject> </mediaobject> </figure> +</listitem> <listitem><para><emphasis>Sms</emphasis>: si utilizza questa opzione quando si vuole effettuare una particolare comunicazione via sms ad un intervistatore. Compare cosi' una maschera vuota da compilare con il testo del messaggio con un contatore che mostra il numero di caratteri rimanenti. Per inviarlo premere <emphasis>Invia</emphasis>. @@ -147,10 +145,9 @@ <para>Cliccando su <emphasis>Edit</emphasis> compare un campo dove e' possibile personalizzare causale e ore da rendicontare.</para> <para>Cliccando su <emphasis>Pay</emphasis> si genera la nota di pagamento. Il documento stampato utilizza un template, piu' specificatamente il file utilizzato e' "ricevuta_temp.txt" che viene parametrizzato con i dati necessari e deve essere editato per inserire i dati relativi all'azienda.</para> <para>Cliccando su <emphasis>Export/Report</emphasis> si crea il report dei turni e delle ore lavorate dall'intervistatore. - </para></listitem> + </para> - -<figure id="yacco 1"><title>Tool dei pagamenti</title> +<figure><title>Tool dei pagamenti</title> <mediaobject> <imageobject> <imagedata fileref="images/new/Tool_pagamenti_piccola.png"> @@ -158,10 +155,9 @@ <textobject><phrase>Tool dei pagamenti</phrase></textobject> </mediaobject> </figure> +</listitem> - </itemizedlist> - </listitem> <listitem><para><emphasis>Edit</emphasis>: per modificare i dati dell'intervistatore relativi alle voci <emphasis>Main</emphasis>, <emphasis>Contact</emphasis>, <emphasis>Bank</emphasis> e <emphasis>Availability</emphasis>, completate al momento dell'inserimento del nuovo intervistatore. Inoltre si possono modificare anche altre informazioni presenti a destra della finestra: il punteggio, lo stato dell'intervistatore, la paga oraria e la tipologia. </para></listitem> @@ -208,7 +204,7 @@ <para>Consente di visualizzare per ciascuna indagine in corso o gia' conclusa i dettagli relativi al costo di ogni singolo intervistatore che ci ha lavorato per ciascuna intervista, al numero di interviste effettuate e il tempo dedicato alla survey.</para> -<figure id="yacco 1"><title>Report delle indagini</title> +<figure><title>Report delle indagini</title> <mediaobject> <imageobject> <imagedata fileref="images/new/report_indagini_piccola.png"> @@ -233,7 +229,7 @@ <para>Nel caso in cui il contatto sia stato classificato erroneamente come "Rifiuto" dall'intervistatore,e l'amministratore volesse rimetterlo in circolo, oltre a classificarlo come "Libero", dovra' anche stabilire ora e giorno del richiamo e selezionare il nome dell'intervistatore (operazioni non necessarie in tutti gli altri casi).</para> <para>Cliccando su "Reset All", ultima voce del menu a tendina nella voce Outcome, viene cancellata la storia del contatto, e il numero di tentativi viene resettato.</para> -<figure id="yacco 1"><title>Ricerca e modifica dei nominativi nelle indagini su lista</title> +<figure><title>Ricerca e modifica dei nominativi nelle indagini su lista</title> <mediaobject> <imageobject> <imagedata fileref="images/new/ricerca_nominativi.png"> @@ -399,7 +395,7 @@ <para>Per procedere con il pagamento e' necessario selezionare i progetti e cliccare sul tasto <emphasis>Ok</emphasis><para> <para>Il programma produrra' due tabelle: nella prima (<emphasis>Details Table</emphasis>) vengono riportati giorno, ora di inizio e di fine ed ore totali di ogni turno per i progetti selezionati, mentre nella seconda (<emphasis>Summary Table</emphasis>) per ogni progetto il totale delle ore lavorate, il compenso corrispondente in euro e la possilbilita' di rendicontare il tempo impiegato per la formazione se prevista. Ai piedi di questa tabella c'e' il tasto <emphasis>Pay</emphasis> con il quale si genera la nota di pagamento.</para> <para>Cliccando su <emphasis>Edit</emphasis> compare un campo dove e' possibile personalizzare causale e ore da rendicontare. <para> - <para>Anche in questo caso il documento stampato utilizza un template, ed in particolare il file utilizzato e' "ricevuta_temp.txt"; come nella procedura per la stampa della convenzione questo template viene parametrizzato con i dati necessari e deve essere editato per inserire i dati relativi all’azienda.</para> + <para>Anche in questo caso il documento stampato utilizza un template, ed in particolare il file utilizzato e' "ricevuta_temp.txt"; come nella procedura per la stampa della convenzione questo template viene parametrizzato con i dati necessari e deve essere editato per inserire i dati relativi all'azienda.</para> <para>Infine, cliccando su <emphasis>Export/Report</emphasis> si generera' automaticamente il report dei turni e delle ore lavorate dall'intervistatore. </para> Modified: trunk/docs/user_manual/pdf/it/yachoo.xml =================================================================== --- trunk/docs/user_manual/pdf/it/yachoo.xml 2012-01-17 13:15:55 UTC (rev 2139) +++ trunk/docs/user_manual/pdf/it/yachoo.xml 2012-01-17 14:12:01 UTC (rev 2140) @@ -4,7 +4,7 @@ <para>Yachoo permette all'intervistatore di selezionare l'indagine alla quale dovra' lavorare e, dopo aver cliccato <emphasis>Ok</emphasis>, lancia le applicazioni necessarie affinche' l'intervistatore possa iniziare il turno di lavoro.</para> <para>Appena un intervistatore effettua il login, Yachoo visualizza la seguente interfaccia:</para> -<!--MODIFICATA--><figure id="yachoo"><title>Yachoo</title> +<!--MODIFICATA--><figure id="yachooimg"><title>Yachoo</title> <mediaobject> <imageobject> <imagedata fileref="images/yachoo.png"> Modified: trunk/docs/user_manual/pdf/it/yadmin.xml =================================================================== --- trunk/docs/user_manual/pdf/it/yadmin.xml 2012-01-17 13:15:55 UTC (rev 2139) +++ trunk/docs/user_manual/pdf/it/yadmin.xml 2012-01-17 14:12:01 UTC (rev 2140) @@ -65,7 +65,7 @@ Consente di effettuare operazioni di amministrazione delle indagini utilizzando i comandi di seguito descritti. </para> <itemizedlist> -<listitem><para><emphasis>Nuovo</emphasis>: crea una nuova indagine. Verra' visualizzata una maschera nella quale bisognera' riempire tutti i campi presentati che specificano i parametri di una indagine, come si puo' vedere in <xref linkend="nuovo">. Nella finestra vengono gia' impostati alcuni valori di default. E' possibile importare la struttura del campione da un file con un determinato formato, cosi' come una eventuale lista di nominativi da contattare <xref linkend="crea nuova indagine">.</para></listitem> +<listitem><para><emphasis>Nuovo</emphasis>: crea una nuova indagine. Verra' visualizzata una maschera nella quale bisognera' riempire tutti i campi presentati che specificano i parametri di una indagine, come si puo' vedere in <xref linkend="nuovo">. Nella finestra vengono gia' impostati alcuni valori di default. E' possibile importare la struttura del campione da un file con un determinato formato, cosi' come una eventuale lista di nominativi da contattare <xref linkend="creanuovaindagine">.</para></listitem> <!-- <listitem><para>Modifica: selezionando l'indagine che si vuole modificare dalla lista, comparira' una maschera del tutto simile alla precedente con i parametri impostati dell'indagine selezionata e consente di modificarli.</para></listitem> --> <listitem><para><emphasis>Modifica questo progetto</emphasis>: simile al comando precedente ma si accede direttamente alla finestra di modifica dei parametri dell'indagine aperta in quel momento. Se nessuna indagine e' aperta il comando e' disabilitato.</para></listitem> @@ -101,21 +101,21 @@ <textobject><phrase>Finestra per nuova indagine</phrase></textobject> </mediaobject> </figure> +</section> - -<section><title id="crea nuova indagine">Creazione di una nuova indagine</title> +<section id="creanuovaindagine"><title>Creazione di una nuova indagine</title> <para>A seguire gli step per impostare un nuovo progetto.</para> <orderedlist> <listitem><para>Dal menu' <emphasis>Progetto</emphasis> scegliere la voce <emphasis>Nuovo</emphasis>; a questo punto sara' presentata la maschera in <xref linkend="nuovo"> con alcuni parametri di default che possono essere cambiati a piacere.</para></listitem> <listitem><para>Nella casella corrispondente alla voce <emphasis>Nome</emphasis> introdurre il titolo dell'indagine ricordandosi che il campo non puo' essere piu' lungo di otto caratteri. Nel caso si inserisca un titolo troppo lungo il programma visualizzera' un messaggio di errore e non permettera' la creazione dell'indagine. Inoltre non e' possibile creare due indagini con lo stesso titolo; anche questo errore viene segnalato dal programma.</para></listitem> <listitem><para>Immettere nel campo descrizione una breve descrizione dell'indagine (al massimo cento caratteri).</para></listitem> -<listitem><para>Nella sezione <emphasis>Definizione dei tempi di richiamo</emphasis> possiamo immettere i valori per i tempi di attesa per riproporre lo stesso contatto a seconda dei casi. Vengono gia' presentati i seguenti valori di default: il contatto che risulta occupato viene risproposto dopo dieci minuti, mentre si attende un'ora per tutti gli altri casi. Per modificare i valori basta scegliere quello appropriato da ciascun campo. Inoltre possiamo modificare il numero massimo di tentativi di richiamo per ciascun contatto nell’apposita casella nel caso in cui il valore visualizzato non fosse corretto. </para></listitem> +<listitem><para>Nella sezione <emphasis>Definizione dei tempi di richiamo</emphasis> possiamo immettere i valori per i tempi di attesa per riproporre lo stesso contatto a seconda dei casi. Vengono gia' presentati i seguenti valori di default: il contatto che risulta occupato viene riproposto dopo dieci minuti, mentre si attende un'ora per tutti gli altri casi. Per modificare i valori basta scegliere quello appropriato da ciascun campo. Inoltre possiamo modificare il numero massimo di tentativi di richiamo per ciascun contatto nell'apposita casella nel caso in cui il valore visualizzato non fosse corretto. </para></listitem> <listitem><para>Nella sezione sottostante, <emphasis>Definizione tempi di pausa/freq. Monitoraggio</emphasis>, possiamo modificare la durata massima sia della pausa singola che della somma delle pause. Inoltre in corrispondenza della voce <emphasis>Frequenza di monitoraggio</emphasis> si imposta la frequenza di aggiornamento degli indici di monitoraggio presenti nei client intervistatori. </para></listitem> -<listitem><para>Nell'area dedicata alla <emphasis>Configurazione del campione</emphasis> si seleziona il tipo di indagine piu' adeguato tra i seguenti: Cod prov - capoluo, Listed, Rotated, Stratified o Probabilistic (<xref id="campio">).</para></listitem> +<listitem><para>Nell'area dedicata alla <emphasis>Configurazione del campione</emphasis> si seleziona il tipo di indagine piu' adeguato tra i seguenti: Cod prov - capoluo, Listed, Rotated, Stratified o Probabilistic.</para></listitem> <listitem><para>E' possibile selezionare anche il template nessario per l'invio del fax o della mail informativa o di invito al panel nella sezione <emphasis>Pannello LiA</emphasis>. </para></listitem> @@ -157,7 +157,7 @@ - +</section> <section id="campio"><title>I Piani di Campionamento</title> <para>I piani di campionamento messi attualmente a disposizione da Yadmin sonoi seguenti:</para> <para>1) Cod prov - Capoluo</para> @@ -203,7 +203,7 @@ </section> <section><title>Stratified</title> -<para>Questo tipo di campionamento torna utile quando la distribuzione territoriale non rientra nella divisione <emphasis>Cod prov – capoluo</emphasis> che, come abbiamo visto, non definisce i singoli comuni oltre alla provincia.</para> +<para>Questo tipo di campionamento torna utile quando la distribuzione territoriale non rientra nella divisione <emphasis>Cod prov - capoluo</emphasis> che, come abbiamo visto, non definisce i singoli comuni oltre alla provincia.</para> <para>I nominativi vengono estratti dall'elenco telefonico. </para> <para>Selezionando <emphasis>Stratified</emphasis> come tipo di campionamento si abilitano tutti e tre i tasti sottostanti.</para> <para>Cliccando sul primo (<emphasis>Scegli il file dei nominativi</emphasis>)compare una finestrella dalla quale sara' possibile selezionare il file di testo precedentemente preparato.</para> @@ -219,10 +219,10 @@ </section> -<section><title> Formato del file che specifica la struttura del campione</title> +<section><title>Formato del file che specifica la struttura del campione</title> <para>Il file deve riportare per ogni riga un codice provincia con le rispettive numerosita' per le localita' capoluogo e non capoluogo e una label associata allo strato (riga): come mostrato nell'esempio, i quattro valori devono essere divisi tra loro da un carattere di tabulazione "\t".</para> <para>Se si vuole inserire la seguente struttura campionaria,</para> -<table frame='all'> +<table frame='all'><title></title> <tgroup cols='4' align='left' colsep='1' rowsep='1'> <thead> <row> @@ -250,9 +250,7 @@ </table> <para>il file da importare sara' il seguente:</para> - -</section> -<table frame='none'> +<table frame='none'><title></title> <tgroup cols='4' align='left' colsep='0' rowsep='0'> <tbody> <row> @@ -309,7 +307,7 @@ </section> -<section><title>Disattivare un'indagine e generare nominativi panel</title> +<section id="disattivareindagine" xreflabel="Disattivare un'indagine e generare nominativi panel" ><title>Disattivare un'indagine e generare nominativi panel</title> <para>Per disattivare un'indagine si clicca sulla voce Progetto e successivamente Modifica questo progetto. A questo punto sara' sufficiente spuntare la voce <emphasis>Attiva</emphasis>.</para> <para>Nel caso di indagini che usano come piano di campionamento Cod Prov Capoluo o Stratificato, comparira' una finestra di dialogo che chiede se si vogliono gestire o meno i contatti panel.</para> @@ -322,11 +320,11 @@ <listitem><para>per attuare il secondo processo, e' necessario aver prima creato un file di testo con una serie di informazioni per ciascun rispondente. Ogni informazione presente nel file di testo deve essere separata da un "tab". </para> <para>Le informazioni necessarie sono: cod com (tab) rid/n int (tab) codice numerico del titolo di studio (tab) codice numerico dell'attivita' lavorativa (tab) anno di nascita (tab) nome del rispondente (tab) genere(M o F).</para> <para>Sono tutte informazioni obbligatorie in fase di rilevazione dei dati, eccetto il titolo di studio, l'attiva' lavorativa e il nome del rispondente. Per le prime due sara' necessario imputare in ogni caso un codice numerico che si stabilisce corrisponda alla mancata risposta. Nel terzo caso si lascera' il campo vuoto, premendo due volte "tab". </para> -<para>Creato il file descritto, si potra' a questo punto importare le informazioni dei rispondenti come in <xref linkend="Panel_YES_NO"> che andranno ad aggiungersi come nuovi nominativi panel. </para> +<para>Creato il file descritto, si potra' a questo punto importare le informazioni dei rispondenti come in <xref linkend="PanelYESNO"> che andranno ad aggiungersi come nuovi nominativi panel. </para> </listitem> </itemizedlist> -<figure id="Panel_YES_NO"><title>Panel_YES_NO</title> +<figure id="PanelYESNO"><title>Scelta Panel in chiusura indagine</title> <mediaobject> <imageobject> <imagedata fileref="images/yadmin_yes_no.png"> @@ -335,17 +333,12 @@ </mediaobject> </figure> - </section> - - <section><title> Cancellare un'indagine</title> - - <para>Per cancellare una indagine dal database selezionare dal menu' Progetto la voce Rimuovi, viene mostrata una maschera dalla quale e' possibile scegliere il titolo dell'indagine che si deve rimuovere.</para> <para>Facendo click su Ok l'indagine viene rimossa.</para> <para>Per ovvi motivi le indagini in corso non possono essere rimosse, infatti queste non vengono elencate tra quelle che si possono selezionare.</para> @@ -384,7 +377,6 @@ <para>L'invio massivo di E-Mail funziona allo stesso modo dell'invio dei Fax; spedisce una determinata e-mail ad ogni contatto presente. La procedura e' la stessa, si sceglie l'indagine e il template da usare per l'e-mail. Nel caso di massive e-mail il template deve essere importato da file e l'e-mail verra' inviata a tutti quei contatti che hanno sulla tabella indagini il campo mail non nullo.</para> </section> -</section> <section><title>Il menu' Controllo Quote</title> <para>Serve a controllare, aggiornare e chiudere le quote dell'indagine in corso. Cliccando su "Controllo quote" compaiono le seguenti voci:</para> @@ -442,17 +434,16 @@ <textobject><phrase>Menu' di ripopolazione sub-universo</phrase></textobject> </mediaobject> </figure> -</section> <itemizedlist> <listitem><para>Ripopola per comune: anche in questo caso si tratta di un'estrazione per la tabella sub universo. La struttura per eseguire l'estrazione deve pero' essere importata da un file delimitato da tab '\t' con la seguente struttura: codice_comune, numerosita'. Questo tipo di ripopolamento puo' risultare necessario quando si svolgono indagini che coinvolgono piccole realta' territoriali. Il file contenente la struttura va importato scegliendolo dal percorso esatto dopo aver premuto il tasto "Apri" presente nella maschera. </para></listitem> -<listitem><para>Panel: si tratta di un'estrazione mirata. Si pesca cioe' da una lista di nominativi originata nel modo descritto nel capitolo <xref linkend="Disattivare un'indagine e generare nominativi panel">, di cui conosciamo gia' genere, eta', comune di residenza e titolo di studio poiche' gia' intervistati durante indagini precedenti. </para></listitem> + <listitem><para>Panel: si tratta di un'estrazione mirata. Si pesca cioe' da una lista di nominativi originata nel modo descritto nel capitolo <emphasis><xref linkend="disattivareindagine"></emphasis>, di cui conosciamo gia' genere, eta', comune di residenza e titolo di studio poiche' gia' intervistati durante indagini precedenti. </para></listitem> <listitem><para> Panel sulle quote selezionate: prima di dare questo comando e' necessario selezionare le quote ancora aperte di cui si desiderano ulteriori nominativi con un semplice doppio click. Fatto cio' si potra' immettere il fattore moltiplicativo.</para></listitem> </itemizedlist> <para>I nominativi profilati sono particolarmente utili qualora sia necessario fare interviste su particolari target di genere/eta'/titolo di studio.</para> -<para>N.B. Sia che si faccia un'estrazione panel semplice sia che se ne faccia una mirata sulle quote ancora aperte, si aprira' la finestra <xref linkend="def_panel"> che permette di definire: </para> +<para>N.B. Sia che si faccia un'estrazione panel semplice sia che se ne faccia una mirata sulle quote ancora aperte, si aprira' la finestra <xref linkend="defpanel"> che permette di definire: </para> <itemizedlist> <listitem><para> il fattore moltiplicativo; </para></listitem> <listitem><para> se utilizzare o meno un campione rappresentativo; </para></listitem> @@ -460,7 +451,7 @@ <listitem><para> se far rispettare o meno le quote generali: se non si spunta questa opzione i nominativi profilati compariranno in Yacati come contatti con tutte le quote chiuse eccetto quella prifilata. </para></listitem> </itemizedlist> -<figure id="def_panel"><title>Definizione parametri del panel</title> +<figure id="defpanel"><title>Definizione parametri del panel</title> <mediaobject> <imageobject> <imagedata fileref="images/def_panel.png"> @@ -492,8 +483,8 @@ </mediaobject> </figure> +</section> - <section><title>Bbtool in azione </title> <para>Esistono due tipi di eventi che possono scatenare un blocco:</para> <itemizedlist> @@ -503,7 +494,7 @@ <para>Ovviamente e' possibile che i due tipi di eventi, per uno stesso utente, avvengano in istanti distinti oppure anche contemporaneamente (in quest' ultimo caso saranno presenti due righe per lo stesso utente).</para> <para>Cliccando due volte su una riga della tabella vi apparira' una maschera (<xref linkend="bbtool">) che riporta i dettagli del blocco selezionato, alcuni contatori che vi informano sulla quantita' globale di blocchi che l'utente ha collezionato e avrete la possibilita' di rimuovere tale blocco dopo aver fatto doppio click nella riga corrispondente (tasto unlock in <xref linkend="bbtool2">). </para> <para>Una volta che l'intervistatore non ha piu' blocchi attivi per il progetto su cui sta lavorando potra' rimettersi a lavorare. </para> - </section> + <figure id="bbtool2"><title>Dettaglio blocco</title> <mediaobject> <imageobject> Modified: trunk/docs/user_manual/pdf/it/yamon.xml =================================================================== --- trunk/docs/user_manual/pdf/it/yamon.xml 2012-01-17 13:15:55 UTC (rev 2139) +++ trunk/docs/user_manual/pdf/it/yamon.xml 2012-01-17 14:12:01 UTC (rev 2140) @@ -18,7 +18,7 @@ <para>Per ogni intervistatore impegnato in una chiamata e' presente un pulsante per attivare le funzioni di monitor ed ascoltare quindi l'attivita' dell'operatore.</para> <!-- immagine yamon --> -<figure id="yamon"><title>Yamon</title> +<figure id="yamonimg"><title>Yamon</title> <mediaobject> <imageobject> <imagedata fileref="images/yamon.png"> @@ -60,18 +60,4 @@ </section> -<section><title>Configurazione Terminali</title> -<para>Nella finestra principale di Yamon cliccare l'icona nell'angolo a destra.</para> -<para>Nella finestra che comparira' cliccare su "Hosts", sara' visualizzata quindi una griglia riportante tutte le postazioni di lavoro attive in quel momento ed alcune informazioni come indirizzo IP, Hostname, abilitazione Voip e MAC adress. Per modificare le impostazioni cliccare due volte nella postazione di lavoro scelta, per aggiungere o rimuovere postazioni utilizzare i due pulsanti presenti nel lato destro della finestra.</para> -<!-- immagine preference hosts --> -<figure id="hosts"><title>Configurazione Hosts</title> -<mediaobject> - <imageobject> - <imagedata fileref="images/yamon_hosts.png"> - </imageobject> - <textobject><phrase>Configurazione Hosts</phrase></textobject> -</mediaobject> -</figure> - -</section> </chapter> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <si...@us...> - 2012-01-17 13:16:07
|
Revision: 2139 http://yaacs.svn.sourceforge.net/yaacs/?rev=2139&view=rev Author: sickpig Date: 2012-01-17 13:15:55 +0000 (Tue, 17 Jan 2012) Log Message: ----------- * NEW: add probabilistic sample to listed projects * FIX: codColReal now performs the right number of sampling steps in case #tuples % SAMPLING_STEP == 0 Modified Paths: -------------- branches/external-trunk/dbyaacs/migration.sql branches/external-trunk/dbyaacs/projects.sql branches/external-trunk/yaacs/admin.tcl branches/external-trunk/yaacs/sample.tcl branches/external-trunk/yadmin.tcl trunk/dbyaacs/migration.sql trunk/dbyaacs/projects.sql trunk/yaacs/admin.tcl trunk/yaacs/sample.tcl trunk/yadmin.tcl Modified: branches/external-trunk/dbyaacs/migration.sql =================================================================== --- branches/external-trunk/dbyaacs/migration.sql 2012-01-12 12:19:05 UTC (rev 2138) +++ branches/external-trunk/dbyaacs/migration.sql 2012-01-17 13:15:55 UTC (rev 2139) @@ -3358,3 +3358,15 @@ ALTER TABLE projects.codcolp drop column dis_phone2; INSERT INTO log.yaacs_svn_revision VALUES (2104, E'drop column dis_phone1 and dis_phone2 and a varchar column (dis_phones) that will the id of invalid phones separed by a c comma e.g. 2,3'); + + +-- rev 2139 + +ALTER TABLE projects.projects ADD COLUMN lprobabilistic boolean; +ALTER TABLE projects.projects ALTER COLUMN lprobabilistic SET DEFAULT false; +ALTER TABLE history.projects ADD COLUMN lprobabilistic boolean; + +ALTER TABLE projects.template ADD COLUMN sample integer; + +INSERT INTO log.yaacs_svn_revision VALUES (2139, E'listed probabilistic - add lprobabilistic boolean field, true means perform a probabilistic sampling on projects frames \n and sample int field to projects template'); + Modified: branches/external-trunk/dbyaacs/projects.sql =================================================================== --- branches/external-trunk/dbyaacs/projects.sql 2012-01-12 12:19:05 UTC (rev 2138) +++ branches/external-trunk/dbyaacs/projects.sql 2012-01-17 13:15:55 UTC (rev 2139) @@ -68,6 +68,7 @@ active boolean, pjtable varchar, listed boolean, + lprobabilistic boolean DEFAULT false, max_retry integer, sampling_type integer DEFAULT 0, threshold integer, @@ -147,6 +148,7 @@ dis_phones varchar DEFAULT '', pop integer, strata integer, + sample integer, label character varying(60), priority integer DEFAULT 1, panel integer DEFAULT 0, Modified: branches/external-trunk/yaacs/admin.tcl =================================================================== --- branches/external-trunk/yaacs/admin.tcl 2012-01-12 12:19:05 UTC (rev 2138) +++ branches/external-trunk/yaacs/admin.tcl 2012-01-17 13:15:55 UTC (rev 2139) @@ -430,11 +430,13 @@ # machine respectively. (times are expressed in minutes) # @param active flag which says if the project is running (!0) or not (0) # @param is4company flag which says if the project's refered to company (!0) or not (0) +# @param lprobabilistic flag which says if the project's refered to company (!0) or not (0) +# has to be probabilistic (in terms of extraction) # @param maxt max numeber re-calling times # @param samplet sample type expressed by an integer which unique identify the # algorithm you want to apply # @param soglia used for a specific type of sample -# @param pausep pause's params; a two elements list reporting max minutes for +# @param pausep pauses params; a two elements list reporting max minutes for # a pause duration and for their sum # @param freqmon monitoring update frequence # @param table default setted to name; db's table name to store project's data @@ -459,7 +461,7 @@ # ERR_FLAG is returned if you try to call newUpPj with a wrong ce flag; remember # that if you're editing a project you've to supply a project's id or you'll # get an ERR_IDREQ. -proc ::admin::newUpPj {ce db name desc duration wtime active is4company maxt\ +proc ::admin::newUpPj {ce db name desc duration wtime active is4company lprobabilistic maxt\ samplet soglia pausep freqmon briefing table url shiftDef liaDef impS impCs impGA impSt impSd g_stuff \ manpanel panelpath dial_prefix rec_calls eidx {idPj ""}} { @@ -558,18 +560,10 @@ #converts flag to boolean - if {$active == 0} { - set active "f" - } else { - set active "t" - } + set active [expr {$active == 0 ? "f" : "t"}] + set is4company [expr {$is4company == 0 ? "f" : "t"}] + set lprobabilistic [expr {$lprobabilistic == 0 ? "f" : "t"}] - if {$is4company == 0} { - set is4company "f" - } else { - set is4company "t" - } - if {$soglia == ""} { set soglia "null" } @@ -617,10 +611,10 @@ if {$ce == 0} { set sqlNewUp "insert into projects.projects (name,description,noresp_wait,busy_wait,fax_wait,\ - machine_wait,sms_wait,active,pjtable,listed,max_retry,sampling_type,\ + machine_wait,sms_wait,active,pjtable,listed,lprobabilistic, max_retry,sampling_type,\ threshold,max_pause,sum_pause,freq_mon,briefing,pjstart,pjend,url,show_name,\ anagraphic_callback,anagraphic_completed,auto_call,email_on_response, record, dial_prefix, email_account) values (\ - '$name','$desc','$noanswer','$busy','$fax','$answermachine','$sms','$active','$table','$is4company',\ + '$name','$desc','$noanswer','$busy','$fax','$answermachine','$sms','$active','$table','$is4company', '$lprobabilistic', \ $maxt, $samplet, $soglia, $maxp, $sump, $freqmon, $briefing, '$start', '$end', '$url',\ '$show_name', '$mandatory_cb', '$mandatory_r', $auto_call, '$email_response', $rec_calls, $dial_prefix, $eidx)" } else { @@ -2220,11 +2214,11 @@ # @param path - file where contatcs are stored # @return 0 on success, -1 on db error, -2 on sanity check error proc ::admin::importFile {db idPj slist path} { - + # copiare i nominativi in una tab temporanea set tmpt "projects.a[clock seconds]" set slistp [join $slist ","] - + if {[::yadb::execl $db "create table $tmpt (like projects.template including defaults)"] == -1} { ::yalog::error "Error while creating aux table $tmpt" return -1 @@ -2272,6 +2266,8 @@ if {$dataPj(sampling_type) == 3} { set my_dest_table $dataPj(pjframe) } else { + # FIXME remove me + ::yalog::error "REMOVE ME OR NOT ?" set my_dest_table $dataPj(pjtable) } if {[::yadb::execl $db "insert into $my_dest_table select * from $tmpt"] == -1} { Modified: branches/external-trunk/yaacs/sample.tcl =================================================================== --- branches/external-trunk/yaacs/sample.tcl 2012-01-12 12:19:05 UTC (rev 2138) +++ branches/external-trunk/yaacs/sample.tcl 2012-01-17 13:15:55 UTC (rev 2139) @@ -243,11 +243,11 @@ } switch -exact -- $sampleType \ $::sample::COD_PROV_CAPOLUO {return [::sample::codProvCapoluo $db $idPj $mult] }\ - $::sample::RUOTATO { return [::sample::ruotato $db $idPj $mult] }\ - $::sample::COD_COL { return [::sample::codCol $db $idPj $mult] }\ - $::sample::SOST { return [::sample::sostituzione $db $idPj $mult] }\ - $::sample::COD_COL_POP_RES { return [::sample::codColRes $db $idPj $mult] }\ - $::sample::LISTED { return [::sample::codCol $db $idPj $mult]}\ + $::sample::RUOTATO {return [::sample::ruotato $db $idPj $mult] }\ + $::sample::COD_COL {return [::sample::codCol $db $idPj $mult] }\ + $::sample::SOST {return [::sample::sostituzione $db $idPj $mult] }\ + $::sample::COD_COL_POP_RES {return [::sample::codColRes $db $idPj $mult] }\ + $::sample::LISTED {return [::sample::codCol $db $idPj $mult]}\ default {return -2} } @@ -517,7 +517,7 @@ return -1 } - for {set i 0} {$i <= [expr int($totProv/$sample::SAMPLING_STEP)]} {incr i} { + for {set i 0} {[expr $i * $sample::SAMPLING_STEP] < $totProv} {incr i} { set inf [expr $i * $sample::SAMPLING_STEP] if {[expr ($totProv - $inf)] < $sample::SAMPLING_STEP} { @@ -1016,6 +1016,7 @@ return -1 } set campTab $dataPj(sample_table) + set stype $dataPj(sampling_type) # check if i can do sample.. if it's a listed projects managed manually, # it's not a good idea to go over this point @@ -1027,7 +1028,7 @@ } # update geo quotas (both geo and gen age) - if {[::sample::refreshQuota $db $dataPj(name) $sample::COD_COL] == -1} { + if {[::sample::refreshQuota $db $dataPj(name) $stype] == -1} { ::yalog::error "Unable to refreh quotas" return -1 } @@ -1095,13 +1096,14 @@ set sampType $dataPj(sampling_type) set frameTab $dataPj(pjframe) set defiTab [lindex [split [string trim $dataPj(pjtable)] "."] 1]_theo_def + set lprob $dataPj(lprobabilistic) # check if strata/cod_com table exixst (it needs to choose between old style cod_com sampling and new cod_col sampling) set defined [::yadb::tableExists $db $defiTab "projects"] # let's copy strata/cod_com definiton in a "shared table" - # needs only to have less trouble in plpgsqlprocedure + # needs only to have less trouble in plpgsql procedure if {$defined} { if {[::yadb::execl $db "DELETE FROM sampling.strata_codcom_definition"] == -1} { @@ -1114,41 +1116,46 @@ } } + # since both Listed and codCol sampling share + # the same mechanisn to sample data we need to + # dstinct between the two in terms of panel contants # let's find some unused contact which can be reused - if {$sampType ==3} { - if {[::sample::free $db $table $sample::COD_COL] == -1} { - ::yalog::error "failed to free unused contacts" - return -1 - } - } else { + # samptType = 2 -> Stratified + # samptType = 3 -> Listed - # remove fresh panel contacts (also quota filled) + if {$sampType == 2} { if {[::sample::free_panel_contacts $db $dataPj(name) $idPj] == -1} { ::yalog::error "failed to free unused contacts" return -1 } + } - # remove fresh contanct - if {[::sample::free $db $table $sample::LISTED] == -1} { - ::yalog::error "failed to free unused contacts" - return -1 - } - + # remove fresh contacts + if {[::sample::free $db $table $sampType] == -1} { + ::yalog::error "failed to free unused contacts" + return -1 } # total theoric sample composition + if {$lprob == 0} { + set res [::yadb::getTuple $db "select sum(qty),sum(done) from $theoTab" 0] + set theoTot [lindex $res 0] + set doneTot [lindex $res 1] + } else { + # we are going to perform sampling on a listed pj with probabilistic + # property checked we ahve to take into account also fixed callbacks + set doneTot [lindex [::yadb::getTuple $db "select count(*) from $table \ + where ouid in $::sample::callback_ouid or ouid = 8 or locked" 0] 0] + set theoTot [lindex [::yadb::getTuple $db "select sum(qty) from $theoTab" 0] 0] + } - set res [::yadb::getTuple $db "select sum(qty),sum(done) from $theoTab" 0] - set theoTot [lindex $res 0] - if {$theoTot == -1} { + if {$theoTot == -1 || $doneTot == -1} { ::yalog::error "unable to calculate total theoric sample composition" return -1 } # what has already been done? - set doneTot [lindex $res 1] - # clear sample structure's table if {[::yadb::execl $db "delete from $campTab"] == -1} { ::yalog::error "cannot clean up $campTab" @@ -1173,16 +1180,28 @@ # the one we're interested in are: strata (strata cod id), qty (number of # interviews to be done in strata) and done (how many interviews we actually did) - set sqlCod "SELECT * FROM $theoTab WHERE done < qty ORDER BY strata" + if {$lprob == 0} { + set sqlCod "SELECT * FROM $theoTab WHERE done < qty ORDER BY strata" + } else { + set sqlCod "SELECT a.strata, a.qty, a.done as done_real, coalesce(b.done,0) as done + FROM + $theoTab as a + LEFT OUTER JOIN + (SELECT strata,count(*) as done FROM $table WHERE ouid = 8 OR ouid in $::sample::callback_ouid or locked GROUP BY strata) as b + ON (a.strata = b.strata) + WHERE a.qty > coalesce(b.done,0) + ORDER BY a.strata" + } set cmd { set pond 1 set newNum 0 # we need to sample - if {$rec(done) != 0} { + if {$lprob == 0 && $rec(done) != 0} { set pond [expr (double($doneTot)/double($theoTot)) / (double($rec(done))/double($rec(qty)))] } + set newNum [expr int(($rec(qty)-$rec(done)) * $mult * $pond)] # I know that there's no error here :) but I want to log # this information for sure so I'm using the lowest log-level @@ -1192,6 +1211,7 @@ ::yalog::error "pond: $pond" ::yalog::error "theoric: $rec(qty)" ::yalog::error "done: $rec(done)s" + if {$lprob == 1} {::yalog::error "done real: $rec(done_real)s"} ::yalog::error "-- END DEBUG INFOS FOR strata=$rec(strata) --" @@ -1210,53 +1230,58 @@ } - # those stratas are closed - if {[yadb::execl $db "insert into quota_filled_gen (strata) - select strata from $theoTab WHERE done >= qty order by strata"] == -1} { + # those stratas are closed so we move all fixed callbacks + # (performed only for strata and vanilla listed, cause in case + # of prob listed theoretically there could be no fixed callbacks + # for a closed strata (if you always use as mult 1) + if { $lprob == 0 } { + if {[yadb::execl $db "insert into quota_filled_gen (strata) + select strata from $theoTab WHERE done >= qty order by strata"] == -1} { yalog::error "failed to close stratum $cod" return -1 - } + } - # let's create an aux temp table - - if {[::yadb::execl $db "create temp table delete_callbacks on commit drop as select rid, cod_com from $table limit 0"] == -1} { - ::yalog::error "error while creating aux temp table delete_callbacks" - return -1 - } + # let's create an aux temp table + + if {[::yadb::execl $db "create temp table delete_callbacks on commit drop as select rid, cod_com from $table limit 0"] == -1} { + ::yalog::error "error while creating aux temp table delete_callbacks" + return -1 + } - # finds out all call-backs to be removed + # finds out all call-backs to be removed - set sqlInsAux " insert into delete_callbacks - select t.rid, t.cod_com - from $table as t, quota_filled_gen as q, projects.schedule as a - where t.strata=q.strata and t.ouid in $::sample::callback_ouid and t.rid=a.rid - and t.cod_com=a.cod_com and a.proj=$idPj and t.panel = 0 for update of a" + set sqlInsAux " insert into delete_callbacks + select t.rid, t.cod_com + from $table as t, quota_filled_gen as q, projects.schedule as a + where t.strata=q.strata and t.ouid in $::sample::callback_ouid and t.rid=a.rid + and t.cod_com=a.cod_com and a.proj=$idPj and t.panel = 0 for update of a" - if {[::yadb::execl $db $sqlInsAux] == -1} { - ::yalog::error "cannot insert call-back into delete_callbacks" - return -1 - } + if {[::yadb::execl $db $sqlInsAux] == -1} { + ::yalog::error "cannot insert call-back into delete_callbacks" + return -1 + } - if {[::yadb::execl $db "delete from projects.schedule as a using delete_callbacks as b where a.rid=b.rid and \ - a.cod_com=b.cod_com and a.proj=$idPj"] == -1} { - ::yalog::error "failed to remove useless call-backs" - return -1 - } + if {[::yadb::execl $db "delete from projects.schedule as a using delete_callbacks as b where a.rid=b.rid and \ + a.cod_com=b.cod_com and a.proj=$idPj"] == -1} { + ::yalog::error "failed to remove useless call-backs" + return -1 + } - # store on stats what we've done - - set sqlInsStat "insert into log.activitylog (uid, proj, start_work, end_work, ouid, cod_com, rid) - select -2, $idPj, now(), now(), -2, cod_com, rid from delete_callbacks" - if {[::yadb::execl $db $sqlInsStat] == -1} { - ::yalog::error "failed to insert into stats data form deleted call-back" - } + # store on stats what we've done + + set sqlInsStat "insert into log.activitylog (uid, proj, start_work, end_work, ouid, cod_com, rid) + select -2, $idPj, now(), now(), -2, cod_com, rid from delete_callbacks" + if {[::yadb::execl $db $sqlInsStat] == -1} { + ::yalog::error "failed to insert into stats data form deleted call-back" + } - # update contact's history on project's table - set sqlHst "update $table as b set ouid=-2, quota=true, \ - touch=now() from delete_callbacks as a where a.rid=b.rid and a.cod_com=b.cod_com" - if {[::yadb::execl $db $sqlHst] == -1} { - ::yalog::error "failed to update contact's history for removed call-backs" + # update contact's history on project's table + set sqlHst "update $table as b set ouid=-2, quota=true, \ + touch=now() from delete_callbacks as a where a.rid=b.rid and a.cod_com=b.cod_com" + if {[::yadb::execl $db $sqlHst] == -1} { + ::yalog::error "failed to update contact's history for removed call-backs" + } } # clear shared tables @@ -1268,7 +1293,6 @@ # perform sampling proccess splitting the main process in little tiny # "steps" for performance reasons. - set totCod [lindex [::yadb::getTuple $db "select count(*) from $campTab" 0] 0] if {$totCod == -1} { @@ -1276,7 +1300,7 @@ return -1 } - for {set i 0} {$i <= [expr int($totCod/$sample::SAMPLING_STEP)]} {incr i} { + for {set i 0} {[expr $i * $sample::SAMPLING_STEP] < $totCod} {incr i} { set inf [expr $i * $sample::SAMPLING_STEP] if {[expr ($totCod - $inf)] < $sample::SAMPLING_STEP} { @@ -1288,33 +1312,33 @@ set codInf [lindex [yadb::getTuple $db "select strata from $campTab \ order by strata offset $inf limit 1" 0] 0] if {$codInf == -1} { - yalog::error "unable to retrive the lower bound to sampling." + ::yalog::error "unable to retrive the lower bound to sampling." return -1 } set codSup [lindex [yadb::getTuple $db "select strata from $campTab \ order by strata offset $sup limit 1" 0] 0] if {$codSup == -1} { - yalog::error "unable to retrive the upper bound to sampling." + ::yalog::error "unable to retrive the upper bound to sampling." return -1 } # do sampling on subset (codInf, codSup) based on $defined value if {$defined} { - if {[sample::sampleCodColDefined $db $codInf $codSup] == -1} { - yalog::error "fatal error on sampling" + if {[::sample::sampleCodColDefined $db $codInf $codSup] == -1} { + ::yalog::error "fatal error on sampling" return -1 } } else { if {$sampType == 3} { - if {[::sample::sampleListedNew $db $codInf $codSup $table $frameTab] == -1 } { - yalog::error "fatal error on listed sampling" + if {[::sample::sampleListedNew $db $codInf $codSup $table $frameTab $lprob] == -1 } { + ::yalog::error "fatal error on listed sampling" return -1 } } else { - if {[sample::sampleCodCol $db $codInf $codSup] == -1} { - yalog::error "fatal error on sampling" + if {[::sample::sampleCodCol $db $codInf $codSup] == -1} { + ::yalog::error "fatal error on sampling" return -1 } } @@ -2697,16 +2721,17 @@ ::yadb::execl $db "rollback" return -1 } + # sql note use alias for the updated table (supported since postgresql 8.2) if {[::yadb::execl $db "UPDATE projects.${pjname}_theo as b SET done = a.done \ FROM (SELECT strata,count(*) as done FROM projects.$pjname WHERE ouid = 8 GROUP BY strata) as a \ WHERE a.strata = b.strata"] == -1} { - ::yalog::error "Unable to set number of completed for each geographical strata (sampling_type 2 - $pjname) " + ::yalog::error "Unable to set number of completed for each geographical strata (sampling_type $samplet - $pjname) " ::yadb::execl $db "rollback" return -1 } if {[::yadb::execl $db "UPDATE projects.${pjname}_theo SET open = false WHERE done >= qty"] == -1} { - ::yalog::error "Unable to set number open flag for each geographical strata (sampling_type 2 - $pjName) " + ::yalog::error "Unable to set number open flag for each geographical strata (sampling_type $samplet - $pjName) " ::yadb::execl $db "rollback" return -1 } @@ -3085,18 +3110,22 @@ } # sampleListedNew -proc ::sample::sampleListedNew {db codInf codSup pjTab frameTab} { +proc ::sample::sampleListedNew {db codInf codSup pjTab frameTab lprob} { + set chunckStrata "select strata,qty from sampling.sample_gen_design where strata >= $codInf and strata <= $codSup" if {[::yadb::execl $db "create table sampling.tmp_listed as (select * from $frameTab limit 0)"] == -1} { ::yalog::error "cannot create aux table tmp_listed" return -1 - #} + } set cmdSampl { + # add sample field to ORDER BY clause to deal with probabilistic + # listed sampling.We added it unconditionally cause in case of vanilla + # listed sampling "sample" should be null hence with no influwnce whatsoever if {[::yadb::execl $db "insert into sampling.tmp_listed \ - select * from $frameTab as a \ - where a.strata = $rec(strata) and a.touch is null \ - order by random() \ - limit $rec(qty)"] == -1} { + select * from $frameTab as a \ + where a.strata = $rec(strata) and a.touch is null \ + order by sample,random() \ + limit $rec(qty)"] == -1} { ::yalog::error "cannot insert in sampling.tmp_listed" return -1 } Modified: branches/external-trunk/yadmin.tcl =================================================================== --- branches/external-trunk/yadmin.tcl 2012-01-12 12:19:05 UTC (rev 2138) +++ branches/external-trunk/yadmin.tcl 2012-01-17 13:15:55 UTC (rev 2139) @@ -979,7 +979,7 @@ unset ::yadmin::turButton } -proc ::yadmin::importContacts {db} { +proc ::yadmin::importContacts {db lprob} { ::yalog::debug "Begin of import contact step" ::yalog::debug "Define contact's file structure" set dlist [::admin::getFieldLIst $db projects import_template] @@ -987,6 +987,7 @@ set slist [lindex $::yadmin::importCs 1] } else { set slist [::admin::getFieldLIst $db projects mandatory_import_template] + if {$lprob == 1} {lappend slist sample} } if {($dlist == -1) || ($slist == -1) } { ::dialogs::error . [mc "Import fails"] [mc "An error occurs while importing contacts.\nCheck your logs"] @@ -1601,7 +1602,7 @@ .pj.fsamp.soglia delete 0 end .pj.fsamp.soglia insert 0 $survey(threshold) - set samplet $survey(sampling_type) + set samplet $survey(sampling_type) set all_ws [list .pj.fsamp.importBt .pj.fsamp.importCs .pj.fsamp.importSt .pj.fsamp.importGA .pj.fsamp.importSd .pj.fsamp.lsoglia .pj.fsamp.soglia] foreach w $all_ws {$w configure -state disabled} set en_ws [list] @@ -1630,6 +1631,9 @@ if {$survey(listed) eq "t"} { .pj.fsamp.importCs configure -text [mc "Import more contacts..."] + if {$survey(lprobabilistic) eq "t"} { + set ::yadmin::listed_probabilistic 1 + } } .pj.time_o.voip.url.url delete 0 end @@ -2890,6 +2894,8 @@ variable ::yadmin::email_account variable ::yadmin::eidx -1 + variable ::yadmin::listed_probabilistic 0 + # possible value: # -1 disable voip for this projects # 0 disable autocall for this pj @@ -3065,8 +3071,8 @@ } 3 { # TODO manage gender /age and study degree quotas too - set en_ws [list .pj.fsamp.importBt .pj.fsamp.importCs .pj.fsamp.importGA] - .pj.wt.nint set $yadmin::COM_NINT + set en_ws [list .pj.fsamp.importBt .pj.fsamp.importCs .pj.fsamp.importGA .pj.fsamp.probabilistic] + .pj.wt.nint set $::yadmin::COM_NINT set is4company 1 } 5 { @@ -3085,7 +3091,7 @@ button .pj.fsamp.importCs -image "emblem_system16x16" -text [mc "Choose Contacts file..."] -compound left \ -command { - set ::yadmin::importCs [::yadmin::importContacts $passedDb] + set ::yadmin::importCs [::yadmin::importContacts $passedDb $::yadmin::listed_probabilistic] if {$::yadmin::importCs == ""} {return} } @@ -3117,7 +3123,11 @@ label .pj.fsamp.lsoglia -text [mc "Threshold"] -state disabled entry .pj.fsamp.soglia -bg white -state disabled + checkbutton .pj.fsamp.probabilistic -variable ::yadmin::listed_probabilistic \ + -text [mc "Probailistic ?"] -state disabled + grid .pj.fsamp.lsamp .pj.fsamp.samp -sticky w -padx 2 -pady 2 + grid .pj.fsamp.probabilistic -sticky w -padx 2 -pady 2 grid .pj.fsamp.lsoglia .pj.fsamp.soglia -sticky w -padx 2 -pady 2 grid .pj.fsamp.importBt - -sticky w -padx 2 -pady 2 grid .pj.fsamp.importCs - -sticky w -padx 2 -pady 2 @@ -3438,13 +3448,13 @@ # let's do it if {$idPj == ""} { set createPj [::admin::newUpPj 0 $db $name $desc $duration $wtime \ - $::yadmin::isActive $is4company $nint \ + $::yadmin::isActive $is4company $::yadmin::listed_probabilistic $nint \ $samplet $soglia $pausep $freqm $briefing "" $url $tmpT $::yadmin::changed_lia\ $::yadmin::importSome $::yadmin::importCs $::yadmin::importGenEta $::yadmin::importStrata $::yadmin::importStudy $gui_stuff \ $::yadmin::manpanel $::yadmin::panelpath $::yadmin::dial_prefix $::yadmin::record_calls $::yadmin::eidx] } else { set createPj [::admin::newUpPj 1 $db $name $desc $duration $wtime \ - $::yadmin::isActive $is4company $nint \ + $::yadmin::isActive $is4company $::yadmin::listed_probabilistic $nint \ $samplet $soglia $pausep $freqm $briefing "" $url $tmpT $::yadmin::changed_lia\ $::yadmin::importSome $::yadmin::importCs $::yadmin::importGenEta $::yadmin::importStrata $::yadmin::importStudy $gui_stuff \ $::yadmin::manpanel $::yadmin::panelpath $::yadmin::dial_prefix $::yadmin::record_calls $yadmin::eidx $passedIdPj] Modified: trunk/dbyaacs/migration.sql =================================================================== --- trunk/dbyaacs/migration.sql 2012-01-12 12:19:05 UTC (rev 2138) +++ trunk/dbyaacs/migration.sql 2012-01-17 13:15:55 UTC (rev 2139) @@ -3359,3 +3359,15 @@ ALTER TABLE projects.codcolp drop column dis_phone2; INSERT INTO log.yaacs_svn_revision VALUES (2104, E'drop column dis_phone1 and dis_phone2 and a varchar column (dis_phones) that will the id of invalid phones separed by a c comma e.g. 2,3'); + + +-- rev 2139 + +ALTER TABLE projects.projects ADD COLUMN lprobabilistic boolean; +ALTER TABLE projects.projects ALTER COLUMN lprobabilistic SET DEFAULT false; +ALTER TABLE history.projects ADD COLUMN lprobabilistic boolean; + +ALTER TABLE projects.template ADD COLUMN sample integer; + +INSERT INTO log.yaacs_svn_revision VALUES (2139, E'listed probabilistic - add lprobabilistic boolean field, true means perform a probabilistic sampling on projects frames \n and sample int field to projects template'); + Modified: trunk/dbyaacs/projects.sql =================================================================== --- trunk/dbyaacs/projects.sql 2012-01-12 12:19:05 UTC (rev 2138) +++ trunk/dbyaacs/projects.sql 2012-01-17 13:15:55 UTC (rev 2139) @@ -68,6 +68,7 @@ active boolean, pjtable varchar, listed boolean, + lprobabilistic boolean DEFAULT false, max_retry integer, sampling_type integer DEFAULT 0, threshold integer, @@ -147,6 +148,7 @@ dis_phones varchar DEFAULT '', pop integer, strata integer, + sample integer, label character varying(60), priority integer DEFAULT 1, panel integer DEFAULT 0, Modified: trunk/yaacs/admin.tcl =================================================================== --- trunk/yaacs/admin.tcl 2012-01-12 12:19:05 UTC (rev 2138) +++ trunk/yaacs/admin.tcl 2012-01-17 13:15:55 UTC (rev 2139) @@ -430,11 +430,13 @@ # machine respectively. (times are expressed in minutes) # @param active flag which says if the project is running (!0) or not (0) # @param is4company flag which says if the project's refered to company (!0) or not (0) +# @param lprobabilistic flag which says if the project's refered to company (!0) or not (0) +# has to be probabilistic (in terms of extraction) # @param maxt max numeber re-calling times # @param samplet sample type expressed by an integer which unique identify the # algorithm you want to apply # @param soglia used for a specific type of sample -# @param pausep pause's params; a two elements list reporting max minutes for +# @param pausep pauses params; a two elements list reporting max minutes for # a pause duration and for their sum # @param freqmon monitoring update frequence # @param table default setted to name; db's table name to store project's data @@ -459,7 +461,7 @@ # ERR_FLAG is returned if you try to call newUpPj with a wrong ce flag; remember # that if you're editing a project you've to supply a project's id or you'll # get an ERR_IDREQ. -proc ::admin::newUpPj {ce db name desc duration wtime active is4company maxt\ +proc ::admin::newUpPj {ce db name desc duration wtime active is4company lprobabilistic maxt\ samplet soglia pausep freqmon briefing table url shiftDef liaDef impS impCs impGA impSt impSd g_stuff \ manpanel panelpath dial_prefix rec_calls eidx {idPj ""}} { @@ -558,18 +560,10 @@ #converts flag to boolean - if {$active == 0} { - set active "f" - } else { - set active "t" - } + set active [expr {$active == 0 ? "f" : "t"}] + set is4company [expr {$is4company == 0 ? "f" : "t"}] + set lprobabilistic [expr {$lprobabilistic == 0 ? "f" : "t"}] - if {$is4company == 0} { - set is4company "f" - } else { - set is4company "t" - } - if {$soglia == ""} { set soglia "null" } @@ -617,10 +611,10 @@ if {$ce == 0} { set sqlNewUp "insert into projects.projects (name,description,noresp_wait,busy_wait,fax_wait,\ - machine_wait,sms_wait,active,pjtable,listed,max_retry,sampling_type,\ + machine_wait,sms_wait,active,pjtable,listed,lprobabilistic, max_retry,sampling_type,\ threshold,max_pause,sum_pause,freq_mon,briefing,pjstart,pjend,url,show_name,\ anagraphic_callback,anagraphic_completed,auto_call,email_on_response, record, dial_prefix, email_account) values (\ - '$name','$desc','$noanswer','$busy','$fax','$answermachine','$sms','$active','$table','$is4company',\ + '$name','$desc','$noanswer','$busy','$fax','$answermachine','$sms','$active','$table','$is4company', '$lprobabilistic', \ $maxt, $samplet, $soglia, $maxp, $sump, $freqmon, $briefing, '$start', '$end', '$url',\ '$show_name', '$mandatory_cb', '$mandatory_r', $auto_call, '$email_response', $rec_calls, $dial_prefix, $eidx)" } else { @@ -2220,11 +2214,11 @@ # @param path - file where contatcs are stored # @return 0 on success, -1 on db error, -2 on sanity check error proc ::admin::importFile {db idPj slist path} { - + # copiare i nominativi in una tab temporanea set tmpt "projects.a[clock seconds]" set slistp [join $slist ","] - + if {[::yadb::execl $db "create table $tmpt (like projects.template including defaults)"] == -1} { ::yalog::error "Error while creating aux table $tmpt" return -1 @@ -2272,6 +2266,8 @@ if {$dataPj(sampling_type) == 3} { set my_dest_table $dataPj(pjframe) } else { + # FIXME remove me + ::yalog::error "REMOVE ME OR NOT ?" set my_dest_table $dataPj(pjtable) } if {[::yadb::execl $db "insert into $my_dest_table select * from $tmpt"] == -1} { Modified: trunk/yaacs/sample.tcl =================================================================== --- trunk/yaacs/sample.tcl 2012-01-12 12:19:05 UTC (rev 2138) +++ trunk/yaacs/sample.tcl 2012-01-17 13:15:55 UTC (rev 2139) @@ -243,11 +243,11 @@ } switch -exact -- $sampleType \ $::sample::COD_PROV_CAPOLUO {return [::sample::codProvCapoluo $db $idPj $mult] }\ - $::sample::RUOTATO { return [::sample::ruotato $db $idPj $mult] }\ - $::sample::COD_COL { return [::sample::codCol $db $idPj $mult] }\ - $::sample::SOST { return [::sample::sostituzione $db $idPj $mult] }\ - $::sample::COD_COL_POP_RES { return [::sample::codColRes $db $idPj $mult] }\ - $::sample::LISTED { return [::sample::codCol $db $idPj $mult]}\ + $::sample::RUOTATO {return [::sample::ruotato $db $idPj $mult] }\ + $::sample::COD_COL {return [::sample::codCol $db $idPj $mult] }\ + $::sample::SOST {return [::sample::sostituzione $db $idPj $mult] }\ + $::sample::COD_COL_POP_RES {return [::sample::codColRes $db $idPj $mult] }\ + $::sample::LISTED {return [::sample::codCol $db $idPj $mult]}\ default {return -2} } @@ -517,7 +517,7 @@ return -1 } - for {set i 0} {$i <= [expr int($totProv/$sample::SAMPLING_STEP)]} {incr i} { + for {set i 0} {[expr $i * $sample::SAMPLING_STEP] < $totProv} {incr i} { set inf [expr $i * $sample::SAMPLING_STEP] if {[expr ($totProv - $inf)] < $sample::SAMPLING_STEP} { @@ -1016,6 +1016,7 @@ return -1 } set campTab $dataPj(sample_table) + set stype $dataPj(sampling_type) # check if i can do sample.. if it's a listed projects managed manually, # it's not a good idea to go over this point @@ -1027,7 +1028,7 @@ } # update geo quotas (both geo and gen age) - if {[::sample::refreshQuota $db $dataPj(name) $sample::COD_COL] == -1} { + if {[::sample::refreshQuota $db $dataPj(name) $stype] == -1} { ::yalog::error "Unable to refreh quotas" return -1 } @@ -1095,13 +1096,14 @@ set sampType $dataPj(sampling_type) set frameTab $dataPj(pjframe) set defiTab [lindex [split [string trim $dataPj(pjtable)] "."] 1]_theo_def + set lprob $dataPj(lprobabilistic) # check if strata/cod_com table exixst (it needs to choose between old style cod_com sampling and new cod_col sampling) set defined [::yadb::tableExists $db $defiTab "projects"] # let's copy strata/cod_com definiton in a "shared table" - # needs only to have less trouble in plpgsqlprocedure + # needs only to have less trouble in plpgsql procedure if {$defined} { if {[::yadb::execl $db "DELETE FROM sampling.strata_codcom_definition"] == -1} { @@ -1114,41 +1116,46 @@ } } + # since both Listed and codCol sampling share + # the same mechanisn to sample data we need to + # dstinct between the two in terms of panel contants # let's find some unused contact which can be reused - if {$sampType ==3} { - if {[::sample::free $db $table $sample::COD_COL] == -1} { - ::yalog::error "failed to free unused contacts" - return -1 - } - } else { + # samptType = 2 -> Stratified + # samptType = 3 -> Listed - # remove fresh panel contacts (also quota filled) + if {$sampType == 2} { if {[::sample::free_panel_contacts $db $dataPj(name) $idPj] == -1} { ::yalog::error "failed to free unused contacts" return -1 } + } - # remove fresh contanct - if {[::sample::free $db $table $sample::LISTED] == -1} { - ::yalog::error "failed to free unused contacts" - return -1 - } - + # remove fresh contacts + if {[::sample::free $db $table $sampType] == -1} { + ::yalog::error "failed to free unused contacts" + return -1 } # total theoric sample composition + if {$lprob == 0} { + set res [::yadb::getTuple $db "select sum(qty),sum(done) from $theoTab" 0] + set theoTot [lindex $res 0] + set doneTot [lindex $res 1] + } else { + # we are going to perform sampling on a listed pj with probabilistic + # property checked we ahve to take into account also fixed callbacks + set doneTot [lindex [::yadb::getTuple $db "select count(*) from $table \ + where ouid in $::sample::callback_ouid or ouid = 8 or locked" 0] 0] + set theoTot [lindex [::yadb::getTuple $db "select sum(qty) from $theoTab" 0] 0] + } - set res [::yadb::getTuple $db "select sum(qty),sum(done) from $theoTab" 0] - set theoTot [lindex $res 0] - if {$theoTot == -1} { + if {$theoTot == -1 || $doneTot == -1} { ::yalog::error "unable to calculate total theoric sample composition" return -1 } # what has already been done? - set doneTot [lindex $res 1] - # clear sample structure's table if {[::yadb::execl $db "delete from $campTab"] == -1} { ::yalog::error "cannot clean up $campTab" @@ -1173,16 +1180,28 @@ # the one we're interested in are: strata (strata cod id), qty (number of # interviews to be done in strata) and done (how many interviews we actually did) - set sqlCod "SELECT * FROM $theoTab WHERE done < qty ORDER BY strata" + if {$lprob == 0} { + set sqlCod "SELECT * FROM $theoTab WHERE done < qty ORDER BY strata" + } else { + set sqlCod "SELECT a.strata, a.qty, a.done as done_real, coalesce(b.done,0) as done + FROM + $theoTab as a + LEFT OUTER JOIN + (SELECT strata,count(*) as done FROM $table WHERE ouid = 8 OR ouid in $::sample::callback_ouid or locked GROUP BY strata) as b + ON (a.strata = b.strata) + WHERE a.qty > coalesce(b.done,0) + ORDER BY a.strata" + } set cmd { set pond 1 set newNum 0 # we need to sample - if {$rec(done) != 0} { + if {$lprob == 0 && $rec(done) != 0} { set pond [expr (double($doneTot)/double($theoTot)) / (double($rec(done))/double($rec(qty)))] } + set newNum [expr int(($rec(qty)-$rec(done)) * $mult * $pond)] # I know that there's no error here :) but I want to log # this information for sure so I'm using the lowest log-level @@ -1192,6 +1211,7 @@ ::yalog::error "pond: $pond" ::yalog::error "theoric: $rec(qty)" ::yalog::error "done: $rec(done)s" + if {$lprob == 1} {::yalog::error "done real: $rec(done_real)s"} ::yalog::error "-- END DEBUG INFOS FOR strata=$rec(strata) --" @@ -1210,53 +1230,58 @@ } - # those stratas are closed - if {[yadb::execl $db "insert into quota_filled_gen (strata) - select strata from $theoTab WHERE done >= qty order by strata"] == -1} { + # those stratas are closed so we move all fixed callbacks + # (performed only for strata and vanilla listed, cause in case + # of prob listed theoretically there could be no fixed callbacks + # for a closed strata (if you always use as mult 1) + if { $lprob == 0 } { + if {[yadb::execl $db "insert into quota_filled_gen (strata) + select strata from $theoTab WHERE done >= qty order by strata"] == -1} { yalog::error "failed to close stratum $cod" return -1 - } + } - # let's create an aux temp table - - if {[::yadb::execl $db "create temp table delete_callbacks on commit drop as select rid, cod_com from $table limit 0"] == -1} { - ::yalog::error "error while creating aux temp table delete_callbacks" - return -1 - } + # let's create an aux temp table + + if {[::yadb::execl $db "create temp table delete_callbacks on commit drop as select rid, cod_com from $table limit 0"] == -1} { + ::yalog::error "error while creating aux temp table delete_callbacks" + return -1 + } - # finds out all call-backs to be removed + # finds out all call-backs to be removed - set sqlInsAux " insert into delete_callbacks - select t.rid, t.cod_com - from $table as t, quota_filled_gen as q, projects.schedule as a - where t.strata=q.strata and t.ouid in $::sample::callback_ouid and t.rid=a.rid - and t.cod_com=a.cod_com and a.proj=$idPj and t.panel = 0 for update of a" + set sqlInsAux " insert into delete_callbacks + select t.rid, t.cod_com + from $table as t, quota_filled_gen as q, projects.schedule as a + where t.strata=q.strata and t.ouid in $::sample::callback_ouid and t.rid=a.rid + and t.cod_com=a.cod_com and a.proj=$idPj and t.panel = 0 for update of a" - if {[::yadb::execl $db $sqlInsAux] == -1} { - ::yalog::error "cannot insert call-back into delete_callbacks" - return -1 - } + if {[::yadb::execl $db $sqlInsAux] == -1} { + ::yalog::error "cannot insert call-back into delete_callbacks" + return -1 + } - if {[::yadb::execl $db "delete from projects.schedule as a using delete_callbacks as b where a.rid=b.rid and \ - a.cod_com=b.cod_com and a.proj=$idPj"] == -1} { - ::yalog::error "failed to remove useless call-backs" - return -1 - } + if {[::yadb::execl $db "delete from projects.schedule as a using delete_callbacks as b where a.rid=b.rid and \ + a.cod_com=b.cod_com and a.proj=$idPj"] == -1} { + ::yalog::error "failed to remove useless call-backs" + return -1 + } - # store on stats what we've done - - set sqlInsStat "insert into log.activitylog (uid, proj, start_work, end_work, ouid, cod_com, rid) - select -2, $idPj, now(), now(), -2, cod_com, rid from delete_callbacks" - if {[::yadb::execl $db $sqlInsStat] == -1} { - ::yalog::error "failed to insert into stats data form deleted call-back" - } + # store on stats what we've done + + set sqlInsStat "insert into log.activitylog (uid, proj, start_work, end_work, ouid, cod_com, rid) + select -2, $idPj, now(), now(), -2, cod_com, rid from delete_callbacks" + if {[::yadb::execl $db $sqlInsStat] == -1} { + ::yalog::error "failed to insert into stats data form deleted call-back" + } - # update contact's history on project's table - set sqlHst "update $table as b set ouid=-2, quota=true, \ - touch=now() from delete_callbacks as a where a.rid=b.rid and a.cod_com=b.cod_com" - if {[::yadb::execl $db $sqlHst] == -1} { - ::yalog::error "failed to update contact's history for removed call-backs" + # update contact's history on project's table + set sqlHst "update $table as b set ouid=-2, quota=true, \ + touch=now() from delete_callbacks as a where a.rid=b.rid and a.cod_com=b.cod_com" + if {[::yadb::execl $db $sqlHst] == -1} { + ::yalog::error "failed to update contact's history for removed call-backs" + } } # clear shared tables @@ -1268,7 +1293,6 @@ # perform sampling proccess splitting the main process in little tiny # "steps" for performance reasons. - set totCod [lindex [::yadb::getTuple $db "select count(*) from $campTab" 0] 0] if {$totCod == -1} { @@ -1276,7 +1300,7 @@ return -1 } - for {set i 0} {$i <= [expr int($totCod/$sample::SAMPLING_STEP)]} {incr i} { + for {set i 0} {[expr $i * $sample::SAMPLING_STEP] < $totCod} {incr i} { set inf [expr $i * $sample::SAMPLING_STEP] if {[expr ($totCod - $inf)] < $sample::SAMPLING_STEP} { @@ -1288,33 +1312,33 @@ set codInf [lindex [yadb::getTuple $db "select strata from $campTab \ order by strata offset $inf limit 1" 0] 0] if {$codInf == -1} { - yalog::error "unable to retrive the lower bound to sampling." + ::yalog::error "unable to retrive the lower bound to sampling." return -1 } set codSup [lindex [yadb::getTuple $db "select strata from $campTab \ order by strata offset $sup limit 1" 0] 0] if {$codSup == -1} { - yalog::error "unable to retrive the upper bound to sampling." + ::yalog::error "unable to retrive the upper bound to sampling." return -1 } # do sampling on subset (codInf, codSup) based on $defined value if {$defined} { - if {[sample::sampleCodColDefined $db $codInf $codSup] == -1} { - yalog::error "fatal error on sampling" + if {[::sample::sampleCodColDefined $db $codInf $codSup] == -1} { + ::yalog::error "fatal error on sampling" return -1 } } else { if {$sampType == 3} { - if {[::sample::sampleListedNew $db $codInf $codSup $table $frameTab] == -1 } { - yalog::error "fatal error on listed sampling" + if {[::sample::sampleListedNew $db $codInf $codSup $table $frameTab $lprob] == -1 } { + ::yalog::error "fatal error on listed sampling" return -1 } } else { - if {[sample::sampleCodCol $db $codInf $codSup] == -1} { - yalog::error "fatal error on sampling" + if {[::sample::sampleCodCol $db $codInf $codSup] == -1} { + ::yalog::error "fatal error on sampling" return -1 } } @@ -2697,16 +2721,17 @@ ::yadb::execl $db "rollback" return -1 } + # sql note use alias for the updated table (supported since postgresql 8.2) if {[::yadb::execl $db "UPDATE projects.${pjname}_theo as b SET done = a.done \ FROM (SELECT strata,count(*) as done FROM projects.$pjname WHERE ouid = 8 GROUP BY strata) as a \ WHERE a.strata = b.strata"] == -1} { - ::yalog::error "Unable to set number of completed for each geographical strata (sampling_type 2 - $pjname) " + ::yalog::error "Unable to set number of completed for each geographical strata (sampling_type $samplet - $pjname) " ::yadb::execl $db "rollback" return -1 } if {[::yadb::execl $db "UPDATE projects.${pjname}_theo SET open = false WHERE done >= qty"] == -1} { - ::yalog::error "Unable to set number open flag for each geographical strata (sampling_type 2 - $pjName) " + ::yalog::error "Unable to set number open flag for each geographical strata (sampling_type $samplet - $pjName) " ::yadb::execl $db "rollback" return -1 } @@ -3085,18 +3110,22 @@ } # sampleListedNew -proc ::sample::sampleListedNew {db codInf codSup pjTab frameTab} { +proc ::sample::sampleListedNew {db codInf codSup pjTab frameTab lprob} { + set chunckStrata "select strata,qty from sampling.sample_gen_design where strata >= $codInf and strata <= $codSup" if {[::yadb::execl $db "create table sampling.tmp_listed as (select * from $frameTab limit 0)"] == -1} { ::yalog::error "cannot create aux table tmp_listed" return -1 - #} + } set cmdSampl { + # add sample field to ORDER BY clause to deal with probabilistic + # listed sampling.We added it unconditionally cause in case of vanilla + # listed sampling "sample" should be null hence with no influwnce whatsoever if {[::yadb::execl $db "insert into sampling.tmp_listed \ - select * from $frameTab as a \ - where a.strata = $rec(strata) and a.touch is null \ - order by random() \ - limit $rec(qty)"] == -1} { + select * from $frameTab as a \ + where a.strata = $rec(strata) and a.touch is null \ + order by sample,random() \ + limit $rec(qty)"] == -1} { ::yalog::error "cannot insert in sampling.tmp_listed" return -1 } Modified: trunk/yadmin.tcl =================================================================== --- trunk/yadmin.tcl 2012-01-12 12:19:05 UTC (rev 2138) +++ trunk/yadmin.tcl 2012-01-17 13:15:55 UTC (rev 2139) @@ -979,7 +979,7 @@ unset ::yadmin::turButton } -proc ::yadmin::importContacts {db} { +proc ::yadmin::importContacts {db lprob} { ::yalog::debug "Begin of import contact step" ::yalog::debug "Define contact's file structure" set dlist [::admin::getFieldLIst $db projects import_template] @@ -987,6 +987,7 @@ set slist [lindex $::yadmin::importCs 1] } else { set slist [::admin::getFieldLIst $db projects mandatory_import_template] + if {$lprob == 1} {lappend slist sample} } if {($dlist == -1) || ($slist == -1) } { ::dialogs::error . [mc "Import fails"] [mc "An error occurs while importing contacts.\nCheck your logs"] @@ -1601,7 +1602,7 @@ .pj.fsamp.soglia delete 0 end .pj.fsamp.soglia insert 0 $survey(threshold) - set samplet $survey(sampling_type) + set samplet $survey(sampling_type) set all_ws [list .pj.fsamp.importBt .pj.fsamp.importCs .pj.fsamp.importSt .pj.fsamp.importGA .pj.fsamp.importSd .pj.fsamp.lsoglia .pj.fsamp.soglia] foreach w $all_ws {$w configure -state disabled} set en_ws [list] @@ -1630,6 +1631,9 @@ if {$survey(listed) eq "t"} { .pj.fsamp.importCs configure -text [mc "Import more contacts..."] + if {$survey(lprobabilistic) eq "t"} { + set ::yadmin::listed_probabilistic 1 + } } .pj.time_o.voip.url.url delete 0 end @@ -2890,6 +2894,8 @@ variable ::yadmin::email_account variable ::yadmin::eidx -1 + variable ::yadmin::listed_probabilistic 0 + # possible value: # -1 disable voip for this projects # 0 disable autocall for this pj @@ -3065,8 +3071,8 @@ } 3 { # TODO manage gender /age and study degree quotas too - set en_ws [list .pj.fsamp.importBt .pj.fsamp.importCs .pj.fsamp.importGA] - .pj.wt.nint set $yadmin::COM_NINT + set en_ws [list .pj.fsamp.importBt .pj.fsamp.importCs .pj.fsamp.importGA .pj.fsamp.probabilistic] + .pj.wt.nint set $::yadmin::COM_NINT set is4company 1 } 5 { @@ -3085,7 +3091,7 @@ button .pj.fsamp.importCs -image "emblem_system16x16" -text [mc "Choose Contacts file..."] -compound left \ -command { - set ::yadmin::importCs [::yadmin::importContacts $passedDb] + set ::yadmin::importCs [::yadmin::importContacts $passedDb $::yadmin::listed_probabilistic] if {$::yadmin::importCs == ""} {return} } @@ -3117,7 +3123,11 @@ label .pj.fsamp.lsoglia -text [mc "Threshold"] -state disabled entry .pj.fsamp.soglia -bg white -state disabled + checkbutton .pj.fsamp.probabilistic -variable ::yadmin::listed_probabilistic \ + -text [mc "Probailistic ?"] -state disabled + grid .pj.fsamp.lsamp .pj.fsamp.samp -sticky w -padx 2 -pady 2 + grid .pj.fsamp.probabilistic -sticky w -padx 2 -pady 2 grid .pj.fsamp.lsoglia .pj.fsamp.soglia -sticky w -padx 2 -pady 2 grid .pj.fsamp.importBt - -sticky w -padx 2 -pady 2 grid .pj.fsamp.importCs - -sticky w -padx 2 -pady 2 @@ -3438,13 +3448,13 @@ # let's do it if {$idPj == ""} { set createPj [::admin::newUpPj 0 $db $name $desc $duration $wtime \ - $::yadmin::isActive $is4company $nint \ + $::yadmin::isActive $is4company $::yadmin::listed_probabilistic $nint \ $samplet $soglia $pausep $freqm $briefing "" $url $tmpT $::yadmin::changed_lia\ $::yadmin::importSome $::yadmin::importCs $::yadmin::importGenEta $::yadmin::importStrata $::yadmin::importStudy $gui_stuff \ $::yadmin::manpanel $::yadmin::panelpath $::yadmin::dial_prefix $::yadmin::record_calls $::yadmin::eidx] } else { set createPj [::admin::newUpPj 1 $db $name $desc $duration $wtime \ - $::yadmin::isActive $is4company $nint \ + $::yadmin::isActive $is4company $::yadmin::listed_probabilistic $nint \ $samplet $soglia $pausep $freqm $briefing "" $url $tmpT $::yadmin::changed_lia\ $::yadmin::importSome $::yadmin::importCs $::yadmin::importGenEta $::yadmin::importStrata $::yadmin::importStudy $gui_stuff \ $::yadmin::manpanel $::yadmin::panelpath $::yadmin::dial_prefix $::yadmin::record_calls $yadmin::eidx $passedIdPj] This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <si...@us...> - 2012-01-12 12:19:11
|
Revision: 2138 http://yaacs.svn.sourceforge.net/yaacs/?rev=2138&view=rev Author: sickpig Date: 2012-01-12 12:19:05 +0000 (Thu, 12 Jan 2012) Log Message: ----------- * FIX: a typo that caused a syntax error at run time and a thinko that caused realMail to mark every checked email as non existant if certain condintions are met. added a TODO Modified Paths: -------------- branches/external-trunk/yaacs/sendmail.tcl trunk/yaacs/sendmail.tcl Modified: branches/external-trunk/yaacs/sendmail.tcl =================================================================== --- branches/external-trunk/yaacs/sendmail.tcl 2012-01-12 10:03:32 UTC (rev 2137) +++ branches/external-trunk/yaacs/sendmail.tcl 2012-01-12 12:19:05 UTC (rev 2138) @@ -164,7 +164,8 @@ } } set id [after 1500 [list set ::sendmail::temp_checker -1]] - + # TODO: check if we are a tcl or a tk script! no? + # user tkwait or vwait vwait ::sendmail::temp_checker after cancel $id @@ -210,7 +211,8 @@ # initially configure the socket as non blocking cause # we possibly get to line of welcome from some smtp (e.g. libero) set id [after $timeout {set ::sendmail::connection_state timeout} ] - fconfigure $::sendmail::sock -blocking 0 -buffering line + fconfigure $::sendmail::sock -blocking 0 + fconfigure $::sendmail::sock -buffering line if {$proxy ne "" && $pavail == 1} { # we are connecting to tyhe proxy so no need to check for connection error @@ -252,7 +254,7 @@ # mode can have nasty side effects... like when operating in high latency enviroment: in fact # it's possible to close the channel (socket) before getting every information we need to get. - fconfigure $::sendmail::sock -blocking 1 -buffering line + fconfigure $::sendmail::sock -blocking 1 fileevent $::sendmail::sock readable [list ::sendmail::readSock $::sendmail::sock] return $::sendmail::sock } @@ -270,7 +272,6 @@ # -4 temporary error on RCPT TO (grey list...) # -5 permanent error on RCPT TO proc ::sendmail::realMail {mail sender proxy} { - # first check for existence of a MX # record for the email domain package require dns @@ -352,6 +353,7 @@ # after that it switch the sock to blocking mode and start # sending SMPT protocol message ttryng to understand if # email address is valid + set ret [::sendmail::connectSMTP $mxr $proxy] if {$ret == -1} { ::yalog::error "cannot open socket" @@ -364,7 +366,6 @@ ::sendmail::closeSmtpSocket return -2 } - return -2 } # start with the HELO command set ret [::sendmail::sendSMTPcmd $::sendmail::sock "HELO [lindex [split $sender @] 1]"] @@ -406,7 +407,7 @@ set ret [::sendmail::sendSMTPcmd $::sendmail::sock "RCPT TO:<$mail>" 6000] if {$ret == -1} { - :sendmail::closeSmtpSocket + ::sendmail::closeSmtpSocket return -2 } # need to take into account grey listing and temporary failure (4XX code) @@ -414,13 +415,13 @@ 4* { # temp fail or graylisting # so we can send the email anyway - ::yalog::debug "Temp error: $::sendmail::reply" ::sendmail::closeSmtpSocket + ::yalog::debug "Temp error on RCPT TO: $::sendmail::reply" return -4 } 5* { + ::sendmail::closeSmtpSocket ::yalog::error "error on RCPT TO: $::sendmail::reply"; - ::sendmail::closeSmtpSocket return -5 } default { Modified: trunk/yaacs/sendmail.tcl =================================================================== --- trunk/yaacs/sendmail.tcl 2012-01-12 10:03:32 UTC (rev 2137) +++ trunk/yaacs/sendmail.tcl 2012-01-12 12:19:05 UTC (rev 2138) @@ -164,7 +164,8 @@ } } set id [after 1500 [list set ::sendmail::temp_checker -1]] - + # TODO: check if we are a tcl or a tk script! no? + # user tkwait or vwait vwait ::sendmail::temp_checker after cancel $id @@ -210,7 +211,8 @@ # initially configure the socket as non blocking cause # we possibly get to line of welcome from some smtp (e.g. libero) set id [after $timeout {set ::sendmail::connection_state timeout} ] - fconfigure $::sendmail::sock -blocking 0 -buffering line + fconfigure $::sendmail::sock -blocking 0 + fconfigure $::sendmail::sock -buffering line if {$proxy ne "" && $pavail == 1} { # we are connecting to tyhe proxy so no need to check for connection error @@ -252,7 +254,7 @@ # mode can have nasty side effects... like when operating in high latency enviroment: in fact # it's possible to close the channel (socket) before getting every information we need to get. - fconfigure $::sendmail::sock -blocking 1 -buffering line + fconfigure $::sendmail::sock -blocking 1 fileevent $::sendmail::sock readable [list ::sendmail::readSock $::sendmail::sock] return $::sendmail::sock } @@ -270,7 +272,6 @@ # -4 temporary error on RCPT TO (grey list...) # -5 permanent error on RCPT TO proc ::sendmail::realMail {mail sender proxy} { - # first check for existence of a MX # record for the email domain package require dns @@ -352,6 +353,7 @@ # after that it switch the sock to blocking mode and start # sending SMPT protocol message ttryng to understand if # email address is valid + set ret [::sendmail::connectSMTP $mxr $proxy] if {$ret == -1} { ::yalog::error "cannot open socket" @@ -364,7 +366,6 @@ ::sendmail::closeSmtpSocket return -2 } - return -2 } # start with the HELO command set ret [::sendmail::sendSMTPcmd $::sendmail::sock "HELO [lindex [split $sender @] 1]"] @@ -406,7 +407,7 @@ set ret [::sendmail::sendSMTPcmd $::sendmail::sock "RCPT TO:<$mail>" 6000] if {$ret == -1} { - :sendmail::closeSmtpSocket + ::sendmail::closeSmtpSocket return -2 } # need to take into account grey listing and temporary failure (4XX code) @@ -414,13 +415,13 @@ 4* { # temp fail or graylisting # so we can send the email anyway - ::yalog::debug "Temp error: $::sendmail::reply" ::sendmail::closeSmtpSocket + ::yalog::debug "Temp error on RCPT TO: $::sendmail::reply" return -4 } 5* { + ::sendmail::closeSmtpSocket ::yalog::error "error on RCPT TO: $::sendmail::reply"; - ::sendmail::closeSmtpSocket return -5 } default { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <pop...@us...> - 2012-01-12 10:03:43
|
Revision: 2137 http://yaacs.svn.sourceforge.net/yaacs/?rev=2137&view=rev Author: poppero619 Date: 2012-01-12 10:03:32 +0000 (Thu, 12 Jan 2012) Log Message: ----------- * Prevent to perform sampling on listed projects if they're managed manually Modified Paths: -------------- branches/external-trunk/yaacs/sample.tcl branches/external-trunk/yadmin.tcl trunk/yaacs/sample.tcl trunk/yadmin.tcl Modified: branches/external-trunk/yaacs/sample.tcl =================================================================== --- branches/external-trunk/yaacs/sample.tcl 2011-12-19 13:28:22 UTC (rev 2136) +++ branches/external-trunk/yaacs/sample.tcl 2012-01-12 10:03:32 UTC (rev 2137) @@ -1017,6 +1017,15 @@ } set campTab $dataPj(sample_table) + # check if i can do sample.. if it's a listed projects managed manually, + # it's not a good idea to go over this point + if {$dataPj(sampling_type) == 3} { + if {[lindex [::yadb::getTuple $db "select count(*) from $dataPj(pjtable)_frame" 0] 0] == 0} { + ::yalog::error "Unable to perform ::sample::codCol -> Listed project managed manually" + return -4 + } + } + # update geo quotas (both geo and gen age) if {[::sample::refreshQuota $db $dataPj(name) $sample::COD_COL] == -1} { ::yalog::error "Unable to refreh quotas" Modified: branches/external-trunk/yadmin.tcl =================================================================== --- branches/external-trunk/yadmin.tcl 2011-12-19 13:28:22 UTC (rev 2136) +++ branches/external-trunk/yadmin.tcl 2012-01-12 10:03:32 UTC (rev 2137) @@ -4879,6 +4879,11 @@ ::dialogs::info [mc "Sampling step completed"] \ [mc "Sampling it'ok but we can't check for unfitted strata"] } + -4 { + ::yalog::error "Unable to perform ::sample::codCol -> Listed project managed manually" + ::dialogs::error . [mc "This project is manually managed. You can't sample"] + return + } default { ::yalog::debug "sampling it's ok but maybe there's unfitted strata" set u_list [join $sampleRes "\n"] Modified: trunk/yaacs/sample.tcl =================================================================== --- trunk/yaacs/sample.tcl 2011-12-19 13:28:22 UTC (rev 2136) +++ trunk/yaacs/sample.tcl 2012-01-12 10:03:32 UTC (rev 2137) @@ -1017,6 +1017,15 @@ } set campTab $dataPj(sample_table) + # check if i can do sample.. if it's a listed projects managed manually, + # it's not a good idea to go over this point + if {$dataPj(sampling_type) == 3} { + if {[lindex [::yadb::getTuple $db "select count(*) from $dataPj(pjtable)_frame" 0] 0] == 0} { + ::yalog::error "Unable to perform ::sample::codCol -> Listed project managed manually" + return -4 + } + } + # update geo quotas (both geo and gen age) if {[::sample::refreshQuota $db $dataPj(name) $sample::COD_COL] == -1} { ::yalog::error "Unable to refreh quotas" Modified: trunk/yadmin.tcl =================================================================== --- trunk/yadmin.tcl 2011-12-19 13:28:22 UTC (rev 2136) +++ trunk/yadmin.tcl 2012-01-12 10:03:32 UTC (rev 2137) @@ -4879,6 +4879,11 @@ ::dialogs::info [mc "Sampling step completed"] \ [mc "Sampling it'ok but we can't check for unfitted strata"] } + -4 { + ::yalog::error "Unable to perform ::sample::codCol -> Listed project managed manually" + ::dialogs::error . [mc "This project is manually managed. You can't sample"] + return + } default { ::yalog::debug "sampling it's ok but maybe there's unfitted strata" set u_list [join $sampleRes "\n"] This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <si...@us...> - 2011-12-19 13:28:33
|
Revision: 2136 http://yaacs.svn.sourceforge.net/yaacs/?rev=2136&view=rev Author: sickpig Date: 2011-12-19 13:28:22 +0000 (Mon, 19 Dec 2011) Log Message: ----------- * FIX: mark as "out of quota" completed interviewees that that do not belong to any of the gen-age quota defined for the given project. Let's say that you're marking as complete a male contact with an age of 15 but the project define the minimum age as 18, now we mark the contact as complete and out of quota, before this commit the "out of quota" property would have been setted to false. ps applied only to trunk and e-trunk cause I'm planning to a add a bunch of recently added new features to stable branches via a svn merge soon Modified Paths: -------------- branches/external-trunk/yaacs/cati.tcl branches/external-trunk/yacati.tcl trunk/yaacs/cati.tcl trunk/yacati.tcl Modified: branches/external-trunk/yaacs/cati.tcl =================================================================== --- branches/external-trunk/yaacs/cati.tcl 2011-12-19 12:05:34 UTC (rev 2135) +++ branches/external-trunk/yaacs/cati.tcl 2011-12-19 13:28:22 UTC (rev 2136) @@ -1237,7 +1237,32 @@ return $retlist } +# take the output of ::cati::get_quota_gender_age (a list of list that +# rappresent the quota related to a given label) and gives you back +# a list of 4 int. min age max age for the entire label for both male +# and female. +proc ::cati::get_quota_ga_extreme_bounds {quota} { + set min_f 199 + set max_f 0 + set min_m 199 + set max_m 0 + foreach q $quota { + set l_min [lindex [split [lindex $q 1] -] 0] + set l_max [lindex [split [lindex $q 1] -] 1] + + if {([lindex $q 0] eq "M")} { + set min_m [expr {($min_m > $l_min) ? $l_min : $min_m}] + set max_m [expr {($max_m < $l_max) ? $l_max : $max_m}] + } + if {([lindex $q 0] eq "F")} { + set min_f [expr {($min_f > $l_min) ? $l_min : $min_f}] + set max_f [expr {($max_f < $l_max) ? $l_max : $max_f}] + } + } + return [list $min_f $max_f $min_m $max_m] +} + # get_quota checking for study degree quota # # @param db database connection handler Modified: branches/external-trunk/yacati.tcl =================================================================== --- branches/external-trunk/yacati.tcl 2011-12-19 12:05:34 UTC (rev 2135) +++ branches/external-trunk/yacati.tcl 2011-12-19 13:28:22 UTC (rev 2136) @@ -692,6 +692,7 @@ # fill in gender age quota table if {$::yacati::survey(sexage) eq "t"} { set ::yacati::quota_list_gender_age [::cati::get_quota_gender_age $::yacati::db $yacati::survey(pjtable) $::yacati::contact(label)] + set ::yacati::quota_list_gender_age_extreme_bounds [::cati::get_quota_ga_extreme_bounds $::yacati::quota_list_gender_age] ::yacati::fill_in_quota_gender_age } else { ::yacati::show_label $::yacati::labdata $::yacati::contact(label) @@ -877,6 +878,7 @@ array unset ::yacati::contact set ::yacati::validated_email "" unset ::yacati::quota_list_gender_age + unset ::yacati::quota_list_gender_age_extreme_bounds unset ::yacati::quota_list_study unset ::yacati::panel_open_quota unset ::yacati::callback_out_quota @@ -1044,12 +1046,11 @@ # that means quota gender age are enforced (not that the contact belong to panel frame) # NB we can't notify anyone based on study degree cause we don't have such information if {$::yacati::survey(sexage) eq "t"} { - set ref_year [::yamisc::ref_year] - set age [expr $ref_year - $::yacati::contact(byear)] - set gender [string toupper $::yacati::contact(sex)] # do the actual contact belongs to panel? if it does # and its quota is still open check if personal data # fit only panel open quota + set age [expr [::yamisc::ref_year] - $::yacati::contact(byear)] + set gender [string toupper $::yacati::contact(sex)] if {($::yacati::contact(panel) == 1) && !($::yacati::contact_belong_to_quota_closed)} { set quota_gender [lindex $::yacati::panel_open_quota 0] set lb [lindex $::yacati::panel_open_quota 1] @@ -1065,6 +1066,25 @@ set oq_msg [mc "The only open quota is %s %d-%d, while respondent you're saving is %d years old and %s. This is BAD!" \ $quota_gender $lb $ub $age $gender] } else { + # start checking extrme boundaries + if {$gender eq "M"} { + if {($age < [lindex $::yacati::quota_list_gender_age_extreme_bounds 2] || \ + $age > [lindex $::yacati::quota_list_gender_age_extreme_bounds 3])} { + ::yalog::error "Male age out-bound" + set outofquota "true" + set oq_msg [mc "You're trying to save a male contact which is %d years old, but male contact has to be between %d and %d" \ + $age [lindex $::yacati::quota_list_gender_age_extreme_bounds 2] [lindex $::yacati::quota_list_gender_age_extreme_bounds 3]] + } + } + if {$gender eq "F"} { + if {($age < [lindex $::yacati::quota_list_gender_age_extreme_bounds 0] || \ + $age > [lindex $::yacati::quota_list_gender_age_extreme_bounds 1])} { + set outofquota "true" + ::yalog::error "Female age out-bound" + set oq_msg [mc "You're trying to save a female contact which is %d years old, but female contact has to be between %d and %d" \ + $age [lindex $::yacati::quota_list_gender_age_extreme_bounds 0] [lindex $::yacati::quota_list_gender_age_extreme_bounds 1]] + } + } # ::yacati::quota_list_gender_age is a list (of lists) structure that contains # rappresentation of gender/age constraints stored in projects.pjname_theo_sex_age foreach w $::yacati::quota_list_gender_age { @@ -1164,6 +1184,7 @@ set ::yacati::validated_email "" catch { unset ::yacati::quota_list_gender_age + unset ::yacati::quota_list_gender_age_extreme_bounds unset ::yacati::quota_list_study unset ::yacati::panel_open_quota unset ::yacati::callback_out_quota @@ -1876,6 +1897,7 @@ set ::yacati::validated_email "" catch { unset ::yacati::quota_list_gender_age + unset ::yacati::quota_list_gender_age_extreme_bounds unset ::yacati::quota_list_study unset ::yacati::panel_open_quota unset ::yacati::callback_out_quota @@ -2347,6 +2369,7 @@ array unset ::yacati::survey catch { unset ::yacati::quota_list_gender_age + unset ::yacati::quota_list_gender_age_extreme_bounds unset ::yacati::quota_list_study unset ::yacati::panel_open_quota unset ::yacati::callback_out_quota Modified: trunk/yaacs/cati.tcl =================================================================== --- trunk/yaacs/cati.tcl 2011-12-19 12:05:34 UTC (rev 2135) +++ trunk/yaacs/cati.tcl 2011-12-19 13:28:22 UTC (rev 2136) @@ -1237,7 +1237,32 @@ return $retlist } +# take the output of ::cati::get_quota_gender_age (a list of list that +# rappresent the quota related to a given label) and gives you back +# a list of 4 int. min age max age for the entire label for both male +# and female. +proc ::cati::get_quota_ga_extreme_bounds {quota} { + set min_f 199 + set max_f 0 + set min_m 199 + set max_m 0 + foreach q $quota { + set l_min [lindex [split [lindex $q 1] -] 0] + set l_max [lindex [split [lindex $q 1] -] 1] + + if {([lindex $q 0] eq "M")} { + set min_m [expr {($min_m > $l_min) ? $l_min : $min_m}] + set max_m [expr {($max_m < $l_max) ? $l_max : $max_m}] + } + if {([lindex $q 0] eq "F")} { + set min_f [expr {($min_f > $l_min) ? $l_min : $min_f}] + set max_f [expr {($max_f < $l_max) ? $l_max : $max_f}] + } + } + return [list $min_f $max_f $min_m $max_m] +} + # get_quota checking for study degree quota # # @param db database connection handler Modified: trunk/yacati.tcl =================================================================== --- trunk/yacati.tcl 2011-12-19 12:05:34 UTC (rev 2135) +++ trunk/yacati.tcl 2011-12-19 13:28:22 UTC (rev 2136) @@ -692,6 +692,7 @@ # fill in gender age quota table if {$::yacati::survey(sexage) eq "t"} { set ::yacati::quota_list_gender_age [::cati::get_quota_gender_age $::yacati::db $yacati::survey(pjtable) $::yacati::contact(label)] + set ::yacati::quota_list_gender_age_extreme_bounds [::cati::get_quota_ga_extreme_bounds $::yacati::quota_list_gender_age] ::yacati::fill_in_quota_gender_age } else { ::yacati::show_label $::yacati::labdata $::yacati::contact(label) @@ -877,6 +878,7 @@ array unset ::yacati::contact set ::yacati::validated_email "" unset ::yacati::quota_list_gender_age + unset ::yacati::quota_list_gender_age_extreme_bounds unset ::yacati::quota_list_study unset ::yacati::panel_open_quota unset ::yacati::callback_out_quota @@ -1044,12 +1046,11 @@ # that means quota gender age are enforced (not that the contact belong to panel frame) # NB we can't notify anyone based on study degree cause we don't have such information if {$::yacati::survey(sexage) eq "t"} { - set ref_year [::yamisc::ref_year] - set age [expr $ref_year - $::yacati::contact(byear)] - set gender [string toupper $::yacati::contact(sex)] # do the actual contact belongs to panel? if it does # and its quota is still open check if personal data # fit only panel open quota + set age [expr [::yamisc::ref_year] - $::yacati::contact(byear)] + set gender [string toupper $::yacati::contact(sex)] if {($::yacati::contact(panel) == 1) && !($::yacati::contact_belong_to_quota_closed)} { set quota_gender [lindex $::yacati::panel_open_quota 0] set lb [lindex $::yacati::panel_open_quota 1] @@ -1065,6 +1066,25 @@ set oq_msg [mc "The only open quota is %s %d-%d, while respondent you're saving is %d years old and %s. This is BAD!" \ $quota_gender $lb $ub $age $gender] } else { + # start checking extrme boundaries + if {$gender eq "M"} { + if {($age < [lindex $::yacati::quota_list_gender_age_extreme_bounds 2] || \ + $age > [lindex $::yacati::quota_list_gender_age_extreme_bounds 3])} { + ::yalog::error "Male age out-bound" + set outofquota "true" + set oq_msg [mc "You're trying to save a male contact which is %d years old, but male contact has to be between %d and %d" \ + $age [lindex $::yacati::quota_list_gender_age_extreme_bounds 2] [lindex $::yacati::quota_list_gender_age_extreme_bounds 3]] + } + } + if {$gender eq "F"} { + if {($age < [lindex $::yacati::quota_list_gender_age_extreme_bounds 0] || \ + $age > [lindex $::yacati::quota_list_gender_age_extreme_bounds 1])} { + set outofquota "true" + ::yalog::error "Female age out-bound" + set oq_msg [mc "You're trying to save a female contact which is %d years old, but female contact has to be between %d and %d" \ + $age [lindex $::yacati::quota_list_gender_age_extreme_bounds 0] [lindex $::yacati::quota_list_gender_age_extreme_bounds 1]] + } + } # ::yacati::quota_list_gender_age is a list (of lists) structure that contains # rappresentation of gender/age constraints stored in projects.pjname_theo_sex_age foreach w $::yacati::quota_list_gender_age { @@ -1164,6 +1184,7 @@ set ::yacati::validated_email "" catch { unset ::yacati::quota_list_gender_age + unset ::yacati::quota_list_gender_age_extreme_bounds unset ::yacati::quota_list_study unset ::yacati::panel_open_quota unset ::yacati::callback_out_quota @@ -1876,6 +1897,7 @@ set ::yacati::validated_email "" catch { unset ::yacati::quota_list_gender_age + unset ::yacati::quota_list_gender_age_extreme_bounds unset ::yacati::quota_list_study unset ::yacati::panel_open_quota unset ::yacati::callback_out_quota @@ -2347,6 +2369,7 @@ array unset ::yacati::survey catch { unset ::yacati::quota_list_gender_age + unset ::yacati::quota_list_gender_age_extreme_bounds unset ::yacati::quota_list_study unset ::yacati::panel_open_quota unset ::yacati::callback_out_quota This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <si...@us...> - 2011-12-19 12:05:45
|
Revision: 2135 http://yaacs.svn.sourceforge.net/yaacs/?rev=2135&view=rev Author: sickpig Date: 2011-12-19 12:05:34 +0000 (Mon, 19 Dec 2011) Log Message: ----------- * remove debug puts Modified Paths: -------------- branches/external-trunk/yaacs/cati.tcl trunk/yaacs/cati.tcl Modified: branches/external-trunk/yaacs/cati.tcl =================================================================== --- branches/external-trunk/yaacs/cati.tcl 2011-12-19 09:32:31 UTC (rev 2134) +++ branches/external-trunk/yaacs/cati.tcl 2011-12-19 12:05:34 UTC (rev 2135) @@ -253,9 +253,7 @@ set contact(old_ouid) -1 incr contact(retry) - puts $contact(dis_phones) set contact(dis_phones) [split $contact(dis_phones) ","] - puts $contact(dis_phones) array set with_history [::cati::_build_history $db $srvy(proj) $uid [array get contact] $recruit] if {[array size with_history] > 0} { Modified: trunk/yaacs/cati.tcl =================================================================== --- trunk/yaacs/cati.tcl 2011-12-19 09:32:31 UTC (rev 2134) +++ trunk/yaacs/cati.tcl 2011-12-19 12:05:34 UTC (rev 2135) @@ -253,9 +253,7 @@ set contact(old_ouid) -1 incr contact(retry) - puts $contact(dis_phones) set contact(dis_phones) [split $contact(dis_phones) ","] - puts $contact(dis_phones) array set with_history [::cati::_build_history $db $srvy(proj) $uid [array get contact] $recruit] if {[array size with_history] > 0} { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <si...@us...> - 2011-12-19 09:32:41
|
Revision: 2134 http://yaacs.svn.sourceforge.net/yaacs/?rev=2134&view=rev Author: sickpig Date: 2011-12-19 09:32:31 +0000 (Mon, 19 Dec 2011) Log Message: ----------- * FIX use proper variable name in err msg and proper i18n string substitution mechanism Modified Paths: -------------- branches/external-stable/yacati.tcl branches/external-trunk/yacati.tcl branches/internal-stable/yacati.tcl trunk/yacati.tcl Modified: branches/external-stable/yacati.tcl =================================================================== --- branches/external-stable/yacati.tcl 2011-12-19 09:15:20 UTC (rev 2133) +++ branches/external-stable/yacati.tcl 2011-12-19 09:32:31 UTC (rev 2134) @@ -3992,7 +3992,7 @@ if {[::yalog::setFile $gettedopts(f)]} { ::dialogs::error . [mc "Unable to write to log file."]\ - [mc "Logging disable for this session!\nWe were trying to log into $path_to_log_file"] + [mc "Logging disable for this session!\nWe were trying to log into %s" $gettedopts(f)] } set log_level "error" Modified: branches/external-trunk/yacati.tcl =================================================================== --- branches/external-trunk/yacati.tcl 2011-12-19 09:15:20 UTC (rev 2133) +++ branches/external-trunk/yacati.tcl 2011-12-19 09:32:31 UTC (rev 2134) @@ -4001,7 +4001,7 @@ if {[::yalog::setFile $gettedopts(f)]} { ::dialogs::error . [mc "Unable to write to log file."]\ - [mc "Logging disable for this session!\nWe were trying to log into $path_to_log_file"] + [mc "Logging disable for this session!\nWe were trying to log into %s" $gettedopts(f)] } set log_level "error" Modified: branches/internal-stable/yacati.tcl =================================================================== --- branches/internal-stable/yacati.tcl 2011-12-19 09:15:20 UTC (rev 2133) +++ branches/internal-stable/yacati.tcl 2011-12-19 09:32:31 UTC (rev 2134) @@ -3993,7 +3993,7 @@ if {[::yalog::setFile $gettedopts(f)]} { ::dialogs::error . [mc "Unable to write to log file."]\ - [mc "Logging disable for this session!\nWe were trying to log into $path_to_log_file"] + [mc "Logging disable for this session!\nWe were trying to log into %s" $gettedopts(f)] } set log_level "error" Modified: trunk/yacati.tcl =================================================================== --- trunk/yacati.tcl 2011-12-19 09:15:20 UTC (rev 2133) +++ trunk/yacati.tcl 2011-12-19 09:32:31 UTC (rev 2134) @@ -4001,7 +4001,7 @@ if {[::yalog::setFile $gettedopts(f)]} { ::dialogs::error . [mc "Unable to write to log file."]\ - [mc "Logging disable for this session!\nWe were trying to log into $path_to_log_file"] + [mc "Logging disable for this session!\nWe were trying to log into %s" $gettedopts(f)] } set log_level "error" This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <si...@us...> - 2011-12-19 09:15:31
|
Revision: 2133 http://yaacs.svn.sourceforge.net/yaacs/?rev=2133&view=rev Author: sickpig Date: 2011-12-19 09:15:20 +0000 (Mon, 19 Dec 2011) Log Message: ----------- * FIX unintend changes that broke gen-age quota handling in yadmin. Modified Paths: -------------- branches/external-trunk/yadmin.tcl trunk/yadmin.tcl Modified: branches/external-trunk/yadmin.tcl =================================================================== --- branches/external-trunk/yadmin.tcl 2011-12-16 10:47:06 UTC (rev 2132) +++ branches/external-trunk/yadmin.tcl 2011-12-19 09:15:20 UTC (rev 2133) @@ -5293,7 +5293,6 @@ foreach q $quota { array unset aq array set aq $q - set lab $aq(label) if {$r == 1} { set T($r,0) "$aq(label)" set T($r,la) "" @@ -5319,6 +5318,7 @@ set subFtheo 0 } } + set lab $aq(label) set sex $aq(sex) if {$sex == "F"} { set j 2 Modified: trunk/yadmin.tcl =================================================================== --- trunk/yadmin.tcl 2011-12-16 10:47:06 UTC (rev 2132) +++ trunk/yadmin.tcl 2011-12-19 09:15:20 UTC (rev 2133) @@ -5293,7 +5293,6 @@ foreach q $quota { array unset aq array set aq $q - set lab $aq(label) if {$r == 1} { set T($r,0) "$aq(label)" set T($r,la) "" @@ -5319,6 +5318,7 @@ set subFtheo 0 } } + set lab $aq(label) set sex $aq(sex) if {$sex == "F"} { set j 2 This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <si...@us...> - 2011-12-16 10:47:19
|
Revision: 2132 http://yaacs.svn.sourceforge.net/yaacs/?rev=2132&view=rev Author: sickpig Date: 2011-12-16 10:47:06 +0000 (Fri, 16 Dec 2011) Log Message: ----------- * Usually changes to trunk are mirrored to external trunk upon needed modification, this is not the case for every change I made from rev 2094 to 2131 (current head), but luckily enough svn merge can avoid an tedious cherry picking step with the additional "preserving the commit history" bonus. Anyway this the actual command: svn merge -r 2093:HEAD https://yaacs.svn.sourceforge.net/svnroot/yaacs/trunk . and this is a brief summary of changes: o) enhance panel sampling for cod_prov/capoluo o) new way to update extractable field in sampling panel o) if we're calling a contact for the first time, we've more than one available phone number and the first number we called has been classified as not-working, try with the others available number before classifying the whole contact as not-working. o) expose priority in sendfax::send. the default value is 127, the lower the value the higher the priority you get. o) improve performance of turns definition o) NEW: if *all* Cs belonging to a municipality have been used, you need to free them some way. add new menu item (Sampling -> Free by municipalities) to access to this new feature. you need to provide a file containing the ids all the municipalities you want to free contacts from. o) add smtpproxy.tcl: this is a little daemon that will accept smtp server ip or fqdn as input and will connect to such a server and simply proxy all the request and it's threaded :) o) NEW: email validation could be performed through a smtp proxy according to yaacs.conf parameters SMTP_PROXY_{SERVER,PORT}. Both of them are optional. Proxy availability will be checked just before each validation request, with a fallback mechanism to a direct connection to the server indicated in the MX field of the email domain DNS record. o) NEW: gendere/age quota on listed sampling Revision Links: -------------- http://yaacs.svn.sourceforge.net/yaacs/?rev=2094&view=rev Modified Paths: -------------- branches/external-trunk/dbyaacs/migration.sql branches/external-trunk/dbyaacs/projects.sql branches/external-trunk/dbyaacs/sampling.sql branches/external-trunk/docs/user_manual/html/it/yacati.xml branches/external-trunk/docs/user_manual/html/it/yacco.xml branches/external-trunk/docs/user_manual/html/it/yachoo.xml branches/external-trunk/docs/user_manual/html/it/yadmin.xml branches/external-trunk/docs/user_manual/html/it/yamon.xml branches/external-trunk/docs/user_manual/pdf/it/yacati.xml branches/external-trunk/docs/yaacs.conf.sample branches/external-trunk/yaacs/admin.tcl branches/external-trunk/yaacs/cati.tcl branches/external-trunk/yaacs/op.tcl branches/external-trunk/yaacs/sample.tcl branches/external-trunk/yaacs/sendfax.tcl branches/external-trunk/yaacs/sendmail.tcl branches/external-trunk/yaacs/yaconf.tcl branches/external-trunk/yaacs/yadb.tcl branches/external-trunk/yaacs/yavoip.tcl branches/external-trunk/yacati.tcl branches/external-trunk/yadmin.tcl Added Paths: ----------- branches/external-trunk/dialogs_icons/icons/Tango/64x64/actions/image-missing.png branches/external-trunk/dialogs_icons/icons/Tango/64x64/status/image-missing.png branches/external-trunk/utility/proxy_init_script branches/external-trunk/utility/smtpproxy.tcl Property Changed: ---------------- branches/external-trunk/ branches/external-trunk/docs/difference-from-trunk.txt Property changes on: branches/external-trunk ___________________________________________________________________ Modified: svn:mergeinfo - + /trunk:2094-2131 Modified: branches/external-trunk/dbyaacs/migration.sql =================================================================== --- branches/external-trunk/dbyaacs/migration.sql 2011-12-16 10:17:25 UTC (rev 2131) +++ branches/external-trunk/dbyaacs/migration.sql 2011-12-16 10:47:06 UTC (rev 2132) @@ -1982,7 +1982,7 @@ ALTER TABLE history.projects ALTER COLUMN briefing SET DEFAULT 0; -- NB if you want to keep old briefing durations UPDATE projects.projects SET briefing = a.briefing FROM recruitments.recruitments a WHERE projects.projects.proj = a.proj AND projects.projects.briefing is NULL; -UPDATE projects.projects SET brieging = 0 where briefing is null; +UPDATE projects.projects SET briefing = 0 where briefing is null; ALTER TABLE recruitments.recruitments DROP column briefing; ALTER TABLE history.recruitments DROP column briefing; @@ -2032,3 +2032,1329 @@ UPDATE projects.projects SET email_account = -1 ; INSERT INTO log.yaacs_svn_revision VALUES (2052, 'Added email_account field to projects-projects table, add project.emaio_account table'); + + +-- rev 2094 + +ALTER TABLE sampling.theo_design DROP COLUMN open; +ALTER TABLE sampling.theo_design DROP COLUMN label; + +ALTER TABLE sampling.theo_design ADD COLUMN qty_capo integer; +ALTER TABLE sampling.theo_design ADD COLUMN qty_not_capo integer; +ALTER TABLE sampling.theo_design ADD COLUMN label varchar; + +ALTER TABLE sampling.panel ALTER COLUMN extractable SET NOT NULL; + +ALTER TABLE sampling.panel_str_theo_gen_eta DROP COLUMN qty; +ALTER TABLE sampling.panel_str_theo_gen_eta ADD COLUMN qty_capo integer; +ALTER TABLE sampling.panel_str_theo_gen_eta ADD COLUMN qty_not_capo integer; + +DELETE FROM sampling.panel_str_theo_gen_eta; + +COPY sampling.panel_str_theo_gen_eta FROM STDIN; +1 f 15 17 2 3 +1 f 18 29 10 15 +1 f 30 44 21 31 +1 f 45 54 13 19 +1 f 55 64 12 18 +1 f 65 180 23 34 +1 m 15 17 2 3 +1 m 18 29 11 16 +1 m 30 44 21 32 +1 m 45 54 13 19 +1 m 55 64 11 17 +1 m 65 180 17 25 +2 f 15 17 1 1 +2 f 18 29 1 1 +2 f 30 44 1 3 +2 f 45 54 1 2 +2 f 55 64 1 2 +2 f 65 180 1 4 +2 m 15 17 1 1 +2 m 18 29 1 2 +2 m 30 44 1 3 +2 m 45 54 1 2 +2 m 55 64 1 2 +2 m 65 180 1 3 +3 f 15 17 1 1 +3 f 18 29 1 3 +3 f 30 44 2 6 +3 f 45 54 1 4 +3 f 55 64 1 3 +3 f 65 180 3 6 +3 m 15 17 1 1 +3 m 18 29 1 3 +3 m 30 44 3 6 +3 m 45 54 2 4 +3 m 55 64 1 3 +3 m 65 180 2 4 +4 f 15 17 1 1 +4 f 18 29 1 6 +4 f 30 44 1 11 +4 f 45 54 1 7 +4 f 55 64 1 6 +4 f 65 180 1 13 +4 m 15 17 1 1 +4 m 18 29 1 6 +4 m 30 44 1 12 +4 m 45 54 1 7 +4 m 55 64 1 6 +4 m 65 180 1 10 +5 f 15 17 1 1 +5 f 18 29 1 2 +5 f 30 44 2 3 +5 f 45 54 1 2 +5 f 55 64 1 2 +5 f 65 180 2 4 +5 m 15 17 1 1 +5 m 18 29 1 2 +5 m 30 44 2 3 +5 m 45 54 1 2 +5 m 55 64 1 2 +5 m 65 180 1 3 +6 f 15 17 1 1 +6 f 18 29 1 3 +6 f 30 44 2 7 +6 f 45 54 1 5 +6 f 55 64 1 5 +6 f 65 180 3 10 +6 m 15 17 1 1 +6 m 18 29 1 4 +6 m 30 44 2 8 +6 m 45 54 1 5 +6 m 55 64 1 4 +6 m 65 180 2 7 +7 f 15 17 1 1 +7 f 18 29 1 1 +7 f 30 44 1 2 +7 f 45 54 1 1 +7 f 55 64 1 1 +7 f 65 180 1 2 +7 m 15 17 1 1 +7 m 18 29 1 1 +7 m 30 44 1 2 +7 m 45 54 1 1 +7 m 55 64 1 1 +7 m 65 180 1 2 +8 f 15 17 1 1 +8 f 18 29 1 2 +8 f 30 44 1 4 +8 f 45 54 1 3 +8 f 55 64 1 2 +8 f 65 180 1 5 +8 m 15 17 1 1 +8 m 18 29 1 2 +8 m 30 44 1 4 +8 m 45 54 1 3 +8 m 55 64 1 2 +8 m 65 180 1 4 +9 f 15 17 1 1 +9 f 18 29 1 2 +9 f 30 44 1 5 +9 f 45 54 1 3 +9 f 55 64 1 3 +9 f 65 180 2 7 +9 m 15 17 1 1 +9 m 18 29 1 2 +9 m 30 44 1 5 +9 m 45 54 1 3 +9 m 55 64 1 3 +9 m 65 180 1 5 +10 f 15 17 1 1 +10 f 18 29 6 3 +10 f 30 44 13 6 +10 f 45 54 9 4 +10 f 55 64 8 4 +10 f 65 180 19 8 +10 m 15 17 1 1 +10 m 18 29 6 3 +10 m 30 44 13 6 +10 m 45 54 8 4 +10 m 55 64 8 3 +10 m 65 180 13 6 +11 f 15 17 1 1 +11 f 18 29 1 1 +11 f 30 44 2 3 +11 f 45 54 1 2 +11 f 55 64 1 2 +11 f 65 180 3 4 +11 m 15 17 1 1 +11 m 18 29 1 1 +11 m 30 44 2 3 +11 m 45 54 1 2 +11 m 55 64 1 2 +11 m 65 180 2 3 +12 f 15 17 1 2 +12 f 18 29 1 9 +12 f 30 44 2 18 +12 f 45 54 1 11 +12 f 55 64 1 10 +12 f 65 180 2 18 +12 m 15 17 1 2 +12 m 18 29 1 9 +12 m 30 44 2 19 +12 m 45 54 1 11 +12 m 55 64 1 9 +12 m 65 180 1 13 +13 f 15 17 1 1 +13 f 18 29 1 6 +13 f 30 44 2 12 +13 f 45 54 1 7 +13 f 55 64 1 6 +13 f 65 180 2 11 +13 m 15 17 1 1 +13 m 18 29 1 6 +13 m 30 44 2 12 +13 m 45 54 1 7 +13 m 55 64 1 6 +13 m 65 180 1 8 +14 f 15 17 1 1 +14 f 18 29 1 2 +14 f 30 44 1 4 +14 f 45 54 1 2 +14 f 55 64 1 2 +14 f 65 180 1 4 +14 m 15 17 1 1 +14 m 18 29 1 2 +14 m 30 44 1 4 +14 m 45 54 1 2 +14 m 55 64 1 2 +14 m 65 180 1 3 +15 f 15 17 3 6 +15 f 18 29 14 28 +15 f 30 44 32 62 +15 f 45 54 19 36 +15 f 55 64 17 33 +15 f 65 180 31 61 +15 m 15 17 3 7 +15 m 18 29 15 29 +15 m 30 44 33 65 +15 m 45 54 18 36 +15 m 55 64 15 30 +15 m 65 180 22 43 +16 f 15 17 1 3 +16 f 18 29 2 12 +16 f 30 44 3 22 +16 f 45 54 2 13 +16 f 55 64 1 11 +16 f 65 180 2 19 +16 m 15 17 1 3 +16 m 18 29 2 12 +16 m 30 44 3 24 +16 m 45 54 2 14 +16 m 55 64 1 11 +16 m 65 180 2 13 +17 f 15 17 1 3 +17 f 18 29 2 12 +17 f 30 44 5 24 +17 f 45 54 3 14 +17 f 55 64 2 12 +17 f 65 180 4 22 +17 m 15 17 1 3 +17 m 18 29 3 13 +17 m 30 44 5 26 +17 m 45 54 3 14 +17 m 55 64 2 12 +17 m 65 180 3 15 +18 f 15 17 1 1 +18 f 18 29 1 5 +18 f 30 44 2 11 +18 f 45 54 1 6 +18 f 55 64 1 6 +18 f 65 180 2 12 +18 m 15 17 1 1 +18 m 18 29 1 5 +18 m 30 44 2 11 +18 m 45 54 1 7 +18 m 55 64 1 6 +18 m 65 180 1 8 +19 f 15 17 1 1 +19 f 18 29 1 3 +19 f 30 44 2 6 +19 f 45 54 1 4 +19 f 55 64 1 3 +19 f 65 180 2 7 +19 m 15 17 1 1 +19 m 18 29 1 3 +19 m 30 44 2 7 +19 m 45 54 1 4 +19 m 55 64 1 3 +19 m 65 180 1 5 +20 f 15 17 1 1 +20 f 18 29 1 4 +20 f 30 44 1 8 +20 f 45 54 1 5 +20 f 55 64 1 4 +20 f 65 180 1 9 +20 m 15 17 1 1 +20 m 18 29 1 4 +20 m 30 44 1 9 +20 m 45 54 1 5 +20 m 55 64 1 4 +20 m 65 180 1 6 +21 f 15 17 1 1 +21 f 18 29 1 5 +21 f 30 44 2 9 +21 f 45 54 1 5 +21 f 55 64 1 4 +21 f 65 180 2 8 +21 m 15 17 1 1 +21 m 18 29 1 5 +21 m 30 44 2 10 +21 m 45 54 1 5 +21 m 55 64 1 4 +21 m 65 180 1 6 +22 f 15 17 1 1 +22 f 18 29 1 5 +22 f 30 44 3 9 +22 f 45 54 2 6 +22 f 55 64 1 5 +22 f 65 180 3 9 +22 m 15 17 1 1 +22 m 18 29 1 5 +22 m 30 44 3 9 +22 m 45 54 2 6 +22 m 55 64 1 5 +22 m 65 180 2 6 +23 f 15 17 1 2 +23 f 18 29 3 8 +23 f 30 44 6 15 +23 f 45 54 4 8 +23 f 55 64 3 7 +23 f 65 180 6 14 +23 m 15 17 1 2 +23 m 18 29 3 8 +23 m 30 44 7 16 +23 m 45 54 4 9 +23 m 55 64 3 7 +23 m 65 180 4 10 +24 f 15 17 1 2 +24 f 18 29 1 9 +24 f 30 44 3 17 +24 f 45 54 2 10 +24 f 55 64 1 8 +24 f 65 180 2 16 +24 m 15 17 1 2 +24 m 18 29 1 9 +24 m 30 44 3 19 +24 m 45 54 2 10 +24 m 55 64 1 8 +24 m 65 180 2 11 +25 f 15 17 1 1 +25 f 18 29 1 2 +25 f 30 44 1 4 +25 f 45 54 1 3 +25 f 55 64 1 2 +25 f 65 180 1 5 +25 m 15 17 1 1 +25 m 18 29 1 2 +25 m 30 44 1 4 +25 m 45 54 1 3 +25 m 55 64 1 2 +25 m 65 180 1 3 +26 f 15 17 1 2 +26 f 18 29 1 9 +26 f 30 44 2 19 +26 f 45 54 1 11 +26 f 55 64 1 9 +26 f 65 180 2 17 +26 m 15 17 1 2 +26 m 18 29 1 10 +26 m 30 44 2 20 +26 m 45 54 1 11 +26 m 55 64 1 9 +26 m 65 180 1 12 +27 f 15 17 1 1 +27 f 18 29 3 6 +27 f 30 44 6 13 +27 f 45 54 4 8 +27 f 55 64 4 7 +27 f 65 180 7 14 +27 m 15 17 1 1 +27 m 18 29 3 6 +27 m 30 44 7 14 +27 m 45 54 4 8 +27 m 55 64 3 7 +27 m 65 180 5 10 +28 f 15 17 1 2 +28 f 18 29 3 8 +28 f 30 44 5 17 +28 f 45 54 3 10 +28 f 55 64 3 8 +28 f 65 180 5 15 +28 m 15 17 1 2 +28 m 18 29 3 8 +28 m 30 44 5 17 +28 m 45 54 3 10 +28 m 55 64 2 8 +28 m 65 180 3 11 +29 f 15 17 1 1 +29 f 18 29 1 2 +29 f 30 44 1 4 +29 f 45 54 1 3 +29 f 55 64 1 2 +29 f 65 180 1 5 +29 m 15 17 1 1 +29 m 18 29 1 2 +29 m 30 44 1 5 +29 m 45 54 1 3 +29 m 55 64 1 3 +29 m 65 180 1 3 +30 f 15 17 1 1 +30 f 18 29 1 5 +30 f 30 44 2 10 +30 f 45 54 1 6 +30 f 55 64 1 6 +30 f 65 180 3 11 +30 m 15 17 1 1 +30 m 18 29 1 5 +30 m 30 44 2 10 +30 m 45 54 1 6 +30 m 55 64 1 6 +30 m 65 180 2 8 +31 f 15 17 1 1 +31 f 18 29 1 1 +31 f 30 44 1 2 +31 f 45 54 1 1 +31 f 55 64 1 1 +31 f 65 180 1 3 +31 m 15 17 1 1 +31 m 18 29 1 1 +31 m 30 44 1 3 +31 m 45 54 1 2 +31 m 55 64 1 1 +31 m 65 180 1 2 +32 f 15 17 1 1 +32 f 18 29 2 1 +32 f 30 44 4 1 +32 f 45 54 3 1 +32 f 55 64 3 1 +32 f 65 180 7 1 +32 m 15 17 1 1 +32 m 18 29 2 1 +32 m 30 44 4 1 +32 m 45 54 3 1 +32 m 55 64 3 1 +32 m 65 180 4 1 +33 f 15 17 1 1 +33 f 18 29 1 2 +33 f 30 44 2 4 +33 f 45 54 1 2 +33 f 55 64 1 2 +33 f 65 180 3 5 +33 m 15 17 1 1 +33 m 18 29 1 2 +33 m 30 44 2 4 +33 m 45 54 1 3 +33 m 55 64 1 2 +33 m 65 180 2 4 +34 f 15 17 1 1 +34 f 18 29 2 3 +34 f 30 44 4 6 +34 f 45 54 2 3 +34 f 55 64 2 3 +34 f 65 180 5 6 +34 m 15 17 1 1 +34 m 18 29 2 3 +34 m 30 44 4 6 +34 m 45 54 2 3 +34 m 55 64 2 3 +34 m 65 180 3 5 +35 f 15 17 1 1 +35 f 18 29 2 4 +35 f 30 44 4 8 +35 f 45 54 2 5 +35 f 55 64 2 4 +35 f 65 180 4 8 +35 m 15 17 1 1 +35 m 18 29 2 4 +35 m 30 44 4 9 +35 m 45 54 2 5 +35 m 55 64 2 4 +35 m 65 180 3 6 +36 f 15 17 1 1 +36 f 18 29 2 6 +36 f 30 44 4 12 +36 f 45 54 3 7 +36 f 55 64 2 6 +36 f 65 180 4 12 +36 m 15 17 1 1 +36 m 18 29 2 6 +36 m 30 44 5 12 +36 m 45 54 3 7 +36 m 55 64 2 6 +36 m 65 180 3 9 +37 f 15 17 1 1 +37 f 18 29 4 6 +37 f 30 44 9 14 +37 f 45 54 5 8 +37 f 55 64 5 7 +37 f 65 180 10 16 +37 m 15 17 1 1 +37 m 18 29 4 6 +37 m 30 44 9 14 +37 m 45 54 5 8 +37 m 55 64 4 7 +37 m 65 180 7 11 +38 f 15 17 1 1 +38 f 18 29 1 2 +38 f 30 44 3 5 +38 f 45 54 2 3 +38 f 55 64 2 3 +38 f 65 180 4 6 +38 m 15 17 1 1 +38 m 18 29 1 2 +38 m 30 44 3 5 +38 m 45 54 2 3 +38 m 55 64 2 3 +38 m 65 180 3 5 +39 f 15 17 1 1 +39 f 18 29 2 2 +39 f 30 44 4 5 +39 f 45 54 2 3 +39 f 55 64 2 3 +39 f 65 180 4 6 +39 m 15 17 1 1 +39 m 18 29 2 2 +39 m 30 44 4 5 +39 m 45 54 2 3 +39 m 55 64 2 3 +39 m 65 180 3 5 +40 f 15 17 1 1 +40 f 18 29 2 3 +40 f 30 44 3 5 +40 f 45 54 2 3 +40 f 55 64 2 3 +40 f 65 180 4 6 +40 m 15 17 1 1 +40 m 18 29 2 3 +40 m 30 44 4 6 +40 m 45 54 2 3 +40 m 55 64 2 3 +40 m 65 180 3 4 +41 f 15 17 1 1 +41 f 18 29 1 4 +41 f 30 44 1 7 +41 f 45 54 1 4 +41 f 55 64 1 4 +41 f 65 180 2 7 +41 m 15 17 1 1 +41 m 18 29 1 4 +41 m 30 44 2 7 +41 m 45 54 1 4 +41 m 55 64 1 4 +41 m 65 180 1 6 +42 f 15 17 1 1 +42 f 18 29 1 4 +42 f 30 44 2 8 +42 f 45 54 1 5 +42 f 55 64 1 5 +42 f 65 180 3 10 +42 m 15 17 1 1 +42 m 18 29 1 4 +42 m 30 44 2 8 +42 m 45 54 1 5 +42 m 55 64 1 4 +42 m 65 180 2 7 +43 f 15 17 1 1 +43 f 18 29 1 3 +43 f 30 44 1 6 +43 f 45 54 1 4 +43 f 55 64 1 3 +43 f 65 180 1 7 +43 m 15 17 1 1 +43 m 18 29 1 3 +43 m 30 44 1 6 +43 m 45 54 1 4 +43 m 55 64 1 3 +43 m 65 180 1 5 +44 f 15 17 1 1 +44 f 18 29 1 4 +44 f 30 44 1 7 +44 f 45 54 1 5 +44 f 55 64 1 4 +44 f 65 180 1 8 +44 m 15 17 1 1 +44 m 18 29 1 4 +44 m 30 44 1 7 +44 m 45 54 1 5 +44 m 55 64 1 4 +44 m 65 180 1 6 +45 f 15 17 1 1 +45 f 18 29 1 1 +45 f 30 44 2 2 +45 f 45 54 1 1 +45 f 55 64 1 1 +45 f 65 180 3 3 +45 m 15 17 1 1 +45 m 18 29 1 1 +45 m 30 44 2 2 +45 m 45 54 1 1 +45 m 55 64 1 1 +45 m 65 180 2 2 +46 f 15 17 1 1 +46 f 18 29 1 3 +46 f 30 44 2 7 +46 f 45 54 1 4 +46 f 55 64 1 4 +46 f 65 180 2 8 +46 m 15 17 1 1 +46 m 18 29 1 3 +46 m 30 44 2 7 +46 m 45 54 1 4 +46 m 55 64 1 4 +46 m 65 180 2 6 +47 f 15 17 1 1 +47 f 18 29 1 2 +47 f 30 44 2 5 +47 f 45 54 1 3 +47 f 55 64 1 3 +47 f 65 180 2 5 +47 m 15 17 1 1 +47 m 18 29 1 2 +47 m 30 44 2 5 +47 m 45 54 1 3 +47 m 55 64 1 2 +47 m 65 180 2 4 +48 f 15 17 1 1 +48 f 18 29 4 6 +48 f 30 44 8 14 +48 f 45 54 5 8 +48 f 55 64 5 8 +48 f 65 180 10 16 +48 m 15 17 1 1 +48 m 18 29 4 7 +48 m 30 44 8 14 +48 m 45 54 5 8 +48 m 55 64 4 7 +48 m 65 180 7 12 +49 f 15 17 1 1 +49 f 18 29 2 2 +49 f 30 44 4 4 +49 f 45 54 2 3 +49 f 55 64 2 2 +49 f 65 180 4 5 +49 m 15 17 1 1 +49 m 18 29 2 2 +49 m 30 44 4 4 +49 m 45 54 2 2 +49 m 55 64 2 2 +49 m 65 180 3 4 +50 f 15 17 1 1 +50 f 18 29 1 3 +50 f 30 44 2 7 +50 f 45 54 1 4 +50 f 55 64 1 4 +50 f 65 180 2 8 +50 m 15 17 1 1 +50 m 18 29 1 4 +50 m 30 44 2 8 +50 m 45 54 1 4 +50 m 55 64 1 4 +50 m 65 180 2 6 +51 f 15 17 1 1 +51 f 18 29 1 3 +51 f 30 44 2 6 +51 f 45 54 1 3 +51 f 55 64 1 3 +51 f 65 180 2 6 +51 m 15 17 1 1 +51 m 18 29 1 3 +51 m 30 44 2 6 +51 m 45 54 1 3 +51 m 55 64 1 3 +51 m 65 180 2 5 +52 f 15 17 1 1 +52 f 18 29 1 2 +52 f 30 44 1 5 +52 f 45 54 1 3 +52 f 55 64 1 3 +52 f 65 180 2 6 +52 m 15 17 1 1 +52 m 18 29 1 2 +52 m 30 44 1 5 +52 m 45 54 1 3 +52 m 55 64 1 3 +52 m 65 180 1 4 +53 f 15 17 1 1 +53 f 18 29 1 2 +53 f 30 44 2 3 +53 f 45 54 1 2 +53 f 55 64 1 2 +53 f 65 180 2 4 +53 m 15 17 1 1 +53 m 18 29 1 2 +53 m 30 44 2 3 +53 m 45 54 1 2 +53 m 55 64 1 2 +53 m 65 180 2 3 +54 f 15 17 1 1 +54 f 18 29 2 6 +54 f 30 44 4 11 +54 f 45 54 2 7 +54 f 55 64 2 6 +54 f 65 180 4 13 +54 m 15 17 1 1 +54 m 18 29 2 6 +54 m 30 44 4 11 +54 m 45 54 2 7 +54 m 55 64 2 6 +54 m 65 180 3 9 +55 f 15 17 1 1 +55 f 18 29 1 1 +55 f 30 44 2 3 +55 f 45 54 2 2 +55 f 55 64 1 2 +55 f 65 180 3 3 +55 m 15 17 1 1 +55 m 18 29 1 1 +55 m 30 44 2 3 +55 m 45 54 1 2 +55 m 55 64 1 1 +55 m 65 180 2 2 +56 f 15 17 1 1 +56 f 18 29 1 3 +56 f 30 44 1 6 +56 f 45 54 1 4 +56 f 55 64 1 3 +56 f 65 180 1 6 +56 m 15 17 1 1 +56 m 18 29 1 3 +56 m 30 44 1 6 +56 m 45 54 1 4 +56 m 55 64 1 3 +56 m 65 180 1 4 +57 f 15 17 1 1 +57 f 18 29 1 1 +57 f 30 44 1 2 +57 f 45 54 1 2 +57 f 55 64 1 1 +57 f 65 180 1 3 +57 m 15 17 1 1 +57 m 18 29 1 1 +57 m 30 44 1 2 +57 m 45 54 1 2 +57 m 55 64 1 1 +57 m 65 180 1 2 +58 f 15 17 7 4 +58 f 18 29 33 16 +58 f 30 44 67 32 +58 f 45 54 40 19 +58 f 55 64 35 17 +58 f 65 180 62 30 +58 m 15 17 8 4 +58 m 18 29 34 16 +58 m 30 44 65 31 +58 m 45 54 37 18 +58 m 55 64 30 15 +58 m 65 180 44 21 +59 f 15 17 1 1 +59 f 18 29 2 6 +59 f 30 44 3 10 +59 f 45 54 2 6 +59 f 55 64 1 5 +59 f 65 180 2 8 +59 m 15 17 1 1 +59 m 18 29 2 6 +59 m 30 44 3 10 +59 m 45 54 2 6 +59 m 55 64 1 5 +59 m 65 180 2 6 +60 f 15 17 1 1 +60 f 18 29 1 6 +60 f 30 44 1 10 +60 f 45 54 1 6 +60 f 55 64 1 5 +60 f 65 180 1 10 +60 m 15 17 1 1 +60 m 18 29 1 7 +60 m 30 44 1 10 +60 m 45 54 1 6 +60 m 55 64 1 5 +60 m 65 180 1 7 +61 f 15 17 1 3 +61 f 18 29 1 13 +61 f 30 44 2 19 +61 f 45 54 1 11 +61 f 55 64 1 9 +61 f 65 180 1 14 +61 m 15 17 1 3 +61 m 18 29 1 13 +61 m 30 44 2 18 +61 m 45 54 1 10 +61 m 55 64 1 8 +61 m 65 180 1 10 +62 f 15 17 1 1 +62 f 18 29 1 3 +62 f 30 44 1 5 +62 f 45 54 1 3 +62 f 55 64 1 2 +62 f 65 180 1 5 +62 m 15 17 1 1 +62 m 18 29 1 3 +62 m 30 44 1 5 +62 m 45 54 1 3 +62 m 55 64 1 2 +62 m 65 180 1 4 +63 f 15 17 4 8 +63 f 18 29 16 33 +63 f 30 44 23 48 +63 f 45 54 13 28 +63 f 55 64 11 23 +63 f 65 180 16 34 +63 m 15 17 4 8 +63 m 18 29 16 33 +63 m 30 44 22 46 +63 m 45 54 12 26 +63 m 55 64 10 21 +63 m 65 180 11 24 +64 f 15 17 1 1 +64 f 18 29 1 6 +64 f 30 44 1 8 +64 f 45 54 1 5 +64 f 55 64 1 4 +64 f 65 180 1 8 +64 m 15 17 1 1 +64 m 18 29 1 6 +64 m 30 44 1 8 +64 m 45 54 1 5 +64 m 55 64 1 4 +64 m 65 180 1 6 +65 f 15 17 1 3 +65 f 18 29 2 14 +65 f 30 44 3 21 +65 f 45 54 2 14 +65 f 55 64 2 11 +65 f 65 180 3 19 +65 m 15 17 1 3 +65 m 18 29 2 15 +65 m 30 44 3 21 +65 m 45 54 2 13 +65 m 55 64 1 10 +65 m 65 180 2 14 +66 f 15 17 1 1 +66 f 18 29 1 3 +66 f 30 44 2 5 +66 f 45 54 1 3 +66 f 55 64 1 3 +66 f 65 180 2 6 +66 m 15 17 1 1 +66 m 18 29 1 3 +66 m 30 44 2 5 +66 m 45 54 1 3 +66 m 55 64 1 3 +66 m 65 180 1 4 +67 f 15 17 1 1 +67 f 18 29 1 3 +67 f 30 44 1 6 +67 f 45 54 1 3 +67 f 55 64 1 3 +67 f 65 180 1 6 +67 m 15 17 1 1 +67 m 18 29 1 4 +67 m 30 44 1 6 +67 m 45 54 1 3 +67 m 55 64 1 3 +67 m 65 180 1 4 +68 f 15 17 1 1 +68 f 18 29 2 2 +68 f 30 44 3 4 +68 f 45 54 2 3 +68 f 55 64 2 2 +68 f 65 180 3 4 +68 m 15 17 1 1 +68 m 18 29 2 2 +68 m 30 44 3 4 +68 m 45 54 2 3 +68 m 55 64 1 2 +68 m 65 180 2 3 +69 f 15 17 1 1 +69 f 18 29 1 4 +69 f 30 44 1 7 +69 f 45 54 1 5 +69 f 55 64 1 4 +69 f 65 180 1 8 +69 m 15 17 1 1 +69 m 18 29 1 5 +69 m 30 44 1 7 +69 m 45 54 1 4 +69 m 55 64 1 4 +69 m 65 180 1 6 +70 f 15 17 1 1 +70 f 18 29 1 2 +70 f 30 44 1 4 +70 f 45 54 1 2 +70 f 55 64 1 2 +70 f 65 180 1 4 +70 m 15 17 1 1 +70 m 18 29 1 2 +70 m 30 44 1 4 +70 m 45 54 1 2 +70 m 55 64 1 2 +70 m 65 180 1 3 +71 f 15 17 1 2 +71 f 18 29 2 8 +71 f 30 44 3 11 +71 f 45 54 2 7 +71 f 55 64 2 6 +71 f 65 180 3 10 +71 m 15 17 1 2 +71 m 18 29 2 8 +71 m 30 44 3 11 +71 m 45 54 2 7 +71 m 55 64 2 6 +71 m 65 180 2 8 +72 f 15 17 1 4 +72 f 18 29 5 18 +72 f 30 44 8 29 +72 f 45 54 5 17 +72 f 55 64 4 15 +72 f 65 180 6 23 +72 m 15 17 1 5 +72 m 18 29 5 19 +72 m 30 44 7 29 +72 m 45 54 4 17 +72 m 55 64 4 14 +72 m 65 180 5 18 +73 f 15 17 1 1 +73 f 18 29 3 5 +73 f 30 44 4 8 +73 f 45 54 3 5 +73 f 55 64 2 5 +73 f 65 180 4 8 +73 m 15 17 1 1 +73 m 18 29 3 6 +73 m 30 44 4 8 +73 m 45 54 3 5 +73 m 55 64 2 4 +73 m 65 180 3 6 +74 f 15 17 1 1 +74 f 18 29 1 5 +74 f 30 44 2 7 +74 f 45 54 1 4 +74 f 55 64 1 4 +74 f 65 180 2 7 +74 m 15 17 1 1 +74 m 18 29 1 5 +74 m 30 44 2 7 +74 m 45 54 1 4 +74 m 55 64 1 3 +74 m 65 180 1 5 +75 f 15 17 1 2 +75 f 18 29 1 10 +75 f 30 44 2 16 +75 f 45 54 1 10 +75 f 55 64 1 9 +75 f 65 180 2 16 +75 m 15 17 1 2 +75 m 18 29 1 10 +75 m 30 44 2 15 +75 m 45 54 1 9 +75 m 55 64 1 8 +75 m 65 180 1 12 +76 f 15 17 1 1 +76 f 18 29 1 4 +76 f 30 44 1 7 +76 f 45 54 1 4 +76 f 55 64 1 4 +76 f 65 180 2 7 +76 m 15 17 1 1 +76 m 18 29 1 5 +76 m 30 44 1 7 +76 m 45 54 1 4 +76 m 55 64 1 3 +76 m 65 180 1 5 +77 f 15 17 1 1 +77 f 18 29 1 2 +77 f 30 44 1 3 +77 f 45 54 1 2 +77 f 55 64 1 2 +77 f 65 180 1 3 +77 m 15 17 1 1 +77 m 18 29 1 2 +77 m 30 44 1 3 +77 m 45 54 1 2 +77 m 55 64 1 2 +77 m 65 180 1 2 +78 f 15 17 1 2 +78 f 18 29 1 10 +78 f 30 44 2 15 +78 f 45 54 1 9 +78 f 55 64 1 8 +78 f 65 180 1 14 +78 m 15 17 1 2 +78 m 18 29 1 10 +78 m 30 44 2 14 +78 m 45 54 1 9 +78 m 55 64 1 7 +78 m 65 180 1 11 +79 f 15 17 1 1 +79 f 18 29 1 4 +79 f 30 44 2 6 +79 f 45 54 1 4 +79 f 55 64 1 3 +79 f 65 180 2 6 +79 m 15 17 1 1 +79 m 18 29 1 4 +79 m 30 44 2 6 +79 m 45 54 1 4 +79 m 55 64 1 3 +79 m 65 180 1 4 +80 f 15 17 1 1 +80 f 18 29 3 6 +80 f 30 44 4 8 +80 f 45 54 2 5 +80 f 55 64 2 4 +80 f 65 180 4 8 +80 m 15 17 1 1 +80 m 18 29 3 6 +80 m 30 44 4 8 +80 m 45 54 2 5 +80 m 55 64 2 4 +80 m 65 180 3 6 +81 f 15 17 1 1 +81 f 18 29 1 5 +81 f 30 44 2 8 +81 f 45 54 1 5 +81 f 55 64 1 4 +81 f 65 180 2 8 +81 m 15 17 1 1 +81 m 18 29 1 5 +81 m 30 44 1 8 +81 m 45 54 1 5 +81 m 55 64 1 4 +81 m 65 180 1 6 +82 f 15 17 2 2 +82 f 18 29 10 9 +82 f 30 44 15 12 +82 f 45 54 9 8 +82 f 55 64 8 7 +82 f 65 180 13 11 +82 m 15 17 3 2 +82 m 18 29 10 9 +82 m 30 44 14 12 +82 m 45 54 8 7 +82 m 55 64 7 6 +82 m 65 180 10 8 +83 f 15 17 1 1 +83 f 18 29 3 6 +83 f 30 44 5 9 +83 f 45 54 3 6 +83 f 55 64 3 5 +83 f 65 180 6 9 +83 m 15 17 1 1 +83 m 18 29 4 6 +83 m 30 44 5 9 +83 m 45 54 3 5 +83 m 55 64 3 5 +83 m 65 180 4 7 +84 f 15 17 1 1 +84 f 18 29 1 6 +84 f 30 44 1 9 +84 f 45 54 1 5 +84 f 55 64 1 4 +84 f 65 180 1 8 +84 m 15 17 1 1 +84 m 18 29 1 6 +84 m 30 44 1 8 +84 m 45 54 1 5 +84 m 55 64 1 4 +84 m 65 180 1 6 +85 f 15 17 1 1 +85 f 18 29 1 3 +85 f 30 44 1 4 +85 f 45 54 1 3 +85 f 55 64 1 2 +85 f 65 180 1 4 +85 m 15 17 1 1 +85 m 18 29 1 3 +85 m 30 44 1 4 +85 m 45 54 1 3 +85 m 55 64 1 2 +85 m 65 180 1 3 +86 f 15 17 1 1 +86 f 18 29 1 2 +86 f 30 44 1 3 +86 f 45 54 1 2 +86 f 55 64 1 2 +86 f 65 180 1 3 +86 m 15 17 1 1 +86 m 18 29 1 2 +86 m 30 44 1 3 +86 m 45 54 1 2 +86 m 55 64 1 2 +86 m 65 180 1 2 +87 f 15 17 1 3 +87 f 18 29 5 12 +87 f 30 44 7 17 +87 f 45 54 4 11 +87 f 55 64 3 9 +87 f 65 180 6 15 +87 m 15 17 1 3 +87 m 18 29 5 12 +87 m 30 44 7 16 +87 m 45 54 4 10 +87 m 55 64 3 8 +87 m 65 180 4 11 +88 f 15 17 1 1 +88 f 18 29 1 4 +88 f 30 44 2 5 +88 f 45 54 1 3 +88 f 55 64 1 3 +88 f 65 180 1 5 +88 m 15 17 1 1 +88 m 18 29 1 4 +88 m 30 44 2 5 +88 m 45 54 1 3 +88 m 55 64 1 2 +88 m 65 180 1 4 +89 f 15 17 1 1 +89 f 18 29 2 4 +89 f 30 44 3 6 +89 f 45 54 2 4 +89 f 55 64 1 3 +89 f 65 180 2 5 +89 m 15 17 1 1 +89 m 18 29 2 4 +89 m 30 44 3 6 +89 m 45 54 2 4 +89 m 55 64 1 3 +89 m 65 180 2 4 +90 f 15 17 1 1 +90 f 18 29 2 3 +90 f 30 44 3 5 +90 f 45 54 2 3 +90 f 55 64 2 3 +90 f 65 180 3 4 +90 m 15 17 1 1 +90 m 18 29 2 3 +90 m 30 44 3 5 +90 m 45 54 2 3 +90 m 55 64 2 2 +90 m 65 180 2 3 +91 f 15 17 1 1 +91 f 18 29 1 2 +91 f 30 44 1 3 +91 f 45 54 1 2 +91 f 55 64 1 2 +91 f 65 180 1 3 +91 m 15 17 1 1 +91 m 18 29 1 2 +91 m 30 44 1 3 +91 m 45 54 1 2 +91 m 55 64 1 2 +91 m 65 180 1 2 +92 f 15 17 1 1 +92 f 18 29 2 5 +92 f 30 44 4 10 +92 f 45 54 2 6 +92 f 55 64 2 5 +92 f 65 180 3 8 +92 m 15 17 1 1 +92 m 18 29 2 5 +92 m 30 44 4 10 +92 m 45 54 2 6 +92 m 55 64 2 5 +92 m 65 180 2 6 +93 f 15 17 1 1 +93 f 18 29 1 3 +93 f 30 44 1 6 +93 f 45 54 1 3 +93 f 55 64 1 3 +93 f 65 180 1 6 +93 m 15 17 1 1 +93 m 18 29 1 3 +93 m 30 44 1 6 +93 m 45 54 1 3 +93 m 55 64 1 3 +93 m 65 180 1 4 +94 f 15 17 1 1 +94 f 18 29 1 1 +94 f 30 44 1 1 +94 f 45 54 1 1 +94 f 55 64 1 1 +94 f 65 180 1 2 +94 m 15 17 1 1 +94 m 18 29 1 1 +94 m 30 44 1 1 +94 m 45 54 1 1 +94 m 55 64 1 1 +94 m 65 180 1 1 +95 f 15 17 1 1 +95 f 18 29 1 2 +95 f 30 44 1 3 +95 f 45 54 1 2 +95 f 55 64 1 2 +95 f 65 180 1 3 +95 m 15 17 1 1 +95 m 18 29 1 2 +95 m 30 44 1 3 +95 m 45 54 1 2 +95 m 55 64 1 2 +95 m 65 180 1 2 +96 f 15 17 1 1 +96 f 18 29 1 1 +96 f 30 44 1 3 +96 f 45 54 1 2 +96 f 55 64 1 2 +96 f 65 180 1 4 +96 m 15 17 1 1 +96 m 18 29 1 1 +96 m 30 44 1 3 +96 m 45 54 1 2 +96 m 55 64 1 2 +96 m 65 180 1 3 +97 f 15 17 1 1 +97 f 18 29 1 3 +97 f 30 44 1 6 +97 f 45 54 1 4 +97 f 55 64 1 4 +97 f 65 180 1 6 +97 m 15 17 1 1 +97 m 18 29 1 4 +97 m 30 44 1 7 +97 m 45 54 1 4 +97 m 55 64 1 3 +97 m 65 180 1 5 +98 f 15 17 1 1 +98 f 18 29 1 2 +98 f 30 44 1 4 +98 f 45 54 1 2 +98 f 55 64 1 2 +98 f 65 180 1 4 +98 m 15 17 1 1 +98 m 18 29 1 2 +98 m 30 44 1 5 +98 m 45 54 1 3 +98 m 55 64 1 2 +98 m 65 180 1 3 +99 f 15 17 1 1 +99 f 18 29 2 2 +99 f 30 44 3 4 +99 f 45 54 2 2 +99 f 55 64 2 2 +99 f 65 180 3 4 +99 m 15 17 1 1 +99 m 18 29 2 2 +99 m 30 44 3 4 +99 m 45 54 2 2 +99 m 55 64 2 2 +99 m 65 180 2 3 +100 f 15 17 1 1 +100 f 18 29 2 1 +100 f 30 44 4 1 +100 f 45 54 3 1 +100 f 55 64 2 1 +100 f 65 180 4 1 +100 m 15 17 1 1 +100 m 18 29 2 1 +100 m 30 44 4 1 +100 m 45 54 3 1 +100 m 55 64 2 1 +100 m 65 180 3 1 +101 f 15 17 1 1 +101 f 18 29 1 2 +101 f 30 44 1 2 +101 f 45 54 1 1 +101 f 55 64 1 1 +101 f 65 180 1 2 +101 m 15 17 1 1 +101 m 18 29 1 2 +101 m 30 44 1 2 +101 m 45 54 1 1 +101 m 55 64 1 1 +101 m 65 180 1 2 +102 f 15 17 1 1 +102 f 18 29 1 2 +102 f 30 44 1 3 +102 f 45 54 1 2 +102 f 55 64 1 1 +102 f 65 180 1 3 +102 m 15 17 1 1 +102 m 18 29 1 2 +102 m 30 44 1 3 +102 m 45 54 1 2 +102 m 55 64 1 1 +102 m 65 180 1 2 +103 f 15 17 1 1 +103 f 18 29 1 1 +103 f 30 44 1 3 +103 f 45 54 1 2 +103 f 55 64 1 2 +103 f 65 180 1 4 +103 m 15 17 1 1 +103 m 18 29 1 1 +103 m 30 44 1 3 +103 m 45 54 1 2 +103 m 55 64 1 2 +103 m 65 180 1 2 +104 f 15 17 1 1 +104 f 18 29 1 2 +104 f 30 44 1 3 +104 f 45 54 1 2 +104 f 55 64 1 1 +104 f 65 180 1 2 +104 m 15 17 1 1 +104 m 18 29 1 2 +104 m 30 44 1 3 +104 m 45 54 1 2 +104 m 55 64 1 1 +104 m 65 180 1 2 +105 f 15 17 1 1 +105 f 18 29 1 1 +105 f 30 44 1 1 +105 f 45 54 1 1 +105 f 55 64 1 1 +105 f 65 180 1 1 +105 m 15 17 1 1 +105 m 18 29 1 1 +105 m 30 44 1 1 +105 m 45 54 1 1 +105 m 55 64 1 1 +105 m 65 180 1 1 +106 f 15 17 1 1 +106 f 18 29 1 1 +106 f 30 44 1 2 +106 f 45 54 1 1 +106 f 55 64 1 1 +106 f 65 180 1 2 +106 m 15 17 1 1 +106 m 18 29 1 1 +106 m 30 44 1 2 +106 m 45 54 1 1 +106 m 55 64 1 1 +106 m 65 180 1 2 +107 f 15 17 1 1 +107 f 18 29 1 1 +107 f 30 44 1 2 +107 f 45 54 1 1 +107 f 55 64 1 1 +107 f 65 180 1 2 +107 m 15 17 1 1 +107 m 18 29 1 1 +107 m 30 44 1 2 +107 m 45 54 1 1 +107 m 55 64 1 1 +107 m 65 180 1 1 +\. + +INSERT INTO log.yaacs_svn_revision VALUES (2094, E'enhance panel sampling for cod_prov/capoluo\nnew way to update extractable field in sampling panel\nr\:emoved sampling.panel_extractable(int4) store proc'); + +-- rev 2095 + +-- add new outcomes very similar to CallBackDel (ouid = -2, aka quota filled) +-- infact it's used for panel Cs the same way as CallBackDel is used for "normal" Cs +INSERT INTO projects.outcomes VALUES (-6,'CallBackDelPanel',1,false); +ALTER TABLE sampling.theo_gen_design ADD COLUMN done INTEGER; +ALTER TABLE sampling.theo_gen_design ALTER COLUMN done SET DEFAULT 0; + +INSERT INTO log.yaacs_svn_revision VALUES (2098, E'add a new outcomes CallBackDelPanel\nadd a new column to sampling.theo_gen_design'); + +-- rev 2104 + +ALTER TABLE projects.template ADD COLUMN dis_phones varchar; +ALTER TABLE projects.template ALTER COLUMN dis_phones SET DEFAULT ''; +ALTER TABLE projects.codcolp drop column dis_phone1; +ALTER TABLE projects.codcolp drop column dis_phone2; + +INSERT INTO log.yaacs_svn_revision VALUES (2104, E'drop column dis_phone1 and dis_phone2 and a varchar column (dis_phones) that will the id of invalid phones separed by a c comma e.g. 2,3'); Modified: branches/external-trunk/dbyaacs/projects.sql =================================================================== --- branches/external-trunk/dbyaacs/projects.sql 2011-12-16 10:17:25 UTC (rev 2131) +++ branches/external-trunk/dbyaacs/projects.sql 2011-12-16 10:47:06 UTC (rev 2132) @@ -144,8 +144,7 @@ phone4 character varying(15), mobile character varying(15), active_phone integer default 1, - dis_phone1 integer default 0, - dis_phone2 integer default 0, + dis_phones varchar DEFAULT '', pop integer, strata integer, label character varying(60), Modified: branches/external-trunk/dbyaacs/sampling.sql =================================================================== --- branches/external-trunk/dbyaacs/sampling.sql 2011-12-16 10:17:25 UTC (rev 2131) +++ branches/external-trunk/dbyaacs/sampling.sql 2011-12-16 10:47:06 UTC (rev 2132) @@ -149,8 +149,9 @@ cod_prov integer, qty_capo integer, qty_not_capo integer, - label varchar(20), - open boolean + done_capo integer default 0, + done_not_capo integer default 0, + label varchar(20) ); @@ -165,6 +166,7 @@ CREATE TABLE sampling.theo_gen_design ( strata integer, qty integer, + done integer DEFAULT 0, label varchar(20), corr integer DEFAULT 0, open boolean @@ -318,7 +320,7 @@ priority integer, byear integer, sex character(1), - extractable boolean, + extractable boolean NOT NULL, status integer DEFAULT 0, study integer, job integer, @@ -375,7 +377,8 @@ sex character(1), min_age integer, max_age integer, - qty integer + qty_capo integer, + qty_not_capo integer ); CREATE TABLE sampling.study_definition ( @@ -960,42 +963,6 @@ end; ' LANGUAGE 'plpgsql'; --- not used anymore (still there for historical reason) -CREATE OR REPLACE FUNCTION sampling.panel_extractable (int4) RETURNS int4 AS ' - -Declare - theo_record record; - t_prov integer; - t_sex char; - t_minage integer; - t_maxage integer; - t_qty integer; - p_current_y alias for $1; - -Begin - - - update sampling.panel set extractable = false; - - FOR theo_record IN select * from sampling.panel_str_theo_gen_eta LOOP - - t_prov := theo_record.cod_prov; - t_sex := theo_record.sex; - t_minage := theo_record.min_age; - t_maxage := theo_record.max_age; - t_qty := theo_record.qty; - - -- update sampling.panel set extractable = true where (cod_com,rid) in (select cod_com,rid from sampling.panel where cod_prov = t_prov and lower(sex) = lower(t_sex) and (p_current_y - byear) between t_minage and t_maxage order by touch limit t_qty); - - -- see http://www.pgsql.cz/index.php/PostgreSQL_SQL_Tricks#Fast_first_n_rows_removing - update sampling.panel set extractable = true where ctid = any (array(select ctid from sampling.panel where cod_prov = t_prov and lower(sex) = lower(t_sex) and (p_current_y - byear) between t_minage and t_maxage order by touch limit t_qty)); - END LOOP; - - return 1; - -end; -' LANGUAGE 'plpgsql'; - -- Section 10 -- YaaCs's indexes Copied: branches/external-trunk/dialogs_icons/icons/Tango/64x64/actions/image-missing.png (from rev 2131, trunk/dialogs_icons/icons/Tango/64x64/actions/image-missing.png) =================================================================== (Binary files differ) Copied: branches/external-trunk/dialogs_icons/icons/Tango/64x64/status/image-missing.png (from rev 2131, trunk/dialogs_icons/icons/Tango/64x64/status/image-missing.png) =================================================================== (Binary files differ) Property changes on: branches/external-trunk/docs/difference-from-trunk.txt ___________________________________________________________________ Deleted: svn:mergeinfo - Modified: branches/external-trunk/docs/user_manual/html/it/yacati.xml =================================================================== --- branches/external-trunk/docs/user_manual/html/it/yacati.xml 2011-12-16 10:17:25 UTC (rev 2131) +++ branches/external-trunk/docs/user_manual/html/it/yacati.xml 2011-12-16 10:47:06 UTC (rev 2132) @@ -14,9 +14,9 @@ </figure> <para> -La scheda contatto (<xref linkend="yacati_img"/>) puo' essere suddivisa in tre sezioni:</para> +La finestra di Yacati (<xref linkend="yacati_img"/>) si puo' divire in diverse aree.</para> -<section><title>Prima sezione</title> + <!-- immagine prima sezione CAMBIATA--> <figure id="yacati_1st"><title>Yacati - Prima sezione</title> <mediaobject> @@ -27,110 +27,134 @@ </mediaobject> </figure> -Nella prima sezione troviamo: -<section><title>Note del supervisore</title> -<para> -Casella di testo dove un supervisore puo' annotare gli errori che l'intervistatore commette nella conduzione dell'intervista e dare suggerimenti per lo svolgimento delle interviste in modo produttivo.</para> -<para>Naturalmente la scritta rimarra' fin tanto che non correggera' questa sua imperfezione.</para> -<para>Questo inoltre aiuta il lavoro tra supervisori.</para> -<para>In piu', sempre in questo campo, sono riportati fino agli ultimi quattro scarti medi del tasso di risposta dell'intervistatore</para> +<section><title>Info sull'operatore</title> + + <section><title>Note del supervisore</title> + <para>Aiuta il supervisore nel suo lavoro.</para> + <para>Si tratta di un'area di testo posta nella parte inferiore della finestra, dove il supervisore ha la possibilità di segnalare gli eventuali errori commessi dall'intervistatore nella conduzione dell'intervista nonché di dare suggerimenti per migliorare la produttività.</para> + <para>Il messaggio rimane attivo fino a quando il supervisore lo ritenga necessario. </para> + </section> + + <section><title>Produttivita' intervistatore</title> + <para>Le quattro caselle che compaiono in alto a sinistra riportano degli indici sulla produttività dell'intervistatore. Da sinistra a destra troviamo:</para> + <itemizedlist> + <listitem><para>Scarto medio sul tasso di risposta; </para></listitem> + <listitem><para>Scarto medio sul tasso di rifiuto; </para></listitem> + <listitem><para>Scarto medio su appuntamenti / non quota; </para></listitem> + <listitem><para>Scarto medio sul tasso di occupato, libero, risponde fax, segreteria, inesistente; </para></listitem> + </itemizedlist> + <para>Tutti i tassi sono calcolati nell'intervallo di tempo del turno dell'intervistatore con la seguente formula:</para> + <programlisting> + numero di stati x per l'intervistatore - numero medio di casi per lo stato x + </programlisting> + </section> + </section> -<section><title>Produttivita' intervistatore</title> -<para>Le quattro caselle di seguito al campo riservato alle note verso l'intervistatore riportano degli indici di produttivita' dello stesso. Questi sono, da sinistra a destra:</para> -<itemizedlist> -<listitem> <para>Scarto medio sul tasso di risposta; </para> </listitem> -<listitem> <para>Scarto medio sul tasso di rifiuto; </para> </listitem> -<listitem> <para>Scarto medio su appuntamenti / non quota; </para> </listitem> -<listitem> <para>Scarto medio sul tasso di occupato, libero, risponde fax, segreteria, inesistente; </para> </listitem> -</itemizedlist> -<para> -Tutti i tassi sono calcolati nell'intervallo di tempo del turno dell'intervistatore con la seguente formula: -</para> -<programlisting> -numero di stati x per l'intervistatore - numero medio di casi per lo stato x -</programlisting> +<section><title>Riferimenti del contatto</title> + + <section><title>Cod Com</title> + <para>Numero identificativo del comune dove stiamo telefonando.</para> + <para>Ad es 21008 e' il valore che mi identifica il comune di Bolzano. + Se telefonassimo nel comune di Venezia il Cod_Com sarebbe uguale a 27042.</para> + </section> + + <section><title>Num Int</title> + <para>Numero identificativo del contatto.</para> + <para>Ad ogni contatto e' associato un unico Num_Int, dunque non e' possibile trovare due contatti con lo stesso Num_Int. </para> + </section> + </section> -<section><title>Ragione sociale</title> -<para>Nel nostro esempio Tessarollo Mariano; ovvero l'intestatario della linea telefonica.</para> -<para>Per indagini rivolte alla popolazione l'intervista non deve essere rivolta all'intestatario della linea -telefonica ma puo' essere rivolta a qualsiasi persona che ci risponda purche' appartenente all'universo + + +<section><title>Dati del Contatto</title> + + <section><title>Nominativo dell'abbonato o ragione sociale</title> + <para>Questa informazione può apparire o rimanere nascosta (vedi <xref linkend="yadmin"/>), a seconda del target e della modalità di contatto dell'indagine in corso.</para> + <para>Nel nostro esempio il nominativo dell'abbonato è stato oscurato. Per indagini rivolte alla popolazione l'intervista non deve essere rivolta all'intestatario della linea telefonica ma puo' essere rivolta a qualsiasi persona che ci risponda purche' appartenente all'universo di riferimento.</para> -</section> + <para>Se previsto dall'indagine, il nome dell'intestatario compare sopra al numero di telefono.</para> + </section> -<section><title>Telefono 1...4 </title> -<para> -Quattro campi per il recapito telefonico del contatto comprensivi di prefisso.</para> -<para>I primi due campi (Telefono 1 e 2) vengono estratti dall'elenco telefonico o dalla campione importato nel sistema. I rimanenti (Telefono 3 e 4) sono editabili dall'intervistatore e possono essere utilizzati per inserire nuovi recapiti quando, ad esempio, si stanno effettuando indagini su lista di nominativi e si sta cercando una specifica persona.</para> -<para>Questa funzione e' anche molto utile nelle indagini verso aziende, per inserire gli eventuali numeri diretti dei referenti per l'azienda intervistata, raccolti l'intervistatore.</para> -<para>Si puo' scegliere di utilizzare uno qualsiasi dei numeri proposti (a patto che il campo non sia vuoto) semplicemente cliccando nella corrispondente check-box posta affianco ad ogni campo "Telefono".</para> -<para>Cliccando invece sulle etichette "Telefono 1" o "Telefono 2" si oscurano i numeri di telefono importati nel sistema, rendendoli non utilizzabili. Questa procedura e' molto utile se il numero impostato si rivela inesistente o errato.</para> -<para>L'ultimo numero selezionato sara' anche il primo ad essere chiamato nel contatto successivo.</para> -</section> + <section><title>Telefono 1...4 </title> + <para>Quattro campi sono dedicati ai recapiti telefonici del contatto.</para> + <para>I primi due campi (Telefono 1 e 2) sono estratti dalla lista dell'elenco telefonico oppure da liste campione importate nel sistema. I rimanenti campi vuoti (Telefono 3 e 4) sono editabili dall'intervistatore qualora fosse necessario inserire un nuovo numero telefonico ottenuto durante la survey.</para> + <para>Questa funzione e' molto utile nelle indagini verso aziende, per inserire gli eventuali numeri diretti dei referenti per l'azienda intervistata, raccolti dall'intervistatore.</para> + <para>L'intervistatore puo' scegliere di utilizzare uno qualsiasi dei numeri proposti (a patto che il campo non sia vuoto) semplicemente cliccando nella corrispondente check-box posta affianco ad ogni campo "Telefono".</para> + <para>Cliccando invece sulle etichette "Telefono 1" o "Telefono 2" si oscurano i numeri di telefono importati nel sistema, rendendoli non utilizzabili. Questa procedura e' molto utile se il numero impostato si rivela inesistente o errato.</para> + <para>L'ultimo numero chiamato sarà quello pre-selezionato nel contatto successivo.</para> + </section> + + <section><title>Referente</title> + <para>In questo campo troviamo il cognome e il nome del nominativo che si sta cercando, nel caso di indagini su lista o verso aziende.</para> + <para> E' un campo modificabile da parte dell'intervistatore anche nel caso in cui il referente scritto sia sbagliato o variato.</para> + </section> -<section><title>Cod Com</title> -<para> -Valore identificativo del comune dove stiamo telefonando.</para> -<para>Ad es 21008 e' il valore che mi identifica il comune di Bolzano. -Se telefonassimo nel comune di Venezia il Cod_Com sarebbe uguale a 27042.</para> </section> -<section><title>Num Int</title> -<para> -Valore identificativo del contatto.</para> -<para>Ad ogni contatto e' associato un Num_Int, non e' possibile trovare due contatti con lo stesso Num_Int. </para> -</section> -<section><title>E-mail</title> -<para>Inviare una e-mail con questa applicazione e' molto semplice: </para> -<para>nella casella e-mail si scrive indirizzo e-mail, si clicca sul pulsante Invia Mail e la mail sara' inviata; se tutto procede senza intoppi vi verra' mostrato un messaggio di successo. </para> -<para>Il testo del messaggio viene impostato automaticamente e viene deciso dall'amministratore dell'indagine<xref linkend="yadmin"/>. A questo punto, l'e-mail e' stata inviata e lo stato del contatto e' stato impostato a FaxMailSpedito, inoltre il sistema avra' provveduto al salvataggio automatico dei dati e bastera' cliccare su nuovo contatto per avere il nuovo nominativo da contattare.</para> -</section> -<section><title>Fax</title> -<para> -Nelle indagini rivolte alle aziende c'e' la possibilita' di inviare un fax di presentazione.</para> -<para>Come ci si comporta nel caso si contatti l'azienda e ci rispondano?</para> -<para>Due sono le possibilita':</para> -<itemizedlist> -<listitem><para>Se il referente dell'azienda e' disponibile a fare l'intervista, in qual caso si fa l'intervista.</para></listitem> -<listitem><para>Se il referente non c'e' o non e' disponibile a fare l'intervista allora si invia un fax di presentazione.</para></listitem> -</itemizedlist> -<para>Affinche' un fax venga inviato correttamente devono essere riempiti i campi Referente e Fax, in caso contrario ci verra' segnalato un messaggio di errore. Inviare un fax con questa applicazione e' molto semplice, cliccando sul pulsante Invia Fax il fax sara' inviato e se tutto procede senza intoppi vi verra' mostrato un messaggio di successo. </para> -<para>A questo punto, il fax e' stato inviato e lo stato del contatto e' stato impostato a FaxMailSpedito, inoltre il sistema avra' provveduto al salvataggio automatico dei dati e la maschera che verra' proposta sara' quella iniziale (<xref linkend="yacati"/>) e quindi sara' possibile procedere con il prossimo contatto.</para> -<para>Questo nominativo ritornera' esattamente dopo un'ora. Sara' allora compito dell'intervistatore chiedere la conferma dell'arrivo del fax e fissare un appuntamento.</para> -<para>Nel caso in cui il fax non possa essere spedito per un errore di trasmissione (o quant'altro) l'operatore che selezionera' il nominativo sara' informato del fatto; Nella casella fax, infatti, verra' riportato oltre al numero prima inserito anche il messaggio "FAX ERRATO".</para> -<para>Essendo l'invio del fax uno stato del contatto non e' possibile impostare nessun altro stato. Ad esempio non e' possibile inviare il fax e contemporaneamente fissare un appuntamento.</para> -<para>E' possibile pero' inviare il fax successivamente il completamento del questionario semplicemente cliccando la check-box "Fax su Risponde": quando l'intervistatore salvera' il contatto con il relativo stato il sistema procedera' all'invio del fax.</para> -</section> +<section><title>Letter in Advance</title> -<section><title>Invia un SMS</title> -Se nel campo "cellulare" e' stato immesso un numero di cellulare valido, cliccando questo pulsante, Yacati invia un messaggio di testo sms a quel numero contenente il testo inserito nei dettagli del progetto in Yadmin. -</section> + <section><title>E-mail</title> + <para>Inviare una e-mail con questa applicazione e' molto semplice. </para> + <para>Nel campo accanto alla voce <emphasis>Email</emphasis> l'intervistatore può scrivere l'indirizzo email, se non è già presente, e poi cliccare su “Invia Email”. Se non vi sono errori, apparirà un messaggio che informa sul successo dell'invio. </para> + <para>Il testo del messaggio viene impostato automaticamente e viene deciso dall'amministratore dell'indagine (<xref linkend="yadmin"/>). Una volta inviata l'email, il contatto viene classificato come “FaxEmail spedito” e i dati del contatto vengono salvati automaticamente.</para> + </section> + <section><title>Fax</title> + <para>Nelle indagini rivolte alle aziende c'e' la possibilita' di inviare un fax di presentazione.</para> + <para>Come ci si comporta nel caso si contatti l'azienda e ci rispondano?</para> + <para>Due sono le possibilita':</para> + <itemizedlist> + <listitem><para>Se il referente dell'azienda c'è ed e' disponibile si fa dorettamente l'intervista.</para></listitem> + <listitem><para>Se il referente non c'e' o non e' disponibile a fare l'intervista allora si invia un fax di presentazione.</para></listitem> + </itemizedlist> + <para>Affinche' un fax venga inviato correttamente devono essere riempiti i campi Referente e Fax, in caso contrario verra' segnalato un messaggio di errore. Inviare un fax con questa applicazione e' molto semplice, cliccando sul pulsante Invia Fax il fax sara' inviato e se tutto procede senza intoppi verra' mostrato un messaggio di successo. </para> + <para>A questo punto, il fax e' stato inviato e lo stato del contatto e' stato classificato come FaxMailSpedito; il sistema avra' inoltre provveduto al salvataggio automatico dei dati e la maschera che verra' proposta sara' quella iniziale (<xref linkend="yacati"/>) consentendo di procedere con il prossimo contatto.</para> + <para>Questo nominativo ritornera' esattamente dopo un'ora. Sara' allora compito dell'intervistatore chiedere la conferma dell'arrivo del fax e fissare un appuntamento.</para> + <para>Nel caso in cui il fax non possa essere spedito per un errore di trasmissione (o quant'altro) l'operatore che selezionera' il nominativo sara' informato del fatto: nella casella fax verra' riportato oltre al numero inserito anche il messaggio "FAX ERRATO".</para> + <para>Essendo l'invio del fax uno stato del contatto non e' possibile impostare nessun altro stato. Ad esempio non e' possibile inviare il fax e contemporaneamente fissare un appuntamento.</para> + <para>E' possibile pero' inviare il fax successivamente il completamento del questionario semplicemente cliccando la check-box <emphasis>Fax su Risponde</emphasis>: quando l'intervistatore salvera' il contatto con il relativo stato <emphasis>Ha Risposto</emphasis> il sistema procedera' all'invio del fax.</para> + </section> -<section><title>Referente</title> -<para>In questo campo troviamo il cognome e il nome del nominativo che si sta cercando, nel caso di indagini su lista o verso aziende.</para> -<para> E' un campo modificabile da parte dell'intervistatore anche nel caso in cui il referente scritto sia sbagliato o variato.</para> -</section> + <section><title>Invia un SMS</title> + <para>Se nel campo "Cellulare" e' stato immesso un numero di cellulare valido, cliccando questo pulsante, Yacati invia un messaggio di testo sms a quel numero contenente il testo inserito nei dettagli del progetto in Yadmin.</para> + </section> -<section><title>Ultimo stato del contatto</title> -<para> -Come in figura di esempio (<xref linkend="yacati_1st"/>) questo campo e' occupato dalla scritta "Occ: 14/Jan - 16:11". Indica come e' stato classificato il contatto l'ultima volta che questo e' stato contattato e data e ora di ritorno programmato.</para> -</section> +</section> -<section><title>Ripartizione Geografica</title> -<para> -Spazio dedicato all'indicazione geografica del contatto visualizzato, in questo caso "Zona 1_2_5", ma puo' contenere il nome della regione o della provincia.</para> + + + +<section><title>Ultimo stato del contatto e Info Geografica</title> + + <section><title>Ultimo stato del contatto</title> + <para>Come in figura di esempio (<xref linkend="yacati_1st"/>) questo campo e' occupato dalla scritta "Occ: 14/Jan - 16:11". Indica come e' stato classificato il contatto l'ultima volta che e' stato contattato e data e ora di ritorno programmato.</para> + </section> + + <section><title>Ripartizione Geografica</title> + <!-- probabilmente si può togliere, o è ancora in via sperimentale?--><para>Spazio dedicato all'indicazione geografica del contatto visualizzato, in questo caso "Zona 1_2_5", ma puo' contenere il nome della regione o della provincia.</para> + </section> + </section> <!-- FINE PRIMA SEZIONE --> + + + + + + +<!-- SECONDA SEZIONE --> + +<section><title>La tabella delle quote</title> + <para>Nella parte superiore della finestra compare la tabella delle quote. Quando, nel corso dell'indagine cominciano a chiudersi le quote compare la scritta “NO” in corrispondenza del genere e della fascia d'età di cui si è raggiunto il numero di interviste previste. La tabella cambia di contatto in contatto a seconda dell'appartenenza geografica del contattato.</para> </section> - -<section><title>Seconda Sezione: Dati Anagrafici</title> +<!--<section><title>Seconda Sezione: Dati Anagrafici</title> <figure id="yacati_2nd"><title>Yacati - Dati Anagrafici</title> <mediaobject> <imageobject> @@ -140,12 +164,19 @@ </mediaobject> </figure> <para>La sezione "Dati Anagrafici" dell'intervistato viene utilizzata per salvare i dati anagrafici della persona che ha risposto al questionario.</para> -<para>Quando una persona risponde all'intervista, dopo aver completato il questionario e' necessario registrare i suoi dati anagrafici: selezionare il pulsante relativo al genere dell' intervistato (Maschio o Femmina) rendendolo attivo, immettere l'anno di nascita scrivendo il valore corrispondente nella casella Anno di nascita in quattro cifre (ad esempio 1960) oppure selezionare lo stesso valore scegliendolo tra quelli presentata aprendo il menu' a tendina del campo.</para> +<para>Quando una persona risponde all'intervista, dopo aver completato il questionario e' necessario registrare i suoi dati anagrafici: selezionare il pulsante relativo al genere dell' intervistato (Maschio o Femmina) rendendolo attivo, immettere l'anno di nascita scrivendo il valore corrispondente nella casella Anno di nascita in quattro cifre (ad esempio 1960).</para> <para>Le caselle "Disponibilita' a partecipare ad altre interviste", "Attivita'" e "Titolo di Studio" possono essere utilizzate per rilevare ulteriori dati sull'intervistato necessari ad altre analisi di post-stratificazione del campione.</para> + +</section>--> + + <!-- FINE SECONDA SEZIONE--> -</section> -<section><title>Terza Sezione: Informazione sulla Schedulazione</title> + + +<!-- TERZA SEZIONE --> + + <figure id="yacati_3rd"><title>Yacati - Informazioni sulla Schedulazione</title> <mediaobject> <imageobject> @@ -154,78 +185,75 @@ <textobject><phrase>Yacati - Informazioni sulla Schedulazione</phrase></textobject> </mediaobject> </figure> -<para>Nella terza sezione "Informazioni sulla Schedulazione" troviamo: </para> - <section><title>Stato del contatto</title> - <para>Nello stato del contatto sono riportati tutti i vari esiti di una telefonata, si veda <xref linkend="yacati_stati"/>.</para> - <para>Dopo aver chiamato un numero di telefono, ed aver completato la telefonata, si deve impostare lo stato del contatto appena effettuato scegliendone uno di quelli possibili e visualizzati quando si apre la casella Stato del contatto. Gli stati e i relativi comportamenti sono elencati di seguito:</para> + + + +<section><title>Stato del contatto</title> + + <para>Nell'area "Stato del contatto" troviamo un pulsante per ogni esito possibile di una telefonata. Si veda <xref linkend="yacati_stati"/>.</para> + <para>Se la funzione autocall e' abilitata vengono passati all'intervistatore solo i contatti esistenti e liberi; i numeri inesistenti e quelli occupati vengono gestiti automaticamente dal sistema Yaacs; e' automatica anche la classificazione del contatto come "Libero" dopo 20 secondi. </para> + <para>Dopo aver concluso la telefonata l'intervistatore deve classificarne l'esito utilizzando l'elenco degli stati del contatto presente nella parte sinistra della finestra, secondo i criteri seguenti:</para> <itemizedlist> - <listitem><para>Occupato: Il numero di telefono risulta essere occupato, allora imposto la casella Stato del contatto con il valore "Occupato" scegliendolo dalla lista dei possibili valori presentati sul menu' a discesa. A questo punto tale numero sara' richiamato automaticamente dopo un certo tempo;</para> - <para>Attenzione il richiamo del contatto (tranne per l'appuntamento) puo' essere effettuato da uno qualsiasi degli intervistatori e non necessariamente da chi lo ha chiamato la prima volta!</para> - <para>A questo scopo e' utile leggere le informazioni riportate sulla Storia del contatto.</para></listitem> - <listitem><para>Libero: Il numero di telefono suona a vuoto senza che nessuno risponda, in questo caso si imposta a Libero lo stato del contatto. Anche in questo caso il contatto sara' rieffettuato in un secondo momento. Per classificare un contatto come libero e' sufficiente attendere 4 -5 squilli del telefono chiamato.</para></listitem> - <listitem><para>RispondeFax: Il numero composto corrisponde ad un numero di fax, imputanto questa modalita' il contatto non verra' piu' riproposto.</para></listitem> - <listitem><para>Segreteria: Se risponde una segreteria telefonica bastera' selezionare Segreteria per lo stato del contatto e questo numero sara' ripresentato piu' tardi.</para></listitem> - <listitem><para>Inesistente: Quando il numero di telefono risulta essere inesistente allora il valore dello stato del contatto andra' impostato di conseguenza ed il contatto non verra' piu' ripresentato. </para></listitem> - <listitem><para>Rifiuta: -La persona contattata si rifiuta di rispondere al questionario.</para> -<para>La persona contattata non e' in grado di rispondere perche' non parla italiano (ad esempio parla solo dialetto o e' del Sud-Tirolo).</para> -<para>La persona contattata non e' in grado di capire le domande ma e' fra le persone da intervistare.</para> -<para>La persona e' irrintracciabile nell'orario di intervista (ad esempio si hanno turni di intervista dalle 13.45 alle 21.30 ma l'intervistato si trova solo alla mattina) o nel periodo di intervista (ad esempio l'indagine dura una settimana e la persona e' irragiungibile per un mese).</para> -<para>In questi casi annoteremo come stato del contatto Rifiuta. Anche in questo caso il contatto non verra' piu' ripresentato. </para></listitem> - <listitem><para>NonQuota: vanno salvati come "Non Quota" i contatti che non rientrano nell'universo delle persone da intervistare: fasce di popolazione escluse dall'indagine per quote concluse o non corrispondenti al profilo ricercato.</para> - <para>Inoltre, ad esempio numeri di telefono corrispondenti ad aziende se stiamo intervistando la popolazione italiana, oppure numeri corrispondenti ad abitazioni se stiamo intervistando aziende.</para></listitem> - <listitem><para>Risponde: La persona contattata ha risposto al questionario.</para></listitem> - </itemizedlist> - <figure id="yacati_stati"><title>Yacati - Stati del contatto</title> + <listitem><para>Occupato: la linea risulta occupata. L'intervistatore selezionera' questo comando dal menu. Il contatto telefonico verra' riproposto dal sistema dopo alcuni minuti, decisi dall'amministratore.</para> + <para>Attenzione il richiamo del contatto (tranne per l'appuntamento) puo' essere effettuato da uno qualsiasi degli intervistatori e non necessariamente da chi lo ha chiamato la prima volta!</para></listitem> + <listitem><para>Libero: l'intervistatore classifichera' cosi' il contatto quando nessuno risponde al telefono. Lo stesso contatto verra' proposto successivamente (es. un'ora). Per classificare un contatto come libero e' sufficiente attendere 4-5 squilli, dopo i quali il sistema automaticamente passera' ad un nuovo numero.</para></listitem> + <listitem><para>Risponde Fax: si tratta di un numero di fax; il contatto cosi' classificato non verra' piu' riproposto.</para></listitem> + <listitem><para>Segreteria Telefonica: con questa classificazione il contatto verra' riproposto piu' tardi, dopo un periodo di tempo deciso dall'amministratore (es. un'ora).</para></listitem> + <listitem><para>Inesistente: il numero di telefono risulta essere inesistente cosi' classificato non verra' mai piu' riproposto. </para></listitem> + <listitem><para>Rifiuta: i contatti cosi' classificati non verranno piu' proposti durante il corso dell'indagine. I casi di rifiuto sono i seguenti.</para> + <para>La persona contattata e' intervistabile, ma non vuole rispondere al questionario.</para> + <para>La persona contattata non e' in grado di rispondere perche' non parla italiano (ad esempio parla solo dialetto o e' del Sud-Tirolo).</para> + <para>La persona contattata non e' in grado di capire le domande ma e' fra le persone da intervistare.</para> + <para>La persona e' irrintracciabile nell'orario di intervista (ad esempio l'intervistato e' disponibile solo la mattina per un'indagine pomeriggio-sera) o nel periodo di intervista (ad esempio l'indagine dura una settimana e la persona e' irragiungibile per un mese).</para></listitem> + <listitem><para>Non Quota: vanno salvati come "Non Quota" i contatti che non rientrano nell'universo delle persone da intervistare: fasce di popolazione escluse dall'indagine per quote concluse o non corrispondenti al profilo ricercato.</para> + <para>Inoltre, ad esempio numeri di telefono corrispondenti ad aziende se stiamo intervistando la popolazione italiana, oppure numeri corrispondenti ad abitazioni se stiamo intervistando aziende.</para></listitem> + <listitem><para>Risponde: quando una persona risponde all'intervista, dopo aver completato il questionario e' necessario registrare i suoi dati anagrafici: selezionare il pulsante relativo al genere dell' intervistato (Maschio o Femmina) rendendolo attivo, immettere l'anno di nascita scrivendo il valore corrispondente nella casella Anno di nascita in quattro cifre, ad esempio 1960.</para></listitem> + <listitem><para>Appuntamento: se l'intervistato desidera essere ricontattato in un altro momento nel periodo di durata dell'indagine, l'intervistatore dovra' cliccare due volte sul pulsante corrispondente.</para> + <para>Comparira' una prima finestra con un calendario da dove viene selezionato il giorno in cui il contattato desidera essere intervistato. Cliccando su <emphasis>Prossimo</emphasis> compare la seconda finestra in cui si deve inserire l'ora (hh:mm); infine cliccando ancora una volta su <emphasis>Prossimo</emphasis> una terza finestra chiedera' il nome di battesimo, il genere e l'anno di nascita del contattato. Per confermare l'appuntamento cliccare su <emphasis>Salva</emphasis> altrimenti su <emphasis>Cancella</emphasis> per modificare i dati inseriti (<xref linkend="yacati_app"/>).</para> + + <figure id="yacati_app"><title>Yacati - Finestra per Appuntamenti</title> <mediaobject> <imageobject> - <imagedata fileref="images/yacati_stati.png"/> + <imagedata fileref="images/yacati_app.png"/> </imageobject> - <textobject><phrase>Yacati - Stati del contatto</phrase></textobject> + <textobject><phrase>Yacati - Finestra per Appuntamenti</phrase></textobject> </mediaobject> </figure> - </section> + + <para>Se si cerca di prendere appuntamento in un giorno in cui non sono stati impostati i turni, Yacati segnalera' un errore.</para> - <section><title>Tentativo</title> - <para> - Visualizza il numero di volte che e' gia' stato contattato tale numero. -Nell' esempio e' la seconda volta che contattiamo questo numero di telefono.</para> - </section> + <para>Se il pulsante Appuntamento appare disabilitato, significa che non si possono piu' prendere appuntamenti per quel contatto poiche' si e' raggiunto il numero di tentativi massimo previsto dall'amministratore per ogni contatto.</para></listitem> - <section><title>Risponde</title> - <para> - Questo bottone apre il browser all'indirizzo del questionario in formato elettronico, definito nelle impostazioni dell'indagine, permettendo all'intervistatore la sottoposizione delle domande.</para> - </section> + </itemizedlist> - <section><title>Appuntamento</title> - <para>Si utilizza per fissare un appuntamento.</para> -<para>Per fissare un appuntamento e' necessario cliccare sul bottone "Appuntamento" che fara' comparire una maschera dove e' possibile immettere tutti i dati riguardanti un appuntamento (<xref linkend="yacati_app"/>), quali la... [truncated message content] |
From: <si...@us...> - 2011-12-16 10:17:32
|
Revision: 2131 http://yaacs.svn.sourceforge.net/yaacs/?rev=2131&view=rev Author: sickpig Date: 2011-12-16 10:17:25 +0000 (Fri, 16 Dec 2011) Log Message: ----------- * Cherry pick fixes applied to trunk and is in commits 20{90,91,92}, namely: - FIX: yachoo prev version could lead to a situation where nobody can connect to the db cause we reach the max connection limit. That could happen because in case of fs errors yachoo just went on and spawn a yacati client in background, worst than: it didn't say a word about it. - FIX: a thinko in setting project voip provider mechanism (yadmin) Modified Paths: -------------- branches/external-stable/yachoo.tcl branches/external-stable/yadmin.tcl branches/external-trunk/yachoo.tcl branches/external-trunk/yadmin.tcl Modified: branches/external-stable/yachoo.tcl =================================================================== --- branches/external-stable/yachoo.tcl 2011-12-16 10:02:24 UTC (rev 2130) +++ branches/external-stable/yachoo.tcl 2011-12-16 10:17:25 UTC (rev 2131) @@ -25,8 +25,8 @@ # $Id$ # $URL$ -package require yaacs 0.2 -package require tkyaacs 0.2 +package require yaacs +package require tkyaacs package require icons namespace import msgcat::* @@ -73,14 +73,18 @@ set web_based "-w" } - if {[catch {exec yacati -p $pj -c $confFile $web_based &} err]} { + if {[catch {set ::yachoo::yacatiPid [exec yacati -p $pj -c $confFile $web_based &]} err]} { ::yalog::error "Unable to excute yacati: $err" ::yalog::debug "Verbose Error message is: $::errorInfo" ::yalog::debug "Error code is: $::errorCode" - exit + .fwel.wel configure -fg red + .fwel.wel configure -text [mc "Failed to launch yacati, this the actual error message:\n\n%s" $err"] + return -1 } - # 2) start vnc server + ::yalog::error "yacati $::yachoo::yacatiPid" + # 2) start vnc server + if {[catch {exec -- $::yachoo::xvnc -display :0 -shared -many -viewonly -nopw -nobell &} err]} { ::yalog::error "Unable to xvnc: $err" ::yalog::debug "Verbose Error message is: $::errorInfo" @@ -251,8 +255,12 @@ set selIdx [.fprojs.lstPjs curselection] if {$selIdx != ""} { set selPj [lindex $::yachoo::pjsTitles $selIdx] - ::yachoo::launch $selPj [::yaconf::getUser] $gettedopts(c) - exit + set res [::yachoo::launch $selPj [::yaconf::getUser] $gettedopts(c)] + if {$res != -1} { + # everything is ok, we have spawned all the + # needed process, just leave + exit + } } } bind .fprojs.lstPjs <Double-Button-1> {.fprojs.ok invoke} @@ -317,7 +325,6 @@ proc bgerror {msg} { ::yalog::error "bgError: $msg\n\n\Error Code: $::errorCode\nStack trace: $::errorInfo" ::yalog::error "pending idletasks?\n[after info]" - ::dialogs::error . "$msg" "Error Code: $::errorCode\nStack trace: $::errorInfo" } Modified: branches/external-stable/yadmin.tcl =================================================================== --- branches/external-stable/yadmin.tcl 2011-12-16 10:02:24 UTC (rev 2130) +++ branches/external-stable/yadmin.tcl 2011-12-16 10:17:25 UTC (rev 2131) @@ -1520,7 +1520,7 @@ .pj.time_o.voip.vp.lvoip_provider configure -state normal .pj.time_o.voip.vp.voip_provider delete list 0 end .pj.time_o.voip.vp.voip_provider delete entry 0 end - foreach v [array names voip_provider ] { + foreach v [lsort -integer [array names voip_provider]] { .pj.time_o.voip.vp.voip_provider insert list end [lindex $voip_provider($v) 0] } @@ -3297,11 +3297,13 @@ label .pj.time_o.voip.vp.lvoip_provider -text [mc "VoIP provider"] iwidgets::combobox .pj.time_o.voip.vp.voip_provider -textbackground white -state disabled -completion false\ -selectioncommand { - set sel_voip [.pj.time_o.voip.vp.voip_provider curselection] - if {$sel_voip ne ""} { - - # voip_provider($sel_voip) is a list with id, dial_prefix and context - set ::yadmin::dial_prefix [lindex $::yadmin::voip_provider($sel_voip) 1] + set pvoip_name [.pj.time_o.voip.vp.voip_provider get] + foreach v [lsort -integer [array names ::yadmin::voip_provider ]] { + if {[lindex $::yadmin::voip_provider($v) 0] eq $pvoip_name} { + # voip_provider($sel_voip) is a list with id, dial_prefix and context + set ::yadmin::dial_prefix [lindex $::yadmin::voip_provider($v) 1] + break + } } } Modified: branches/external-trunk/yachoo.tcl =================================================================== --- branches/external-trunk/yachoo.tcl 2011-12-16 10:02:24 UTC (rev 2130) +++ branches/external-trunk/yachoo.tcl 2011-12-16 10:17:25 UTC (rev 2131) @@ -25,8 +25,8 @@ # $Id$ # $URL$ -package require yaacs 0.2 -package require tkyaacs 0.2 +package require yaacs +package require tkyaacs package require icons namespace import msgcat::* @@ -73,14 +73,18 @@ set web_based "-w" } - if {[catch {exec yacati -p $pj -c $confFile $web_based &} err]} { + if {[catch {set ::yachoo::yacatiPid [exec yacati -p $pj -c $confFile $web_based &]} err]} { ::yalog::error "Unable to excute yacati: $err" ::yalog::debug "Verbose Error message is: $::errorInfo" ::yalog::debug "Error code is: $::errorCode" - exit + .fwel.wel configure -fg red + .fwel.wel configure -text [mc "Failed to launch yacati, this the actual error message:\n\n%s" $err"] + return -1 } - # 2) start vnc server + ::yalog::error "yacati $::yachoo::yacatiPid" + # 2) start vnc server + if {[catch {exec -- $::yachoo::xvnc -display :0 -shared -many -viewonly -nopw -nobell &} err]} { ::yalog::error "Unable to xvnc: $err" ::yalog::debug "Verbose Error message is: $::errorInfo" @@ -251,8 +255,12 @@ set selIdx [.fprojs.lstPjs curselection] if {$selIdx != ""} { set selPj [lindex $::yachoo::pjsTitles $selIdx] - ::yachoo::launch $selPj [::yaconf::getUser] $gettedopts(c) - exit + set res [::yachoo::launch $selPj [::yaconf::getUser] $gettedopts(c)] + if {$res != -1} { + # everything is ok, we have spawned all the + # needed process, just leave + exit + } } } bind .fprojs.lstPjs <Double-Button-1> {.fprojs.ok invoke} @@ -317,7 +325,6 @@ proc bgerror {msg} { ::yalog::error "bgError: $msg\n\n\Error Code: $::errorCode\nStack trace: $::errorInfo" ::yalog::error "pending idletasks?\n[after info]" - ::dialogs::error . "$msg" "Error Code: $::errorCode\nStack trace: $::errorInfo" } Modified: branches/external-trunk/yadmin.tcl =================================================================== --- branches/external-trunk/yadmin.tcl 2011-12-16 10:02:24 UTC (rev 2130) +++ branches/external-trunk/yadmin.tcl 2011-12-16 10:17:25 UTC (rev 2131) @@ -1520,7 +1520,7 @@ .pj.time_o.voip.vp.lvoip_provider configure -state normal .pj.time_o.voip.vp.voip_provider delete list 0 end .pj.time_o.voip.vp.voip_provider delete entry 0 end - foreach v [array names voip_provider ] { + foreach v [lsort -integer [array names voip_provider]] { .pj.time_o.voip.vp.voip_provider insert list end [lindex $voip_provider($v) 0] } @@ -3297,11 +3297,13 @@ label .pj.time_o.voip.vp.lvoip_provider -text [mc "VoIP provider"] iwidgets::combobox .pj.time_o.voip.vp.voip_provider -textbackground white -state disabled -completion false\ -selectioncommand { - set sel_voip [.pj.time_o.voip.vp.voip_provider curselection] - if {$sel_voip ne ""} { - - # voip_provider($sel_voip) is a list with id, dial_prefix and context - set ::yadmin::dial_prefix [lindex $::yadmin::voip_provider($sel_voip) 1] + set pvoip_name [.pj.time_o.voip.vp.voip_provider get] + foreach v [lsort -integer [array names ::yadmin::voip_provider ]] { + if {[lindex $::yadmin::voip_provider($v) 0] eq $pvoip_name} { + # voip_provider($sel_voip) is a list with id, dial_prefix and context + set ::yadmin::dial_prefix [lindex $::yadmin::voip_provider($v) 1] + break + } } } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <si...@us...> - 2011-12-16 10:02:31
|
Revision: 2130 http://yaacs.svn.sourceforge.net/yaacs/?rev=2130&view=rev Author: sickpig Date: 2011-12-16 10:02:24 +0000 (Fri, 16 Dec 2011) Log Message: ----------- * Cherry pick fixes applyed to trunk and external stable in commits 20{87,88,89}, namely : - forgot to update caller of sendfax::init after changed api - massive fax can now use both delivery method (mail2fax or hylfax) Modified Paths: -------------- branches/external-stable/yaacs/admin.tcl branches/external-stable/yaacs/sendmail.tcl branches/external-stable/yadmin.tcl branches/external-trunk/yaacs/admin.tcl branches/external-trunk/yadmin.tcl Modified: branches/external-stable/yaacs/admin.tcl =================================================================== --- branches/external-stable/yaacs/admin.tcl 2011-12-16 09:49:11 UTC (rev 2129) +++ branches/external-stable/yaacs/admin.tcl 2011-12-16 10:02:24 UTC (rev 2130) @@ -123,19 +123,15 @@ # # @param db (sampling) database connection handler # @param pj project's id on db -# @param faxserver server to be used to send faxes # @param cover fax template # @return Return 1 on complete success, 0 if some # contacts has failed; -1 on error -proc ::admin::massFax {db pj faxserver cover} { +proc ::admin::massFax {db pj config cover} { #the update you see all over is a really ugly hack - #to update main window status cause admin::massFax is + #to update main window status cause admin::massFax is #blocking - if {[::sendfax::init $faxserver] == -1} { - ::yalog::error "massFax: error in intialization fax process. Please chek your configuration." - return -1 - } + array set conf $config set tab [lindex [::yadb::getTuple $db "select pjtable from projects.projects where proj=$pj" 0] 0] if {$tab == -1} {return -1} @@ -150,6 +146,7 @@ } set ::yadmin::todoFax $countFaxes update + set ::yadmin::doneFax 0 set sqlMass "select rid, cod_com, fax, reference, phone1, name, employee, field from $tab \ where fax is not null and length(btrim(fax)) > 5 and not(fax ilike 'ERR%')" @@ -168,7 +165,22 @@ # send the fax (make sure hylafax user admin should send fax # from the box you run yadmin) - set sentRes [::sendfax::send $dataFax $fax admin] + switch -exact -- $conf(FAX_METHOD) { + hylafax { + set sentRes [::sendfax::send $dataFax $fax admin] + } + mail2fax { + if {([info exists conf(SMTP_LOGIN)] && $conf(SMTP_LOGIN) ne "") && \ + ([info exists conf(SMTP_PWD)] && $conf(SMTP_PWD) ne "")} { + set sentRes [::sendfax::mail2fax $dataFax $fax $conf(FAX_DOMAIN) \ + $conf(FAX_SENDER) $conf(MAIL_SERVER) $tab) \ + $conf(SMTP_LOGIN) $conf(SMTP_PWD)] + } else { + set sentRes [::sendfax::mail2fax $dataFax $fax $conf(FAX_DOMAIN) \ + $conf(FAX_SENDER) $conf(MAIL_SERVER) $tab] + } + } + } if { $sentRes < 0} { ::yalog::error "massFax: error while sending fax for contact (id=$rec(rid);cod_com=$rec(cod_com)) \ for project $pj" @@ -186,7 +198,7 @@ # add a return statement here. } incr ::yadmin::doneFax - update + update idletasks } if {[::yadb::pgSelect $db $sqlMass rec $cmd] < 0} {return -1} Modified: branches/external-stable/yaacs/sendmail.tcl =================================================================== --- branches/external-stable/yaacs/sendmail.tcl 2011-12-16 09:49:11 UTC (rev 2129) +++ branches/external-stable/yaacs/sendmail.tcl 2011-12-16 10:02:24 UTC (rev 2130) @@ -406,11 +406,18 @@ ::mime::setheader $token X-Login $login # Date header is rfc2822 compliant - set res [::smtp::sendmessage $token -servers $email_server -username $smtp_login -password $smtp_pwd \ + if {[catch { + set res [::smtp::sendmessage $token -servers $email_server -username $smtp_login -password $smtp_pwd \ -header [list From $fromaddr] \ -header [list To $toaddr] \ -header [list Subject "$subject"] \ -header [list Date "[clock format [clock seconds] -format "%a, %d %b %Y %H:%M:%S %z"]"]] + } err]} { + ::yalog::error "send email failed: $err" + puts "email_server: $email_server" + set res -1 + } + mime::finalize $token return $res } Modified: branches/external-stable/yadmin.tcl =================================================================== --- branches/external-stable/yadmin.tcl 2011-12-16 09:49:11 UTC (rev 2129) +++ branches/external-stable/yadmin.tcl 2011-12-16 10:02:24 UTC (rev 2130) @@ -226,7 +226,7 @@ -command {::yadmin::define_email_account $db} .mbar.mpj add separator .mbar.mpj add command -image "fax16x16" -label [mc "Massive fax..."] -compound left \ - -command {::yadmin::massiveFax $db $::yadmin::config(FAX_SERVER)} + -command {::yadmin::massiveFax $db} .mbar.mpj add command -image "mail_new16x16" -label [mc "Massive mail..."] -compound left \ -command {::yadmin::massiveMail $db $::yadmin::config(MAIL_SERVER) \ $::yadmin::config(MAIL_SENDER)} @@ -4510,13 +4510,38 @@ # # @param db (sampling) databse connection handler # @param faxserver server to be used to send faxes -proc ::yadmin::massiveFax {db faxserver} { +proc ::yadmin::massiveFax {db} { - if {$faxserver == ""} { - ::dialogs::error . [mc "Fax server undefined"] \ - [mc "A fax server has to be supplied. Please check your configuration."] - return + if {![info exists ::yadmin::config(FAX_METHOD)]} { + ::dialogs::error . [mc "Fax configuration error"] \ + [mc "Missing fax delivery method params (FAX_METHOD)"] + return -1 } + switch -exact -- $::yadmin::config(FAX_METHOD) { + hylafax { + if {(![info exists ::yadmin::config(FAX_SERVER)]) \ + || (![info exists ::yadmin::config(FAX_PORT)]) \ + || [::sendfax::init $::yadmin::config(FAX_SERVER) $::yadmin::config(FAX_PORT)] == -1} { + ::dialogs::error . [mc "Fax configuration error"] \ + [mc "Your installation is not configured to send fax, ask your supervisor to solve the problem"] + return -1 + } + } + mail2fax { + if {(![info exists ::yadmin::config(FAX_SENDER)]) \ + || (![info exists ::yadmin::config(FAX_DOMAIN)]) == -1} { \ + ::dialogs::error . [mc "Fax configuration error"] \ + [mc "Your installation is not configured to send fax, ask your supervisor to solve the problem"] + return -1 + } + } + default { + ::yalog::error "unknown FAX_METHOD values: $::yadmin::config(FAX_METHOD)" + ::dialogs::error . [mc "Fax configuration error"] \ + [mc "Your installation is not configured to send fax, ask your supervisor to solve the problem"] + return -1 + } + } # select the project you want to work on @@ -4540,15 +4565,11 @@ set idPj $survey(proj) set checkLia [::cati::get_lia $db $idPj] - if {$checkLia == 0} { - set path "" - } else { - array set lia $checkLia - if {[array size lia] == 0} { - set path "" - } else { - set path lia(fax) - } + if {$checkLia != 0} {array set lia $checkLia} + + set path "" + if {[info exists lia(fax)] && $lia(fax) ne ""} { + set path "pj fax template defined" } set com $survey(listed) @@ -4567,10 +4588,19 @@ if {$path == "" || $defPath == 0} { set path [tk_getOpenFile -title [mc "Choose alternative fax cover template file"] \ -filetypes [list [list "PostScript Files" *.ps] [list "All Files" *.*]]] - if {$path == ""} {return} + if {$path == ""} { + return + } else { + # they gave us another + # we need to read it + set f [open $path] + set data [read $f] + close $f + set lia(fax) $data + } } - set massive [::yadmin::mFaxStatus $db $idPj $faxserver $path] + set massive [::yadmin::mFaxStatus $db $idPj $lia(fax)] switch -exact -- $massive { -1 { ::dialogs::error . [mc "Connection"] [mc "Unable to establish \ a connection with the faxserver. Please check your configuration and log files."]} @@ -4589,7 +4619,7 @@ # progress status of massive fax operaion ;) # # @param db database connection handler -proc ::yadmin::mFaxStatus {db idPj faxserver cover} { +proc ::yadmin::mFaxStatus {db idPj cover} { set ::yadmin::todoFax 0 set ::yadmin::doneFax 0 @@ -4622,7 +4652,7 @@ focus -force .mfax grab .mfax update - set res [::admin::massFax $db $idPj $faxserver $cover] + set res [::admin::massFax $db $idPj [array get ::yadmin::config] $cover] bind .mfax <Destroy> {} grab release .mfax @@ -5913,6 +5943,9 @@ set proj_table $my_survey(pjtable) array set my_outcomes [::cati::get_outcomes $db] array set my_story [::admin::build_history $db $proj $proj_table] + + puts "outcomes [array size my_outcomes]" + puts "hisotry [array size my_story]" set out "" foreach r [array names my_story] { Modified: branches/external-trunk/yaacs/admin.tcl =================================================================== --- branches/external-trunk/yaacs/admin.tcl 2011-12-16 09:49:11 UTC (rev 2129) +++ branches/external-trunk/yaacs/admin.tcl 2011-12-16 10:02:24 UTC (rev 2130) @@ -123,19 +123,15 @@ # # @param db (sampling) database connection handler # @param pj project's id on db -# @param faxserver server to be used to send faxes # @param cover fax template # @return Return 1 on complete success, 0 if some # contacts has failed; -1 on error -proc ::admin::massFax {db pj faxserver cover} { +proc ::admin::massFax {db pj config cover} { #the update you see all over is a really ugly hack - #to update main window status cause admin::massFax is + #to update main window status cause admin::massFax is #blocking - if {[::sendfax::init $faxserver] == -1} { - ::yalog::error "massFax: error in intialization fax process. Please chek your configuration." - return -1 - } + array set conf $config set tab [lindex [::yadb::getTuple $db "select pjtable from projects.projects where proj=$pj" 0] 0] if {$tab == -1} {return -1} @@ -150,6 +146,7 @@ } set ::yadmin::todoFax $countFaxes update + set ::yadmin::doneFax 0 set sqlMass "select rid, cod_com, fax, reference, phone1, name, employee, field from $tab \ where fax is not null and length(btrim(fax)) > 5 and not(fax ilike 'ERR%')" @@ -168,7 +165,22 @@ # send the fax (make sure hylafax user admin should send fax # from the box you run yadmin) - set sentRes [::sendfax::send $dataFax $fax admin] + switch -exact -- $conf(FAX_METHOD) { + hylafax { + set sentRes [::sendfax::send $dataFax $fax admin] + } + mail2fax { + if {([info exists conf(SMTP_LOGIN)] && $conf(SMTP_LOGIN) ne "") && \ + ([info exists conf(SMTP_PWD)] && $conf(SMTP_PWD) ne "")} { + set sentRes [::sendfax::mail2fax $dataFax $fax $conf(FAX_DOMAIN) \ + $conf(FAX_SENDER) $conf(MAIL_SERVER) $tab) \ + $conf(SMTP_LOGIN) $conf(SMTP_PWD)] + } else { + set sentRes [::sendfax::mail2fax $dataFax $fax $conf(FAX_DOMAIN) \ + $conf(FAX_SENDER) $conf(MAIL_SERVER) $tab] + } + } + } if { $sentRes < 0} { ::yalog::error "massFax: error while sending fax for contact (id=$rec(rid);cod_com=$rec(cod_com)) \ for project $pj" @@ -186,7 +198,7 @@ # add a return statement here. } incr ::yadmin::doneFax - update + update idletasks } if {[::yadb::pgSelect $db $sqlMass rec $cmd] < 0} {return -1} Modified: branches/external-trunk/yadmin.tcl =================================================================== --- branches/external-trunk/yadmin.tcl 2011-12-16 09:49:11 UTC (rev 2129) +++ branches/external-trunk/yadmin.tcl 2011-12-16 10:02:24 UTC (rev 2130) @@ -226,7 +226,7 @@ -command {::yadmin::define_email_account $db} .mbar.mpj add separator .mbar.mpj add command -image "fax16x16" -label [mc "Massive fax..."] -compound left \ - -command {::yadmin::massiveFax $db $::yadmin::config(FAX_SERVER)} + -command {::yadmin::massiveFax $db} .mbar.mpj add command -image "mail_new16x16" -label [mc "Massive mail..."] -compound left \ -command {::yadmin::massiveMail $db $::yadmin::config(MAIL_SERVER) \ $::yadmin::config(MAIL_SENDER)} @@ -4510,13 +4510,38 @@ # # @param db (sampling) databse connection handler # @param faxserver server to be used to send faxes -proc ::yadmin::massiveFax {db faxserver} { +proc ::yadmin::massiveFax {db} { - if {$faxserver == ""} { - ::dialogs::error . [mc "Fax server undefined"] \ - [mc "A fax server has to be supplied. Please check your configuration."] - return + if {![info exists ::yadmin::config(FAX_METHOD)]} { + ::dialogs::error . [mc "Fax configuration error"] \ + [mc "Missing fax delivery method params (FAX_METHOD)"] + return -1 } + switch -exact -- $::yadmin::config(FAX_METHOD) { + hylafax { + if {(![info exists ::yadmin::config(FAX_SERVER)]) \ + || (![info exists ::yadmin::config(FAX_PORT)]) \ + || [::sendfax::init $::yadmin::config(FAX_SERVER) $::yadmin::config(FAX_PORT)] == -1} { + ::dialogs::error . [mc "Fax configuration error"] \ + [mc "Your installation is not configured to send fax, ask your supervisor to solve the problem"] + return -1 + } + } + mail2fax { + if {(![info exists ::yadmin::config(FAX_SENDER)]) \ + || (![info exists ::yadmin::config(FAX_DOMAIN)]) == -1} { \ + ::dialogs::error . [mc "Fax configuration error"] \ + [mc "Your installation is not configured to send fax, ask your supervisor to solve the problem"] + return -1 + } + } + default { + ::yalog::error "unknown FAX_METHOD values: $::yadmin::config(FAX_METHOD)" + ::dialogs::error . [mc "Fax configuration error"] \ + [mc "Your installation is not configured to send fax, ask your supervisor to solve the problem"] + return -1 + } + } # select the project you want to work on @@ -4540,15 +4565,11 @@ set idPj $survey(proj) set checkLia [::cati::get_lia $db $idPj] - if {$checkLia == 0} { - set path "" - } else { - array set lia $checkLia - if {[array size lia] == 0} { - set path "" - } else { - set path lia(fax) - } + if {$checkLia != 0} {array set lia $checkLia} + + set path "" + if {[info exists lia(fax)] && $lia(fax) ne ""} { + set path "pj fax template defined" } set com $survey(listed) @@ -4567,10 +4588,19 @@ if {$path == "" || $defPath == 0} { set path [tk_getOpenFile -title [mc "Choose alternative fax cover template file"] \ -filetypes [list [list "PostScript Files" *.ps] [list "All Files" *.*]]] - if {$path == ""} {return} + if {$path == ""} { + return + } else { + # they gave us another + # we need to read it + set f [open $path] + set data [read $f] + close $f + set lia(fax) $data + } } - set massive [::yadmin::mFaxStatus $db $idPj $faxserver $path] + set massive [::yadmin::mFaxStatus $db $idPj $lia(fax)] switch -exact -- $massive { -1 { ::dialogs::error . [mc "Connection"] [mc "Unable to establish \ a connection with the faxserver. Please check your configuration and log files."]} @@ -4589,7 +4619,7 @@ # progress status of massive fax operaion ;) # # @param db database connection handler -proc ::yadmin::mFaxStatus {db idPj faxserver cover} { +proc ::yadmin::mFaxStatus {db idPj cover} { set ::yadmin::todoFax 0 set ::yadmin::doneFax 0 @@ -4622,7 +4652,7 @@ focus -force .mfax grab .mfax update - set res [::admin::massFax $db $idPj $faxserver $cover] + set res [::admin::massFax $db $idPj [array get ::yadmin::config] $cover] bind .mfax <Destroy> {} grab release .mfax This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <si...@us...> - 2011-12-16 09:49:24
|
Revision: 2129 http://yaacs.svn.sourceforge.net/yaacs/?rev=2129&view=rev Author: sickpig Date: 2011-12-16 09:49:11 +0000 (Fri, 16 Dec 2011) Log Message: ----------- * Commit latest giulia's changes made to yaacs documentation (I did't check those I'm commiting only to avoid to loose rhose modification just in case the wp would be corrupted) Modified Paths: -------------- trunk/docs/user_manual/html/it/yacati.xml trunk/docs/user_manual/html/it/yacco.xml trunk/docs/user_manual/html/it/yachoo.xml trunk/docs/user_manual/html/it/yadmin.xml trunk/docs/user_manual/html/it/yamon.xml trunk/docs/user_manual/pdf/it/yacati.xml Modified: trunk/docs/user_manual/html/it/yacati.xml =================================================================== --- trunk/docs/user_manual/html/it/yacati.xml 2011-12-15 16:46:47 UTC (rev 2128) +++ trunk/docs/user_manual/html/it/yacati.xml 2011-12-16 09:49:11 UTC (rev 2129) @@ -14,9 +14,9 @@ </figure> <para> -La scheda contatto (<xref linkend="yacati_img"/>) puo' essere suddivisa in tre sezioni:</para> +La finestra di Yacati (<xref linkend="yacati_img"/>) si puo' divire in diverse aree.</para> -<section><title>Prima sezione</title> + <!-- immagine prima sezione CAMBIATA--> <figure id="yacati_1st"><title>Yacati - Prima sezione</title> <mediaobject> @@ -27,110 +27,134 @@ </mediaobject> </figure> -Nella prima sezione troviamo: -<section><title>Note del supervisore</title> -<para> -Casella di testo dove un supervisore puo' annotare gli errori che l'intervistatore commette nella conduzione dell'intervista e dare suggerimenti per lo svolgimento delle interviste in modo produttivo.</para> -<para>Naturalmente la scritta rimarra' fin tanto che non correggera' questa sua imperfezione.</para> -<para>Questo inoltre aiuta il lavoro tra supervisori.</para> -<para>In piu', sempre in questo campo, sono riportati fino agli ultimi quattro scarti medi del tasso di risposta dell'intervistatore</para> +<section><title>Info sull'operatore</title> + + <section><title>Note del supervisore</title> + <para>Aiuta il supervisore nel suo lavoro.</para> + <para>Si tratta di un'area di testo posta nella parte inferiore della finestra, dove il supervisore ha la possibilità di segnalare gli eventuali errori commessi dall'intervistatore nella conduzione dell'intervista nonché di dare suggerimenti per migliorare la produttività.</para> + <para>Il messaggio rimane attivo fino a quando il supervisore lo ritenga necessario. </para> + </section> + + <section><title>Produttivita' intervistatore</title> + <para>Le quattro caselle che compaiono in alto a sinistra riportano degli indici sulla produttività dell'intervistatore. Da sinistra a destra troviamo:</para> + <itemizedlist> + <listitem><para>Scarto medio sul tasso di risposta; </para></listitem> + <listitem><para>Scarto medio sul tasso di rifiuto; </para></listitem> + <listitem><para>Scarto medio su appuntamenti / non quota; </para></listitem> + <listitem><para>Scarto medio sul tasso di occupato, libero, risponde fax, segreteria, inesistente; </para></listitem> + </itemizedlist> + <para>Tutti i tassi sono calcolati nell'intervallo di tempo del turno dell'intervistatore con la seguente formula:</para> + <programlisting> + numero di stati x per l'intervistatore - numero medio di casi per lo stato x + </programlisting> + </section> + </section> -<section><title>Produttivita' intervistatore</title> -<para>Le quattro caselle di seguito al campo riservato alle note verso l'intervistatore riportano degli indici di produttivita' dello stesso. Questi sono, da sinistra a destra:</para> -<itemizedlist> -<listitem> <para>Scarto medio sul tasso di risposta; </para> </listitem> -<listitem> <para>Scarto medio sul tasso di rifiuto; </para> </listitem> -<listitem> <para>Scarto medio su appuntamenti / non quota; </para> </listitem> -<listitem> <para>Scarto medio sul tasso di occupato, libero, risponde fax, segreteria, inesistente; </para> </listitem> -</itemizedlist> -<para> -Tutti i tassi sono calcolati nell'intervallo di tempo del turno dell'intervistatore con la seguente formula: -</para> -<programlisting> -numero di stati x per l'intervistatore - numero medio di casi per lo stato x -</programlisting> +<section><title>Riferimenti del contatto</title> + + <section><title>Cod Com</title> + <para>Numero identificativo del comune dove stiamo telefonando.</para> + <para>Ad es 21008 e' il valore che mi identifica il comune di Bolzano. + Se telefonassimo nel comune di Venezia il Cod_Com sarebbe uguale a 27042.</para> + </section> + + <section><title>Num Int</title> + <para>Numero identificativo del contatto.</para> + <para>Ad ogni contatto e' associato un unico Num_Int, dunque non e' possibile trovare due contatti con lo stesso Num_Int. </para> + </section> + </section> -<section><title>Ragione sociale</title> -<para>Nel nostro esempio Tessarollo Mariano; ovvero l'intestatario della linea telefonica.</para> -<para>Per indagini rivolte alla popolazione l'intervista non deve essere rivolta all'intestatario della linea -telefonica ma puo' essere rivolta a qualsiasi persona che ci risponda purche' appartenente all'universo + + +<section><title>Dati del Contatto</title> + + <section><title>Nominativo dell'abbonato o ragione sociale</title> + <para>Questa informazione può apparire o rimanere nascosta (vedi <xref linkend="yadmin"/>), a seconda del target e della modalità di contatto dell'indagine in corso.</para> + <para>Nel nostro esempio il nominativo dell'abbonato è stato oscurato. Per indagini rivolte alla popolazione l'intervista non deve essere rivolta all'intestatario della linea telefonica ma puo' essere rivolta a qualsiasi persona che ci risponda purche' appartenente all'universo di riferimento.</para> -</section> + <para>Se previsto dall'indagine, il nome dell'intestatario compare sopra al numero di telefono.</para> + </section> -<section><title>Telefono 1...4 </title> -<para> -Quattro campi per il recapito telefonico del contatto comprensivi di prefisso.</para> -<para>I primi due campi (Telefono 1 e 2) vengono estratti dall'elenco telefonico o dalla campione importato nel sistema. I rimanenti (Telefono 3 e 4) sono editabili dall'intervistatore e possono essere utilizzati per inserire nuovi recapiti quando, ad esempio, si stanno effettuando indagini su lista di nominativi e si sta cercando una specifica persona.</para> -<para>Questa funzione e' anche molto utile nelle indagini verso aziende, per inserire gli eventuali numeri diretti dei referenti per l'azienda intervistata, raccolti l'intervistatore.</para> -<para>Si puo' scegliere di utilizzare uno qualsiasi dei numeri proposti (a patto che il campo non sia vuoto) semplicemente cliccando nella corrispondente check-box posta affianco ad ogni campo "Telefono".</para> -<para>Cliccando invece sulle etichette "Telefono 1" o "Telefono 2" si oscurano i numeri di telefono importati nel sistema, rendendoli non utilizzabili. Questa procedura e' molto utile se il numero impostato si rivela inesistente o errato.</para> -<para>L'ultimo numero selezionato sara' anche il primo ad essere chiamato nel contatto successivo.</para> -</section> + <section><title>Telefono 1...4 </title> + <para>Quattro campi sono dedicati ai recapiti telefonici del contatto.</para> + <para>I primi due campi (Telefono 1 e 2) sono estratti dalla lista dell'elenco telefonico oppure da liste campione importate nel sistema. I rimanenti campi vuoti (Telefono 3 e 4) sono editabili dall'intervistatore qualora fosse necessario inserire un nuovo numero telefonico ottenuto durante la survey.</para> + <para>Questa funzione e' molto utile nelle indagini verso aziende, per inserire gli eventuali numeri diretti dei referenti per l'azienda intervistata, raccolti dall'intervistatore.</para> + <para>L'intervistatore puo' scegliere di utilizzare uno qualsiasi dei numeri proposti (a patto che il campo non sia vuoto) semplicemente cliccando nella corrispondente check-box posta affianco ad ogni campo "Telefono".</para> + <para>Cliccando invece sulle etichette "Telefono 1" o "Telefono 2" si oscurano i numeri di telefono importati nel sistema, rendendoli non utilizzabili. Questa procedura e' molto utile se il numero impostato si rivela inesistente o errato.</para> + <para>L'ultimo numero chiamato sarà quello pre-selezionato nel contatto successivo.</para> + </section> + + <section><title>Referente</title> + <para>In questo campo troviamo il cognome e il nome del nominativo che si sta cercando, nel caso di indagini su lista o verso aziende.</para> + <para> E' un campo modificabile da parte dell'intervistatore anche nel caso in cui il referente scritto sia sbagliato o variato.</para> + </section> -<section><title>Cod Com</title> -<para> -Valore identificativo del comune dove stiamo telefonando.</para> -<para>Ad es 21008 e' il valore che mi identifica il comune di Bolzano. -Se telefonassimo nel comune di Venezia il Cod_Com sarebbe uguale a 27042.</para> </section> -<section><title>Num Int</title> -<para> -Valore identificativo del contatto.</para> -<para>Ad ogni contatto e' associato un Num_Int, non e' possibile trovare due contatti con lo stesso Num_Int. </para> -</section> -<section><title>E-mail</title> -<para>Inviare una e-mail con questa applicazione e' molto semplice: </para> -<para>nella casella e-mail si scrive indirizzo e-mail, si clicca sul pulsante Invia Mail e la mail sara' inviata; se tutto procede senza intoppi vi verra' mostrato un messaggio di successo. </para> -<para>Il testo del messaggio viene impostato automaticamente e viene deciso dall'amministratore dell'indagine<xref linkend="yadmin"/>. A questo punto, l'e-mail e' stata inviata e lo stato del contatto e' stato impostato a FaxMailSpedito, inoltre il sistema avra' provveduto al salvataggio automatico dei dati e bastera' cliccare su nuovo contatto per avere il nuovo nominativo da contattare.</para> -</section> -<section><title>Fax</title> -<para> -Nelle indagini rivolte alle aziende c'e' la possibilita' di inviare un fax di presentazione.</para> -<para>Come ci si comporta nel caso si contatti l'azienda e ci rispondano?</para> -<para>Due sono le possibilita':</para> -<itemizedlist> -<listitem><para>Se il referente dell'azienda e' disponibile a fare l'intervista, in qual caso si fa l'intervista.</para></listitem> -<listitem><para>Se il referente non c'e' o non e' disponibile a fare l'intervista allora si invia un fax di presentazione.</para></listitem> -</itemizedlist> -<para>Affinche' un fax venga inviato correttamente devono essere riempiti i campi Referente e Fax, in caso contrario ci verra' segnalato un messaggio di errore. Inviare un fax con questa applicazione e' molto semplice, cliccando sul pulsante Invia Fax il fax sara' inviato e se tutto procede senza intoppi vi verra' mostrato un messaggio di successo. </para> -<para>A questo punto, il fax e' stato inviato e lo stato del contatto e' stato impostato a FaxMailSpedito, inoltre il sistema avra' provveduto al salvataggio automatico dei dati e la maschera che verra' proposta sara' quella iniziale (<xref linkend="yacati"/>) e quindi sara' possibile procedere con il prossimo contatto.</para> -<para>Questo nominativo ritornera' esattamente dopo un'ora. Sara' allora compito dell'intervistatore chiedere la conferma dell'arrivo del fax e fissare un appuntamento.</para> -<para>Nel caso in cui il fax non possa essere spedito per un errore di trasmissione (o quant'altro) l'operatore che selezionera' il nominativo sara' informato del fatto; Nella casella fax, infatti, verra' riportato oltre al numero prima inserito anche il messaggio "FAX ERRATO".</para> -<para>Essendo l'invio del fax uno stato del contatto non e' possibile impostare nessun altro stato. Ad esempio non e' possibile inviare il fax e contemporaneamente fissare un appuntamento.</para> -<para>E' possibile pero' inviare il fax successivamente il completamento del questionario semplicemente cliccando la check-box "Fax su Risponde": quando l'intervistatore salvera' il contatto con il relativo stato il sistema procedera' all'invio del fax.</para> -</section> +<section><title>Letter in Advance</title> -<section><title>Invia un SMS</title> -Se nel campo "cellulare" e' stato immesso un numero di cellulare valido, cliccando questo pulsante, Yacati invia un messaggio di testo sms a quel numero contenente il testo inserito nei dettagli del progetto in Yadmin. -</section> + <section><title>E-mail</title> + <para>Inviare una e-mail con questa applicazione e' molto semplice. </para> + <para>Nel campo accanto alla voce <emphasis>Email</emphasis> l'intervistatore può scrivere l'indirizzo email, se non è già presente, e poi cliccare su “Invia Email”. Se non vi sono errori, apparirà un messaggio che informa sul successo dell'invio. </para> + <para>Il testo del messaggio viene impostato automaticamente e viene deciso dall'amministratore dell'indagine (<xref linkend="yadmin"/>). Una volta inviata l'email, il contatto viene classificato come “FaxEmail spedito” e i dati del contatto vengono salvati automaticamente.</para> + </section> + <section><title>Fax</title> + <para>Nelle indagini rivolte alle aziende c'e' la possibilita' di inviare un fax di presentazione.</para> + <para>Come ci si comporta nel caso si contatti l'azienda e ci rispondano?</para> + <para>Due sono le possibilita':</para> + <itemizedlist> + <listitem><para>Se il referente dell'azienda c'è ed e' disponibile si fa dorettamente l'intervista.</para></listitem> + <listitem><para>Se il referente non c'e' o non e' disponibile a fare l'intervista allora si invia un fax di presentazione.</para></listitem> + </itemizedlist> + <para>Affinche' un fax venga inviato correttamente devono essere riempiti i campi Referente e Fax, in caso contrario verra' segnalato un messaggio di errore. Inviare un fax con questa applicazione e' molto semplice, cliccando sul pulsante Invia Fax il fax sara' inviato e se tutto procede senza intoppi verra' mostrato un messaggio di successo. </para> + <para>A questo punto, il fax e' stato inviato e lo stato del contatto e' stato classificato come FaxMailSpedito; il sistema avra' inoltre provveduto al salvataggio automatico dei dati e la maschera che verra' proposta sara' quella iniziale (<xref linkend="yacati"/>) consentendo di procedere con il prossimo contatto.</para> + <para>Questo nominativo ritornera' esattamente dopo un'ora. Sara' allora compito dell'intervistatore chiedere la conferma dell'arrivo del fax e fissare un appuntamento.</para> + <para>Nel caso in cui il fax non possa essere spedito per un errore di trasmissione (o quant'altro) l'operatore che selezionera' il nominativo sara' informato del fatto: nella casella fax verra' riportato oltre al numero inserito anche il messaggio "FAX ERRATO".</para> + <para>Essendo l'invio del fax uno stato del contatto non e' possibile impostare nessun altro stato. Ad esempio non e' possibile inviare il fax e contemporaneamente fissare un appuntamento.</para> + <para>E' possibile pero' inviare il fax successivamente il completamento del questionario semplicemente cliccando la check-box <emphasis>Fax su Risponde</emphasis>: quando l'intervistatore salvera' il contatto con il relativo stato <emphasis>Ha Risposto</emphasis> il sistema procedera' all'invio del fax.</para> + </section> -<section><title>Referente</title> -<para>In questo campo troviamo il cognome e il nome del nominativo che si sta cercando, nel caso di indagini su lista o verso aziende.</para> -<para> E' un campo modificabile da parte dell'intervistatore anche nel caso in cui il referente scritto sia sbagliato o variato.</para> -</section> + <section><title>Invia un SMS</title> + <para>Se nel campo "Cellulare" e' stato immesso un numero di cellulare valido, cliccando questo pulsante, Yacati invia un messaggio di testo sms a quel numero contenente il testo inserito nei dettagli del progetto in Yadmin.</para> + </section> -<section><title>Ultimo stato del contatto</title> -<para> -Come in figura di esempio (<xref linkend="yacati_1st"/>) questo campo e' occupato dalla scritta "Occ: 14/Jan - 16:11". Indica come e' stato classificato il contatto l'ultima volta che questo e' stato contattato e data e ora di ritorno programmato.</para> -</section> +</section> -<section><title>Ripartizione Geografica</title> -<para> -Spazio dedicato all'indicazione geografica del contatto visualizzato, in questo caso "Zona 1_2_5", ma puo' contenere il nome della regione o della provincia.</para> + + + +<section><title>Ultimo stato del contatto e Info Geografica</title> + + <section><title>Ultimo stato del contatto</title> + <para>Come in figura di esempio (<xref linkend="yacati_1st"/>) questo campo e' occupato dalla scritta "Occ: 14/Jan - 16:11". Indica come e' stato classificato il contatto l'ultima volta che e' stato contattato e data e ora di ritorno programmato.</para> + </section> + + <section><title>Ripartizione Geografica</title> + <!-- probabilmente si può togliere, o è ancora in via sperimentale?--><para>Spazio dedicato all'indicazione geografica del contatto visualizzato, in questo caso "Zona 1_2_5", ma puo' contenere il nome della regione o della provincia.</para> + </section> + </section> <!-- FINE PRIMA SEZIONE --> + + + + + + +<!-- SECONDA SEZIONE --> + +<section><title>La tabella delle quote</title> + <para>Nella parte superiore della finestra compare la tabella delle quote. Quando, nel corso dell'indagine cominciano a chiudersi le quote compare la scritta “NO” in corrispondenza del genere e della fascia d'età di cui si è raggiunto il numero di interviste previste. La tabella cambia di contatto in contatto a seconda dell'appartenenza geografica del contattato.</para> </section> - -<section><title>Seconda Sezione: Dati Anagrafici</title> +<!--<section><title>Seconda Sezione: Dati Anagrafici</title> <figure id="yacati_2nd"><title>Yacati - Dati Anagrafici</title> <mediaobject> <imageobject> @@ -140,12 +164,19 @@ </mediaobject> </figure> <para>La sezione "Dati Anagrafici" dell'intervistato viene utilizzata per salvare i dati anagrafici della persona che ha risposto al questionario.</para> -<para>Quando una persona risponde all'intervista, dopo aver completato il questionario e' necessario registrare i suoi dati anagrafici: selezionare il pulsante relativo al genere dell' intervistato (Maschio o Femmina) rendendolo attivo, immettere l'anno di nascita scrivendo il valore corrispondente nella casella Anno di nascita in quattro cifre (ad esempio 1960) oppure selezionare lo stesso valore scegliendolo tra quelli presentata aprendo il menu' a tendina del campo.</para> +<para>Quando una persona risponde all'intervista, dopo aver completato il questionario e' necessario registrare i suoi dati anagrafici: selezionare il pulsante relativo al genere dell' intervistato (Maschio o Femmina) rendendolo attivo, immettere l'anno di nascita scrivendo il valore corrispondente nella casella Anno di nascita in quattro cifre (ad esempio 1960).</para> <para>Le caselle "Disponibilita' a partecipare ad altre interviste", "Attivita'" e "Titolo di Studio" possono essere utilizzate per rilevare ulteriori dati sull'intervistato necessari ad altre analisi di post-stratificazione del campione.</para> + +</section>--> + + <!-- FINE SECONDA SEZIONE--> -</section> -<section><title>Terza Sezione: Informazione sulla Schedulazione</title> + + +<!-- TERZA SEZIONE --> + + <figure id="yacati_3rd"><title>Yacati - Informazioni sulla Schedulazione</title> <mediaobject> <imageobject> @@ -154,78 +185,75 @@ <textobject><phrase>Yacati - Informazioni sulla Schedulazione</phrase></textobject> </mediaobject> </figure> -<para>Nella terza sezione "Informazioni sulla Schedulazione" troviamo: </para> - <section><title>Stato del contatto</title> - <para>Nello stato del contatto sono riportati tutti i vari esiti di una telefonata, si veda <xref linkend="yacati_stati"/>.</para> - <para>Dopo aver chiamato un numero di telefono, ed aver completato la telefonata, si deve impostare lo stato del contatto appena effettuato scegliendone uno di quelli possibili e visualizzati quando si apre la casella Stato del contatto. Gli stati e i relativi comportamenti sono elencati di seguito:</para> + + + +<section><title>Stato del contatto</title> + + <para>Nell'area "Stato del contatto" troviamo un pulsante per ogni esito possibile di una telefonata. Si veda <xref linkend="yacati_stati"/>.</para> + <para>Se la funzione autocall e' abilitata vengono passati all'intervistatore solo i contatti esistenti e liberi; i numeri inesistenti e quelli occupati vengono gestiti automaticamente dal sistema Yaacs; e' automatica anche la classificazione del contatto come "Libero" dopo 20 secondi. </para> + <para>Dopo aver concluso la telefonata l'intervistatore deve classificarne l'esito utilizzando l'elenco degli stati del contatto presente nella parte sinistra della finestra, secondo i criteri seguenti:</para> <itemizedlist> - <listitem><para>Occupato: Il numero di telefono risulta essere occupato, allora imposto la casella Stato del contatto con il valore "Occupato" scegliendolo dalla lista dei possibili valori presentati sul menu' a discesa. A questo punto tale numero sara' richiamato automaticamente dopo un certo tempo;</para> - <para>Attenzione il richiamo del contatto (tranne per l'appuntamento) puo' essere effettuato da uno qualsiasi degli intervistatori e non necessariamente da chi lo ha chiamato la prima volta!</para> - <para>A questo scopo e' utile leggere le informazioni riportate sulla Storia del contatto.</para></listitem> - <listitem><para>Libero: Il numero di telefono suona a vuoto senza che nessuno risponda, in questo caso si imposta a Libero lo stato del contatto. Anche in questo caso il contatto sara' rieffettuato in un secondo momento. Per classificare un contatto come libero e' sufficiente attendere 4 -5 squilli del telefono chiamato.</para></listitem> - <listitem><para>RispondeFax: Il numero composto corrisponde ad un numero di fax, imputanto questa modalita' il contatto non verra' piu' riproposto.</para></listitem> - <listitem><para>Segreteria: Se risponde una segreteria telefonica bastera' selezionare Segreteria per lo stato del contatto e questo numero sara' ripresentato piu' tardi.</para></listitem> - <listitem><para>Inesistente: Quando il numero di telefono risulta essere inesistente allora il valore dello stato del contatto andra' impostato di conseguenza ed il contatto non verra' piu' ripresentato. </para></listitem> - <listitem><para>Rifiuta: -La persona contattata si rifiuta di rispondere al questionario.</para> -<para>La persona contattata non e' in grado di rispondere perche' non parla italiano (ad esempio parla solo dialetto o e' del Sud-Tirolo).</para> -<para>La persona contattata non e' in grado di capire le domande ma e' fra le persone da intervistare.</para> -<para>La persona e' irrintracciabile nell'orario di intervista (ad esempio si hanno turni di intervista dalle 13.45 alle 21.30 ma l'intervistato si trova solo alla mattina) o nel periodo di intervista (ad esempio l'indagine dura una settimana e la persona e' irragiungibile per un mese).</para> -<para>In questi casi annoteremo come stato del contatto Rifiuta. Anche in questo caso il contatto non verra' piu' ripresentato. </para></listitem> - <listitem><para>NonQuota: vanno salvati come "Non Quota" i contatti che non rientrano nell'universo delle persone da intervistare: fasce di popolazione escluse dall'indagine per quote concluse o non corrispondenti al profilo ricercato.</para> - <para>Inoltre, ad esempio numeri di telefono corrispondenti ad aziende se stiamo intervistando la popolazione italiana, oppure numeri corrispondenti ad abitazioni se stiamo intervistando aziende.</para></listitem> - <listitem><para>Risponde: La persona contattata ha risposto al questionario.</para></listitem> - </itemizedlist> - <figure id="yacati_stati"><title>Yacati - Stati del contatto</title> + <listitem><para>Occupato: la linea risulta occupata. L'intervistatore selezionera' questo comando dal menu. Il contatto telefonico verra' riproposto dal sistema dopo alcuni minuti, decisi dall'amministratore.</para> + <para>Attenzione il richiamo del contatto (tranne per l'appuntamento) puo' essere effettuato da uno qualsiasi degli intervistatori e non necessariamente da chi lo ha chiamato la prima volta!</para></listitem> + <listitem><para>Libero: l'intervistatore classifichera' cosi' il contatto quando nessuno risponde al telefono. Lo stesso contatto verra' proposto successivamente (es. un'ora). Per classificare un contatto come libero e' sufficiente attendere 4-5 squilli, dopo i quali il sistema automaticamente passera' ad un nuovo numero.</para></listitem> + <listitem><para>Risponde Fax: si tratta di un numero di fax; il contatto cosi' classificato non verra' piu' riproposto.</para></listitem> + <listitem><para>Segreteria Telefonica: con questa classificazione il contatto verra' riproposto piu' tardi, dopo un periodo di tempo deciso dall'amministratore (es. un'ora).</para></listitem> + <listitem><para>Inesistente: il numero di telefono risulta essere inesistente cosi' classificato non verra' mai piu' riproposto. </para></listitem> + <listitem><para>Rifiuta: i contatti cosi' classificati non verranno piu' proposti durante il corso dell'indagine. I casi di rifiuto sono i seguenti.</para> + <para>La persona contattata e' intervistabile, ma non vuole rispondere al questionario.</para> + <para>La persona contattata non e' in grado di rispondere perche' non parla italiano (ad esempio parla solo dialetto o e' del Sud-Tirolo).</para> + <para>La persona contattata non e' in grado di capire le domande ma e' fra le persone da intervistare.</para> + <para>La persona e' irrintracciabile nell'orario di intervista (ad esempio l'intervistato e' disponibile solo la mattina per un'indagine pomeriggio-sera) o nel periodo di intervista (ad esempio l'indagine dura una settimana e la persona e' irragiungibile per un mese).</para></listitem> + <listitem><para>Non Quota: vanno salvati come "Non Quota" i contatti che non rientrano nell'universo delle persone da intervistare: fasce di popolazione escluse dall'indagine per quote concluse o non corrispondenti al profilo ricercato.</para> + <para>Inoltre, ad esempio numeri di telefono corrispondenti ad aziende se stiamo intervistando la popolazione italiana, oppure numeri corrispondenti ad abitazioni se stiamo intervistando aziende.</para></listitem> + <listitem><para>Risponde: quando una persona risponde all'intervista, dopo aver completato il questionario e' necessario registrare i suoi dati anagrafici: selezionare il pulsante relativo al genere dell' intervistato (Maschio o Femmina) rendendolo attivo, immettere l'anno di nascita scrivendo il valore corrispondente nella casella Anno di nascita in quattro cifre, ad esempio 1960.</para></listitem> + <listitem><para>Appuntamento: se l'intervistato desidera essere ricontattato in un altro momento nel periodo di durata dell'indagine, l'intervistatore dovra' cliccare due volte sul pulsante corrispondente.</para> + <para>Comparira' una prima finestra con un calendario da dove viene selezionato il giorno in cui il contattato desidera essere intervistato. Cliccando su <emphasis>Prossimo</emphasis> compare la seconda finestra in cui si deve inserire l'ora (hh:mm); infine cliccando ancora una volta su <emphasis>Prossimo</emphasis> una terza finestra chiedera' il nome di battesimo, il genere e l'anno di nascita del contattato. Per confermare l'appuntamento cliccare su <emphasis>Salva</emphasis> altrimenti su <emphasis>Cancella</emphasis> per modificare i dati inseriti (<xref linkend="yacati_app"/>).</para> + + <figure id="yacati_app"><title>Yacati - Finestra per Appuntamenti</title> <mediaobject> <imageobject> - <imagedata fileref="images/yacati_stati.png"/> + <imagedata fileref="images/yacati_app.png"/> </imageobject> - <textobject><phrase>Yacati - Stati del contatto</phrase></textobject> + <textobject><phrase>Yacati - Finestra per Appuntamenti</phrase></textobject> </mediaobject> </figure> - </section> + + <para>Se si cerca di prendere appuntamento in un giorno in cui non sono stati impostati i turni, Yacati segnalera' un errore.</para> - <section><title>Tentativo</title> - <para> - Visualizza il numero di volte che e' gia' stato contattato tale numero. -Nell' esempio e' la seconda volta che contattiamo questo numero di telefono.</para> - </section> + <para>Se il pulsante Appuntamento appare disabilitato, significa che non si possono piu' prendere appuntamenti per quel contatto poiche' si e' raggiunto il numero di tentativi massimo previsto dall'amministratore per ogni contatto.</para></listitem> - <section><title>Risponde</title> - <para> - Questo bottone apre il browser all'indirizzo del questionario in formato elettronico, definito nelle impostazioni dell'indagine, permettendo all'intervistatore la sottoposizione delle domande.</para> - </section> + </itemizedlist> - <section><title>Appuntamento</title> - <para>Si utilizza per fissare un appuntamento.</para> -<para>Per fissare un appuntamento e' necessario cliccare sul bottone "Appuntamento" che fara' comparire una maschera dove e' possibile immettere tutti i dati riguardanti un appuntamento (<xref linkend="yacati_app"/>), quali la data e l'ora in cui richiamare e il nome, il genere e l'anno di nascita della persona per la quale si e' preso.</para> - <figure id="yacati_app"><title>Yacati - Finestra per Appuntamenti</title> + <figure id="yacati_stati"><title>Yacati - Stati del contatto</title> <mediaobject> <imageobject> - <imagedata fileref="images/yacati_app.png"/> + <imagedata fileref="images/yacati_stati.png"/> </imageobject> - <textobject><phrase>Yacati - Finestra per Appuntamenti</phrase></textobject> + <textobject><phrase>Yacati - Stati del contatto</phrase></textobject> </mediaobject> </figure> - <para> - La data e l'ora in cui richiamare vengono gia' impostate con la data e l'ora attuale, tali parametri possono essere cambiati selezionando i valori disponibili ed elencati dalle varie caselle. Inoltre vanno inseriti il nome, anno di nascita e il genere della persona per cui si prende l'appuntamento.</para> - <para>Per annullare l'operazione basta cliccare Cancel mentre per confermare di voler prendere un appuntamento con i parametri immessi cliccare su Ok. In quest'ultimo caso verra visualizzata un' altra maschera che riporta i dati da noi inseriti se tutto e' apposto allora basta cliccare ancora su Ok e la finestra viene chiusa e l'appuntamento e il contatto vengono salvati altrimenti si puo' cliccare su Cancel e modificare i dati.</para> - <para>Se il pulsante Appuntamento appare disabilitato, significa che non si possono piu' prendere appuntamenti per quel contatto poiche' si e' arrivati alla soglia massima per quanto riguarda il numero di volte che si puo' contattare la stessa persona.</para> </section> + + <section><title>Tentativo</title> + <para>Visualizza il numero di volte che e' gia' stato contattato tale numero. Nell' esempio e' la seconda volta che contattiamo questo numero di telefono.</para> + </section> + + <section><title>Inizia</title> - <para>Cliccando su "Inizia" e' possibile iniziare una nuova sessione di lavoro senza riavviare il terminale dell'operatore. Il bottone sara' abilitato solamente se non e' presente nessuna sessione di lavoro attiva.</para> + <para>Cliccando su "Inizia" e' possibile iniziare una nuova sessione di lavoro senza riavviare il terminale dell'operatore. Il bottone sara' abilitato solamente se non e' presente nessuna sessione di lavoro attiva.</para> </section> - <section><title>Nuovo Contatto e Salva</title> - <para>Dopo avere contattato un nominativo e aver riportato l'esito nello stato del contatto e' necessario salvare tali informazioni cliccando appunto su "Salva". A questo punto la maschera viene svuotata e per selezionare un nuovo numero di telefono sara' necessario cliccare su "Nuovo Contatto". In questo modo la finestra si popolera' dei nuovi dati relativi al contatto.</para> - </section> + <!--<section><title>Nuovo Contatto e Salva</title> + <para>Dopo avere contattato un nominativo e aver riportato l'esito nello stato del contatto e' necessario salvare tali informazioni cliccando appunto su "Salva". A questo punto la maschera viene svuotata e per selezionare un nuovo numero di telefono sara' necessario cliccare su "Nuovo Contatto". In questo modo la finestra si popolera' dei nuovi dati relativi al contatto.</para> + </section>--> <section><title>Fine</title> - <para>Cliccando su "Fine" si termina la sessione di lavoro attiva. Comparira' quindi la schermata in <xref linkend="yacati_fine"/> contenente i dati relativi al turno di lavoro.</para> -<para> Se sono stati rilevati dei problemi nella registrazione del turno comparira' un avviso e cliccando si "Dettagli" si avranno maggiori informazioni sull'accaduto.</para> + <para>L'icona Fine determina la fine della sessione di lavoro. Comparira' quindi la schermata in <xref linkend="yacati_fine"/> contenente i dati relativi al turno di lavoro (ora di inizio e fine, numero di ore lavorate e di interviste fatte, pausa utilizzata ed eventualmente la penalita').</para> + <figure id="yacati_fine"><title>Yacati - Fine turno di lavoro</title> <mediaobject> <imageobject> @@ -234,9 +262,11 @@ <textobject><phrase>Yacati - Fine turno di lavoro</phrase></textobject> </mediaobject> </figure> + </section> <section><title>Pausa</title> + <para>Cliccando su "Pausa" inizia il periodo di pausa concesso all'intervistatore, secondo i tempi impostati dall'amministratore.</para> <para>A pausa iniziata comparira' la finestra in <xref linkend="yacati_pausa"/> riportante l'ora di inizio del periodo. Per riprendere il lavoro e' sufficiente cliccare "Ricomincia" nella finestra.</para> <figure id="yacati_pausa"><title>Yacati - Inizio turno di pausa</title> @@ -247,9 +277,10 @@ <textobject><phrase>Yacati - Inizio turno di pausa</phrase></textobject> </mediaobject> </figure> - <para> - Nel caso in cui l'intervistatore superi il limite di minuti concesso di pausa, al tentativo di riprendere il lavoro verra' visualizzato un messaggio di errore che informa dell'accaduto (<xref linkend="yacati_stop"/>). L'intervistatore non potra' continuare il lavoro finche' non verra' sbloccato dal supervisore. + + <para> Nel caso in cui l'intervistatore superi il limite di minuti concesso di pausa, al tentativo di riprendere il lavoro verra' visualizzato un messaggio di errore che informa dell'accaduto (<xref linkend="yacati_stop"/>). L'intervistatore non potra' continuare il lavoro finche' non verra' sbloccato dal supervisore. </para> + <figure id="yacati_stop"><title>Yacati - Superato limite di tempo</title> <mediaobject> <imageobject> @@ -258,20 +289,20 @@ <textobject><phrase>Yacati - Superato il limite di tempo</phrase></textobject> </mediaobject> </figure> + </section> <section> <title>Storia contatti</title> - <para> - In questa casella sono riportati gli stati precedentemente salvati relativi al contatto aperto.</para> - <para>Viene visualizzato il numero progressivo del contatto, lo stato relativo (Libero, Occupato,...) e tra parentesi il numero di telefono selezionato (tel1,...,tel4) e la login dell'operatore che ha effettuato la chiamata.</para> + <para>In questa casella sono riportati gli stati precedentemente salvati relativi al contatto aperto.</para> + <para>Viene visualizzato il numero progressivo del contatto, lo stato relativo (Libero, Occupato,...) e tra parentesi la login dell'operatore che ha effettuato la chiamata.</para> </section> <section><title>Note</title> <para>Il campo "Note" e' editabile dall'intervistatore ed e' utile nel caso voglia lasciare annotazioni ad uso successivo relativi al contatto aperto.</para> </section> -</section> + <section><title>Voip status bar </title> <para> Se nel client sono attive le funzionalita' voip, sul fondo della finestra comparira' una barra addizionale contenente informazioni sul processo di chiamata in corso come il numero selezionato e lo stato di avanzamento (accettato dal server, in progress, risposta o l'eventuale stato rilevato).</para> Modified: trunk/docs/user_manual/html/it/yacco.xml =================================================================== --- trunk/docs/user_manual/html/it/yacco.xml 2011-12-15 16:46:47 UTC (rev 2128) +++ trunk/docs/user_manual/html/it/yacco.xml 2011-12-16 09:49:11 UTC (rev 2129) @@ -1,18 +1,364 @@ <!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.4//EN" "http://www.oasis-open.org/docbook/xml/4.4/docbookx.dtd"> + <chapter id="yacco"><title>Yacco</title> -<para>Lo scopo di questa applicazione e' di gestire completamente la figura dell'intervistatore, dal momento in cui il suo nominativo viene registrato nel database al momento in cui la sua attivita' lavorativa come intervistatore termina e viene quindi eliminato dal database.</para> -<para>Oltre alle azioni di inserimento e di rimozione, Yacco offre anche altre funzioni come ad esempio la gestione delle disponibilita' degli intervistatori e la possibilita' di contatto, via sms, con l'intervistatore.</para> +<para> Il programma e' diviso in due sezioni principali: la prima (Interviewers) e' dedicata alla gestione degli intervistatori mentre attraverso la seconda (Projects) vengono in parte gestiti i progetti. </para> +<para> Ci occuperemo prima della sezione dedicata agli intervistatori e successivamente di quella relativa ai progetti. </para> + +<section><title><emphasis>Interviewers</emphasis></title> + +<para>Lo scopo di questa applicazione e' quello di gestire completamente la figura dell'intervistatore, dal momento in cui il suo nominativo viene registrato nel database al momento in cui la sua attivita' lavorativa come intervistatore termina e viene quindi eliminato dal database.</para> + +<para>Per comodita' di esposizione dividiamo in tre sezioni la pagina che visualizziamo cliccando su <emphasis>Interviewers</emphasis>:</para> + + +<orderedlist numeration="upperroman"> + +<listitem><para>nella barra degli strumenti in alto a destra quattro voci: <emphasis>Search</emphasis> per visualizzare la pagina iniziale, <emphasis>New</emphasis> per l'inserimento di un nuovo intervistatore, <emphasis>Sms to list</emphasis> per spedire un sms ad una lista selezionata di intervistatori infine <emphasis>Types</emphasis> utile alla classificazione degli intervistatori sulla base della tipologia definita dall'amministratore;</para></listitem> + +<listitem><para>nella parte a sinistra della pagina l'elenco degli intervistatori registrati nel database per cognome, nome e punteggio attribuito dall'amministratore sulla base della produttivita' di ciascuno. Accanto ad ognuno compaiono inoltre le voci <emphasis>Show</emphasis>, <emphasis>Edit</emphasis>, <emphasis>Delete</emphasis>, <emphasis>Sms</emphasis>, <emphasis>Project</emphasis> e <emphasis>Call</emphasis> che corrispondono a varie azioni che vedremo in seguito;</para></listitem> + +<listitem><para>infine, sempre nella parte destra della pagina, gli strumenti Go (Advanced Search), Sms to them e Sms to selection.</para></listitem> + +</orderedlist> + + + +<!-- PARTE PRIMA --> + +<section><title>Prima sezione</title> +<para>Le voci sono le seguenti:</para> + +<itemizedlist mark="opencircle"> + +<listitem><para><emphasis>Search</emphasis>: consente di tornare alla pagina iniziale;</para></listitem> +<listitem><para><emphasis>New</emphasis>: permette l'inserimento di un nuovo intervistatore attraverso la compilazione delle seguenti voci:</para> + + <itemizedlist> + <listitem><para><emphasis>Main</emphasis>: i campi obbligatori sono constrassegnati da un asterisco (cognome, nome, numero di cellulare, codice fiscale e log in); inoltre e' obbligatorio anche il campo "Tipologia" che si trova a destra della finestra.</para> + <para>Se si inseriscono correttamente tutte le informazioni anagrafiche e' possibile calcolarne il codice fiscale premendo il pulsante "build".</para> + <para><emphasis>Attenzione: nonostante il codice fiscale generato da questo programma rispetti il D.M. del 12.3.1974, non e' possibile stabilirne l'esattezza assoluta poiche' esistono casi di persone con stesso nome e cognome, nate nello stesso comune e nello stesso giorno, e che quindi avrebbero codici fiscali identici: in tale evenienza il Ministero delle Finanze provvede alla sostituzione di uno dei numeri con la lettera progressiva.</emphasis></para> + <para>Per procedere con la registrazione del nuovo intervistatore, e' necessario cliccare sul nome delle sezioni successive. </para> + </listitem> + <listitem><para><emphasis>Contacts</emphasis>: vengono richiesti i dati relativi alla residenza e ad altri contatti telefonici oltre al cellulare. Nella casella "Note" si possono scrivere osservazioni, richiami o consigli che verranno visualizzati dall'intervistatore nel client YaaCs durante la sessione di lavoro.</para></listitem> + <listitem><para><emphasis>Bank</emphasis>: richiede il numero di conto corrente per effettuare il pagamento.</para></listitem> + <listitem><para><emphasis>Availability</emphasis>: si definisce la disponibilita' dell'intervistatore sia per quanto concerne i turni (bastera' spuntare le voci mattina pomeriggio sera) che la data a partire dalla quale e' disponibile a lavorare (il valore predefinito corrisponde alla data di inserimento, ma puo' essere variato). </para></listitem> + <listitem><para>Altre informazioni sull'intervistatore sono visibili e modificabili dall'elenco a destra della finestra tra cui: </para> + + <itemizedlist> + <listitem><para><emphasis>Score</emphasis>, ossia la rappresentazione numerica della valutazione sul lavoro svolto dall'intervistatore (50 e' il valore predefinito ma puo' essere modificato dall'amministratore);</para></listitem> + <listitem><para><emphasis>Active</emphasis>, da spuntare se l'intervistatore e' disponibile a lavorare;</para></listitem> + <listitem><para><emphasis>Tech Train</emphasis>, per segnalare se ha seguito la formazione necessaria allo svolgimento del lavoro;</para></listitem> + <listitem><para><emphasis>Salary</emphasis>, ossia la paga oraria prevista;</para></listitem> + <listitem><para><emphasis>Types</emphasis>, indica il tipo di indagini per cui l'intervistatore puo' operare (es. Telefonico, Vis a vis ...);</para></listitem> + </itemizedlist> + </listitem> + + </itemizedlist> + </listitem> + +<listitem><para><emphasis>Sms to list</emphasis>: consente l'invio di sms ad una lista di numeri di cellulare riportati su un file .txt, a intervistatori non ancora inseriti nel database. Dopo aver scritto il testo del messaggio e selezionato il file con i numeri di cellulare con l'icona <emphasis>Sfoglia</emphasis>, sara' sufficiente cliccare su <emphasis>Upload</emphasis> per procedere all'invio del sms; </para></listitem> +<listitem><para><emphasis>Types</emphasis>: fornisce l'elenco delle tipologie di intervistatore gia' create con la possibilita' di cancellarle e di crearne di nuove.</para></listitem> + +</itemizedlist> +</section> + + + +<!-- PARTE SECONDA --> + +<section><title>Seconda Sezione</title> + +<para>Le azioni che consentono di gestire singolarmente ogni intervistatore gia' inserito nel database sono descritte di seguito:</para> + +<itemizedlist> + +<listitem><para><emphasis>Show</emphasis>: permette di visualizzare i seguenti dettagli dell'intervistatore: +</para> + + <itemizedlist> + + <listitem><para><emphasis>Main</emphasis>: i dati anagrafici. + </para></listitem> + + <listitem><para><emphasis>Contact</emphasis>: la residenza. + </para></listitem> + + <listitem><para><emphasis>Bank</emphasis>: gli estremi del conto corrente. + </para></listitem> + + <listitem><para><emphasis>Availability</emphasis>: la disponibilita' dell'intervistatore. + </para></listitem> + + <listitem><para><emphasis>Project</emphasis>: cliccando su questo pulsante compare una pagina divisa in due aree: in quella in alto sono elencate le indagini in corso, mentre in quella sottostante le indagini a cui l'intervistatore e' associato (sara' vuota nel caso in cui l'intervistatore non sia associato a nessun progetto).</para> <para>Affinche' l'intervistatore possa lavorare e' necessario che venga collegato ad un'indagine, trascinando l'icona dell'indagine nell'area sottostante. Per scollegare l'intervistatore dall'indagine e' sufficiente trascinare l'icona della stessa nel cestino. + </para></listitem> + + <listitem><para><emphasis>Sms</emphasis>: si utilizza questa opzione quando si vuole effettuare una particolare comunicazione via sms ad un intervistatore. Compare cosi' una maschera vuota da compilare con il testo del messaggio con un contatore che mostra il numero di caratteri rimanenti. Per inviarlo premere <emphasis>Invia</emphasis>. + </para></listitem> + + <listitem><para><emphasis>Contract</emphasis>: per stampare il contratto di lavoro tra l'azienda e l'intervistatore precompilato. Quando si attiva questa procedura, Yacco stampa il file "conve_temp.txt", parametrizzandolo con le informazioni sull'intervistatore. Per fare in modo che nella stampa risultino i dati della propria azienda e' pero' necessario editare il file inserendo i dati necessari dove richiesto (dove c'e' l'indicazione * INSERIRE ... *). + </para></listitem> + + <listitem><para><emphasis>Payment</emphasis>: cliccando questo comando compare la sezione <emphasis>Accounting Tool</emphasis> composta da una casella che permette di visualizzare l'elenco dei progetti a cui l'intervistatore ha lavorato. Per procedere con il pagamento e' necessario selezionare i progetti e cliccare sul tasto <emphasis>Ok</emphasis>.</para> + <para>Il programma produrra' due tabelle: nella prima (<emphasis>Details Table</emphasis>) vengono riportati giorno, ora di inizio e fine turno, ore totali lavorate per ogni turno, mentre nella seconda (<emphasis>Summary Table</emphasis>) il totale delle ore lavorate per ciascun progetto e il compenso corrispondente in euro; accanto la possibilita' di aggiungere o togliere il tempo dedicato alla formazione se prevista.</para> + <para>Cliccando su <emphasis>Edit</emphasis> compare un campo dove e' possibile personalizzare causale e ore da rendicontare.</para> + <para>Cliccando su <emphasis>Pay</emphasis> si genera la nota di pagamento. Il documento stampato utilizza un template, piu' specificatamente il file utilizzato e' "ricevuta_temp.txt" che viene parametrizzato con i dati necessari e deve essere editato per inserire i dati relativi all'azienda.</para> + <para>Cliccando su <emphasis>Export/Report</emphasis> si crea il report dei turni e delle ore lavorate dall'intervistatore. + </para></listitem> + + </itemizedlist> + </listitem> + +<listitem><para><emphasis>Edit</emphasis>: per modificare i dati dell'intervistatore relativi alle voci <emphasis>Main</emphasis>, <emphasis>Contact</emphasis>, <emphasis>Bank</emphasis> e <emphasis>Availability</emphasis>, completate al momento dell'inserimento del nuovo intervistatore. Inoltre si possono modificare anche altre informazioni presenti a destra della finestra: il punteggio, lo stato dell'intervistatore, la paga oraria e la tipologia. +</para></listitem> + +<listitem><para><emphasis>Delete</emphasis>: se si vuole eliminare un intervistatore dal database; compare una finestra di dialogo che chiede "Are you sure?". +</para></listitem> + +<listitem><para><emphasis>Sms</emphasis>: e' la via breve per inviare un sms ad un singolo intervistatore. +</para></listitem> + +<listitem><para><emphasis>Project</emphasis>: e' la via breve per associare un intervistatore ad un'indagine, senza dover cliccare prima su <emphasis>Show</emphasis>. +</para></listitem> + +<listitem><para><emphasis>Call</emphasis>: consente di chiamare gli intervistatori direttamente dal browser. +</para></listitem> + +</itemizedlist> + +</section> + + + +<!-- PARTE TERZA --> + +<section><title>Terza Sezione</title> + +<para>Utilizzando lo strumento <emphasis>Go</emphasis> in alto a destra si avvia la ricerca di uno o piu' intervistatori a seconda della necessita' dell'amministratore.</para> +<para>La ricerca puo' essere fatta per nome e/o cognome o log in nel caso si voglia individuare un singolo intervistatore presente nel database.</para> +<para>Se invece si vuole selezionare un gruppo di intervistatori con determinate caratteristiche conviene avvalersi dell'opzione <emphasis>Advanced Search</emphasis> che permette di effettuare la ricerca in base a: stato dell'intervistatore (attivo, non attivo o entrambi), indagine associata purche' ancora in corso, tipologia (es. telefonico, vis a vis, aziende, ...) e punteggio.</para> +<para>Al termine di ogni ricerca e' possibile inviare un sms a tutti gli intervistatori filtrati, cliccando su <emphasis>Sms to them</emphasis> oppure su <emphasis>Sms to selection</emphasis>.</para> + + +</section> + +</section> + + +<section><title><emphasis>Projects</emphasis></title> + + +<section><title>Report</title> + +<para>Consente di visualizzare per ciascuna indagine in corso o gia' conclusa i dettagli relativi al costo di ogni singolo intervistatore che ci ha lavorato per ciascuna intervista, al numero di interviste effettuate e il tempo dedicato alla survey.</para> + +</section> + +<section><title>Edit list</title> + <para> -Inizialmente e' impossibile agire in modo diretto sui campi visualizzati in quanto sono tutti disattivati, le due operazioni consentite sono la ricerca di un intervistatore o l'inserimento di un nuovo intervistatore. +Una volta selezionata l'indagine, la ricerca del nominativo che si intende modificare puo' essere effettuata per nome, referente, numero di telefono o fax, email, rid o ancora cod com. </para> +<para>Dopo aver individuato il nominativo, questa operazione consente di apportare modifiche ai contatti, quando si tratta di indagini su lista.</para> +<para>Le modifiche effettuabili dall'amministratore sono relative a tutte le informazioni contenute nello scheduling del nominativo. </para> +<para>Questa applicazione puo' essere utile nel caso in cui, per esempio, un nominativo, una volta ricevuta la letter in advance , contatti il referente dell'indagine e chieda di essere contattato in un giorno ed ora specifici. L'amministratore potra' cosi' fissare l'appuntamento, inserendo inoltre la preferenza per l'intervistatore che somministrera' il questionario.</para> +<para>Modifiche possono essere apportate anche ai numeri di telefono, fax, nome del referente, indirizzo di posta elettronica ...</para> + +</section> + +</section> + +</chapter> + + + + + + + + + +<!-- OLD VERSION +<chapter id="yacco"><title>Yacco</title> +<para>Lo scopo di questa applicazione e' quello di gestire completamente la figura dell'intervistatore, dal momento in cui il suo nominativo viene registrato nel database al momento in cui la sua attivita' lavorativa come intervistatore termina e viene quindi eliminato dal database.</para> +<para>Oltre alle azioni di inserimento e di rimozione, Yacco offre anche altre funzioni, come, ad esempio, la gestione delle disponibilita' degli intervistatori e la possibilita' di contattare l'intervistatore, oppure ancora la gestione della sua retribuzione.</para> + +<para> +Utilizzando lo strumento <emphasis>Go</emphasis> in alto a destra potete cercare gli intervistatori registrati nel vostro sistema. Potete ricercarli per nome e/o cognome e filtrare la ricerca, cliccando su <emphasis>Advanced Research</emphasis>, per status (attivo o meno), progetto associato, tipologia e punteggio. +Al termine di ogni ricerca potete inviare un SMS a tutti gli operatori filtrati, cliccando <emphasis>Send SMS to them</emphasis>. </para> <section><title>L'inserimento di un nuovo intervistatore</title> + +<para>Per inserire un nuovo intervistatore, e' necessario premere il pulsante <emphasis>New</emphasis> dalla maschera in <xref linkend="yacco"/>.In questo modo sara' possibile ins<chapter id="yacco"><title>Yacco</title> + +<para> Il programma e' diviso in due sezioni principali: la prima (Interviewers) e' dedicata alla gestione degli intervistatori mentre attraverso la seconda (Projects) vengono in parte gestiti i progetti. </para> +<para> Ci occuperemo prima della sezione dedicata agli intervistatori e successivamente di quella relativa ai progetti. </para> + + +<section><title><emphasis>Interviewers</emphasis></title> + +<para>Lo scopo di questa applicazione e' quello di gestire completamente la figura dell'intervistatore, dal momento in cui il suo nominativo viene registrato nel database al momento in cui la sua attivita' lavorativa come intervistatore termina e viene quindi eliminato dal database.</para> + +<para>Per comodita' di esposizione dividiamo in tre sezioni la pagina che visualizziamo cliccando su <emphasis>Interviewers</emphasis>:</para> + + +<orderedlist numeration="upperroman"> + +<listitem><para>nella barra degli strumenti in alto a destra quattro voci: <emphasis>Search</emphasis> per visualizzare la pagina iniziale, <emphasis>New</emphasis> per l'inserimento di un nuovo intervistatore, <emphasis>Sms to list</emphasis> per spedire un sms ad una lista selezionata di intervistatori infine <emphasis>Types</emphasis> utile alla classificazione degli intervistatori sulla base della tipologia definita dall'amministratore;</para></listitem> + +<listitem><para>nella parte a sinistra della pagina l'elenco degli intervistatori registrati nel database per cognome, nome e punteggio attribuito dall'amministratore sulla base della produttivita' di ciascuno. Accanto ad ognuno compaiono inoltre le voci <emphasis>Show</emphasis>, <emphasis>Edit</emphasis>, <emphasis>Delete</emphasis>, <emphasis>Sms</emphasis>, <emphasis>Project</emphasis> e <emphasis>Call</emphasis> che corrispondono a varie azioni che vedremo in seguito;</para></listitem> + +<listitem><para>infine, sempre nella parte destra della pagina, gli strumenti Go (Advanced Search), Sms to them e Sms to selection.</para></listitem> + +</orderedlist> + + +<section><title>Prima sezione</title> +<para>Le voci sono le seguenti:</para> + +<itemizedlist mark="opencircle"> + +<listitem><para><emphasis>Search</emphasis>: consente di tornare alla pagina iniziale;</para></listitem> +<listitem><para><emphasis>New</emphasis>: permette l'inserimento di un nuovo intervistatore attraverso la compilazione delle seguenti voci:</para> + + <itemizedlist> + <listitem><para><emphasis>Main</emphasis>: i campi obbligatori sono constrassegnati da un asterisco (cognome, nome, numero di cellulare, codice fiscale e log in); inoltre e' obbligatorio anche il campo "Tipologia" che si trova a destra della finestra.</para> + <para>Se si inseriscono correttamente tutte le informazioni anagrafiche e' possibile calcolarne il codice fiscale premendo il pulsante "build".</para> + <para><emphasis>Attenzione: nonostante il codice fiscale generato da questo programma rispetti il D.M. del 12.3.1974, non e' possibile stabilirne l'esattezza assoluta poiche' esistono casi di persone con stesso nome e cognome, nate nello stesso comune e nello stesso giorno, e che quindi avrebbero codici fiscali identici: in tale evenienza il Ministero delle Finanze provvede alla sostituzione di uno dei numeri con la lettera progressiva.</emphasis></para> + <para>Per procedere con la registrazione del nuovo intervistatore, e' necessario cliccare sul nome delle sezioni successive. </para> + </listitem> + <listitem><para><emphasis>Contacts</emphasis>: vengono richiesti i dati relativi alla residenza e ad altri contatti telefonici oltre al cellulare. Nella casella "Note" si possono scrivere osservazioni, richiami o consigli che verranno visualizzati dall'intervistatore nel client YaaCs durante la sessione di lavoro.</para></listitem> + <listitem><para><emphasis>Bank</emphasis>: richiede il numero di conto corrente per effettuare il pagamento.</para></listitem> + <listitem><para><emphasis>Availability</emphasis>: si definisce la disponibilita' dell'intervistatore sia per quanto concerne i turni (bastera' spuntare le voci mattina pomeriggio sera) che la data a partire dalla quale e' disponibile a lavorare (il valore predefinito corrisponde alla data di inserimento, ma puo' essere variato). </para></listitem> + <listitem><para>Altre informazioni sull'intervistatore sono visibili e modificabili dall'elenco a destra della finestra tra cui: </para> + + <itemizedlist> + <listitem><para><emphasis>Score</emphasis>, ossia la rappresentazione numerica della valutazione sul lavoro svolto dall'intervistatore (50 e' il valore predefinito ma puo' essere modificato dall'amministratore);</para></listitem> + <listitem><para><emphasis>Active</emphasis>, da spuntare se l'intervistatore e' disponibile a lavorare;</para></listitem> + <listitem><para><emphasis>Tech Train</emphasis>, per segnalare se ha seguito la formazione necessaria allo svolgimento del lavoro;</para></listitem> + <listitem><para><emphasis>Salary</emphasis>, ossia la paga oraria prevista;</para></listitem> + <listitem><para><emphasis>Types</emphasis>, indica il tipo di indagini per cui l'intervistatore puo' operare (es. Telefonico, Vis a vis ...);</para></listitem> + </itemizedlist> + </listitem> + + </itemizedlist> + </listitem> + +<listitem><para><emphasis>Sms to list</emphasis>: consente l'invio di sms ad una lista di numeri di cellulare riportati su un file .txt, a intervistatori non ancora inseriti nel database. Dopo aver scritto il testo del messaggio e selezionato il file con i numeri di cellulare con l'icona <emphasis>Sfoglia</emphasis>, sara' sufficiente cliccare su <emphasis>Upload</emphasis> per procedere all'invio del sms; </para></listitem> +<listitem><para><emphasis>Types</emphasis>: fornisce l'elenco delle tipologie di intervistatore gia' create con la possibilita' di cancellarle e di crearne di nuove.</para></listitem> + +</itemizedlist> +</section> + + + +<section><title>Seconda Sezione</title> + +<para>Le azioni che consentono di gestire singolarmente ogni intervistatore gia' inserito nel database sono descritte di seguito:</para> + +<itemizedlist> + +<listitem><para><emphasis>Show</emphasis>: permette di visualizzare i seguenti dettagli dell'intervistatore: +</para> + + <itemizedlist> + + <listitem><para><emphasis>Main</emphasis>: i dati anagrafici. + </para></listitem> + + <listitem><para><emphasis>Contact</emphasis>: la residenza. + </para></listitem> + + <listitem><para><emphasis>Bank</emphasis>: gli estremi del conto corrente. + </para></listitem> + + <listitem><para><emphasis>Availability</emphasis>: la disponibilita' dell'intervistatore. + </para></listitem> + + <listitem><para><emphasis>Project</emphasis>: cliccando su questo pulsante compare una pagina divisa in due aree: in quella in alto sono elencate le indagini in corso, mentre in quella sottostante le indagini a cui l'intervistatore e' associato (sara' vuota nel caso in cui l'intervistatore non sia associato a nessun progetto).</para> <para>Affinche' l'intervistatore possa lavorare e' necessario che venga collegato ad un'indagine, trascinando l'icona dell'indagine nell'area sottostante. Per scollegare l'intervistatore dall'indagine e' sufficiente trascinare l'icona della stessa nel cestino. + </para></listitem> + + <listitem><para><emphasis>Sms</emphasis>: si utilizza questa opzione quando si vuole effettuare una particolare comunicazione via sms ad un intervistatore. Compare cosi' una maschera vuota da compilare con il testo del messaggio con un contatore che mostra il numero di caratteri rimanenti. Per inviarlo premere <emphasis>Invia</emphasis>. + </para></listitem> + + <listitem><para><emphasis>Contract</emphasis>: per stampare il contratto di lavoro tra l'azienda e l'intervistatore precompilato. Quando si attiva questa procedura, Yacco stampa il file "conve_temp.txt", parametrizzandolo con le informazioni sull'intervistatore. Per fare in modo che nella stampa risultino i dati della propria azienda e' pero' necessario editare il file inserendo i dati necessari dove richiesto (dove c'e' l'indicazione * INSERIRE ... *). + </para></listitem> + + <listitem><para><emphasis>Payment</emphasis>: cliccando questo comando compare la sezione <emphasis>Accounting Tool</emphasis> composta da una casella che permette di visualizzare l'elenco dei progetti a cui l'intervistatore ha lavorato. Per procedere con il pagamento e' necessario sel... [truncated message content] |
From: <si...@us...> - 2011-12-15 16:46:54
|
Revision: 2128 http://yaacs.svn.sourceforge.net/yaacs/?rev=2128&view=rev Author: sickpig Date: 2011-12-15 16:46:47 +0000 (Thu, 15 Dec 2011) Log Message: ----------- * FIX assorted syntax error spotted by Nagelfar - A Tcl Syntax checker :) http://nagelfar.berlios.de/ Modified Paths: -------------- trunk/yaacs/admin.tcl trunk/yadmin.tcl Modified: trunk/yaacs/admin.tcl =================================================================== --- trunk/yaacs/admin.tcl 2011-12-15 16:00:17 UTC (rev 2127) +++ trunk/yaacs/admin.tcl 2011-12-15 16:46:47 UTC (rev 2128) @@ -546,7 +546,7 @@ if {[string length $dial_prefix] == 0} { ::yalog::debug "you must supply a a voip provider for the project" - return $i::admin::ERR_VOIP + return $::admin::ERR_VOIP } #if no table name has been supplied, set it to project's name (lower case) @@ -1485,8 +1485,8 @@ } append auxT projects. $pjname _theo - set fileds [list cod_prov label qty_capo qty_not_capo done_capo done_not_capo] - set sort [list cod_prov] + set fields [list cod_prov label qty_capo qty_not_capo done_capo done_not_capo] + set sorts [list cod_prov] set res [::admin::quotaFillIn $db $auxT $fields $sorts] return $res @@ -2275,7 +2275,7 @@ set my_dest_table $dataPj(pjtable) } if {[::yadb::execl $db "insert into $my_dest_table select * from $tmpt"] == -1} { - ::yalog::error "db error occurs while copyng new contacts on $pjtable" + ::yalog::error "db error occurs while copyng new contacts into $my_dest_table " return -1 } @@ -2393,9 +2393,8 @@ # # @param ce choose if you want to create (0) or edit (1) a turn # @param db database connection handler -# @param name provider's name -# @param dp provider's dial prefix -# @param idep [optional] email account's id on db. Use it to edit a turn. +# @param new provider's data +# @param idea [optional] email account's id on db. Use it to edit an email account settings. # @return return 0 on success, -1 on generic error, ERR_UNAME for not unique # or null name. If you set ce to # somewhat other than its legal values you'll get an ERR_FLAG. Remember @@ -2472,13 +2471,6 @@ return -1 } - # update all the projects that use that dial_prefix - set sql "update projects.projects set email_account=$idep where dial_prefix=$old_idep" - if {[::yadb::execl $db $sql] == -1} { - ::yalog::error "failed to update email account id for associated projects" - ::yadb::execl $db "rollback" - return -1 - } ::yadb::execl $db "commit" } Modified: trunk/yadmin.tcl =================================================================== --- trunk/yadmin.tcl 2011-12-15 16:00:17 UTC (rev 2127) +++ trunk/yadmin.tcl 2011-12-15 16:46:47 UTC (rev 2128) @@ -32,7 +32,7 @@ namespace import msgcat::* -mcload [file join $yaacs::library msgs] +mcload [file join $::yaacs::library msgs] option add *Dialog.msg.font {lucidasans 16} bind Button <Return> {%W invoke} @@ -668,8 +668,8 @@ # user know that something related to # db goes wrong. proc ::yadmin::dbError {{title ""} {descr ""}} { - if {title eq ""} {set title [mc "Database Error"]} - if {descr eq ""} {set descr [mc "Some errors occurs. Please verify your db connection and yaacs's log."]} + if {$title eq ""} {set title [mc "Database Error"]} + if {$descr eq ""} {set descr [mc "Some errors occurs. Please verify your db connection and yaacs's log."]} ::dialogs::error . $title $descr } @@ -4105,7 +4105,7 @@ set flu [::admin::flushStat $db $id] if {$flu < 0} { - if {$flu == $admin::ERR_IDREQ} { + if {$flu == $::admin::ERR_IDREQ} { ::dialogs::error . [mc "An invalid project's id has been supplied"] "" } else { ::yadmin::dbError @@ -4503,7 +4503,7 @@ bind .turns.fr.tab <Double-Button-1> { set coord [.turns.fr.tab curselection] - yadmin::editTurn $db .turns.fr.tab $coord [array get yadmin::turns] + ::yadmin::editTurn $db .turns.fr.tab $coord [array get ::yadmin::turns] } grid .turns.fr.tab .turns.fr.sb -sticky news -pady 5 @@ -4742,7 +4742,7 @@ array set survey [::project::get_proj $db $pjName] set idPj $survey(proj) - set checkLia [::cati::get_lia $db $pj] + set checkLia [::cati::get_lia $db $idPj] if {$checkLia == 0} { set path "" } else { @@ -4820,7 +4820,7 @@ set flu [::admin::flushStat $db $idPj] if {$flu < 0} { - if {$flu == $admin::ERR_IDREQ} { + if {$flu == $::admin::ERR_IDREQ} { ::dialogs::error . [mc "An invalid project's id has been supplied"] } else { ::yadmin::dbError @@ -5200,7 +5200,7 @@ return } - if {$yadmin::qType == -1} { + if {$::yadmin::qType == -1} { ::yalog::debug "Nothing to refresh, first user has to choose the quota checking type" return } @@ -5293,6 +5293,7 @@ foreach q $quota { array unset aq array set aq $q + set lab $aq(label) if {$r == 1} { set T($r,0) "$aq(label)" set T($r,la) "" @@ -5318,7 +5319,6 @@ set subFtheo 0 } } - set lab $aq(label) set sex $aq(sex) if {$sex == "F"} { set j 2 This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <si...@us...> - 2011-12-15 16:00:29
|
Revision: 2127 http://yaacs.svn.sourceforge.net/yaacs/?rev=2127&view=rev Author: sickpig Date: 2011-12-15 16:00:17 +0000 (Thu, 15 Dec 2011) Log Message: ----------- * NEW: gendere/age quota on listed sampling This the result of code consolidation started with rev 2120 and 2125. Yadmin now will let you specifiy a gendere age structure for listed sample category. While at it fix a few yadmin infelicities, namely: - add ::yadmin::survey array containing all the props of the project to which we are connected. Such array would be available for the entire session, actually is used only once, though. It could be used to avoid the set of all the ::yadmin:: vars used to store current project property. - add a new GUI mode "connectedCompanyGA" to deal with the peculiarities of gender/age listed sampling - fix error handling switch in ::yadmin::editPj - change thew way we define projects.<pname>_done view - set 0 as default value of projects.<pname>_theo_sex_age done field - enforce 3 different rules on listed/stratified sampling definition: a) geo labels and gen/age labels have to be the same b) for each age class we need 2 qty (one per gender) c) age boundaries have to be the same across label TODO: perform a more deep check on yacati code to assure that everything would work. Revision Links: -------------- http://yaacs.svn.sourceforge.net/yaacs/?rev=2120&view=rev Modified Paths: -------------- trunk/yaacs/admin.tcl trunk/yadmin.tcl Modified: trunk/yaacs/admin.tcl =================================================================== --- trunk/yaacs/admin.tcl 2011-12-13 11:17:38 UTC (rev 2126) +++ trunk/yaacs/admin.tcl 2011-12-15 16:00:17 UTC (rev 2127) @@ -759,7 +759,7 @@ } \ } - if {$doImpGA && !$is4company} { + if {$doImpGA} { # NB sexage filed is setted to true here if {[::admin::importGenderAgeStructure $db $idPj $impGA] == -1} { ::yalog::error "Cannot import gender/age sample structure" @@ -1808,7 +1808,7 @@ set tab $dataPj(pjtable)_theo_sex_age set fieldL [list label sex min_age max_age qty] if {![::yadb::tableExists $db [lindex [split $tab "."] 1] projects]} { - ::yadb::execl $db "CREATE TABLE $tab (label varchar, sex char(1), min_age int, max_age int, qty int, done int, distance int, extr boolean default false, corr integer default 0)" + ::yadb::execl $db "CREATE TABLE $tab (label varchar, sex char(1), min_age int, max_age int, qty int, done int default 0, distance int, extr boolean default false, corr integer default 0)" } else { #first we've to emty sample design table if {[::yadb::execl $db "delete from $tab"]==-1} { @@ -1826,56 +1826,94 @@ set year [::yamisc::ref_year] # creating a view to check quotas in run-time - if {$dataPj(sampling_type) == 0} { - #view for cod_prov-capoluo - if {[::yadb::execl $db "CREATE OR REPLACE VIEW $dataPj(pjtable)_done as \ - SELECT a.sex, b.min_age, c.label, count(*) AS done \ - FROM projects.respondents a, (SELECT DISTINCT min_age, max_age FROM $tab) b, $dataPj(pjtable)_theo c \ - WHERE ($year - a.byear) >= b.min_age AND ($year - a.byear) <= b.max_age \ - AND a.proj = $idPj \ - AND c.cod_prov = trunc(a.cod_com / 1000) \ - GROUP BY a.sex, b.min_age, c.label"] == -1} { - ::yalog::error "unable to create view for this cod_prov-capoluo project" - return -1 + switch -exact -- $dataPj(sampling_type) { + 0 { + # 3 -> view for liste with gen/eta quotas + if {[::yadb::execl $db "CREATE OR REPLACE VIEW $dataPj(pjtable)_done as \ + SELECT a.sex, b.min_age, c.label, count(*) AS done \ + FROM projects.respondents a, (SELECT DISTINCT min_age, max_age FROM $tab) b, $dataPj(pjtable)_theo c \ + WHERE ($year - a.byear) >= b.min_age AND ($year - a.byear) <= b.max_age \ + AND a.proj = $idPj \ + AND c.cod_prov = trunc(a.cod_com / 1000) \ + GROUP BY a.sex, b.min_age, c.label"] == -1} { + ::yalog::error "unable to create view for this cod_prov-capoluo project" + return -1 + } } - } else { - #view for cod_col - if {[::yadb::execl $db "CREATE OR REPLACE VIEW $dataPj(pjtable)_done as \ - SELECT a.sex, b.min_age, d.label, count(*) AS done \ - FROM projects.respondents a, ( SELECT DISTINCT min_age, max_age FROM $tab) b, $dataPj(pjtable)_theo_def c , $dataPj(pjtable)_theo d - WHERE ($year - a.byear) >= b.min_age AND ($year - a.byear) <= b.max_age \ - AND a.proj = $idPj - AND c.cod_com = a.cod_com - AND d.strata = c.strata - GROUP BY a.sex, b.min_age, d.label"] == -1} { - ::yalog::error "unable to create view for this cod_col" - return -1 + 2 - + 3 { + # 2 -> view for cod_col + # 3 -> view for list with gen/eta quotas + if {[::yadb::execl $db "CREATE OR REPLACE VIEW $dataPj(pjtable)_done as + SELECT a.sex, c.min_age, c.max_age, c.label, count(*) AS done + FROM projects.respondents a, $dataPj(pjtable) b, $tab c + WHERE ($year - a.byear) BETWEEN c.min_age AND c.max_age + AND a.proj = $idPj + AND a.rid = b.rid and a.cod_com = b.cod_com + AND b.label = c.label + GROUP BY a.sex, c.min_age, c.max_age, c.label"] == -1} { + ::yalog::error "unable to create gen age quota view" + return -1 + } } } - #checks for label consistency - set sql "SELECT label,count(*) FROM $dataPj(pjtable)_theo GROUP BY label ORDER BY label" - set cmd {lappend labels_theo $rec(label)} - ::yadb::pgSelect $db $sql rec $cmd + # validate just imported sampling structures + # a) geo labels and gen/age labels have to be the same + # b) for each age class we need 2 qty (one per gender) + # c) age boundaries have to be the same across label - set sql "SELECT label,count(*) FROM $tab GROUP BY label ORDER BY label" - set cmd {lappend labels_theo_gen_eta $rec(label)} - ::yadb::pgSelect $db $sql rec $cmd - + set sql "SELECT label FROM $dataPj(pjtable)_theo GROUP BY label ORDER BY label" + set labels_theo [::yadb::getTuples $db $sql] + + set sql "SELECT label FROM $tab GROUP BY label ORDER BY label" + set labels_theo_gen_eta [::yadb::getTuples $db $sql] + set i 0 foreach w $labels_theo { + # a) geo labels and gen/age labels have to be the same if {$w ne [lindex $labels_theo_gen_eta $i]} { ::yalog::error "Unmatched labels" - ::yadb::ERRMSG "Mismatched labels" + set ::yadb::ERRMSG [mc "Mismatched labels\n\ngeo:\n%s\ngen age:\n%s" [join $labels_theo " - "] [join $labels_theo_gen_eta " - "]] return -1 } + incr i } + # b) for each age class we need 2 qty (one per gender) + set snames [list] + set check_cb [::yadb::getTuples $db "SELECT label, min_age, max_age, count(*) FROM $tab GROUP BY label, min_age, max_age ORDER BY label, min_age"] + foreach c $check_cb { + if {[lindex $c 3] != 2} { + ::yalog::error "We need to qty for each age-class/label couple" + set ::yadb::ERRMSG [mc "In label %s for age %s we have %d gender quotas, but we need 2 of them" [lindex $c 0] [join [lrange $c 1 2] -] [lindex $c 3]] + return -1 + } + # initial setup for validation c) (age boundaries have to be the same across label) + # define a set of class ages for each labels + lappend [string map {" " _} [lindex $c 0]] [join [lrange $c 1 2] -] + lappend snames [string map {" " _} [lindex $c 0]] + + } + + set snames [lsort -unique $snames] + # actual c) validation + for {set x 1} {$x < [llength $snames]} {incr x} { + if {[string compare [set [lindex $snames 0]] [set [lindex $snames $x]]] != 0} { + ::yalog::error "Age definition in label [lindex $snames 0] differs age definition in [lindex $snames $x]" + set ::yadb::ERRMSG [mc "Age definition label %s:\n\n%s\n\nAge definition label %s:\n\n%s\n\n\nAs you can see those are different."\ + [lindex $snames 0] [set [lindex $snames 0]] [lindex $snames $x] [set [lindex $snames $x]]] + return -1 + } + } + if {[::yadb::execl $db "UPDATE projects.projects SET sexage = true WHERE proj = $idPj"] == -1} { ::yalog::error "Unable to set current pj as panelled" + set ::yalog::ERRMSG "Unable to set current pj as panelled" return -1 } + return 0 } Modified: trunk/yadmin.tcl =================================================================== --- trunk/yadmin.tcl 2011-12-13 11:17:38 UTC (rev 2126) +++ trunk/yadmin.tcl 2011-12-15 16:00:17 UTC (rev 2127) @@ -726,13 +726,29 @@ [list .ftools.ftool.new $all] [list .ftools.ftool.panel $all] [list .mbar.mpj $statFlushThis] \ [list .fquota.delquota $all] [list .fquota.panel $all] [list .fquota.perc $all] [list .fquota.refresh $all] [list .fquota.save $all] ] } + connectedCompanyGA { + set needToBeEnabled [list [list .mbar.mpj $pjRecruit] [list .mbar.mpj $pjHistory] [list .mbar.mpj $pjEditThis]\ + [list .mbar.mbbt $bbtThis] \ + [list .mbar.mops $opsReport]\ + [list .mbar.mfile $fileReload] [list .mbar.mfile $fileDiscon] \ + [list .ftools.ftool.edit $all] [list .ftools.ftool.bbt $all] [list .ftools.ftool.op $all] \ + [list .ftools.ftool.refresh $all] [list .ftools.ftool.disco $all] [list .mbar.msample $sampleDoIt] \ + [list .ftools.ftool.sample $all] [list .mbar.mquota $quotaGeo] [list .mbar.mquota $quotaSex] \ + [list .fquota.perc $all] [list .fquota.refresh $all] [list .fquota.save $all] [list .mbar.mquota $quotaUnr] ] + set needToBeDisabled [list [list .mbar.mquota $quotaStu]\ + [list .mbar.msample $sampleDoPanel] [list .mbar.msample $sampleDoQuotaPanel]\ + [list .ftools.ftool.new $all] [list .ftools.ftool.panel $all] [list .mbar.mpj $statFlushThis] \ + [list .fquota.delquota $all] [list .fquota.panel $all] ] + } connectedPeople { set needToBeEnabled [list [list .mbar.mpj $pjRecruit] [list .mbar.mpj $pjHistory] [list .mbar.mbbt $bbtThis] \ [list .mbar.msample $sampleDoIt] [list .mbar.mops $opsReport] [list .mbar.mquota $quotaGeo] \ [list .mbar.mfile $fileReload] [list .mbar.mfile $fileDiscon] [list .mbar.mpj $pjEditThis] \ [list .ftools.ftool.edit $all] [list .ftools.ftool.sample $all] [list .ftools.ftool.bbt $all] \ [list .ftools.ftool.op $all] [list .ftools.ftool.refresh $all] [list .ftools.ftool.disco $all]] - set needToBeDisabled [list [list .ftools.ftool.new $all] [list .mbar.mquota $quotaSex] [list .mbar.mquota $quotaStu] [list .mbar.msample $sampleDoPanel] [list .mbar.msample $sampleDoQuotaPanel] [list .mbar.mpj $statFlushThis] [list .fquota.delquota $all] [list .fquota.panel $all] [list .fquota.perc $all] [list .fquota.refresh $all] [list .fquota.save $all] ] + set needToBeDisabled [list [list .ftools.ftool.new $all] [list .mbar.mquota $quotaSex] [list .mbar.mquota $quotaStu] \ + [list .mbar.msample $sampleDoPanel] [list .mbar.msample $sampleDoQuotaPanel] [list .mbar.mpj $statFlushThis] \ + [list .fquota.delquota $all] [list .fquota.panel $all] [list .fquota.perc $all] [list .fquota.refresh $all] [list .fquota.save $all]] } default { ::dialogs::error . [mc "Panic"] [mc "Bad application state! This error should never occur! Contact YaaCers."] @@ -1602,7 +1618,7 @@ } 3 { # TODO manage gender /age and study degree quotas too - set en_ws [list .pj.fsamp.importBt .pj.fsamp.importCs] + set en_ws [list .pj.fsamp.importBt .pj.fsamp.importCs .pj.fsamp.importGA] } 5 { # TODO why we can't handle Gen Age quota on stratified with thres ? @@ -2622,6 +2638,8 @@ ::yadmin::clearSumms array set survey [::project::get_proj $db $pjName] + array set ::yadmin::survey [array get survey] + set ::yadmin::pj $survey(proj) array unset survey array set survey [::admin::getDataPj $db $::yadmin::pj] @@ -2656,8 +2674,12 @@ return } - if {$survey(listed) eq "t"} { - ::yadmin::applicationState "connectedCompany" + if {$survey(listed) eq "t"} { + if {$survey(sexage) eq "f"} { + ::yadmin::applicationState "connectedCompany" + } else { + ::yadmin::applicationState "connectedCompanyGA" + } } else { ::yadmin::applicationState "connectedPeople" } @@ -2671,6 +2693,7 @@ .mbar.mops entryconfigure 0 -state disabled } + # enabling toolbar buttons accroding to samplign type if {(($::yadmin::sampling_type == 0) || ($::yadmin::sampling_type == 2)) && ($survey(sexage) eq "t")} { .mbar.msample entryconfigure 1 -state normal .mbar.msample entryconfigure 2 -state normal @@ -2689,7 +2712,8 @@ proc ::yadmin::disconnect {} { ::yadmin::clearTable ::yadmin::clearSumms - set yadmin::pj -1 + set ::yadmin::pj -1 + array unset ::yadmin::survey wm title . "yadmin -- $::yadmin::version" .head configure -text "YaaCs's project management tool" ::yadmin::applicationState "notConnected" @@ -3041,7 +3065,7 @@ } 3 { # TODO manage gender /age and study degree quotas too - set en_ws [list .pj.fsamp.importBt .pj.fsamp.importCs] + set en_ws [list .pj.fsamp.importBt .pj.fsamp.importCs .pj.fsamp.importGA] .pj.wt.nint set $yadmin::COM_NINT set is4company 1 } @@ -3459,47 +3483,47 @@ return } \ $::admin::ERR_INSUP { - ::dialogs::error .pj [mc "Unable to save pj data"] [concat [mc "An error occurs while updating/inserting pj data"] "\n\n" $::yadb::ERRMSG] + ::dialogs::error .pj [mc "Unable to save pj data"] [mc "An error occurs while updating/inserting pj data\n\n %s" $::yadb::ERRMSG] return } \ $::admin::ERR_TPJ { - ::dialogs::error .pj [mc "Unable to create project's table"] [concat [mc "Error details: \n\n"] $::yadb::ERRMSG] + ::dialogs::error .pj [mc "Unable to create project's table"] [mc "Error details:\n\n%s" $::yadb::ERRMSG] return } \ $::admin::ERR_TSAMP { - ::dialogs::error .pj [mc "Unable to retrive sampling design template table "] [concat [mc "Error details: \n\n"] $::yadb::ERRMSG] + ::dialogs::error .pj [mc "Unable to retrive sampling design template table "] [mc "Error details:\n\n%s" $::yadb::ERRMSG] return } \ $::admin::ERR_TTHEO { - ::dialogs::error .pj [mc "Unable to create sampling table"] [concat [mc "Error details: \n\n"] $::yadb::ERRMSG] + ::dialogs::error .pj [mc "Unable to create sampling table"] [mc "Error details:\n\n%s" $::yadb::ERRMSG] return } \ $::admin::ERR_RIDPJ { - ::dialogs::error .pj [mc "Unable to retrive project's id"] [concat [mc "Error details: \n\n"] $::yadb::ERRMSG] + ::dialogs::error .pj [mc "Unable to retrive project's id"] [mc "Error details:\n\n%s" $::yadb::ERRMSG] return } \ $::admin::ERR_MSMS { - ::dialogs::error .pj [mc "Unable to send massive sms"] [concat [mc "Error details: \n\n"] $::yadb::ERRMSG] + ::dialogs::error .pj [mc "Unable to send massive sms"] [mc "Error details:\n\n%s" $::yadb::ERRMSG] return } \ $::admin::ERR_SDEF { - ::dialogs::error .pj [mc "Unable to store shifts definition"] [concat [mc "Error details: \n\n"] $::yadb::ERRMSG] + ::dialogs::error .pj [mc "Unable to store shifts definition"] [mc "Error details:\n\n%s" $::yadb::ERRMSG] return } \ $::admin::ERR_ICONT { - ::dialogs::error .pj [mc "Unable to import contacts"] [concat [mc "Error details: \n\n"] $::yadb::ERRMSG] + ::dialogs::error .pj [mc "Unable to import contacts"] [mc "Error details:\n\n%s" $::yadb::ERRMSG] return } \ $::admin::ERR_SSTR { - ::dialogs::error .pj [mc "Unable to import sample structure"] [concat [mc "Error details: \n\n"] $::yadb::ERRMSG] + ::dialogs::error .pj [mc "Unable to import sample structure"] [mc "Error details:\n\n%s" $::yadb::ERRMSG] return } \ $::admin::ERR_SSGA { - ::dialogs::error .pj [mc "Unable to import gender/age structure"] [concat [mc "Error details: \n\n"] $::yadb::ERRMSG] + ::dialogs::error .pj [mc "Unable to import gender/age structure"] [mc "Error details:\n\n%s" $::yadb::ERRMSG] return } \ $::admin::ERR_STRCC { - ::dialogs::error .pj [mc "Unable to import strata/cod_com"] [concat [mc "Error details: \n\n"] $::yadb::ERRMSG] + ::dialogs::error .pj [mc "Unable to import strata/cod_com"] [mc "Error details:\n\n%s" $::yadb::ERRMSG] return } \ $::admin::ERR_DBLSTR { @@ -3512,7 +3536,7 @@ return } \ $::admin::ERR_PANEL { - ::dialogs::error .pj [mc "An error occurs while dealing with panel"] [concat [mc "Error details: \n\n"] $::yadb::ERRMSG] + ::dialogs::error .pj [mc "An error occurs while dealing with panel"] [mc "Error details:\n\n%s" $::yadb::ERRMSG] return } \ $::admin::ERR_PANEL_UNIQUE { @@ -3525,7 +3549,7 @@ return } \ "-1" { - ::dialogs::error .pj [mc "Some error occurs.\n Check your log."] [concat [mc "Error details: \n\n"] $::yadb::ERRMSG] + ::dialogs::error .pj [mc "Some error occurs.\n Check your log."] [mc "Error details:\n\n%s" $::yadb::ERRMSG] return } \ "0" { @@ -5148,15 +5172,28 @@ # 1: stands x geographical quota (distance from goal) # 2: stands x gender-age quota (completed interviews) # 3: stands x gender-age quota (distance from goal) -# 4: stands x out-of-quota interviews -# 5: stands x study quota (completed interviews) -# 6: stands x study quota (distance from goal) +# 4: stands x study quota (completed interviews) +# 5: stands x study quota (distance from goal) +# 6: stands x out-of-quota interviews proc ::yadmin::quotaCheck {db idPj type {perc 0}} { # cleaning previous quota ::yadmin::clearTable ::yadmin::clearQuotaSelection 1 $::yadmin::panelQuota 3 ::yadmin::clearQuotaSelection 1 $::yadmin::panelStudy 1 + # setting ::yadmin::qType to know everywhere kind of shown quota + # deal with gen/age for listed pj adding those artificial quota + # type index: + # 7: stands x gender-age quota listed (completed interviews) + # 8: stands x gender-age quota listed (distance from goal) + # 9: stands x gender-age quota listed (completed interviews) + # 10: stands x gender-age quota listed (distance from goal) + + set ga_type [list 2 3 5 6] + set gui_type $type + if {[lsearch $ga_type $gui_type] > -1 && $::yadmin::sampling_type == 3 && $::yadmin::survey(sexage) eq "t"} { + incr gui_type 5 + } set ::yadmin::qType $type if {$::yadmin::pj == -1} { ::dialogs::error . [mc "You must connect to a project first!"] @@ -5174,7 +5211,7 @@ .fquota.perc configure -state disabled .fquota.save configure -state disabled # enable or disable button due to choosen quota - switch -- $type { + switch -- $gui_type { 0 - 1 { .fquota.refresh configure -state normal @@ -5183,23 +5220,32 @@ } 2 - 3 - - 5 - - 6 { + 4 - + 5 { .fquota.delquota configure -state normal .fquota.panel configure -state normal .fquota.refresh configure -state normal .fquota.perc configure -state normal .fquota.save configure -state normal } - 4 { + 6 { .fquota.refresh configure -state normal .fquota.save configure -state normal } + 7 - + 8 - + 9 - + 10 { + .fquota.delquota configure -state normal + .fquota.refresh configure -state normal + .fquota.perc configure -state normal + .fquota.save configure -state normal + } } # i need to check if user's refreshing quotas or non-quota interviews # cause if it's so i don't have to do anything exept for calling ::yadmin::unrespectedQuota - if {$type == 4} { + if {$type == 6} { ::yadmin::unrespectedQuota $db $::yadmin::pj return } @@ -5422,7 +5468,7 @@ } set T($r,2) "$aq(label)" } - 4 { + 4 { # sostituzione set T($r,0) "$aq(kindof)" set T($r,1) "$aq(strata)" @@ -5437,8 +5483,8 @@ } } - if {($type == 5) || ($type == 6)} { - if {$type == 5} { + if {($type == 4) || ($type == 5)} { + if {$type == 4} { .fquota.title configure -text "Study - Done" } else { .fquota.title configure -text "Study - Distance" @@ -5504,7 +5550,7 @@ # set right tag for panel selected cells # this code is here because before the table is not really created # so cell coords could be not inside the table - if {($type == 5) || ($type == 6) || ($type == 2) || ($type == 3)} { + if {($type == 4) || ($type == 5) || ($type == 2) || ($type == 3)} { if {($type < 4)} { set listname $::yadmin::panelQuota set idx 3 This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <si...@us...> - 2011-12-13 11:17:45
|
Revision: 2126 http://yaacs.svn.sourceforge.net/yaacs/?rev=2126&view=rev Author: sickpig Date: 2011-12-13 11:17:38 +0000 (Tue, 13 Dec 2011) Log Message: ----------- * FIX: make panel invitation model actually work Modified Paths: -------------- branches/external-stable/yadmin.tcl branches/external-trunk/yadmin.tcl branches/internal-stable/yadmin.tcl trunk/yadmin.tcl Modified: branches/external-stable/yadmin.tcl =================================================================== --- branches/external-stable/yadmin.tcl 2011-12-07 15:40:20 UTC (rev 2125) +++ branches/external-stable/yadmin.tcl 2011-12-13 11:17:38 UTC (rev 2126) @@ -3695,6 +3695,9 @@ } } else { set ::yadmin::lia($stuff) "" + if {$stuff eq "invite"} { + set ::yadmin::changed_lia 1 + } } } Modified: branches/external-trunk/yadmin.tcl =================================================================== --- branches/external-trunk/yadmin.tcl 2011-12-07 15:40:20 UTC (rev 2125) +++ branches/external-trunk/yadmin.tcl 2011-12-13 11:17:38 UTC (rev 2126) @@ -3695,6 +3695,9 @@ } } else { set ::yadmin::lia($stuff) "" + if {$stuff eq "invite"} { + set ::yadmin::changed_lia 1 + } } } Modified: branches/internal-stable/yadmin.tcl =================================================================== --- branches/internal-stable/yadmin.tcl 2011-12-07 15:40:20 UTC (rev 2125) +++ branches/internal-stable/yadmin.tcl 2011-12-13 11:17:38 UTC (rev 2126) @@ -3698,6 +3698,9 @@ } } else { set ::yadmin::lia($stuff) "" + if {$stuff eq "invite"} { + set ::yadmin::changed_lia 1 + } } } Modified: trunk/yadmin.tcl =================================================================== --- trunk/yadmin.tcl 2011-12-07 15:40:20 UTC (rev 2125) +++ trunk/yadmin.tcl 2011-12-13 11:17:38 UTC (rev 2126) @@ -3712,6 +3712,9 @@ } } else { set ::yadmin::lia($stuff) "" + if {$stuff eq "invite"} { + set ::yadmin::changed_lia 1 + } } } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <si...@us...> - 2011-12-07 15:40:26
|
Revision: 2125 http://yaacs.svn.sourceforge.net/yaacs/?rev=2125&view=rev Author: sickpig Date: 2011-12-07 15:40:20 +0000 (Wed, 07 Dec 2011) Log Message: ----------- * Continue to work on yadmin creation projects consolidation (work started @ r2120): - use admin::getDataPj in place of project::get_proj when possible - decouple ::yadmin::importSome, now ::yadmin::importSome will contains only a file path containing sample geo definition whereas ::yadmin::Cs will contain the structure and the data that will be import into projects frame - fix editing pj properties (broken by commit 2120) - enhance ::yadmin::dbError dialogs Revision Links: -------------- http://yaacs.svn.sourceforge.net/yaacs/?rev=2120&view=rev Modified Paths: -------------- trunk/yaacs/admin.tcl trunk/yadmin.tcl Modified: trunk/yaacs/admin.tcl =================================================================== --- trunk/yaacs/admin.tcl 2011-12-07 14:36:24 UTC (rev 2124) +++ trunk/yaacs/admin.tcl 2011-12-07 15:40:20 UTC (rev 2125) @@ -441,7 +441,8 @@ # @param url default setted to ""; url to point a browser to do the survey # @param shiftDef a messed list of list, each sublist contains turns id, day, seats # smstxt, updatelist and massSms, action -# @param impS file and file's structured where contacts are stored +# @param impS file path where geo sampling definition is stored +# @param impCs file and file's structured where contacts are stored # @param impGA file path where gender age quotas are stored # @param impSt file path where stratas are defined with relatives cod_coms # @param impSd file path where study quotas are stored @@ -459,7 +460,7 @@ # that if you're editing a project you've to supply a project's id or you'll # get an ERR_IDREQ. proc ::admin::newUpPj {ce db name desc duration wtime active is4company maxt\ - samplet soglia pausep freqmon briefing table url shiftDef liaDef impS impGA impSt impSd g_stuff \ + samplet soglia pausep freqmon briefing table url shiftDef liaDef impS impCs impGA impSt impSd g_stuff \ manpanel panelpath dial_prefix rec_calls eidx {idPj ""}} { # ce should be 0 (zero) for create a project @@ -579,9 +580,14 @@ } else { set doShiftDef 1 } if {$impS eq ""} { - ::yalog::debug "no importation" + ::yalog::debug "no sample geo definition importation" set doImpS 0 } else { set doImpS 1 } + + if {$impCs eq ""} { + ::yalog::debug "no Contacts importation" + set doImpCs 0 + } else { set doImpCs 1 } if {$impSt eq ""} { ::yalog::debug "no strata/cod_com importation" @@ -722,15 +728,15 @@ } } - if {$doImpS && $is4company} { - if {[::admin::importFile $db $idPj [lindex $impS 1] [lindex $impS 0]] < 0} { + if {$doImpCs} { + if {[::admin::importFile $db $idPj [lindex $impCs 1] [lindex $impCs 0]] < 0} { ::yalog::error "Cannot import contacts" ::yadb::execl $db "rollback" return $::admin::ERR_ICONT } } - if {$doImpS && !$is4company} { + if {$doImpS} { if {[::admin::importSampleStructure $db $idPj $impS] == -1} { ::yalog::error "Cannot import sample structure" ::yadb::execl $db "rollback" @@ -738,7 +744,7 @@ } } - if {$doImpSt && !$is4company} { + if {$doImpSt} { set import_state [::admin::importStrataCodComStructure $db $idPj $impSt] switch -exact -- $import_state \ $::admin::ERR_DBLSTR { @@ -752,16 +758,7 @@ return $::admin::ERR_STRCC } \ } - - if {$doImpGA && $is4company} { - if {[::admin::importSampleStructure $db $idPj $impGA] == -1} { - ::yalog::error "Cannot import sample structure" - ::yadb::execl $db "rollback" - return $::admin::ERR_SSTR - } - } - if {$doImpGA && !$is4company} { # NB sexage filed is setted to true here if {[::admin::importGenderAgeStructure $db $idPj $impGA] == -1} { Modified: trunk/yadmin.tcl =================================================================== --- trunk/yadmin.tcl 2011-12-07 14:36:24 UTC (rev 2124) +++ trunk/yadmin.tcl 2011-12-07 15:40:20 UTC (rev 2125) @@ -667,8 +667,11 @@ # display an error message to let the # user know that something related to # db goes wrong. -proc ::yadmin::dbError {} { - ::dialogs::error . [mc "Database Error"] [mc "Some errors occurs. Please verify your db connection and yaacs's log."] +proc ::yadmin::dbError {{title ""} {descr ""}} { + if {title eq ""} {set title [mc "Database Error"]} + if {descr eq ""} {set descr [mc "Some errors occurs. Please verify your db connection and yaacs's log."]} + + ::dialogs::error . $title $descr } # handle application "state" enabling/disabling visible @@ -717,10 +720,10 @@ [list .mbar.mops $opsReport]\ [list .mbar.mfile $fileReload] [list .mbar.mfile $fileDiscon] \ [list .ftools.ftool.edit $all] [list .ftools.ftool.bbt $all] [list .ftools.ftool.op $all] \ - [list .ftools.ftool.refresh $all] [list .ftools.ftool.disco $all] [list .mbar.msample $sampleDoIt] [list .mbar.mquota $quotaGeo]] + [list .ftools.ftool.refresh $all] [list .ftools.ftool.disco $all] [list .mbar.msample $sampleDoIt] [list .ftools.ftool.sample $all] [list .mbar.mquota $quotaGeo]] set needToBeDisabled [list [list .mbar.mquota $quotaSex] [list .mbar.mquota $quotaUnr] [list .mbar.mquota $quotaStu]\ [list .mbar.msample $sampleDoPanel] [list .mbar.msample $sampleDoQuotaPanel] \ - [list .ftools.ftool.new $all] [list .ftools.ftool.sample $all] [list .ftools.ftool.panel $all] [list .mbar.mpj $statFlushThis] \ + [list .ftools.ftool.new $all] [list .ftools.ftool.panel $all] [list .mbar.mpj $statFlushThis] \ [list .fquota.delquota $all] [list .fquota.panel $all] [list .fquota.perc $all] [list .fquota.refresh $all] [list .fquota.save $all] ] } connectedPeople { @@ -960,64 +963,57 @@ unset ::yadmin::turButton } -proc ::yadmin::importS {db isListPj} { - if {!$isListPj} { - set path [tk_getOpenFile -title [mc "Choose sampling stucture file"] \ - -filetypes [list [list "Text Files" *.txt] [list "CSV Files" *.csv] [list "All Files" *.*]]] - return $path - +proc ::yadmin::importContacts {db} { + ::yalog::debug "Begin of import contact step" + ::yalog::debug "Define contact's file structure" + set dlist [::admin::getFieldLIst $db projects import_template] + if {[llength $::yadmin::importCs] == 2} { + set slist [lindex $::yadmin::importCs 1] } else { - ::yalog::debug "Begin of import contact step" - ::yalog::debug "Define contact's file structure" - set dlist [::admin::getFieldLIst $db projects import_template] - if {[llength $::yadmin::importSome] == 2} { - set slist [lindex $::yadmin::importSome 1] - } else { - set slist [::admin::getFieldLIst $db projects mandatory_import_template] - } - if {($dlist == -1) || ($slist == -1) } { - ::dialogs::error . [mc "Import fails"] [mc "An error occurs while importing contacts.\nCheck your logs"] - } + set slist [::admin::getFieldLIst $db projects mandatory_import_template] + } + if {($dlist == -1) || ($slist == -1) } { + ::dialogs::error . [mc "Import fails"] [mc "An error occurs while importing contacts.\nCheck your logs"] + return "" + } - #subtract slist elements from dlist - set res [list] - foreach w $dlist { - if {[lsearch $slist $w] < 0} { - lappend res $w - } + #subtract slist elements from dlist + set res [list] + foreach w $dlist { + if {[lsearch $slist $w] < 0} { + lappend res $w } - set dlist $res + } + set dlist $res - set lselect [::utils::swaplist [mc "Import - Define contacts file structure"] "Available Fields" "Imported Fileds" $dlist $slist] - if {$lselect ==-1} {return ""} - - #manage selected to display better (remove type info) - set wpl "" - foreach w $slist { - set wp [string trim [lindex [split $w " - "] 0]] - set wpl "$wpl- $wp \n" - } + set lselect [::utils::swaplist [mc "Import - Define contacts file structure"] "Available Fields" "Imported Fileds" $dlist $slist] + if {$lselect ==-1} {return ""} + + #manage selected to display better (remove type info) + set wpl "" + foreach w $slist { + set wp [string trim [lindex [split $w " - "] 0]] + set wpl "$wpl- $wp \n" + } - foreach w $lselect { - set wp [string trim [lindex [split $w " - "] 0]] - lappend lselectp $wp - } + foreach w $lselect { + set wp [string trim [lindex [split $w " - "] 0]] + lappend lselectp $wp + } - #check for mandatory fields present - foreach w $slist { - if {[lsearch $lselect $w] < 0} { - ::dialogs::error . [mc "Import fails"] [mc "Fields:\n\n%s\nare mandatory.\n\nRedifine your import field list." $wpl] - return - } + #check for mandatory fields present + foreach w $slist { + if {[lsearch $lselect $w] < 0} { + ::dialogs::error . [mc "Import fails"] [mc "Fields:\n\n%s\nare mandatory.\n\nRedifine your import field list." $wpl] + return } + } - ::yalog::debug "choose contacts file" - set path [::yadmin::chooseFile [mc "Choose the contacts file"]] - if {$path==""} {return ""} - return [list $path $lselectp] + ::yalog::debug "choose contacts file" + set path [::yadmin::chooseFile [mc "Choose the contacts file"]] + if {$path==""} {return ""} + return [list $path $lselectp] - } - return } proc ::yadmin::chooseFile {msg} { @@ -1441,13 +1437,12 @@ global settedEnd global is4company - set pjName [lindex [::yadb::getTuple $db "select name from projects.projects where proj=$id" 0] 0] - if {$pjName == -1} { - ::yadmin::dbError + array set survey [::admin::getDataPj $db $id] + if {[array size survey] == 0} { + ::yadmin::dbError "Project error" "Unable to retrieve project attribute. Please check you log" return } - array set survey [::project::get_proj $db $pjName] .pj.summ.ename delete 0 end .pj.summ.ename insert 0 $survey(name) @@ -1590,33 +1585,37 @@ .pj.fsamp.soglia delete 0 end .pj.fsamp.soglia insert 0 $survey(threshold) - if {$survey(sampling_type) != 5} { - .pj.fsamp.soglia configure -state disabled + set samplet $survey(sampling_type) + set all_ws [list .pj.fsamp.importBt .pj.fsamp.importCs .pj.fsamp.importSt .pj.fsamp.importGA .pj.fsamp.importSd .pj.fsamp.lsoglia .pj.fsamp.soglia] + foreach w $all_ws {$w configure -state disabled} + set en_ws [list] + switch -exact -- $samplet { + 0 { + set en_ws [list .pj.fsamp.importBt .pj.fsamp.importGA .pj.fsamp.importSd] + } + 1 - + 4 { + set en_ws [list .pj.fsamp.importBt] + } + 2 { + set en_ws [list .pj.fsamp.importBt .pj.fsamp.importGA .pj.fsamp.importSt .pj.fsamp.importSd] + } + 3 { + # TODO manage gender /age and study degree quotas too + set en_ws [list .pj.fsamp.importBt .pj.fsamp.importCs] + } + 5 { + # TODO why we can't handle Gen Age quota on stratified with thres ? + set en_ws [list .pj.fsamp.importBt .pj.fsamp.lsoglia .pj.fsamp.soglia] + } } + foreach w $en_ws {$w configure -state normal} - if {$survey(sampling_type) != 2} { - .pj.fsamp.importSt configure -state disabled - } - if {$survey(sampling_type) != 2 && $survey(sampling_type) != 0} { - .pj.fsamp.importSd configure -state disabled + if {$survey(listed) eq "t"} { + .pj.fsamp.importCs configure -text [mc "Import more contacts..."] } - if {$survey(listed) == "f"} { - .pj.fsamp.importBt configure -text [mc "Choose sampling structure file"] - } else { - .pj.fsamp.importBt configure -text [mc "Import more contact..."] - } - - # if sampling type is cod_prov capoluo or stratified - # than we can enable "import gender age strcutre" feature - - if {$survey(sampling_type) == 0 || $survey(sampling_type) == 2 || $survey(sampling_type) == 3 } { - .pj.fsamp.importGA configure -state normal - } else { - .pj.fsamp.importGA configure -state disabled - } - .pj.time_o.voip.url.url delete 0 end .pj.time_o.voip.url.url insert 0 $survey(url) @@ -2624,6 +2623,9 @@ array set survey [::project::get_proj $db $pjName] set ::yadmin::pj $survey(proj) + array unset survey + array set survey [::admin::getDataPj $db $::yadmin::pj] + set ::yadmin::sampling_type $survey(sampling_type) set ::yadmin::pjname $survey(name) set ::yadmin::pjtable "projects.$survey(pjtable)" @@ -2654,7 +2656,7 @@ return } - if {$survey(listed) == "t"} { + if {$survey(listed) eq "t"} { ::yadmin::applicationState "connectedCompany" } else { ::yadmin::applicationState "connectedPeople" @@ -2844,6 +2846,7 @@ global settedStart global settedEnd variable ::yadmin::importSome "" + variable ::yadmin::importCs "" variable ::yadmin::importGenEta "" variable ::yadmin::importStrata "" variable ::yadmin::importStudy "" @@ -3037,12 +3040,13 @@ set en_ws [list .pj.fsamp.importBt .pj.fsamp.importGA .pj.fsamp.importSt .pj.fsamp.importSd] } 3 { + # TODO manage gender /age and study degree quotas too set en_ws [list .pj.fsamp.importBt .pj.fsamp.importCs] .pj.wt.nint set $yadmin::COM_NINT set is4company 1 } 5 { - #FIXME why we can't handle Gen Age quota on stratified with thres ? + # TODO why we can't handle Gen Age quota on stratified with thres ? set en_ws [list .pj.fsamp.importBt .pj.fsamp.lsoglia .pj.fsamp.soglia] } } @@ -3051,14 +3055,14 @@ } button .pj.fsamp.importBt -image "emblem_system16x16" -text [mc "Choose sampling structure file"] -compound left \ -command { - set ::yadmin::importSome [::yadmin::importS $passedDb $is4company] + set ::yadmin::importSome [::yadmin::chooseFile [mc "Choose sampling structure file"]] if {$::yadmin::importSome == ""} {return} } button .pj.fsamp.importCs -image "emblem_system16x16" -text [mc "Choose Contacts file..."] -compound left \ -command { - set ::yadmin::importSome [::yadmin::importS $passedDb $is4company] - if {$::yadmin::importSome == ""} {return} + set ::yadmin::importCs [::yadmin::importContacts $passedDb] + if {$::yadmin::importCs == ""} {return} } button .pj.fsamp.importGA -image "emblem_system16x16" -text [mc "Choose the Gender/Age file structure"] -compound left \ @@ -3412,13 +3416,13 @@ set createPj [::admin::newUpPj 0 $db $name $desc $duration $wtime \ $::yadmin::isActive $is4company $nint \ $samplet $soglia $pausep $freqm $briefing "" $url $tmpT $::yadmin::changed_lia\ - $::yadmin::importSome $::yadmin::importGenEta $::yadmin::importStrata $::yadmin::importStudy $gui_stuff \ + $::yadmin::importSome $::yadmin::importCs $::yadmin::importGenEta $::yadmin::importStrata $::yadmin::importStudy $gui_stuff \ $::yadmin::manpanel $::yadmin::panelpath $::yadmin::dial_prefix $::yadmin::record_calls $::yadmin::eidx] } else { set createPj [::admin::newUpPj 1 $db $name $desc $duration $wtime \ $::yadmin::isActive $is4company $nint \ $samplet $soglia $pausep $freqm $briefing "" $url $tmpT $::yadmin::changed_lia\ - $::yadmin::importSome $::yadmin::importGenEta $::yadmin::importStrata $::yadmin::importStudy $gui_stuff \ + $::yadmin::importSome $::yadmin::importCs $::yadmin::importGenEta $::yadmin::importStrata $::yadmin::importStudy $gui_stuff \ $::yadmin::manpanel $::yadmin::panelpath $::yadmin::dial_prefix $::yadmin::record_calls $yadmin::eidx $passedIdPj] } switch -exact -- $createPj \ @@ -3632,7 +3636,12 @@ set ::yadmin::changed_lia 0 array unset ::yadmin::lia array set ::yadmin::lia [list] - set l [::cati::get_lia $db $idPj] + if {$idPj ne ""} { + set l [::cati::get_lia $db $idPj] + } else { + set l 0 + } + if {$l == 0} { foreach key [list fax email sms invite] { set ::yadmin::lia($key) "" This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <si...@us...> - 2011-12-07 14:36:33
|
Revision: 2124 http://yaacs.svn.sourceforge.net/yaacs/?rev=2124&view=rev Author: sickpig Date: 2011-12-07 14:36:24 +0000 (Wed, 07 Dec 2011) Log Message: ----------- * FIX: typo s/fileds/fields Modified Paths: -------------- trunk/yaacs/admin.tcl Modified: trunk/yaacs/admin.tcl =================================================================== --- trunk/yaacs/admin.tcl 2011-12-07 14:29:34 UTC (rev 2123) +++ trunk/yaacs/admin.tcl 2011-12-07 14:36:24 UTC (rev 2124) @@ -1562,7 +1562,7 @@ } append auxT projects. $pjname _theo - set fileds [list strata,label,qty,corr,done] + set fields [list strata,label,qty,corr,done] set sorts [list strata] set res [::admin::quotaFillIn $db $auxT $fields $sorts] This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <si...@us...> - 2011-12-07 14:29:44
|
Revision: 2123 http://yaacs.svn.sourceforge.net/yaacs/?rev=2123&view=rev Author: sickpig Date: 2011-12-07 14:29:34 +0000 (Wed, 07 Dec 2011) Log Message: ----------- * FIX a thinko invert branch of an if statement Modified Paths: -------------- trunk/yaacs/sample.tcl Modified: trunk/yaacs/sample.tcl =================================================================== --- trunk/yaacs/sample.tcl 2011-12-07 13:46:54 UTC (rev 2122) +++ trunk/yaacs/sample.tcl 2011-12-07 14:29:34 UTC (rev 2123) @@ -1106,7 +1106,7 @@ } # let's find some unused contact which can be reused - if {$sampType !=3} { + if {$sampType ==3} { if {[::sample::free $db $table $sample::COD_COL] == -1} { ::yalog::error "failed to free unused contacts" return -1 This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <si...@us...> - 2011-12-07 13:47:01
|
Revision: 2122 http://yaacs.svn.sourceforge.net/yaacs/?rev=2122&view=rev Author: sickpig Date: 2011-12-07 13:46:54 +0000 (Wed, 07 Dec 2011) Log Message: ----------- * FIX: ::sample::free_panel_contacts third pars is project id Modified Paths: -------------- trunk/yaacs/sample.tcl Modified: trunk/yaacs/sample.tcl =================================================================== --- trunk/yaacs/sample.tcl 2011-12-07 13:41:21 UTC (rev 2121) +++ trunk/yaacs/sample.tcl 2011-12-07 13:46:54 UTC (rev 2122) @@ -348,7 +348,7 @@ # let's find some unused contact which can be reused #we passed pj name cause pjtable if fully qualified talbe name (with schema) - if {[::sample::free_panel_contacts $db $dataPj(name) $sample::COD_PROV_CAPOLUO] == -1} { + if {[::sample::free_panel_contacts $db $dataPj(name) $idPj] == -1} { ::yalog::error "failed to free unused panel contacts on closed quota" return -1 } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <si...@us...> - 2011-12-07 13:41:30
|
Revision: 2121 http://yaacs.svn.sourceforge.net/yaacs/?rev=2121&view=rev Author: sickpig Date: 2011-12-07 13:41:21 +0000 (Wed, 07 Dec 2011) Log Message: ----------- * remove unused variables Modified Paths: -------------- trunk/yaacs/sample.tcl Modified: trunk/yaacs/sample.tcl =================================================================== --- trunk/yaacs/sample.tcl 2011-12-07 11:42:52 UTC (rev 2120) +++ trunk/yaacs/sample.tcl 2011-12-07 13:41:21 UTC (rev 2121) @@ -2719,8 +2719,6 @@ append panelTable $pjName _panel append strataDefTable $pjName _theo_def append studyTable $pjName _theo_study - append paneTableView $pjName _enhance - append paneTableViewCLosed $pjName _enhance_closed # checking quotas to panelize # This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |