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-05-30 11:47:12
|
Revision: 2170 http://yaacs.svn.sourceforge.net/yaacs/?rev=2170&view=rev Author: sickpig Date: 2012-05-30 11:47:04 +0000 (Wed, 30 May 2012) Log Message: ----------- * FIX: add a blacklist of uid (user id). Activities related to have to be discarded in perf idxs computation * FIX: remove hloss (observation period's duration) from bb-mean. that par doesn't make any sense whatsoever Modified Paths: -------------- branches/external-stable/yaacs/admin.tcl branches/external-stable/yaacs/bbtools.tcl branches/external-stable/yadmin.tcl branches/external-trunk/yaacs/admin.tcl branches/external-trunk/yaacs/bbtools.tcl branches/external-trunk/yadmin.tcl branches/internal-stable/yaacs/admin.tcl branches/internal-stable/yaacs/bbtools.tcl branches/internal-stable/yadmin.tcl trunk/yaacs/admin.tcl trunk/yaacs/bbtools.tcl trunk/yadmin.tcl Modified: branches/external-stable/yaacs/admin.tcl =================================================================== --- branches/external-stable/yaacs/admin.tcl 2012-05-28 14:43:38 UTC (rev 2169) +++ branches/external-stable/yaacs/admin.tcl 2012-05-30 11:47:04 UTC (rev 2170) @@ -66,7 +66,7 @@ # want that interfere with your job such as # users that you use for test purpose) - variable ::admin::blackList [list ''] + variable black_list [list 326 341 330 790 1726 1308 1870 1958 -2 -6] # panel max status value variable ::admin::panel_try 2 @@ -390,7 +390,7 @@ } set strBlack "" - foreach b $::admin::blackList { + foreach b $::admin::black_list { if {$strBlack == ""} { set strBlack $b } else { @@ -2145,9 +2145,7 @@ # calculate each performance index - set ossPeriod [::bbtools::ossPeriod $db $idPj $fromHere $toHere] - set performance [::bbtools::bb-mean $db $idPj $performance_state $fromHere $toHere \ - $ops $hlsum $ossPeriod] + set performance [::bbtools::bb-mean $db $idPj $performance_state $fromHere $toHere $ops $hlsum] if {$performance==-1} { ::yalog::error "unable to get avg performance idxes for projects $idPj " return -1 @@ -2159,19 +2157,9 @@ } lappend performance $timefor - set meanPerformance [list] - for {set i 0} {$i < 3} {incr i} { - set p [lindex $performance $i] - lappend meanPerformance [format "%.1f" [expr double($p/$hlsum)]] - } - - lappend meanPerformance [lindex $performance 3] - lappend meanPerformance [lindex $performance 4] - lappend meanPerformance [lindex $performance 5] - } - lappend res $completed $left $unused $callbacks $performance $meanPerformance + lappend res $completed $left $unused $callbacks $performance } # countStateForOp - counts how many contacts has been marked Modified: branches/external-stable/yaacs/bbtools.tcl =================================================================== --- branches/external-stable/yaacs/bbtools.tcl 2012-05-28 14:43:38 UTC (rev 2169) +++ branches/external-stable/yaacs/bbtools.tcl 2012-05-30 11:47:04 UTC (rev 2170) @@ -25,6 +25,7 @@ namespace export getBlocked getBlock howManyBlocked unlock \ statUserProj blockType bb_work_hard bb-stato hour_per_int variable firtsStart + variable black_list [list 326 341 330 790 1726 1308 1870 1958 -2 -6] } # Get a list of all blocked users. If you don't know @@ -294,8 +295,9 @@ set ops_id [list] set hls [list] - set sql_ids "select distinct uid from log.activitylog where proj=$proj \ - and start_work>='$ini_turno'::timestamp and start_work<'$fin_turno'::timestamp" + set sql_ids "select distinct uid from log.activitylog where proj=$proj + and start_work>='$ini_turno'::timestamp and start_work<'$fin_turno'::timestamp + and ouid > 0 and uid not in ([join $::bbtools::black_list ,])" ::yalog::debug "osservation period start: $ossStart" @@ -380,17 +382,15 @@ # @param end when do I have to stop to look for? # @param ops_id list of 'valid' users (i.e. users that are working on proj) # @param hlsum sum of the previous list -# @param hloss osservation period's duration # @return a performance index for all operators working on # a specified project related to a specific state # On error returns -1. -proc ::bbtools::bb-mean {db proj state start end ops_id hlsum hloss} { +proc ::bbtools::bb-mean {db proj state start end ops_id hlsum} { ::yalog::debug "bb-mean index calculation" ::yalog::debug "start: $start" ::yalog::debug "end: $end" ::yalog::debug "hours worked (sum): $hlsum" - ::yalog::debug "oss period: $hloss hours" ::yalog::debug "state: $state" if {$start == "" || $end == ""} {return -1} @@ -406,7 +406,7 @@ } set idsStr "" - set myids [join $ops_id ,] + set myids [join [::yamisc::disjoin $ops_id $bbtools::black_list] ,] if {$myids != ""} { set idsStr "and uid in ($myids)" } @@ -440,7 +440,8 @@ ::yalog::debug "ni sum: $nssum" if {$hlsum != 0} { - set bign [expr $nssum/$hlsum * $hloss] + #set bign [expr $nssum/$hlsum * $hloss] + set bign [expr $nssum/$hlsum] } else { set bign 0 } @@ -497,7 +498,7 @@ set sqlMean "select date_trunc('second', avg(end_work - start_work)::time) as avgtime from $statT \ where proj=$proj and ouid=$state and start_work >= $start and \ - end_work < $end" + end_work < $end and uid not in ([join $::bbtools::black_list ,])" return [lindex [::yadb::getTuple $db $sqlMean 0] 0] } @@ -540,10 +541,10 @@ } proc ::bbtools::avgCompleted {db pj} { - set sql "select uid,date_trunc('second', avg(end_work - start_work)::time) as avgtime \ - from log.activitylog \ - where proj=$pj and uid in (select uid from log.active_users where run_touch::date = now()::date) and ouid = 8 \ - and start_work > (select min(touch) from log.active_users where run_touch::date = now()::date) \ + set sql "select uid,date_trunc('second', avg(end_work - start_work)::time) as avgtime + from log.activitylog + where proj=$pj and uid in (select uid from log.active_users where run_touch::date = now()::date and uid not in ([join $::bbtools::black_list ,])) and ouid = 8 + and start_work > (select min(touch) from log.active_users where run_touch::date = now()::date) group by uid" array set ret [list] set cmd {set ret($rec(uid)) $rec(avgtime)} @@ -737,7 +738,7 @@ proc ::bbtools::outcomesCases {db proj ops_id start statT} { set idsStr "" - set myids [join $ops_id ,] + set myids [join [::yamisc::disjoin $ops_id $bbtools::black_list] ,] if {$myids != ""} { set idsStr "and uid in ($myids)" } Modified: branches/external-stable/yadmin.tcl =================================================================== --- branches/external-stable/yadmin.tcl 2012-05-28 14:43:38 UTC (rev 2169) +++ branches/external-stable/yadmin.tcl 2012-05-30 11:47:04 UTC (rev 2170) @@ -2647,7 +2647,7 @@ set ::yadmin::sampling_type $::yadmin::survey(sampling_type) set ::yadmin::pjname $::yadmin::survey(name) - set ::yadmin::pjtable "projects.$::yadmin::survey(pjtable)" + set ::yadmin::pjtable $::yadmin::survey(pjtable) set ::yadmin::isstudy $::yadmin::survey(study) ::yadmin::clearQuotaSelection 0 $::yadmin::panelQuota 3 @@ -2741,12 +2741,7 @@ set unused [lindex $summary 2] set call [lindex $summary 3] set performance [lindex $summary 4] - set meanPerformance [lindex $summary 5] - if {$::yadmin::turnBack == -2} { - set performance $meanPerformance - } - .indexsummary.fsumm.edcomp configure -text $completed .indexsummary.fsumm.edunus configure -text $unused .indexsummary.fsumm.edleft configure -text $left Modified: branches/external-trunk/yaacs/admin.tcl =================================================================== --- branches/external-trunk/yaacs/admin.tcl 2012-05-28 14:43:38 UTC (rev 2169) +++ branches/external-trunk/yaacs/admin.tcl 2012-05-30 11:47:04 UTC (rev 2170) @@ -66,7 +66,7 @@ # want that interfere with your job such as # users that you use for test purpose) - variable ::admin::blackList [list ''] + variable black_list [list 326 341 330 790 1726 1308 1870 1958 -2 -6] # panel max status value variable ::admin::panel_try 2 @@ -390,7 +390,7 @@ } set strBlack "" - foreach b $::admin::blackList { + foreach b $::admin::black_list { if {$strBlack == ""} { set strBlack $b } else { @@ -2145,9 +2145,7 @@ # calculate each performance index - set ossPeriod [::bbtools::ossPeriod $db $idPj $fromHere $toHere] - set performance [::bbtools::bb-mean $db $idPj $performance_state $fromHere $toHere \ - $ops $hlsum $ossPeriod] + set performance [::bbtools::bb-mean $db $idPj $performance_state $fromHere $toHere $ops $hlsum] if {$performance==-1} { ::yalog::error "unable to get avg performance idxes for projects $idPj " return -1 @@ -2159,19 +2157,9 @@ } lappend performance $timefor - set meanPerformance [list] - for {set i 0} {$i < 3} {incr i} { - set p [lindex $performance $i] - lappend meanPerformance [format "%.1f" [expr double($p/$hlsum)]] - } - - lappend meanPerformance [lindex $performance 3] - lappend meanPerformance [lindex $performance 4] - lappend meanPerformance [lindex $performance 5] - } - lappend res $completed $left $unused $callbacks $performance $meanPerformance + lappend res $completed $left $unused $callbacks $performance } # countStateForOp - counts how many contacts has been marked Modified: branches/external-trunk/yaacs/bbtools.tcl =================================================================== --- branches/external-trunk/yaacs/bbtools.tcl 2012-05-28 14:43:38 UTC (rev 2169) +++ branches/external-trunk/yaacs/bbtools.tcl 2012-05-30 11:47:04 UTC (rev 2170) @@ -25,6 +25,7 @@ namespace export getBlocked getBlock howManyBlocked unlock \ statUserProj blockType bb_work_hard bb-stato hour_per_int variable firtsStart + variable black_list [list 326 341 330 790 1726 1308 1870 1958 -2 -6] } # Get a list of all blocked users. If you don't know @@ -294,8 +295,9 @@ set ops_id [list] set hls [list] - set sql_ids "select distinct uid from log.activitylog where proj=$proj \ - and start_work>='$ini_turno'::timestamp and start_work<'$fin_turno'::timestamp" + set sql_ids "select distinct uid from log.activitylog where proj=$proj + and start_work>='$ini_turno'::timestamp and start_work<'$fin_turno'::timestamp + and ouid > 0 and uid not in ([join $::bbtools::black_list ,])" ::yalog::debug "osservation period start: $ossStart" @@ -380,17 +382,15 @@ # @param end when do I have to stop to look for? # @param ops_id list of 'valid' users (i.e. users that are working on proj) # @param hlsum sum of the previous list -# @param hloss osservation period's duration # @return a performance index for all operators working on # a specified project related to a specific state # On error returns -1. -proc ::bbtools::bb-mean {db proj state start end ops_id hlsum hloss} { +proc ::bbtools::bb-mean {db proj state start end ops_id hlsum} { ::yalog::debug "bb-mean index calculation" ::yalog::debug "start: $start" ::yalog::debug "end: $end" ::yalog::debug "hours worked (sum): $hlsum" - ::yalog::debug "oss period: $hloss hours" ::yalog::debug "state: $state" if {$start == "" || $end == ""} {return -1} @@ -406,7 +406,7 @@ } set idsStr "" - set myids [join $ops_id ,] + set myids [join [::yamisc::disjoin $ops_id $bbtools::black_list] ,] if {$myids != ""} { set idsStr "and uid in ($myids)" } @@ -440,7 +440,8 @@ ::yalog::debug "ni sum: $nssum" if {$hlsum != 0} { - set bign [expr $nssum/$hlsum * $hloss] + #set bign [expr $nssum/$hlsum * $hloss] + set bign [expr $nssum/$hlsum] } else { set bign 0 } @@ -497,7 +498,7 @@ set sqlMean "select date_trunc('second', avg(end_work - start_work)::time) as avgtime from $statT \ where proj=$proj and ouid=$state and start_work >= $start and \ - end_work < $end" + end_work < $end and uid not in ([join $::bbtools::black_list ,])" return [lindex [::yadb::getTuple $db $sqlMean 0] 0] } @@ -540,10 +541,10 @@ } proc ::bbtools::avgCompleted {db pj} { - set sql "select uid,date_trunc('second', avg(end_work - start_work)::time) as avgtime \ - from log.activitylog \ - where proj=$pj and uid in (select uid from log.active_users where run_touch::date = now()::date) and ouid = 8 \ - and start_work > (select min(touch) from log.active_users where run_touch::date = now()::date) \ + set sql "select uid,date_trunc('second', avg(end_work - start_work)::time) as avgtime + from log.activitylog + where proj=$pj and uid in (select uid from log.active_users where run_touch::date = now()::date and uid not in ([join $::bbtools::black_list ,])) and ouid = 8 + and start_work > (select min(touch) from log.active_users where run_touch::date = now()::date) group by uid" array set ret [list] set cmd {set ret($rec(uid)) $rec(avgtime)} @@ -737,7 +738,7 @@ proc ::bbtools::outcomesCases {db proj ops_id start statT} { set idsStr "" - set myids [join $ops_id ,] + set myids [join [::yamisc::disjoin $ops_id $bbtools::black_list] ,] if {$myids != ""} { set idsStr "and uid in ($myids)" } Modified: branches/external-trunk/yadmin.tcl =================================================================== --- branches/external-trunk/yadmin.tcl 2012-05-28 14:43:38 UTC (rev 2169) +++ branches/external-trunk/yadmin.tcl 2012-05-30 11:47:04 UTC (rev 2170) @@ -2647,7 +2647,7 @@ set ::yadmin::sampling_type $::yadmin::survey(sampling_type) set ::yadmin::pjname $::yadmin::survey(name) - set ::yadmin::pjtable "projects.$::yadmin::survey(pjtable)" + set ::yadmin::pjtable $::yadmin::survey(pjtable) set ::yadmin::isstudy $::yadmin::survey(study) ::yadmin::clearQuotaSelection 0 $::yadmin::panelQuota 3 @@ -2741,12 +2741,7 @@ set unused [lindex $summary 2] set call [lindex $summary 3] set performance [lindex $summary 4] - set meanPerformance [lindex $summary 5] - if {$::yadmin::turnBack == -2} { - set performance $meanPerformance - } - .indexsummary.fsumm.edcomp configure -text $completed .indexsummary.fsumm.edunus configure -text $unused .indexsummary.fsumm.edleft configure -text $left Modified: branches/internal-stable/yaacs/admin.tcl =================================================================== --- branches/internal-stable/yaacs/admin.tcl 2012-05-28 14:43:38 UTC (rev 2169) +++ branches/internal-stable/yaacs/admin.tcl 2012-05-30 11:47:04 UTC (rev 2170) @@ -66,7 +66,7 @@ # want that interfere with your job such as # users that you use for test purpose) - variable ::admin::blackList [list ''] + variable black_list [list 326 341 330 790 1726 1308 1870 1958 -2 -6] # panel max status value variable ::admin::panel_try 2 @@ -390,7 +390,7 @@ } set strBlack "" - foreach b $::admin::blackList { + foreach b $::admin::black_list { if {$strBlack == ""} { set strBlack $b } else { @@ -2145,9 +2145,7 @@ # calculate each performance index - set ossPeriod [::bbtools::ossPeriod $db $idPj $fromHere $toHere] - set performance [::bbtools::bb-mean $db $idPj $performance_state $fromHere $toHere \ - $ops $hlsum $ossPeriod] + set performance [::bbtools::bb-mean $db $idPj $performance_state $fromHere $toHere $ops $hlsum] if {$performance==-1} { ::yalog::error "unable to get avg performance idxes for projects $idPj " return -1 @@ -2159,19 +2157,9 @@ } lappend performance $timefor - set meanPerformance [list] - for {set i 0} {$i < 3} {incr i} { - set p [lindex $performance $i] - lappend meanPerformance [format "%.1f" [expr double($p/$hlsum)]] - } - - lappend meanPerformance [lindex $performance 3] - lappend meanPerformance [lindex $performance 4] - lappend meanPerformance [lindex $performance 5] - } - lappend res $completed $left $unused $callbacks $performance $meanPerformance + lappend res $completed $left $unused $callbacks $performance } # countStateForOp - counts how many contacts has been marked Modified: branches/internal-stable/yaacs/bbtools.tcl =================================================================== --- branches/internal-stable/yaacs/bbtools.tcl 2012-05-28 14:43:38 UTC (rev 2169) +++ branches/internal-stable/yaacs/bbtools.tcl 2012-05-30 11:47:04 UTC (rev 2170) @@ -25,6 +25,7 @@ namespace export getBlocked getBlock howManyBlocked unlock \ statUserProj blockType bb_work_hard bb-stato hour_per_int variable firtsStart + variable black_list [list 326 341 330 790 1726 1308 1870 1958 -2 -6] } # Get a list of all blocked users. If you don't know @@ -294,8 +295,9 @@ set ops_id [list] set hls [list] - set sql_ids "select distinct uid from log.activitylog where proj=$proj \ - and start_work>='$ini_turno'::timestamp and start_work<'$fin_turno'::timestamp" + set sql_ids "select distinct uid from log.activitylog where proj=$proj + and start_work>='$ini_turno'::timestamp and start_work<'$fin_turno'::timestamp + and ouid > 0 and uid not in ([join $::bbtools::black_list ,])" ::yalog::debug "osservation period start: $ossStart" @@ -380,17 +382,15 @@ # @param end when do I have to stop to look for? # @param ops_id list of 'valid' users (i.e. users that are working on proj) # @param hlsum sum of the previous list -# @param hloss osservation period's duration # @return a performance index for all operators working on # a specified project related to a specific state # On error returns -1. -proc ::bbtools::bb-mean {db proj state start end ops_id hlsum hloss} { +proc ::bbtools::bb-mean {db proj state start end ops_id hlsum} { ::yalog::debug "bb-mean index calculation" ::yalog::debug "start: $start" ::yalog::debug "end: $end" ::yalog::debug "hours worked (sum): $hlsum" - ::yalog::debug "oss period: $hloss hours" ::yalog::debug "state: $state" if {$start == "" || $end == ""} {return -1} @@ -406,7 +406,7 @@ } set idsStr "" - set myids [join $ops_id ,] + set myids [join [::yamisc::disjoin $ops_id $bbtools::black_list] ,] if {$myids != ""} { set idsStr "and uid in ($myids)" } @@ -440,7 +440,8 @@ ::yalog::debug "ni sum: $nssum" if {$hlsum != 0} { - set bign [expr $nssum/$hlsum * $hloss] + #set bign [expr $nssum/$hlsum * $hloss] + set bign [expr $nssum/$hlsum] } else { set bign 0 } @@ -497,7 +498,7 @@ set sqlMean "select date_trunc('second', avg(end_work - start_work)::time) as avgtime from $statT \ where proj=$proj and ouid=$state and start_work >= $start and \ - end_work < $end" + end_work < $end and uid not in ([join $::bbtools::black_list ,])" return [lindex [::yadb::getTuple $db $sqlMean 0] 0] } @@ -540,10 +541,10 @@ } proc ::bbtools::avgCompleted {db pj} { - set sql "select uid,date_trunc('second', avg(end_work - start_work)::time) as avgtime \ - from log.activitylog \ - where proj=$pj and uid in (select uid from log.active_users where run_touch::date = now()::date) and ouid = 8 \ - and start_work > (select min(touch) from log.active_users where run_touch::date = now()::date) \ + set sql "select uid,date_trunc('second', avg(end_work - start_work)::time) as avgtime + from log.activitylog + where proj=$pj and uid in (select uid from log.active_users where run_touch::date = now()::date and uid not in ([join $::bbtools::black_list ,])) and ouid = 8 + and start_work > (select min(touch) from log.active_users where run_touch::date = now()::date) group by uid" array set ret [list] set cmd {set ret($rec(uid)) $rec(avgtime)} @@ -737,7 +738,7 @@ proc ::bbtools::outcomesCases {db proj ops_id start statT} { set idsStr "" - set myids [join $ops_id ,] + set myids [join [::yamisc::disjoin $ops_id $bbtools::black_list] ,] if {$myids != ""} { set idsStr "and uid in ($myids)" } Modified: branches/internal-stable/yadmin.tcl =================================================================== --- branches/internal-stable/yadmin.tcl 2012-05-28 14:43:38 UTC (rev 2169) +++ branches/internal-stable/yadmin.tcl 2012-05-30 11:47:04 UTC (rev 2170) @@ -2647,7 +2647,7 @@ set ::yadmin::sampling_type $::yadmin::survey(sampling_type) set ::yadmin::pjname $::yadmin::survey(name) - set ::yadmin::pjtable "projects.$::yadmin::survey(pjtable)" + set ::yadmin::pjtable $::yadmin::survey(pjtable) set ::yadmin::isstudy $::yadmin::survey(study) ::yadmin::clearQuotaSelection 0 $::yadmin::panelQuota 3 @@ -2741,12 +2741,7 @@ set unused [lindex $summary 2] set call [lindex $summary 3] set performance [lindex $summary 4] - set meanPerformance [lindex $summary 5] - if {$::yadmin::turnBack == -2} { - set performance $meanPerformance - } - .indexsummary.fsumm.edcomp configure -text $completed .indexsummary.fsumm.edunus configure -text $unused .indexsummary.fsumm.edleft configure -text $left Modified: trunk/yaacs/admin.tcl =================================================================== --- trunk/yaacs/admin.tcl 2012-05-28 14:43:38 UTC (rev 2169) +++ trunk/yaacs/admin.tcl 2012-05-30 11:47:04 UTC (rev 2170) @@ -66,7 +66,7 @@ # want that interfere with your job such as # users that you use for test purpose) - variable ::admin::blackList [list ''] + variable black_list [list 326 341 330 790 1726 1308 1870 1958 -2 -6] # panel max status value variable ::admin::panel_try 2 @@ -390,7 +390,7 @@ } set strBlack "" - foreach b $::admin::blackList { + foreach b $::admin::black_list { if {$strBlack == ""} { set strBlack $b } else { @@ -2145,9 +2145,7 @@ # calculate each performance index - set ossPeriod [::bbtools::ossPeriod $db $idPj $fromHere $toHere] - set performance [::bbtools::bb-mean $db $idPj $performance_state $fromHere $toHere \ - $ops $hlsum $ossPeriod] + set performance [::bbtools::bb-mean $db $idPj $performance_state $fromHere $toHere $ops $hlsum] if {$performance==-1} { ::yalog::error "unable to get avg performance idxes for projects $idPj " return -1 @@ -2159,19 +2157,9 @@ } lappend performance $timefor - set meanPerformance [list] - for {set i 0} {$i < 3} {incr i} { - set p [lindex $performance $i] - lappend meanPerformance [format "%.1f" [expr double($p/$hlsum)]] - } - - lappend meanPerformance [lindex $performance 3] - lappend meanPerformance [lindex $performance 4] - lappend meanPerformance [lindex $performance 5] - } - lappend res $completed $left $unused $callbacks $performance $meanPerformance + lappend res $completed $left $unused $callbacks $performance } # countStateForOp - counts how many contacts has been marked Modified: trunk/yaacs/bbtools.tcl =================================================================== --- trunk/yaacs/bbtools.tcl 2012-05-28 14:43:38 UTC (rev 2169) +++ trunk/yaacs/bbtools.tcl 2012-05-30 11:47:04 UTC (rev 2170) @@ -25,6 +25,7 @@ namespace export getBlocked getBlock howManyBlocked unlock \ statUserProj blockType bb_work_hard bb-stato hour_per_int variable firtsStart + variable black_list [list 326 341 330 790 1726 1308 1870 1958 -2 -6] } # Get a list of all blocked users. If you don't know @@ -294,8 +295,9 @@ set ops_id [list] set hls [list] - set sql_ids "select distinct uid from log.activitylog where proj=$proj \ - and start_work>='$ini_turno'::timestamp and start_work<'$fin_turno'::timestamp" + set sql_ids "select distinct uid from log.activitylog where proj=$proj + and start_work>='$ini_turno'::timestamp and start_work<'$fin_turno'::timestamp + and ouid > 0 and uid not in ([join $::bbtools::black_list ,])" ::yalog::debug "osservation period start: $ossStart" @@ -380,17 +382,15 @@ # @param end when do I have to stop to look for? # @param ops_id list of 'valid' users (i.e. users that are working on proj) # @param hlsum sum of the previous list -# @param hloss osservation period's duration # @return a performance index for all operators working on # a specified project related to a specific state # On error returns -1. -proc ::bbtools::bb-mean {db proj state start end ops_id hlsum hloss} { +proc ::bbtools::bb-mean {db proj state start end ops_id hlsum} { ::yalog::debug "bb-mean index calculation" ::yalog::debug "start: $start" ::yalog::debug "end: $end" ::yalog::debug "hours worked (sum): $hlsum" - ::yalog::debug "oss period: $hloss hours" ::yalog::debug "state: $state" if {$start == "" || $end == ""} {return -1} @@ -406,7 +406,7 @@ } set idsStr "" - set myids [join $ops_id ,] + set myids [join [::yamisc::disjoin $ops_id $bbtools::black_list] ,] if {$myids != ""} { set idsStr "and uid in ($myids)" } @@ -440,7 +440,8 @@ ::yalog::debug "ni sum: $nssum" if {$hlsum != 0} { - set bign [expr $nssum/$hlsum * $hloss] + #set bign [expr $nssum/$hlsum * $hloss] + set bign [expr $nssum/$hlsum] } else { set bign 0 } @@ -497,7 +498,7 @@ set sqlMean "select date_trunc('second', avg(end_work - start_work)::time) as avgtime from $statT \ where proj=$proj and ouid=$state and start_work >= $start and \ - end_work < $end" + end_work < $end and uid not in ([join $::bbtools::black_list ,])" return [lindex [::yadb::getTuple $db $sqlMean 0] 0] } @@ -540,10 +541,10 @@ } proc ::bbtools::avgCompleted {db pj} { - set sql "select uid,date_trunc('second', avg(end_work - start_work)::time) as avgtime \ - from log.activitylog \ - where proj=$pj and uid in (select uid from log.active_users where run_touch::date = now()::date) and ouid = 8 \ - and start_work > (select min(touch) from log.active_users where run_touch::date = now()::date) \ + set sql "select uid,date_trunc('second', avg(end_work - start_work)::time) as avgtime + from log.activitylog + where proj=$pj and uid in (select uid from log.active_users where run_touch::date = now()::date and uid not in ([join $::bbtools::black_list ,])) and ouid = 8 + and start_work > (select min(touch) from log.active_users where run_touch::date = now()::date) group by uid" array set ret [list] set cmd {set ret($rec(uid)) $rec(avgtime)} @@ -737,7 +738,7 @@ proc ::bbtools::outcomesCases {db proj ops_id start statT} { set idsStr "" - set myids [join $ops_id ,] + set myids [join [::yamisc::disjoin $ops_id $bbtools::black_list] ,] if {$myids != ""} { set idsStr "and uid in ($myids)" } Modified: trunk/yadmin.tcl =================================================================== --- trunk/yadmin.tcl 2012-05-28 14:43:38 UTC (rev 2169) +++ trunk/yadmin.tcl 2012-05-30 11:47:04 UTC (rev 2170) @@ -2647,7 +2647,7 @@ set ::yadmin::sampling_type $::yadmin::survey(sampling_type) set ::yadmin::pjname $::yadmin::survey(name) - set ::yadmin::pjtable "projects.$::yadmin::survey(pjtable)" + set ::yadmin::pjtable $::yadmin::survey(pjtable) set ::yadmin::isstudy $::yadmin::survey(study) ::yadmin::clearQuotaSelection 0 $::yadmin::panelQuota 3 @@ -2741,12 +2741,7 @@ set unused [lindex $summary 2] set call [lindex $summary 3] set performance [lindex $summary 4] - set meanPerformance [lindex $summary 5] - if {$::yadmin::turnBack == -2} { - set performance $meanPerformance - } - .indexsummary.fsumm.edcomp configure -text $completed .indexsummary.fsumm.edunus configure -text $unused .indexsummary.fsumm.edleft configure -text $left This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <si...@us...> - 2012-05-28 14:43:45
|
Revision: 2169 http://yaacs.svn.sourceforge.net/yaacs/?rev=2169&view=rev Author: sickpig Date: 2012-05-28 14:43:38 +0000 (Mon, 28 May 2012) Log Message: ----------- * FIX: avoid possible division by zero while computing ratio in gen/age sampling panel in cod_prov / capoluo project type * FIX: avoid to update gen/age quota when not needed (refreshQuota would raise an error otherwise cause while computing gen/age quota it would try to fetch data from not existent tables pname_{panel,enhance,enhance_closed} * FIX: free panel Cs only if our project is panel enabled (i.e pname_sex_age_theo is defined) * FIX: while editing a project setup all the needed tables/views to deal with panel sampling if they're not created previously and project admin is adding gen/age sampling structure. * FIX: a corner case where sampling panel will fail due to the fact that we are not able to find any suitable panel Cs. Instead of error out just report that we have extract 0 Cs from panel Modified Paths: -------------- branches/external-stable/yaacs/admin.tcl branches/external-stable/yaacs/sample.tcl branches/external-trunk/yaacs/admin.tcl branches/external-trunk/yaacs/sample.tcl branches/internal-stable/yaacs/admin.tcl branches/internal-stable/yaacs/sample.tcl trunk/yaacs/admin.tcl trunk/yaacs/sample.tcl Modified: branches/external-stable/yaacs/admin.tcl =================================================================== --- branches/external-stable/yaacs/admin.tcl 2012-05-18 13:42:16 UTC (rev 2168) +++ branches/external-stable/yaacs/admin.tcl 2012-05-28 14:43:38 UTC (rev 2169) @@ -769,7 +769,7 @@ # if we have genage quota (or study quota) and # we have just created the projects # start creating panel aux tables and view - if {(($doImpGA || $doImpSd) && $ce == 0) && !$is4company} { + if {($doImpGA || $doImpSd) && !$is4company} { if {[::admin::setupPanel $db $table $samplet] == -1} { ::yalog::error "Cannot create panel infrastructure for project $table" ::yadb::execl $db "rollback" @@ -1968,72 +1968,76 @@ append pjtheoTable $pjtable _theo append pjageTable $pjtable _theo_sex_age - if {[::yadb::execl $db "CREATE TABLE $panelTable AS SELECT * FROM sampling.panel LIMIT 0"] == -1} { - ::yalog::error "creation of table $panelTable failed" - return -1 - } - if {[::yadb::execl $db "ALTER TABLE $panelTable ADD COLUMN nsample integer"] == -1} { - ::yalog::error "altering table $panelTable failed (nsample)" - return -1 - } - if {[::yadb::execl $db "ALTER TABLE $panelTable ADD COLUMN qtype integer"] == -1} { - ::yalog::error "altering table $panelTable failed (qtype)" - return -1 - } + # setup panel tables/views only if we didn't created it already + if {![::yadb::tableExists $db $panelTable]} { + # body... + if {[::yadb::execl $db "CREATE TABLE $panelTable AS SELECT * FROM sampling.panel LIMIT 0"] == -1} { + ::yalog::error "creation of table $panelTable failed" + return -1 + } + if {[::yadb::execl $db "ALTER TABLE $panelTable ADD COLUMN nsample integer"] == -1} { + ::yalog::error "altering table $panelTable failed (nsample)" + return -1 + } + if {[::yadb::execl $db "ALTER TABLE $panelTable ADD COLUMN qtype integer"] == -1} { + ::yalog::error "altering table $panelTable failed (qtype)" + return -1 + } - # create a view that join Cs contact info (e.g. phone,name etc) with panel - # info (such as byear - if {[::yadb::execl $db "CREATE OR REPLACE VIEW $panelTableView AS - SELECT a.*,b.byear,b.sex,b.study,b.job - FROM $pjtable a, $panelTable b WHERE a.rid = b.rid and a.cod_com = b.cod_com"] == -1} { + # create a view that join Cs contact info (e.g. phone,name etc) with panel + # info (such as byear). + if {[::yadb::execl $db "CREATE OR REPLACE VIEW $panelTableView AS + SELECT a.*,b.byear,b.sex,b.study,b.job + FROM $pjtable a, $panelTable b WHERE a.rid = b.rid and a.cod_com = b.cod_com"] == -1} { - ::yalog::error "creation of view $panelTableView failed" - return -1 - } + ::yalog::error "creation of view $panelTableView failed" + return -1 + } - set year [::yamisc::ref_year] - # no need to specify panel > 0 cause enhance view - # contains only panel Cs, so selecting all panel contacts - # that belong to close quota - if {$samplet == 0} { - set qry "CREATE OR REPLACE VIEW $panelTableViewClosed AS - SELECT - a.rid,a.cod_com,a.cod_prov,a.ouid,a.touch,a.quota,a.retry,a.capoluo,a.label,a.strata,a.byear,a.sex,a.study,a.job, - (b.qty_capo - b.done_capo) as delta_capo, (b.qty_not_capo - b.done_not_capo) as delta_not_capo, - c.min_age, c.max_age, (c.qty + coalesce(c.corr,0) - c.done) as delta_genage - FROM - $panelTableView a, - $pjtheoTable b, - $pjageTable c - WHERE - a.cod_prov = b.cod_prov -- join cond between geo and cs - AND a.label = c.label -- join cond between genage and cs - AND ((capoluo = 1 AND b.done_capo >= b.qty_capo) - OR (capoluo = 0 AND b.done_not_capo >= b.qty_not_capo)) -- keep for closed geo quota - AND (c.done + coalesce(c.corr,0)) >= c.qty -- keep only closed genage quota - AND ($year - byear) between min_age and max_age -- filter all tuples that do not match our age - AND lower(a.sex) = lower(c.sex) -- and your gender" - } else { - set qry "CREATE OR REPLACE VIEW $panelTableViewClosed AS - SELECT - a.rid,a.cod_com,a.cod_prov,a.ouid,a.touch,a.quota,a.retry,a.capoluo,a.label,a.strata,a.byear,a.sex,a.study,a.job, - b.qty, b.open, c.min_age, c.max_age, (c.qty + coalesce(c.corr,0) - c.done) as delta_genage - FROM - $panelTableView a, - $pjtheoTable b, - $pjageTable c - WHERE - a.strata = b.strata -- join cond between geo and cs - AND a.label = c.label -- join cond between genage and cs - AND b.open -- keep for closed geo quota - AND (c.done + coalesce(c.corr,0))>= c.qty -- keep only closed genage quota - AND ($year - byear) between min_age and max_age -- filter all tuples that do not match our age - AND lower(a.sex) = lower(c.sex) -- and your gender" + set year [::yamisc::ref_year] + # no need to specify panel > 0 cause enhance view + # contains only panel Cs, so selecting all panel contacts + # that belong to close quota + if {$samplet == 0} { + set qry "CREATE OR REPLACE VIEW $panelTableViewClosed AS + SELECT + a.rid,a.cod_com,a.cod_prov,a.ouid,a.touch,a.quota,a.retry,a.capoluo,a.label,a.strata,a.byear,a.sex,a.study,a.job, + (b.qty_capo - b.done_capo) as delta_capo, (b.qty_not_capo - b.done_not_capo) as delta_not_capo, + c.min_age, c.max_age, (c.qty + coalesce(c.corr,0) - c.done) as delta_genage + FROM + $panelTableView a, + $pjtheoTable b, + $pjageTable c + WHERE + a.cod_prov = b.cod_prov -- join cond between geo and cs + AND a.label = c.label -- join cond between genage and cs + AND ((capoluo = 1 AND b.done_capo >= b.qty_capo) + OR (capoluo = 0 AND b.done_not_capo >= b.qty_not_capo)) -- keep for closed geo quota + AND (c.done + coalesce(c.corr,0)) >= c.qty -- keep only closed genage quota + AND ($year - byear) between min_age and max_age -- filter all tuples that do not match our age + AND lower(a.sex) = lower(c.sex) -- and your gender" + } else { + set qry "CREATE OR REPLACE VIEW $panelTableViewClosed AS + SELECT + a.rid,a.cod_com,a.cod_prov,a.ouid,a.touch,a.quota,a.retry,a.capoluo,a.label,a.strata,a.byear,a.sex,a.study,a.job, + b.qty, b.open, c.min_age, c.max_age, (c.qty + coalesce(c.corr,0) - c.done) as delta_genage + FROM + $panelTableView a, + $pjtheoTable b, + $pjageTable c + WHERE + a.strata = b.strata -- join cond between geo and cs + AND a.label = c.label -- join cond between genage and cs + AND b.open -- keep for closed geo quota + AND (c.done + coalesce(c.corr,0))>= c.qty -- keep only closed genage quota + AND ($year - byear) between min_age and max_age -- filter all tuples that do not match our age + AND lower(a.sex) = lower(c.sex) -- and your gender" + } + if {[::yadb::execl $db $qry] == -1} { + ::yalog::error "creation of view panelTableViewClosed failed" + return -1 + } } - if {[::yadb::execl $db $qry] == -1} { - ::yalog::error "creation of view panelTableViewClosed failed" - return -1 - } return 0 } Modified: branches/external-stable/yaacs/sample.tcl =================================================================== --- branches/external-stable/yaacs/sample.tcl 2012-05-18 13:42:16 UTC (rev 2168) +++ branches/external-stable/yaacs/sample.tcl 2012-05-28 14:43:38 UTC (rev 2169) @@ -288,10 +288,12 @@ #this table will be filled with the effective number tuples number #extracted for each strata by sampling.sample_prov_capo store procedure - - if {[::sample::refreshQuota $db $dataPj(name) $sample::COD_PROV_CAPOLUO] == -1} { + set tocheck geo + if {$dataPj(sexage) eq "t"} { + set tocheck all + } + if {[::sample::refreshQuota $db $dataPj(name) $sample::COD_PROV_CAPOLUO $tocheck] == -1} { ::yalog::error "failed to update quotas for project $$dataPj(name)" - return -1 } if {[::yadb::execl $db "Begin"] == -1 } { @@ -358,10 +360,13 @@ set campTab $dataPj(sample_table) # 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) $idPj] == -1} { - ::yalog::error "failed to free unused panel contacts on closed quota" - return -1 + # we passed pj name cause pjtable if fully qualified talbe name (with schema) + # do it only if we do have panel Cs in our panel + if {$dataPj(sexage) eq "t"} { + if {[::sample::free_panel_contacts $db $dataPj(name) $idPj] == -1} { + ::yalog::error "failed to free unused panel contacts on closed quota" + return -1 + } } if {[::sample::free $db $table $sample::COD_PROV_CAPOLUO] == -1} { @@ -1037,7 +1042,13 @@ } # update geo quotas (both geo and gen age) - if {[::sample::refreshQuota $db $dataPj(name) $stype] == -1} { + # FIXME: refreshQuota only if we have to + + set tocheck geo + if {$dataPj(sexage) eq "t"} { + set tocheck all + } + if {[::sample::refreshQuota $db $dataPj(name) $stype $tocheck] == -1} { ::yalog::error "Unable to refreh quotas" return -1 } @@ -1133,9 +1144,13 @@ # samptType = 3 -> Listed if {$sampType == 2} { - if {[::sample::free_panel_contacts $db $dataPj(name) $idPj] == -1} { - ::yalog::error "failed to free unused contacts" - return -1 + # free panel's Cs only if we have defined + # gen/age theo structure + if {$dataPj(sexage) eq "t"} { + if {[::sample::free_panel_contacts $db $dataPj(name) $idPj] == -1} { + ::yalog::error "failed to free unused contacts" + return -1 + } } } @@ -1341,6 +1356,8 @@ } } else { if {$sampType == 3} { + # FIXME remove lprob par cause we don't need it + # as long as we sort by sample,random() while extracting if {[::sample::sampleListedNew $db $codInf $codSup $table $frameTab $lprob] == -1 } { ::yalog::error "fatal error on listed sampling" return -1 @@ -2910,9 +2927,9 @@ if {$rec(distance) > 0} { # compute the fraction of tuples to fetch from capoluo based on the amount of interview still to be # gatherd in the group of strata belonging to label - set qry_prov_capo "select cod_prov,(qty_capo - done_capo)/ - (select sum(greatest((qty_capo - done_capo),0) + greatest((qty_not_capo - done_not_capo),0)) - from projects.$theoTable where label ilike [pg_quote $rec(label)])::numeric as ratio1 + set qry_prov_capo "select cod_prov,greatest((qty_capo - done_capo),0)/ + greatest((select sum(greatest((qty_capo - done_capo),0) + greatest((qty_not_capo - done_not_capo),0)) + from projects.$theoTable where label ilike [pg_quote $rec(label)]),1)::numeric as ratio1 from projects.$theoTable where $sqlGeogCapo and btrim(label) ilike [pg_quote $rec(label)]" @@ -2943,9 +2960,9 @@ } # compute the fraction of tuples to fetch from not capoluo based on the amount of interview still to be # gatherd in the group of strata belonging to label - set qry_prov_not_capo "select cod_prov,(qty_not_capo - done_not_capo)/ - (select sum(greatest((qty_capo - done_capo),0) + greatest((qty_not_capo - done_not_capo),0)) - from projects.$theoTable where label ilike [pg_quote $rec(label)])::numeric as ratio2 + set qry_prov_not_capo "select cod_prov,greatest((qty_not_capo - done_not_capo),0)/ + greatest((select sum(greatest((qty_capo - done_capo),0) + greatest((qty_not_capo - done_not_capo),0)) + from projects.$theoTable where label ilike [pg_quote $rec(label)]),1)::numeric as ratio2 from projects.$theoTable where $sqlGeogNotCapo and btrim(label) ilike [pg_quote $rec(label)]" @@ -3050,7 +3067,10 @@ } if {[llength $clist] == 0} { ::yalog::error "unable to fetch cod_prov" - return -1 + # no need to perform panel maintaenance cause + # we didn't extraxct anything + set ::sample::panelNoticeQty 0 + return 1 } # excute the actual maintenance @@ -3122,6 +3142,8 @@ } # sampleListedNew +# FIXME remove lprob par cause we don't need it +# as long as we sort by sample,random() while extracting 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" Modified: branches/external-trunk/yaacs/admin.tcl =================================================================== --- branches/external-trunk/yaacs/admin.tcl 2012-05-18 13:42:16 UTC (rev 2168) +++ branches/external-trunk/yaacs/admin.tcl 2012-05-28 14:43:38 UTC (rev 2169) @@ -769,7 +769,7 @@ # if we have genage quota (or study quota) and # we have just created the projects # start creating panel aux tables and view - if {(($doImpGA || $doImpSd) && $ce == 0) && !$is4company} { + if {($doImpGA || $doImpSd) && !$is4company} { if {[::admin::setupPanel $db $table $samplet] == -1} { ::yalog::error "Cannot create panel infrastructure for project $table" ::yadb::execl $db "rollback" @@ -1968,72 +1968,76 @@ append pjtheoTable $pjtable _theo append pjageTable $pjtable _theo_sex_age - if {[::yadb::execl $db "CREATE TABLE $panelTable AS SELECT * FROM sampling.panel LIMIT 0"] == -1} { - ::yalog::error "creation of table $panelTable failed" - return -1 - } - if {[::yadb::execl $db "ALTER TABLE $panelTable ADD COLUMN nsample integer"] == -1} { - ::yalog::error "altering table $panelTable failed (nsample)" - return -1 - } - if {[::yadb::execl $db "ALTER TABLE $panelTable ADD COLUMN qtype integer"] == -1} { - ::yalog::error "altering table $panelTable failed (qtype)" - return -1 - } + # setup panel tables/views only if we didn't created it already + if {![::yadb::tableExists $db $panelTable]} { + # body... + if {[::yadb::execl $db "CREATE TABLE $panelTable AS SELECT * FROM sampling.panel LIMIT 0"] == -1} { + ::yalog::error "creation of table $panelTable failed" + return -1 + } + if {[::yadb::execl $db "ALTER TABLE $panelTable ADD COLUMN nsample integer"] == -1} { + ::yalog::error "altering table $panelTable failed (nsample)" + return -1 + } + if {[::yadb::execl $db "ALTER TABLE $panelTable ADD COLUMN qtype integer"] == -1} { + ::yalog::error "altering table $panelTable failed (qtype)" + return -1 + } - # create a view that join Cs contact info (e.g. phone,name etc) with panel - # info (such as byear - if {[::yadb::execl $db "CREATE OR REPLACE VIEW $panelTableView AS - SELECT a.*,b.byear,b.sex,b.study,b.job - FROM $pjtable a, $panelTable b WHERE a.rid = b.rid and a.cod_com = b.cod_com"] == -1} { + # create a view that join Cs contact info (e.g. phone,name etc) with panel + # info (such as byear). + if {[::yadb::execl $db "CREATE OR REPLACE VIEW $panelTableView AS + SELECT a.*,b.byear,b.sex,b.study,b.job + FROM $pjtable a, $panelTable b WHERE a.rid = b.rid and a.cod_com = b.cod_com"] == -1} { - ::yalog::error "creation of view $panelTableView failed" - return -1 - } + ::yalog::error "creation of view $panelTableView failed" + return -1 + } - set year [::yamisc::ref_year] - # no need to specify panel > 0 cause enhance view - # contains only panel Cs, so selecting all panel contacts - # that belong to close quota - if {$samplet == 0} { - set qry "CREATE OR REPLACE VIEW $panelTableViewClosed AS - SELECT - a.rid,a.cod_com,a.cod_prov,a.ouid,a.touch,a.quota,a.retry,a.capoluo,a.label,a.strata,a.byear,a.sex,a.study,a.job, - (b.qty_capo - b.done_capo) as delta_capo, (b.qty_not_capo - b.done_not_capo) as delta_not_capo, - c.min_age, c.max_age, (c.qty + coalesce(c.corr,0) - c.done) as delta_genage - FROM - $panelTableView a, - $pjtheoTable b, - $pjageTable c - WHERE - a.cod_prov = b.cod_prov -- join cond between geo and cs - AND a.label = c.label -- join cond between genage and cs - AND ((capoluo = 1 AND b.done_capo >= b.qty_capo) - OR (capoluo = 0 AND b.done_not_capo >= b.qty_not_capo)) -- keep for closed geo quota - AND (c.done + coalesce(c.corr,0)) >= c.qty -- keep only closed genage quota - AND ($year - byear) between min_age and max_age -- filter all tuples that do not match our age - AND lower(a.sex) = lower(c.sex) -- and your gender" - } else { - set qry "CREATE OR REPLACE VIEW $panelTableViewClosed AS - SELECT - a.rid,a.cod_com,a.cod_prov,a.ouid,a.touch,a.quota,a.retry,a.capoluo,a.label,a.strata,a.byear,a.sex,a.study,a.job, - b.qty, b.open, c.min_age, c.max_age, (c.qty + coalesce(c.corr,0) - c.done) as delta_genage - FROM - $panelTableView a, - $pjtheoTable b, - $pjageTable c - WHERE - a.strata = b.strata -- join cond between geo and cs - AND a.label = c.label -- join cond between genage and cs - AND b.open -- keep for closed geo quota - AND (c.done + coalesce(c.corr,0))>= c.qty -- keep only closed genage quota - AND ($year - byear) between min_age and max_age -- filter all tuples that do not match our age - AND lower(a.sex) = lower(c.sex) -- and your gender" + set year [::yamisc::ref_year] + # no need to specify panel > 0 cause enhance view + # contains only panel Cs, so selecting all panel contacts + # that belong to close quota + if {$samplet == 0} { + set qry "CREATE OR REPLACE VIEW $panelTableViewClosed AS + SELECT + a.rid,a.cod_com,a.cod_prov,a.ouid,a.touch,a.quota,a.retry,a.capoluo,a.label,a.strata,a.byear,a.sex,a.study,a.job, + (b.qty_capo - b.done_capo) as delta_capo, (b.qty_not_capo - b.done_not_capo) as delta_not_capo, + c.min_age, c.max_age, (c.qty + coalesce(c.corr,0) - c.done) as delta_genage + FROM + $panelTableView a, + $pjtheoTable b, + $pjageTable c + WHERE + a.cod_prov = b.cod_prov -- join cond between geo and cs + AND a.label = c.label -- join cond between genage and cs + AND ((capoluo = 1 AND b.done_capo >= b.qty_capo) + OR (capoluo = 0 AND b.done_not_capo >= b.qty_not_capo)) -- keep for closed geo quota + AND (c.done + coalesce(c.corr,0)) >= c.qty -- keep only closed genage quota + AND ($year - byear) between min_age and max_age -- filter all tuples that do not match our age + AND lower(a.sex) = lower(c.sex) -- and your gender" + } else { + set qry "CREATE OR REPLACE VIEW $panelTableViewClosed AS + SELECT + a.rid,a.cod_com,a.cod_prov,a.ouid,a.touch,a.quota,a.retry,a.capoluo,a.label,a.strata,a.byear,a.sex,a.study,a.job, + b.qty, b.open, c.min_age, c.max_age, (c.qty + coalesce(c.corr,0) - c.done) as delta_genage + FROM + $panelTableView a, + $pjtheoTable b, + $pjageTable c + WHERE + a.strata = b.strata -- join cond between geo and cs + AND a.label = c.label -- join cond between genage and cs + AND b.open -- keep for closed geo quota + AND (c.done + coalesce(c.corr,0))>= c.qty -- keep only closed genage quota + AND ($year - byear) between min_age and max_age -- filter all tuples that do not match our age + AND lower(a.sex) = lower(c.sex) -- and your gender" + } + if {[::yadb::execl $db $qry] == -1} { + ::yalog::error "creation of view panelTableViewClosed failed" + return -1 + } } - if {[::yadb::execl $db $qry] == -1} { - ::yalog::error "creation of view panelTableViewClosed failed" - return -1 - } return 0 } Modified: branches/external-trunk/yaacs/sample.tcl =================================================================== --- branches/external-trunk/yaacs/sample.tcl 2012-05-18 13:42:16 UTC (rev 2168) +++ branches/external-trunk/yaacs/sample.tcl 2012-05-28 14:43:38 UTC (rev 2169) @@ -288,10 +288,12 @@ #this table will be filled with the effective number tuples number #extracted for each strata by sampling.sample_prov_capo store procedure - - if {[::sample::refreshQuota $db $dataPj(name) $sample::COD_PROV_CAPOLUO] == -1} { + set tocheck geo + if {$dataPj(sexage) eq "t"} { + set tocheck all + } + if {[::sample::refreshQuota $db $dataPj(name) $sample::COD_PROV_CAPOLUO $tocheck] == -1} { ::yalog::error "failed to update quotas for project $$dataPj(name)" - return -1 } if {[::yadb::execl $db "Begin"] == -1 } { @@ -358,10 +360,13 @@ set campTab $dataPj(sample_table) # 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) $idPj] == -1} { - ::yalog::error "failed to free unused panel contacts on closed quota" - return -1 + # we passed pj name cause pjtable if fully qualified talbe name (with schema) + # do it only if we do have panel Cs in our panel + if {$dataPj(sexage) eq "t"} { + if {[::sample::free_panel_contacts $db $dataPj(name) $idPj] == -1} { + ::yalog::error "failed to free unused panel contacts on closed quota" + return -1 + } } if {[::sample::free $db $table $sample::COD_PROV_CAPOLUO] == -1} { @@ -1037,7 +1042,13 @@ } # update geo quotas (both geo and gen age) - if {[::sample::refreshQuota $db $dataPj(name) $stype] == -1} { + # FIXME: refreshQuota only if we have to + + set tocheck geo + if {$dataPj(sexage) eq "t"} { + set tocheck all + } + if {[::sample::refreshQuota $db $dataPj(name) $stype $tocheck] == -1} { ::yalog::error "Unable to refreh quotas" return -1 } @@ -1133,9 +1144,13 @@ # samptType = 3 -> Listed if {$sampType == 2} { - if {[::sample::free_panel_contacts $db $dataPj(name) $idPj] == -1} { - ::yalog::error "failed to free unused contacts" - return -1 + # free panel's Cs only if we have defined + # gen/age theo structure + if {$dataPj(sexage) eq "t"} { + if {[::sample::free_panel_contacts $db $dataPj(name) $idPj] == -1} { + ::yalog::error "failed to free unused contacts" + return -1 + } } } @@ -1341,6 +1356,8 @@ } } else { if {$sampType == 3} { + # FIXME remove lprob par cause we don't need it + # as long as we sort by sample,random() while extracting if {[::sample::sampleListedNew $db $codInf $codSup $table $frameTab $lprob] == -1 } { ::yalog::error "fatal error on listed sampling" return -1 @@ -2910,9 +2927,9 @@ if {$rec(distance) > 0} { # compute the fraction of tuples to fetch from capoluo based on the amount of interview still to be # gatherd in the group of strata belonging to label - set qry_prov_capo "select cod_prov,(qty_capo - done_capo)/ - (select sum(greatest((qty_capo - done_capo),0) + greatest((qty_not_capo - done_not_capo),0)) - from projects.$theoTable where label ilike [pg_quote $rec(label)])::numeric as ratio1 + set qry_prov_capo "select cod_prov,greatest((qty_capo - done_capo),0)/ + greatest((select sum(greatest((qty_capo - done_capo),0) + greatest((qty_not_capo - done_not_capo),0)) + from projects.$theoTable where label ilike [pg_quote $rec(label)]),1)::numeric as ratio1 from projects.$theoTable where $sqlGeogCapo and btrim(label) ilike [pg_quote $rec(label)]" @@ -2943,9 +2960,9 @@ } # compute the fraction of tuples to fetch from not capoluo based on the amount of interview still to be # gatherd in the group of strata belonging to label - set qry_prov_not_capo "select cod_prov,(qty_not_capo - done_not_capo)/ - (select sum(greatest((qty_capo - done_capo),0) + greatest((qty_not_capo - done_not_capo),0)) - from projects.$theoTable where label ilike [pg_quote $rec(label)])::numeric as ratio2 + set qry_prov_not_capo "select cod_prov,greatest((qty_not_capo - done_not_capo),0)/ + greatest((select sum(greatest((qty_capo - done_capo),0) + greatest((qty_not_capo - done_not_capo),0)) + from projects.$theoTable where label ilike [pg_quote $rec(label)]),1)::numeric as ratio2 from projects.$theoTable where $sqlGeogNotCapo and btrim(label) ilike [pg_quote $rec(label)]" @@ -3050,7 +3067,10 @@ } if {[llength $clist] == 0} { ::yalog::error "unable to fetch cod_prov" - return -1 + # no need to perform panel maintaenance cause + # we didn't extraxct anything + set ::sample::panelNoticeQty 0 + return 1 } # excute the actual maintenance @@ -3122,6 +3142,8 @@ } # sampleListedNew +# FIXME remove lprob par cause we don't need it +# as long as we sort by sample,random() while extracting 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" Modified: branches/internal-stable/yaacs/admin.tcl =================================================================== --- branches/internal-stable/yaacs/admin.tcl 2012-05-18 13:42:16 UTC (rev 2168) +++ branches/internal-stable/yaacs/admin.tcl 2012-05-28 14:43:38 UTC (rev 2169) @@ -769,7 +769,7 @@ # if we have genage quota (or study quota) and # we have just created the projects # start creating panel aux tables and view - if {(($doImpGA || $doImpSd) && $ce == 0) && !$is4company} { + if {($doImpGA || $doImpSd) && !$is4company} { if {[::admin::setupPanel $db $table $samplet] == -1} { ::yalog::error "Cannot create panel infrastructure for project $table" ::yadb::execl $db "rollback" @@ -1968,72 +1968,76 @@ append pjtheoTable $pjtable _theo append pjageTable $pjtable _theo_sex_age - if {[::yadb::execl $db "CREATE TABLE $panelTable AS SELECT * FROM sampling.panel LIMIT 0"] == -1} { - ::yalog::error "creation of table $panelTable failed" - return -1 - } - if {[::yadb::execl $db "ALTER TABLE $panelTable ADD COLUMN nsample integer"] == -1} { - ::yalog::error "altering table $panelTable failed (nsample)" - return -1 - } - if {[::yadb::execl $db "ALTER TABLE $panelTable ADD COLUMN qtype integer"] == -1} { - ::yalog::error "altering table $panelTable failed (qtype)" - return -1 - } + # setup panel tables/views only if we didn't created it already + if {![::yadb::tableExists $db $panelTable]} { + # body... + if {[::yadb::execl $db "CREATE TABLE $panelTable AS SELECT * FROM sampling.panel LIMIT 0"] == -1} { + ::yalog::error "creation of table $panelTable failed" + return -1 + } + if {[::yadb::execl $db "ALTER TABLE $panelTable ADD COLUMN nsample integer"] == -1} { + ::yalog::error "altering table $panelTable failed (nsample)" + return -1 + } + if {[::yadb::execl $db "ALTER TABLE $panelTable ADD COLUMN qtype integer"] == -1} { + ::yalog::error "altering table $panelTable failed (qtype)" + return -1 + } - # create a view that join Cs contact info (e.g. phone,name etc) with panel - # info (such as byear - if {[::yadb::execl $db "CREATE OR REPLACE VIEW $panelTableView AS - SELECT a.*,b.byear,b.sex,b.study,b.job - FROM $pjtable a, $panelTable b WHERE a.rid = b.rid and a.cod_com = b.cod_com"] == -1} { + # create a view that join Cs contact info (e.g. phone,name etc) with panel + # info (such as byear). + if {[::yadb::execl $db "CREATE OR REPLACE VIEW $panelTableView AS + SELECT a.*,b.byear,b.sex,b.study,b.job + FROM $pjtable a, $panelTable b WHERE a.rid = b.rid and a.cod_com = b.cod_com"] == -1} { - ::yalog::error "creation of view $panelTableView failed" - return -1 - } + ::yalog::error "creation of view $panelTableView failed" + return -1 + } - set year [::yamisc::ref_year] - # no need to specify panel > 0 cause enhance view - # contains only panel Cs, so selecting all panel contacts - # that belong to close quota - if {$samplet == 0} { - set qry "CREATE OR REPLACE VIEW $panelTableViewClosed AS - SELECT - a.rid,a.cod_com,a.cod_prov,a.ouid,a.touch,a.quota,a.retry,a.capoluo,a.label,a.strata,a.byear,a.sex,a.study,a.job, - (b.qty_capo - b.done_capo) as delta_capo, (b.qty_not_capo - b.done_not_capo) as delta_not_capo, - c.min_age, c.max_age, (c.qty + coalesce(c.corr,0) - c.done) as delta_genage - FROM - $panelTableView a, - $pjtheoTable b, - $pjageTable c - WHERE - a.cod_prov = b.cod_prov -- join cond between geo and cs - AND a.label = c.label -- join cond between genage and cs - AND ((capoluo = 1 AND b.done_capo >= b.qty_capo) - OR (capoluo = 0 AND b.done_not_capo >= b.qty_not_capo)) -- keep for closed geo quota - AND (c.done + coalesce(c.corr,0)) >= c.qty -- keep only closed genage quota - AND ($year - byear) between min_age and max_age -- filter all tuples that do not match our age - AND lower(a.sex) = lower(c.sex) -- and your gender" - } else { - set qry "CREATE OR REPLACE VIEW $panelTableViewClosed AS - SELECT - a.rid,a.cod_com,a.cod_prov,a.ouid,a.touch,a.quota,a.retry,a.capoluo,a.label,a.strata,a.byear,a.sex,a.study,a.job, - b.qty, b.open, c.min_age, c.max_age, (c.qty + coalesce(c.corr,0) - c.done) as delta_genage - FROM - $panelTableView a, - $pjtheoTable b, - $pjageTable c - WHERE - a.strata = b.strata -- join cond between geo and cs - AND a.label = c.label -- join cond between genage and cs - AND b.open -- keep for closed geo quota - AND (c.done + coalesce(c.corr,0))>= c.qty -- keep only closed genage quota - AND ($year - byear) between min_age and max_age -- filter all tuples that do not match our age - AND lower(a.sex) = lower(c.sex) -- and your gender" + set year [::yamisc::ref_year] + # no need to specify panel > 0 cause enhance view + # contains only panel Cs, so selecting all panel contacts + # that belong to close quota + if {$samplet == 0} { + set qry "CREATE OR REPLACE VIEW $panelTableViewClosed AS + SELECT + a.rid,a.cod_com,a.cod_prov,a.ouid,a.touch,a.quota,a.retry,a.capoluo,a.label,a.strata,a.byear,a.sex,a.study,a.job, + (b.qty_capo - b.done_capo) as delta_capo, (b.qty_not_capo - b.done_not_capo) as delta_not_capo, + c.min_age, c.max_age, (c.qty + coalesce(c.corr,0) - c.done) as delta_genage + FROM + $panelTableView a, + $pjtheoTable b, + $pjageTable c + WHERE + a.cod_prov = b.cod_prov -- join cond between geo and cs + AND a.label = c.label -- join cond between genage and cs + AND ((capoluo = 1 AND b.done_capo >= b.qty_capo) + OR (capoluo = 0 AND b.done_not_capo >= b.qty_not_capo)) -- keep for closed geo quota + AND (c.done + coalesce(c.corr,0)) >= c.qty -- keep only closed genage quota + AND ($year - byear) between min_age and max_age -- filter all tuples that do not match our age + AND lower(a.sex) = lower(c.sex) -- and your gender" + } else { + set qry "CREATE OR REPLACE VIEW $panelTableViewClosed AS + SELECT + a.rid,a.cod_com,a.cod_prov,a.ouid,a.touch,a.quota,a.retry,a.capoluo,a.label,a.strata,a.byear,a.sex,a.study,a.job, + b.qty, b.open, c.min_age, c.max_age, (c.qty + coalesce(c.corr,0) - c.done) as delta_genage + FROM + $panelTableView a, + $pjtheoTable b, + $pjageTable c + WHERE + a.strata = b.strata -- join cond between geo and cs + AND a.label = c.label -- join cond between genage and cs + AND b.open -- keep for closed geo quota + AND (c.done + coalesce(c.corr,0))>= c.qty -- keep only closed genage quota + AND ($year - byear) between min_age and max_age -- filter all tuples that do not match our age + AND lower(a.sex) = lower(c.sex) -- and your gender" + } + if {[::yadb::execl $db $qry] == -1} { + ::yalog::error "creation of view panelTableViewClosed failed" + return -1 + } } - if {[::yadb::execl $db $qry] == -1} { - ::yalog::error "creation of view panelTableViewClosed failed" - return -1 - } return 0 } Modified: branches/internal-stable/yaacs/sample.tcl =================================================================== --- branches/internal-stable/yaacs/sample.tcl 2012-05-18 13:42:16 UTC (rev 2168) +++ branches/internal-stable/yaacs/sample.tcl 2012-05-28 14:43:38 UTC (rev 2169) @@ -288,10 +288,12 @@ #this table will be filled with the effective number tuples number #extracted for each strata by sampling.sample_prov_capo store procedure - - if {[::sample::refreshQuota $db $dataPj(name) $sample::COD_PROV_CAPOLUO] == -1} { + set tocheck geo + if {$dataPj(sexage) eq "t"} { + set tocheck all + } + if {[::sample::refreshQuota $db $dataPj(name) $sample::COD_PROV_CAPOLUO $tocheck] == -1} { ::yalog::error "failed to update quotas for project $$dataPj(name)" - return -1 } if {[::yadb::execl $db "Begin"] == -1 } { @@ -358,10 +360,13 @@ set campTab $dataPj(sample_table) # 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) $idPj] == -1} { - ::yalog::error "failed to free unused panel contacts on closed quota" - return -1 + # we passed pj name cause pjtable if fully qualified talbe name (with schema) + # do it only if we do have panel Cs in our panel + if {$dataPj(sexage) eq "t"} { + if {[::sample::free_panel_contacts $db $dataPj(name) $idPj] == -1} { + ::yalog::error "failed to free unused panel contacts on closed quota" + return -1 + } } if {[::sample::free $db $table $sample::COD_PROV_CAPOLUO] == -1} { @@ -1037,7 +1042,13 @@ } # update geo quotas (both geo and gen age) - if {[::sample::refreshQuota $db $dataPj(name) $stype] == -1} { + # FIXME: refreshQuota only if we have to + + set tocheck geo + if {$dataPj(sexage) eq "t"} { + set tocheck all + } + if {[::sample::refreshQuota $db $dataPj(name) $stype $tocheck] == -1} { ::yalog::error "Unable to refreh quotas" return -1 } @@ -1133,9 +1144,13 @@ # samptType = 3 -> Listed if {$sampType == 2} { - if {[::sample::free_panel_contacts $db $dataPj(name) $idPj] == -1} { - ::yalog::error "failed to free unused contacts" - return -1 + # free panel's Cs only if we have defined + # gen/age theo structure + if {$dataPj(sexage) eq "t"} { + if {[::sample::free_panel_contacts $db $dataPj(name) $idPj] == -1} { + ::yalog::error "failed to free unused contacts" + return -1 + } } } @@ -1341,6 +1356,8 @@ } } else { if {$sampType == 3} { + # FIXME remove lprob par cause we don't need it + # as long as we sort by sample,random() while extracting if {[::sample::sampleListedNew $db $codInf $codSup $table $frameTab $lprob] == -1 } { ::yalog::error "fatal error on listed sampling" return -1 @@ -2910,9 +2927,9 @@ if {$rec(distance) > 0} { # compute the fraction of tuples to fetch from capoluo based on the amount of interview still to be # gatherd in the group of strata belonging to label - set qry_prov_capo "select cod_prov,(qty_capo - done_capo)/ - (select sum(greatest((qty_capo - done_capo),0) + greatest((qty_not_capo - done_not_capo),0)) - from projects.$theoTable where label ilike [pg_quote $rec(label)])::numeric as ratio1 + set qry_prov_capo "select cod_prov,greatest((qty_capo - done_capo),0)/ + greatest((select sum(greatest((qty_capo - done_capo),0) + greatest((qty_not_capo - done_not_capo),0)) + from projects.$theoTable where label ilike [pg_quote $rec(label)]),1)::numeric as ratio1 from projects.$theoTable where $sqlGeogCapo and btrim(label) ilike [pg_quote $rec(label)]" @@ -2943,9 +2960,9 @@ } # compute the fraction of tuples to fetch from not capoluo based on the amount of interview still to be # gatherd in the group of strata belonging to label - set qry_prov_not_capo "select cod_prov,(qty_not_capo - done_not_capo)/ - (select sum(greatest((qty_capo - done_capo),0) + greatest((qty_not_capo - done_not_capo),0)) - from projects.$theoTable where label ilike [pg_quote $rec(label)])::numeric as ratio2 + set qry_prov_not_capo "select cod_prov,greatest((qty_not_capo - done_not_capo),0)/ + greatest((select sum(greatest((qty_capo - done_capo),0) + greatest((qty_not_capo - done_not_capo),0)) + from projects.$theoTable where label ilike [pg_quote $rec(label)]),1)::numeric as ratio2 from projects.$theoTable where $sqlGeogNotCapo and btrim(label) ilike [pg_quote $rec(label)]" @@ -3050,7 +3067,10 @@ } if {[llength $clist] == 0} { ::yalog::error "unable to fetch cod_prov" - return -1 + # no need to perform panel maintaenance cause + # we didn't extraxct anything + set ::sample::panelNoticeQty 0 + return 1 } # excute the actual maintenance @@ -3122,6 +3142,8 @@ } # sampleListedNew +# FIXME remove lprob par cause we don't need it +# as long as we sort by sample,random() while extracting 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" Modified: trunk/yaacs/admin.tcl =================================================================== --- trunk/yaacs/admin.tcl 2012-05-18 13:42:16 UTC (rev 2168) +++ trunk/yaacs/admin.tcl 2012-05-28 14:43:38 UTC (rev 2169) @@ -769,7 +769,7 @@ # if we have genage quota (or study quota) and # we have just created the projects # start creating panel aux tables and view - if {(($doImpGA || $doImpSd) && $ce == 0) && !$is4company} { + if {($doImpGA || $doImpSd) && !$is4company} { if {[::admin::setupPanel $db $table $samplet] == -1} { ::yalog::error "Cannot create panel infrastructure for project $table" ::yadb::execl $db "rollback" @@ -1968,72 +1968,76 @@ append pjtheoTable $pjtable _theo append pjageTable $pjtable _theo_sex_age - if {[::yadb::execl $db "CREATE TABLE $panelTable AS SELECT * FROM sampling.panel LIMIT 0"] == -1} { - ::yalog::error "creation of table $panelTable failed" - return -1 - } - if {[::yadb::execl $db "ALTER TABLE $panelTable ADD COLUMN nsample integer"] == -1} { - ::yalog::error "altering table $panelTable failed (nsample)" - return -1 - } - if {[::yadb::execl $db "ALTER TABLE $panelTable ADD COLUMN qtype integer"] == -1} { - ::yalog::error "altering table $panelTable failed (qtype)" - return -1 - } + # setup panel tables/views only if we didn't created it already + if {![::yadb::tableExists $db $panelTable]} { + # body... + if {[::yadb::execl $db "CREATE TABLE $panelTable AS SELECT * FROM sampling.panel LIMIT 0"] == -1} { + ::yalog::error "creation of table $panelTable failed" + return -1 + } + if {[::yadb::execl $db "ALTER TABLE $panelTable ADD COLUMN nsample integer"] == -1} { + ::yalog::error "altering table $panelTable failed (nsample)" + return -1 + } + if {[::yadb::execl $db "ALTER TABLE $panelTable ADD COLUMN qtype integer"] == -1} { + ::yalog::error "altering table $panelTable failed (qtype)" + return -1 + } - # create a view that join Cs contact info (e.g. phone,name etc) with panel - # info (such as byear - if {[::yadb::execl $db "CREATE OR REPLACE VIEW $panelTableView AS - SELECT a.*,b.byear,b.sex,b.study,b.job - FROM $pjtable a, $panelTable b WHERE a.rid = b.rid and a.cod_com = b.cod_com"] == -1} { + # create a view that join Cs contact info (e.g. phone,name etc) with panel + # info (such as byear). + if {[::yadb::execl $db "CREATE OR REPLACE VIEW $panelTableView AS + SELECT a.*,b.byear,b.sex,b.study,b.job + FROM $pjtable a, $panelTable b WHERE a.rid = b.rid and a.cod_com = b.cod_com"] == -1} { - ::yalog::error "creation of view $panelTableView failed" - return -1 - } + ::yalog::error "creation of view $panelTableView failed" + return -1 + } - set year [::yamisc::ref_year] - # no need to specify panel > 0 cause enhance view - # contains only panel Cs, so selecting all panel contacts - # that belong to close quota - if {$samplet == 0} { - set qry "CREATE OR REPLACE VIEW $panelTableViewClosed AS - SELECT - a.rid,a.cod_com,a.cod_prov,a.ouid,a.touch,a.quota,a.retry,a.capoluo,a.label,a.strata,a.byear,a.sex,a.study,a.job, - (b.qty_capo - b.done_capo) as delta_capo, (b.qty_not_capo - b.done_not_capo) as delta_not_capo, - c.min_age, c.max_age, (c.qty + coalesce(c.corr,0) - c.done) as delta_genage - FROM - $panelTableView a, - $pjtheoTable b, - $pjageTable c - WHERE - a.cod_prov = b.cod_prov -- join cond between geo and cs - AND a.label = c.label -- join cond between genage and cs - AND ((capoluo = 1 AND b.done_capo >= b.qty_capo) - OR (capoluo = 0 AND b.done_not_capo >= b.qty_not_capo)) -- keep for closed geo quota - AND (c.done + coalesce(c.corr,0)) >= c.qty -- keep only closed genage quota - AND ($year - byear) between min_age and max_age -- filter all tuples that do not match our age - AND lower(a.sex) = lower(c.sex) -- and your gender" - } else { - set qry "CREATE OR REPLACE VIEW $panelTableViewClosed AS - SELECT - a.rid,a.cod_com,a.cod_prov,a.ouid,a.touch,a.quota,a.retry,a.capoluo,a.label,a.strata,a.byear,a.sex,a.study,a.job, - b.qty, b.open, c.min_age, c.max_age, (c.qty + coalesce(c.corr,0) - c.done) as delta_genage - FROM - $panelTableView a, - $pjtheoTable b, - $pjageTable c - WHERE - a.strata = b.strata -- join cond between geo and cs - AND a.label = c.label -- join cond between genage and cs - AND b.open -- keep for closed geo quota - AND (c.done + coalesce(c.corr,0))>= c.qty -- keep only closed genage quota - AND ($year - byear) between min_age and max_age -- filter all tuples that do not match our age - AND lower(a.sex) = lower(c.sex) -- and your gender" + set year [::yamisc::ref_year] + # no need to specify panel > 0 cause enhance view + # contains only panel Cs, so selecting all panel contacts + # that belong to close quota + if {$samplet == 0} { + set qry "CREATE OR REPLACE VIEW $panelTableViewClosed AS + SELECT + a.rid,a.cod_com,a.cod_prov,a.ouid,a.touch,a.quota,a.retry,a.capoluo,a.label,a.strata,a.byear,a.sex,a.study,a.job, + (b.qty_capo - b.done_capo) as delta_capo, (b.qty_not_capo - b.done_not_capo) as delta_not_capo, + c.min_age, c.max_age, (c.qty + coalesce(c.corr,0) - c.done) as delta_genage + FROM + $panelTableView a, + $pjtheoTable b, + $pjageTable c + WHERE + a.cod_prov = b.cod_prov -- join cond between geo and cs + AND a.label = c.label -- join cond between genage and cs + AND ((capoluo = 1 AND b.done_capo >= b.qty_capo) + OR (capoluo = 0 AND b.done_not_capo >= b.qty_not_capo)) -- keep for closed geo quota + AND (c.done + coalesce(c.corr,0)) >= c.qty -- keep only closed genage quota + AND ($year - byear) between min_age and max_age -- filter all tuples that do not match our age + AND lower(a.sex) = lower(c.sex) -- and your gender" + } else { + set qry "CREATE OR REPLACE VIEW $panelTableViewClosed AS + SELECT + a.rid,a.cod_com,a.cod_prov,a.ouid,a.touch,a.quota,a.retry,a.capoluo,a.label,a.strata,a.byear,a.sex,a.study,a.job, + b.qty, b.open, c.min_age, c.max_age, (c.qty + coalesce(c.corr,0) - c.done) as delta_genage + FROM + $panelTableView a, + $pjtheoTable b, + $pjageTable c + WHERE + a.strata = b.strata -- join cond between geo and cs + AND a.label = c.label -- join cond between genage and cs + AND b.open -- keep for closed geo quota + AND (c.done + coalesce(c.corr,0))>= c.qty -- keep only closed genage quota + AND ($year - byear) between min_age and max_age -- filter all tuples that do not match our age + AND lower(a.sex) = lower(c.sex) -- and your gender" + } + if {[::yadb::execl $db $qry] == -1} { + ::yalog::error "creation of view panelTableViewClosed failed" + return -1 + } } - if {[::yadb::execl $db $qry] == -1} { - ::yalog::error "creation of view panelTableViewClosed failed" - return -1 - } return 0 } Modified: trunk/yaacs/sample.tcl =================================================================== --- trunk/yaacs/sample.tcl 2012-05-18 13:42:16 UTC (rev 2168) +++ trunk/yaacs/sample.tcl 2012-05-28 14:43:38 UTC (rev 2169) @@ -288,10 +288,12 @@ #this table will be filled with the effective number tuples number #extracted for each strata by sampling.sample_prov_capo store procedure - - if {[::sample::refreshQuota $db $dataPj(name) $sample::COD_PROV_CAPOLUO] == -1} { + set tocheck geo + if {$dataPj(sexage) eq "t"} { + set tocheck all + } + if {[::sample::refreshQuota $db $dataPj(name) $sample::COD_PROV_CAPOLUO $tocheck] == -1} { ::yalog::error "failed to update quotas for project $$dataPj(name)" - return -1 } if {[::yadb::execl $db "Begin"] == -1 } { @@ -358,10 +360,13 @@ set campTab $dataPj(sample_table) # 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) $idPj] == -1} { - ::yalog::error "failed to free unused panel contacts on closed quota" - return -1 + # we passed pj name cause pjtable if fully qualified talbe name (with schema) + # do it only if we do have panel Cs in our panel + if {$dataPj(sexage) eq "t"} { + if {[::sample::free_panel_contacts $db $dataPj(name) $idPj] == -1} { + ::yalog::error "failed to free unused panel contacts on closed quota" + return -1 + } } if {[::sample::free $db $table $sample::COD_PROV_CAPOLUO] == -1} { @@ -1037,7 +1042,13 @@ } # update geo quotas (both geo and gen age) - if {[::sample::refreshQuota $db $dataPj(name) $stype] == -1} { + # FIXME: refreshQuota only if we have to + + set tocheck geo + if {$dataPj(sexage) eq "t"} { + set tocheck all + } + if {[::sample::refreshQuota $db $dataPj(name) $stype $tocheck] == -1} { ::yalog::error "Unable to refreh quotas" return -1 } @@ -1133,9 +1144,13 @@ # samptType = 3 -> Listed if {$sampType == 2} { - if {[::sample::free_panel_contacts $db $dataPj(name) $idPj] == -1} { - ::yalog::error "failed to free unused contacts" - return -1 + # free panel's Cs only if we have defined + # gen/age theo structure + if {$dataPj(sexage) eq "t"} { + if {[::sample::free_panel_contacts $db $dataPj(name) $idPj] == -1} { + ::yalog::error "failed to free unused contacts" + return -1 + } } } @@ -1341,6 +1356,8 @@ } } else { if {$sampType == 3} { + # FIXME remove lprob par cause we don't need it + # as long as we sort by sample,random() while extracting if {[::sample::sampleListedNew $db $codInf $codSup $table $frameTab $lprob] == -1 } { ::yalog::error "fatal error on listed sampling" return -1 @@ -2910,9 +2927,9 @@ if {$rec(distance) > 0} { # compute the fraction of tuples to fetch from capoluo based on the amount of interview still to be # gatherd in the group of strata belonging to label - set qry_prov_capo "select cod_prov,(qty_capo - done_capo)/ - (select sum(greatest((qty_capo - done_capo),0) + greatest((qty_not_capo - done_not_capo),0)) - from projects.$theoTable where label ilike [pg_quote $rec(label)])::numeric as ratio1 + set qry_prov_capo "select cod_prov,greatest((qty_capo - done_capo),0)/ + greatest((select sum(greatest((qty_capo - done_capo),0) + greatest((qty_not_capo - done_not_capo),0)) + from projects.$theoTable where label ilike [pg_quote $rec(label)]),1)::numeric as ratio1 from projects.$theoTable where $sqlGeogCapo and btrim(label) ilike [pg_quote $rec(label)]" @@ -2943,9 +2960,9 @@ } # compute the fraction of tuples to fetch from not capoluo based on the amount of interview still to be # gatherd in the group of strata belonging to label - set qry_prov_not_capo "select cod_prov,(qty_not_capo - done_not_capo)/ - (select sum(greatest((qty_capo - done_capo),0) + greatest((qty_not_capo - done_not_capo),0)) - from projects.$theoTable where label ilike [pg_quote $rec(label)])::numeric as ratio2 + set qry_prov_not_capo "select cod_prov,greatest((qty_not_capo - done_not_capo),0)/ + greatest((select sum(greatest((qty_capo - done_capo),0) + greatest((qty_not_capo - done_not_capo),0)) + from projects.$theoTable where label ilike [pg_quote $rec(label)]),1)::numeric as ratio2 from projects.$theoTable where $sqlGeogNotCapo and btrim(label) ilike [pg_quote $rec(label)]" @@ -3050,7 +3067,10 @@ } if {[llength $clist] == 0} { ::yalog::error "unable to fetch cod_prov" - return -1 + # no need to perform panel maintaenance cause + # we didn't extraxct anything + set ::sample::panelNoticeQty 0 + return 1 } # excute the actual maintenance @@ -3122,6 +3142,8 @@ } # sampleListedNew +# FIXME remove lprob par cause we don't need it +# as long as we sort by sample,random() while extracting 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" This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <si...@us...> - 2012-05-18 13:42:23
|
Revision: 2168 http://yaacs.svn.sourceforge.net/yaacs/?rev=2168&view=rev Author: sickpig Date: 2012-05-18 13:42:16 +0000 (Fri, 18 May 2012) Log Message: ----------- * FIX: error handling in sendmail::realMail and closeSmtpSocket in such a way to avoid GUI freeze in yacati. Modified Paths: -------------- branches/external-stable/yaacs/sendmail.tcl branches/external-trunk/yaacs/sendmail.tcl branches/internal-stable/yaacs/sendmail.tcl trunk/yaacs/sendmail.tcl Modified: branches/external-stable/yaacs/sendmail.tcl =================================================================== --- branches/external-stable/yaacs/sendmail.tcl 2012-05-15 11:46:49 UTC (rev 2167) +++ branches/external-stable/yaacs/sendmail.tcl 2012-05-18 13:42:16 UTC (rev 2168) @@ -376,6 +376,9 @@ set ret [::sendmail::sendSMTPcmd $::sendmail::sock "HELO [lindex [split $sender @] 1]"] # check for error on sending command to SMTP # usually means that server dropped connection unexpectedly + # actually if peer reset connection you don't have any + # error at all.... just an end of file and error message + # (something likje 521 5.5.1 Protocol error) if {$ret == -1} { ::sendmail::closeSmtpSocket 1 return -2 @@ -385,7 +388,7 @@ # now we should wait for reply to be stored in ::sendmail::reply if {![string match 2* $::sendmail::reply]} { ::yalog::error "error on HELO: $::sendmail::reply"; - ::sendmail::closeSmtpSocket 1 + ::sendmail::closeSmtpSocket return -3 } @@ -397,7 +400,7 @@ } if {![string match 2* $::sendmail::reply]} { ::yalog::error "error on MAIL FROM: $::sendmail::reply"; - ::sendmail::closeSmtpSocket 1 + ::sendmail::closeSmtpSocket return -3 } @@ -443,12 +446,15 @@ proc ::sendmail::closeSmtpSocket {{err 0}} { catch { if {$err && $::sendmail::proxyConnectionOn} {puts $::sendmail::socket CLOSECHILD} - puts $::sendmail::sock QUIT - close $::sendmail::sock - } err - if {$err ne ""} { - ::yalog::error "while closing $sendmail::sock: $err" + if {!$err} {puts $::sendmail::sock QUIT} + } errmsg + if {$errmsg ne ""} { + ::yalog::error "while writing $sendmail::sock: $errmsg" } + catch {close $::sendmail::sock} errclo + if {$errclo ne ""} { + ::yalog::error "while closing socket: $errclo" + } } # send as imple_message without server auth Modified: branches/external-trunk/yaacs/sendmail.tcl =================================================================== --- branches/external-trunk/yaacs/sendmail.tcl 2012-05-15 11:46:49 UTC (rev 2167) +++ branches/external-trunk/yaacs/sendmail.tcl 2012-05-18 13:42:16 UTC (rev 2168) @@ -376,6 +376,9 @@ set ret [::sendmail::sendSMTPcmd $::sendmail::sock "HELO [lindex [split $sender @] 1]"] # check for error on sending command to SMTP # usually means that server dropped connection unexpectedly + # actually if peer reset connection you don't have any + # error at all.... just an end of file and error message + # (something likje 521 5.5.1 Protocol error) if {$ret == -1} { ::sendmail::closeSmtpSocket 1 return -2 @@ -385,7 +388,7 @@ # now we should wait for reply to be stored in ::sendmail::reply if {![string match 2* $::sendmail::reply]} { ::yalog::error "error on HELO: $::sendmail::reply"; - ::sendmail::closeSmtpSocket 1 + ::sendmail::closeSmtpSocket return -3 } @@ -397,7 +400,7 @@ } if {![string match 2* $::sendmail::reply]} { ::yalog::error "error on MAIL FROM: $::sendmail::reply"; - ::sendmail::closeSmtpSocket 1 + ::sendmail::closeSmtpSocket return -3 } @@ -443,12 +446,15 @@ proc ::sendmail::closeSmtpSocket {{err 0}} { catch { if {$err && $::sendmail::proxyConnectionOn} {puts $::sendmail::socket CLOSECHILD} - puts $::sendmail::sock QUIT - close $::sendmail::sock - } err - if {$err ne ""} { - ::yalog::error "while closing $sendmail::sock: $err" + if {!$err} {puts $::sendmail::sock QUIT} + } errmsg + if {$errmsg ne ""} { + ::yalog::error "while writing $sendmail::sock: $errmsg" } + catch {close $::sendmail::sock} errclo + if {$errclo ne ""} { + ::yalog::error "while closing socket: $errclo" + } } # send as imple_message without server auth Modified: branches/internal-stable/yaacs/sendmail.tcl =================================================================== --- branches/internal-stable/yaacs/sendmail.tcl 2012-05-15 11:46:49 UTC (rev 2167) +++ branches/internal-stable/yaacs/sendmail.tcl 2012-05-18 13:42:16 UTC (rev 2168) @@ -376,6 +376,9 @@ set ret [::sendmail::sendSMTPcmd $::sendmail::sock "HELO [lindex [split $sender @] 1]"] # check for error on sending command to SMTP # usually means that server dropped connection unexpectedly + # actually if peer reset connection you don't have any + # error at all.... just an end of file and error message + # (something likje 521 5.5.1 Protocol error) if {$ret == -1} { ::sendmail::closeSmtpSocket 1 return -2 @@ -385,7 +388,7 @@ # now we should wait for reply to be stored in ::sendmail::reply if {![string match 2* $::sendmail::reply]} { ::yalog::error "error on HELO: $::sendmail::reply"; - ::sendmail::closeSmtpSocket 1 + ::sendmail::closeSmtpSocket return -3 } @@ -397,7 +400,7 @@ } if {![string match 2* $::sendmail::reply]} { ::yalog::error "error on MAIL FROM: $::sendmail::reply"; - ::sendmail::closeSmtpSocket 1 + ::sendmail::closeSmtpSocket return -3 } @@ -443,12 +446,15 @@ proc ::sendmail::closeSmtpSocket {{err 0}} { catch { if {$err && $::sendmail::proxyConnectionOn} {puts $::sendmail::socket CLOSECHILD} - puts $::sendmail::sock QUIT - close $::sendmail::sock - } err - if {$err ne ""} { - ::yalog::error "while closing $sendmail::sock: $err" + if {!$err} {puts $::sendmail::sock QUIT} + } errmsg + if {$errmsg ne ""} { + ::yalog::error "while writing $sendmail::sock: $errmsg" } + catch {close $::sendmail::sock} errclo + if {$errclo ne ""} { + ::yalog::error "while closing socket: $errclo" + } } # send as imple_message without server auth Modified: trunk/yaacs/sendmail.tcl =================================================================== --- trunk/yaacs/sendmail.tcl 2012-05-15 11:46:49 UTC (rev 2167) +++ trunk/yaacs/sendmail.tcl 2012-05-18 13:42:16 UTC (rev 2168) @@ -376,6 +376,9 @@ set ret [::sendmail::sendSMTPcmd $::sendmail::sock "HELO [lindex [split $sender @] 1]"] # check for error on sending command to SMTP # usually means that server dropped connection unexpectedly + # actually if peer reset connection you don't have any + # error at all.... just an end of file and error message + # (something likje 521 5.5.1 Protocol error) if {$ret == -1} { ::sendmail::closeSmtpSocket 1 return -2 @@ -385,7 +388,7 @@ # now we should wait for reply to be stored in ::sendmail::reply if {![string match 2* $::sendmail::reply]} { ::yalog::error "error on HELO: $::sendmail::reply"; - ::sendmail::closeSmtpSocket 1 + ::sendmail::closeSmtpSocket return -3 } @@ -397,7 +400,7 @@ } if {![string match 2* $::sendmail::reply]} { ::yalog::error "error on MAIL FROM: $::sendmail::reply"; - ::sendmail::closeSmtpSocket 1 + ::sendmail::closeSmtpSocket return -3 } @@ -443,12 +446,15 @@ proc ::sendmail::closeSmtpSocket {{err 0}} { catch { if {$err && $::sendmail::proxyConnectionOn} {puts $::sendmail::socket CLOSECHILD} - puts $::sendmail::sock QUIT - close $::sendmail::sock - } err - if {$err ne ""} { - ::yalog::error "while closing $sendmail::sock: $err" + if {!$err} {puts $::sendmail::sock QUIT} + } errmsg + if {$errmsg ne ""} { + ::yalog::error "while writing $sendmail::sock: $errmsg" } + catch {close $::sendmail::sock} errclo + if {$errclo ne ""} { + ::yalog::error "while closing socket: $errclo" + } } # send as imple_message without server auth This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <si...@us...> - 2012-05-15 11:46:56
|
Revision: 2167 http://yaacs.svn.sourceforge.net/yaacs/?rev=2167&view=rev Author: sickpig Date: 2012-05-15 11:46:49 +0000 (Tue, 15 May 2012) Log Message: ----------- * NEW: add new method to deliver faxes: hylafax_mail with this new mechanism we can send fax through email (with attachment). you need to configure the SMTP server to deliver email attachments to an hylafax server through a pipe script or whatever other method. we've added a new conf params FAX_SERVER_MAIL that has to be setted to your gate SMTP IP address (that way we've decoupled the mail server used to send normal email from the one that will send "fax" mail). we have added mail2fax.tcl as a way to show you how to read incoming email from stdin, parsing it, extracting all pdf or ps attachments and deliver everything through an hylafax server Modified Paths: -------------- branches/external-stable/docs/yaacs.conf.sample branches/external-stable/yacati.tcl branches/external-trunk/docs/yaacs.conf.sample branches/external-trunk/yacati.tcl branches/internal-stable/docs/yaacs.conf.sample branches/internal-stable/yacati.tcl trunk/docs/yaacs.conf.sample trunk/yacati.tcl Added Paths: ----------- branches/external-stable/utility/mail2fax.tcl branches/external-trunk/utility/mail2fax.tcl branches/internal-stable/utility/mail2fax.tcl trunk/utility/mail2fax.tcl Modified: branches/external-stable/docs/yaacs.conf.sample =================================================================== --- branches/external-stable/docs/yaacs.conf.sample 2012-04-16 14:48:41 UTC (rev 2166) +++ branches/external-stable/docs/yaacs.conf.sample 2012-05-15 11:46:49 UTC (rev 2167) @@ -35,7 +35,7 @@ SMTP_PROXY_HOST=your-smtp-proxy-host SMTP_PROXY_PORT=your-smtp-proxy-port -# could be hylafax or mail2fax +# could be hylafax, hylfax_mail or mail2fax FAX_METHOD=hylafax # needed for hylafax method FAX_SERVER=your-fax-server-here @@ -43,6 +43,8 @@ # needed for mail2fax FAX_SENDER=email-to-use-to-fill-To:-header FAX_DOMAIN=fax.domain.provider.xxx +# needed for hylafax_mail method (along the prevs two) +FAX_SERVER_MAIL=email-server-that-deal-with-hylfax-mail2fax VNC_CLIENT=your-vnc-client-here Added: branches/external-stable/utility/mail2fax.tcl =================================================================== --- branches/external-stable/utility/mail2fax.tcl (rev 0) +++ branches/external-stable/utility/mail2fax.tcl 2012-05-15 11:46:49 UTC (rev 2167) @@ -0,0 +1,118 @@ +#!/usr/bin/env tclsh +# +# deal with email with From: +39<faxnumber>@6pali.fax +# find all pdf and ps attachments, merge in one (according to attachment +# order) and then send to local hylafax server trough sendfax. +# the SMTP server has to be configure in such a way that all +# emails with sender domain equal to @6pali.fax are trated as local +# so that you can set in /etc/postfic/virtual something like @6pali.fax mail2fax +# and in /etc/aliases mail2fax |<path/to/mailtofax> +# this is just an example code up in hurry, let say something +# to give you an idea. +# REQUIRMENTS: hylfax-client, gs + +# TODO: parametrize faxserver address, email domain + +package require mime +# append to auto_path yaacs package location +# so we do not need to load a lot of unnecessary stuff +# to get log infrastructure +lappend auto_path "/usr/lib/yaacs" + +::yalog::setFile "/var/log/yaacs/mail2fax.log" +::yalog::setLevel "debug2" + +# read email message from standard +# input and parse through mime +set body [read stdin] +set mime [mime::initialize -string $body] + +# get content i.e. the email description (e.g multipart/alternative etc etc) +# be aware mime token could be more than one level deep +# anyway we have chose to go as deep as one level +set content [mime::getproperty $mime content] +# get who is the sender (it's a string that will be used +# to attach a owner to the hylfax job) +set jobid [lindex [mime::getheader $mime From] 0] +# From header will contanin all the recipients, each +# of those will adhere to this format +39<faxnumber>@6pali.fax +# the numbers will be comma separeted +set lnumbers [::mime::getheader $mime To] +set lnumbers [string map {\n ""} [lindex $lnumbers 0]] +set lnumbers [string map {\r\n ""} $lnumbers] +set lnumbers [split $lnumbers ,] + +if {[llength $lnumbers] > 0} { + # remove +39 and @6pali.fax from fax number + foreach n $lnumbers { + if {[string trim [lindex [split $n @] 1]] ne "6pali.fax"} { + continue + } + lappend numbers [string map {+39 ""} [string trim [lindex [split $n @] 0]]] + } +} else {exit} + +# if no valid recipientis just leave +if {[llength $numbers] == 0} { + exit +} + +# from now on it's just a metter of getting +# all the part of mimne toke that is a postscript +# or a pdf gile, merge them together and send to +# fax number recipient through hylafax server +if { [string first "multipart" $content] != -1 } { + set parts [mime::getproperty $mime parts] +} else { + set parts [list $mime] +} + +set i 0 +set files [list] +set cap [list pdf ps postscript] + +file mkdir /tmp/[pid] +# fetch all pdf and ps attachments +foreach part $parts { + set c [split [mime::getproperty $part content] "/"] + if {[lindex $c 0] eq "application" && [lsearch $cap [lindex $c 1]] > -1} { + set tmp [mime::getbody $part] + lappend files /tmp/[pid]/part$i + set fd [open /tmp/[pid]/part$i w] + # this fconfigure is necessary only with tcl8.4 + # in tcl 8.5 and up you can open a file in wb + # where b stands fro binary. anyway binary + # will prevent you to malform attachment + fconfigure $fd -translation binary + puts $fd $tmp + close $fd + incr i + } +} + +if {$i > 0} { + set output "/tmp/[pid]/cover.pdf" + # need for tcl8.4 cause gs puts warning to + # stderr so this tcl script will stop and fail + # in tcl8.5 you should use -ignorestderr. + set status 0 + if {[catch {exec -- /usr/bin/gs -o $output -sDEVICE=pdfwrite -dPDFSettings=/Screen -dAutoRotatePages=/None $files} results]} { + ::yalog::message "error on createing the document?: $errorCode" + if {[lindex $::errorCode 0] eq "CHILDSTATUS"} { + set status [lindex $::errorCode 2] + } else { + } + } + foreach n $numbers { + ::yalog::message "Sending fax to $n - faxuser is $jobid" + if {[catch {exec /usr/bin/sendfax -h 6pali -o $jobid -n -d $n /tmp/[pid]/cover.pdf} results]} { + ::yalog::message "error on sending fax?: $errorCode" + if {[lindex $::errorCode 0] eq "CHILDSTATUS"} { + set status [lindex $::errorCode 2] + } else { + } + } + } +} + +file delete -force /tmp/[pid] Modified: branches/external-stable/yacati.tcl =================================================================== --- branches/external-stable/yacati.tcl 2012-04-16 14:48:41 UTC (rev 2166) +++ branches/external-stable/yacati.tcl 2012-05-15 11:46:49 UTC (rev 2167) @@ -2529,6 +2529,14 @@ return -1 } } + hylafax_mail { + if {(![info exists ::yacati::config(FAX_SERVER_MAIL)])\ + || (![info exists ::yacati::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 + } + } mail2fax { if {(![info exists ::yacati::config(FAX_SENDER)]) \ || (![info exists ::yacati::config(FAX_DOMAIN)]) == -1} { \ @@ -2538,7 +2546,7 @@ } } default { - ::yalog::error "unknown FAX_METHOD values: $::yacati::config(FAX_SENDER)" + ::yalog::error "unknown FAX_METHOD values: $::yacati::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 @@ -2573,6 +2581,10 @@ hylafax { set res_sent_fax [::sendfax::send $fax_data $fax $::yacati::user(login)] } + hylafax_mail { + set res_sent_fax [::sendfax::mail2fax $fax_data $fax $::yacati::config(FAX_DOMAIN) \ + $::yacati::user(login) $::yacati::config(FAX_SERVER_MAIL) $::yacati::survey(name)] + } mail2fax { if {([info exists ::yacati::config(SMTP_LOGIN)] && $::yacati::config(SMTP_LOGIN) ne "") && \ ([info exists ::yacati::config(SMTP_PWD)] && $::yacati::config(SMTP_PWD) ne "")} { Modified: branches/external-trunk/docs/yaacs.conf.sample =================================================================== --- branches/external-trunk/docs/yaacs.conf.sample 2012-04-16 14:48:41 UTC (rev 2166) +++ branches/external-trunk/docs/yaacs.conf.sample 2012-05-15 11:46:49 UTC (rev 2167) @@ -35,7 +35,7 @@ SMTP_PROXY_HOST=your-smtp-proxy-host SMTP_PROXY_PORT=your-smtp-proxy-port -# could be hylafax or mail2fax +# could be hylafax, hylfax_mail or mail2fax FAX_METHOD=hylafax # needed for hylafax method FAX_SERVER=your-fax-server-here @@ -43,6 +43,8 @@ # needed for mail2fax FAX_SENDER=email-to-use-to-fill-To:-header FAX_DOMAIN=fax.domain.provider.xxx +# needed for hylafax_mail method (along the prevs two) +FAX_SERVER_MAIL=email-server-that-deal-with-hylfax-mail2fax VNC_CLIENT=your-vnc-client-here Added: branches/external-trunk/utility/mail2fax.tcl =================================================================== --- branches/external-trunk/utility/mail2fax.tcl (rev 0) +++ branches/external-trunk/utility/mail2fax.tcl 2012-05-15 11:46:49 UTC (rev 2167) @@ -0,0 +1,118 @@ +#!/usr/bin/env tclsh +# +# deal with email with From: +39<faxnumber>@6pali.fax +# find all pdf and ps attachments, merge in one (according to attachment +# order) and then send to local hylafax server trough sendfax. +# the SMTP server has to be configure in such a way that all +# emails with sender domain equal to @6pali.fax are trated as local +# so that you can set in /etc/postfic/virtual something like @6pali.fax mail2fax +# and in /etc/aliases mail2fax |<path/to/mailtofax> +# this is just an example code up in hurry, let say something +# to give you an idea. +# REQUIRMENTS: hylfax-client, gs + +# TODO: parametrize faxserver address, email domain + +package require mime +# append to auto_path yaacs package location +# so we do not need to load a lot of unnecessary stuff +# to get log infrastructure +lappend auto_path "/usr/lib/yaacs" + +::yalog::setFile "/var/log/yaacs/mail2fax.log" +::yalog::setLevel "debug2" + +# read email message from standard +# input and parse through mime +set body [read stdin] +set mime [mime::initialize -string $body] + +# get content i.e. the email description (e.g multipart/alternative etc etc) +# be aware mime token could be more than one level deep +# anyway we have chose to go as deep as one level +set content [mime::getproperty $mime content] +# get who is the sender (it's a string that will be used +# to attach a owner to the hylfax job) +set jobid [lindex [mime::getheader $mime From] 0] +# From header will contanin all the recipients, each +# of those will adhere to this format +39<faxnumber>@6pali.fax +# the numbers will be comma separeted +set lnumbers [::mime::getheader $mime To] +set lnumbers [string map {\n ""} [lindex $lnumbers 0]] +set lnumbers [string map {\r\n ""} $lnumbers] +set lnumbers [split $lnumbers ,] + +if {[llength $lnumbers] > 0} { + # remove +39 and @6pali.fax from fax number + foreach n $lnumbers { + if {[string trim [lindex [split $n @] 1]] ne "6pali.fax"} { + continue + } + lappend numbers [string map {+39 ""} [string trim [lindex [split $n @] 0]]] + } +} else {exit} + +# if no valid recipientis just leave +if {[llength $numbers] == 0} { + exit +} + +# from now on it's just a metter of getting +# all the part of mimne toke that is a postscript +# or a pdf gile, merge them together and send to +# fax number recipient through hylafax server +if { [string first "multipart" $content] != -1 } { + set parts [mime::getproperty $mime parts] +} else { + set parts [list $mime] +} + +set i 0 +set files [list] +set cap [list pdf ps postscript] + +file mkdir /tmp/[pid] +# fetch all pdf and ps attachments +foreach part $parts { + set c [split [mime::getproperty $part content] "/"] + if {[lindex $c 0] eq "application" && [lsearch $cap [lindex $c 1]] > -1} { + set tmp [mime::getbody $part] + lappend files /tmp/[pid]/part$i + set fd [open /tmp/[pid]/part$i w] + # this fconfigure is necessary only with tcl8.4 + # in tcl 8.5 and up you can open a file in wb + # where b stands fro binary. anyway binary + # will prevent you to malform attachment + fconfigure $fd -translation binary + puts $fd $tmp + close $fd + incr i + } +} + +if {$i > 0} { + set output "/tmp/[pid]/cover.pdf" + # need for tcl8.4 cause gs puts warning to + # stderr so this tcl script will stop and fail + # in tcl8.5 you should use -ignorestderr. + set status 0 + if {[catch {exec -- /usr/bin/gs -o $output -sDEVICE=pdfwrite -dPDFSettings=/Screen -dAutoRotatePages=/None $files} results]} { + ::yalog::message "error on createing the document?: $errorCode" + if {[lindex $::errorCode 0] eq "CHILDSTATUS"} { + set status [lindex $::errorCode 2] + } else { + } + } + foreach n $numbers { + ::yalog::message "Sending fax to $n - faxuser is $jobid" + if {[catch {exec /usr/bin/sendfax -h 6pali -o $jobid -n -d $n /tmp/[pid]/cover.pdf} results]} { + ::yalog::message "error on sending fax?: $errorCode" + if {[lindex $::errorCode 0] eq "CHILDSTATUS"} { + set status [lindex $::errorCode 2] + } else { + } + } + } +} + +file delete -force /tmp/[pid] Modified: branches/external-trunk/yacati.tcl =================================================================== --- branches/external-trunk/yacati.tcl 2012-04-16 14:48:41 UTC (rev 2166) +++ branches/external-trunk/yacati.tcl 2012-05-15 11:46:49 UTC (rev 2167) @@ -2529,6 +2529,14 @@ return -1 } } + hylafax_mail { + if {(![info exists ::yacati::config(FAX_SERVER_MAIL)])\ + || (![info exists ::yacati::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 + } + } mail2fax { if {(![info exists ::yacati::config(FAX_SENDER)]) \ || (![info exists ::yacati::config(FAX_DOMAIN)]) == -1} { \ @@ -2538,7 +2546,7 @@ } } default { - ::yalog::error "unknown FAX_METHOD values: $::yacati::config(FAX_SENDER)" + ::yalog::error "unknown FAX_METHOD values: $::yacati::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 @@ -2573,6 +2581,10 @@ hylafax { set res_sent_fax [::sendfax::send $fax_data $fax $::yacati::user(login)] } + hylafax_mail { + set res_sent_fax [::sendfax::mail2fax $fax_data $fax $::yacati::config(FAX_DOMAIN) \ + $::yacati::user(login) $::yacati::config(FAX_SERVER_MAIL) $::yacati::survey(name)] + } mail2fax { if {([info exists ::yacati::config(SMTP_LOGIN)] && $::yacati::config(SMTP_LOGIN) ne "") && \ ([info exists ::yacati::config(SMTP_PWD)] && $::yacati::config(SMTP_PWD) ne "")} { Modified: branches/internal-stable/docs/yaacs.conf.sample =================================================================== --- branches/internal-stable/docs/yaacs.conf.sample 2012-04-16 14:48:41 UTC (rev 2166) +++ branches/internal-stable/docs/yaacs.conf.sample 2012-05-15 11:46:49 UTC (rev 2167) @@ -35,7 +35,7 @@ SMTP_PROXY_HOST=your-smtp-proxy-host SMTP_PROXY_PORT=your-smtp-proxy-port -# could be hylafax or mail2fax +# could be hylafax, hylfax_mail or mail2fax FAX_METHOD=hylafax # needed for hylafax method FAX_SERVER=your-fax-server-here @@ -43,6 +43,8 @@ # needed for mail2fax FAX_SENDER=email-to-use-to-fill-To:-header FAX_DOMAIN=fax.domain.provider.xxx +# needed for hylafax_mail method (along the prevs two) +FAX_SERVER_MAIL=email-server-that-deal-with-hylfax-mail2fax VNC_CLIENT=your-vnc-client-here Added: branches/internal-stable/utility/mail2fax.tcl =================================================================== --- branches/internal-stable/utility/mail2fax.tcl (rev 0) +++ branches/internal-stable/utility/mail2fax.tcl 2012-05-15 11:46:49 UTC (rev 2167) @@ -0,0 +1,118 @@ +#!/usr/bin/env tclsh +# +# deal with email with From: +39<faxnumber>@6pali.fax +# find all pdf and ps attachments, merge in one (according to attachment +# order) and then send to local hylafax server trough sendfax. +# the SMTP server has to be configure in such a way that all +# emails with sender domain equal to @6pali.fax are trated as local +# so that you can set in /etc/postfic/virtual something like @6pali.fax mail2fax +# and in /etc/aliases mail2fax |<path/to/mailtofax> +# this is just an example code up in hurry, let say something +# to give you an idea. +# REQUIRMENTS: hylfax-client, gs + +# TODO: parametrize faxserver address, email domain + +package require mime +# append to auto_path yaacs package location +# so we do not need to load a lot of unnecessary stuff +# to get log infrastructure +lappend auto_path "/usr/lib/yaacs" + +::yalog::setFile "/var/log/yaacs/mail2fax.log" +::yalog::setLevel "debug2" + +# read email message from standard +# input and parse through mime +set body [read stdin] +set mime [mime::initialize -string $body] + +# get content i.e. the email description (e.g multipart/alternative etc etc) +# be aware mime token could be more than one level deep +# anyway we have chose to go as deep as one level +set content [mime::getproperty $mime content] +# get who is the sender (it's a string that will be used +# to attach a owner to the hylfax job) +set jobid [lindex [mime::getheader $mime From] 0] +# From header will contanin all the recipients, each +# of those will adhere to this format +39<faxnumber>@6pali.fax +# the numbers will be comma separeted +set lnumbers [::mime::getheader $mime To] +set lnumbers [string map {\n ""} [lindex $lnumbers 0]] +set lnumbers [string map {\r\n ""} $lnumbers] +set lnumbers [split $lnumbers ,] + +if {[llength $lnumbers] > 0} { + # remove +39 and @6pali.fax from fax number + foreach n $lnumbers { + if {[string trim [lindex [split $n @] 1]] ne "6pali.fax"} { + continue + } + lappend numbers [string map {+39 ""} [string trim [lindex [split $n @] 0]]] + } +} else {exit} + +# if no valid recipientis just leave +if {[llength $numbers] == 0} { + exit +} + +# from now on it's just a metter of getting +# all the part of mimne toke that is a postscript +# or a pdf gile, merge them together and send to +# fax number recipient through hylafax server +if { [string first "multipart" $content] != -1 } { + set parts [mime::getproperty $mime parts] +} else { + set parts [list $mime] +} + +set i 0 +set files [list] +set cap [list pdf ps postscript] + +file mkdir /tmp/[pid] +# fetch all pdf and ps attachments +foreach part $parts { + set c [split [mime::getproperty $part content] "/"] + if {[lindex $c 0] eq "application" && [lsearch $cap [lindex $c 1]] > -1} { + set tmp [mime::getbody $part] + lappend files /tmp/[pid]/part$i + set fd [open /tmp/[pid]/part$i w] + # this fconfigure is necessary only with tcl8.4 + # in tcl 8.5 and up you can open a file in wb + # where b stands fro binary. anyway binary + # will prevent you to malform attachment + fconfigure $fd -translation binary + puts $fd $tmp + close $fd + incr i + } +} + +if {$i > 0} { + set output "/tmp/[pid]/cover.pdf" + # need for tcl8.4 cause gs puts warning to + # stderr so this tcl script will stop and fail + # in tcl8.5 you should use -ignorestderr. + set status 0 + if {[catch {exec -- /usr/bin/gs -o $output -sDEVICE=pdfwrite -dPDFSettings=/Screen -dAutoRotatePages=/None $files} results]} { + ::yalog::message "error on createing the document?: $errorCode" + if {[lindex $::errorCode 0] eq "CHILDSTATUS"} { + set status [lindex $::errorCode 2] + } else { + } + } + foreach n $numbers { + ::yalog::message "Sending fax to $n - faxuser is $jobid" + if {[catch {exec /usr/bin/sendfax -h 6pali -o $jobid -n -d $n /tmp/[pid]/cover.pdf} results]} { + ::yalog::message "error on sending fax?: $errorCode" + if {[lindex $::errorCode 0] eq "CHILDSTATUS"} { + set status [lindex $::errorCode 2] + } else { + } + } + } +} + +file delete -force /tmp/[pid] Modified: branches/internal-stable/yacati.tcl =================================================================== --- branches/internal-stable/yacati.tcl 2012-04-16 14:48:41 UTC (rev 2166) +++ branches/internal-stable/yacati.tcl 2012-05-15 11:46:49 UTC (rev 2167) @@ -2529,6 +2529,14 @@ return -1 } } + hylafax_mail { + if {(![info exists ::yacati::config(FAX_SERVER_MAIL)])\ + || (![info exists ::yacati::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 + } + } mail2fax { if {(![info exists ::yacati::config(FAX_SENDER)]) \ || (![info exists ::yacati::config(FAX_DOMAIN)]) == -1} { \ @@ -2538,7 +2546,7 @@ } } default { - ::yalog::error "unknown FAX_METHOD values: $::yacati::config(FAX_SENDER)" + ::yalog::error "unknown FAX_METHOD values: $::yacati::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 @@ -2573,6 +2581,10 @@ hylafax { set res_sent_fax [::sendfax::send $fax_data $fax $::yacati::user(login)] } + hylafax_mail { + set res_sent_fax [::sendfax::mail2fax $fax_data $fax $::yacati::config(FAX_DOMAIN) \ + $::yacati::user(login) $::yacati::config(FAX_SERVER_MAIL) $::yacati::survey(name)] + } mail2fax { if {([info exists ::yacati::config(SMTP_LOGIN)] && $::yacati::config(SMTP_LOGIN) ne "") && \ ([info exists ::yacati::config(SMTP_PWD)] && $::yacati::config(SMTP_PWD) ne "")} { Modified: trunk/docs/yaacs.conf.sample =================================================================== --- trunk/docs/yaacs.conf.sample 2012-04-16 14:48:41 UTC (rev 2166) +++ trunk/docs/yaacs.conf.sample 2012-05-15 11:46:49 UTC (rev 2167) @@ -35,7 +35,7 @@ SMTP_PROXY_HOST=your-smtp-proxy-host SMTP_PROXY_PORT=your-smtp-proxy-port -# could be hylafax or mail2fax +# could be hylafax, hylfax_mail or mail2fax FAX_METHOD=hylafax # needed for hylafax method FAX_SERVER=your-fax-server-here @@ -43,6 +43,8 @@ # needed for mail2fax FAX_SENDER=email-to-use-to-fill-To:-header FAX_DOMAIN=fax.domain.provider.xxx +# needed for hylafax_mail method (along the prevs two) +FAX_SERVER_MAIL=email-server-that-deal-with-hylfax-mail2fax VNC_CLIENT=your-vnc-client-here Added: trunk/utility/mail2fax.tcl =================================================================== --- trunk/utility/mail2fax.tcl (rev 0) +++ trunk/utility/mail2fax.tcl 2012-05-15 11:46:49 UTC (rev 2167) @@ -0,0 +1,118 @@ +#!/usr/bin/env tclsh +# +# deal with email with From: +39<faxnumber>@6pali.fax +# find all pdf and ps attachments, merge in one (according to attachment +# order) and then send to local hylafax server trough sendfax. +# the SMTP server has to be configure in such a way that all +# emails with sender domain equal to @6pali.fax are trated as local +# so that you can set in /etc/postfic/virtual something like @6pali.fax mail2fax +# and in /etc/aliases mail2fax |<path/to/mailtofax> +# this is just an example code up in hurry, let say something +# to give you an idea. +# REQUIRMENTS: hylfax-client, gs + +# TODO: parametrize faxserver address, email domain + +package require mime +# append to auto_path yaacs package location +# so we do not need to load a lot of unnecessary stuff +# to get log infrastructure +lappend auto_path "/usr/lib/yaacs" + +::yalog::setFile "/var/log/yaacs/mail2fax.log" +::yalog::setLevel "debug2" + +# read email message from standard +# input and parse through mime +set body [read stdin] +set mime [mime::initialize -string $body] + +# get content i.e. the email description (e.g multipart/alternative etc etc) +# be aware mime token could be more than one level deep +# anyway we have chose to go as deep as one level +set content [mime::getproperty $mime content] +# get who is the sender (it's a string that will be used +# to attach a owner to the hylfax job) +set jobid [lindex [mime::getheader $mime From] 0] +# From header will contanin all the recipients, each +# of those will adhere to this format +39<faxnumber>@6pali.fax +# the numbers will be comma separeted +set lnumbers [::mime::getheader $mime To] +set lnumbers [string map {\n ""} [lindex $lnumbers 0]] +set lnumbers [string map {\r\n ""} $lnumbers] +set lnumbers [split $lnumbers ,] + +if {[llength $lnumbers] > 0} { + # remove +39 and @6pali.fax from fax number + foreach n $lnumbers { + if {[string trim [lindex [split $n @] 1]] ne "6pali.fax"} { + continue + } + lappend numbers [string map {+39 ""} [string trim [lindex [split $n @] 0]]] + } +} else {exit} + +# if no valid recipientis just leave +if {[llength $numbers] == 0} { + exit +} + +# from now on it's just a metter of getting +# all the part of mimne toke that is a postscript +# or a pdf gile, merge them together and send to +# fax number recipient through hylafax server +if { [string first "multipart" $content] != -1 } { + set parts [mime::getproperty $mime parts] +} else { + set parts [list $mime] +} + +set i 0 +set files [list] +set cap [list pdf ps postscript] + +file mkdir /tmp/[pid] +# fetch all pdf and ps attachments +foreach part $parts { + set c [split [mime::getproperty $part content] "/"] + if {[lindex $c 0] eq "application" && [lsearch $cap [lindex $c 1]] > -1} { + set tmp [mime::getbody $part] + lappend files /tmp/[pid]/part$i + set fd [open /tmp/[pid]/part$i w] + # this fconfigure is necessary only with tcl8.4 + # in tcl 8.5 and up you can open a file in wb + # where b stands fro binary. anyway binary + # will prevent you to malform attachment + fconfigure $fd -translation binary + puts $fd $tmp + close $fd + incr i + } +} + +if {$i > 0} { + set output "/tmp/[pid]/cover.pdf" + # need for tcl8.4 cause gs puts warning to + # stderr so this tcl script will stop and fail + # in tcl8.5 you should use -ignorestderr. + set status 0 + if {[catch {exec -- /usr/bin/gs -o $output -sDEVICE=pdfwrite -dPDFSettings=/Screen -dAutoRotatePages=/None $files} results]} { + ::yalog::message "error on createing the document?: $errorCode" + if {[lindex $::errorCode 0] eq "CHILDSTATUS"} { + set status [lindex $::errorCode 2] + } else { + } + } + foreach n $numbers { + ::yalog::message "Sending fax to $n - faxuser is $jobid" + if {[catch {exec /usr/bin/sendfax -h 6pali -o $jobid -n -d $n /tmp/[pid]/cover.pdf} results]} { + ::yalog::message "error on sending fax?: $errorCode" + if {[lindex $::errorCode 0] eq "CHILDSTATUS"} { + set status [lindex $::errorCode 2] + } else { + } + } + } +} + +file delete -force /tmp/[pid] Property changes on: trunk/utility/mail2fax.tcl ___________________________________________________________________ Added: svn:executable + * Modified: trunk/yacati.tcl =================================================================== --- trunk/yacati.tcl 2012-04-16 14:48:41 UTC (rev 2166) +++ trunk/yacati.tcl 2012-05-15 11:46:49 UTC (rev 2167) @@ -2529,6 +2529,14 @@ return -1 } } + hylafax_mail { + if {(![info exists ::yacati::config(FAX_SERVER_MAIL)])\ + || (![info exists ::yacati::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 + } + } mail2fax { if {(![info exists ::yacati::config(FAX_SENDER)]) \ || (![info exists ::yacati::config(FAX_DOMAIN)]) == -1} { \ @@ -2538,7 +2546,7 @@ } } default { - ::yalog::error "unknown FAX_METHOD values: $::yacati::config(FAX_SENDER)" + ::yalog::error "unknown FAX_METHOD values: $::yacati::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 @@ -2573,6 +2581,10 @@ hylafax { set res_sent_fax [::sendfax::send $fax_data $fax $::yacati::user(login)] } + hylafax_mail { + set res_sent_fax [::sendfax::mail2fax $fax_data $fax $::yacati::config(FAX_DOMAIN) \ + $::yacati::user(login) $::yacati::config(FAX_SERVER_MAIL) $::yacati::survey(name)] + } mail2fax { if {([info exists ::yacati::config(SMTP_LOGIN)] && $::yacati::config(SMTP_LOGIN) ne "") && \ ([info exists ::yacati::config(SMTP_PWD)] && $::yacati::config(SMTP_PWD) ne "")} { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <si...@us...> - 2012-04-16 14:48:52
|
Revision: 2166 http://yaacs.svn.sourceforge.net/yaacs/?rev=2166&view=rev Author: sickpig Date: 2012-04-16 14:48:41 +0000 (Mon, 16 Apr 2012) Log Message: ----------- * FIX: (sort of new) add possibility to specify plain ipv4 address when setting/changing smtp provider. * FIX: Email provider update GUI never late you save your modifications Modified Paths: -------------- branches/external-stable/yaacs/yamisc.tcl branches/external-stable/yadmin.tcl branches/external-trunk/yaacs/yamisc.tcl branches/external-trunk/yadmin.tcl branches/internal-stable/yaacs/yamisc.tcl branches/internal-stable/yadmin.tcl trunk/yaacs/yamisc.tcl trunk/yadmin.tcl Modified: branches/external-stable/yaacs/yamisc.tcl =================================================================== --- branches/external-stable/yaacs/yamisc.tcl 2012-04-04 08:20:36 UTC (rev 2165) +++ branches/external-stable/yaacs/yamisc.tcl 2012-04-16 14:48:41 UTC (rev 2166) @@ -655,3 +655,15 @@ ::yalog::debug "submodule: $sname - rev/repo: $repo_rev" return [lsort $repo_rev] } + +# check if string is conforming with ipv4 address +proc ::yamisc::validate_ipv4 {string} { + if {[regexp {^\d+\.\d+\.\d+\.\d+$} $string] + && [scan $string %d.%d.%d.%d a b c d] == 4 + && 0 <= $a && $a <= 255 && 0 <= $b && $b <= 255 + && 0 <= $c && $c <= 255 && 0 <= $d && $d <= 255} { + return 1 + } else { + return 0 + } +} Modified: branches/external-stable/yadmin.tcl =================================================================== --- branches/external-stable/yadmin.tcl 2012-04-04 08:20:36 UTC (rev 2165) +++ branches/external-stable/yadmin.tcl 2012-04-16 14:48:41 UTC (rev 2166) @@ -4306,29 +4306,28 @@ ::dialogs::error . [mc "Invalid sender address "] [mc "You must assign a valid sender address to a an email account"] return } - - package require dns - ::dns::configure -timeout 3000 - set tok [::dns::resolve $::yadmin::easmtp] - # wait for dns request to complete - ::dns::wait $tok - # check result - if {[::dns::status $tok] ne "ok"} { - ::yalog::error "not able to resolve $::yadmin::easmtp" - ::yalog::debug "This is the specific error: [::dns::error $tok]" - ::dns::cleanup $tok - ::dialogs::error . [mc "Invalid SMTP server address "] [mc "You must assign a valid SMTP server address to a an email account"] - return + # check for if smtp address resolve only if we have fqdn + if {[::yamisc::validate_ipv4 $::yadmin::easmtp] == 0} { + package require dns + ::dns::configure -timeout 3000 + set tok [::dns::resolve $::yadmin::easmtp] + # wait for dns request to complete + ::dns::wait $tok + # check result + if {[::dns::status $tok] ne "ok"} { + ::yalog::error "not able to resolve $::yadmin::easmtp" + ::yalog::debug "This is the specific error: [::dns::error $tok]" + ::dns::cleanup $tok + ::dialogs::error . [mc "Invalid SMTP server address "] [mc "You must assign a valid SMTP server address to a an email account"] + return + } } - # mode 0 = new, mode = 1 edit + set new [list name $::yadmin::eaname smtp $::yadmin::easmtp sender $::yadmin::easender user $::yadmin::eauser "pwd" $::yadmin::eapwd] set mode 0 set id "" - set new [list name $::yadmin::eaname smtp $::yadmin::easmtp sender $::yadmin::easender user $::yadmin::eauser "pwd" $::yadmin::eapwd] - - if {[llength [array names ::yadmin::email_account $::yadmin::eaname]] == 1} { - + if {[$::yadmin::ea_edit_win.ename cget -state] eq "readonly"} { # you're editing a provider set mode 1 set id $::yadmin::eidx Modified: branches/external-trunk/yaacs/yamisc.tcl =================================================================== --- branches/external-trunk/yaacs/yamisc.tcl 2012-04-04 08:20:36 UTC (rev 2165) +++ branches/external-trunk/yaacs/yamisc.tcl 2012-04-16 14:48:41 UTC (rev 2166) @@ -655,3 +655,15 @@ ::yalog::debug "submodule: $sname - rev/repo: $repo_rev" return [lsort $repo_rev] } + +# check if string is conforming with ipv4 address +proc ::yamisc::validate_ipv4 {string} { + if {[regexp {^\d+\.\d+\.\d+\.\d+$} $string] + && [scan $string %d.%d.%d.%d a b c d] == 4 + && 0 <= $a && $a <= 255 && 0 <= $b && $b <= 255 + && 0 <= $c && $c <= 255 && 0 <= $d && $d <= 255} { + return 1 + } else { + return 0 + } +} Modified: branches/external-trunk/yadmin.tcl =================================================================== --- branches/external-trunk/yadmin.tcl 2012-04-04 08:20:36 UTC (rev 2165) +++ branches/external-trunk/yadmin.tcl 2012-04-16 14:48:41 UTC (rev 2166) @@ -4306,29 +4306,28 @@ ::dialogs::error . [mc "Invalid sender address "] [mc "You must assign a valid sender address to a an email account"] return } - - package require dns - ::dns::configure -timeout 3000 - set tok [::dns::resolve $::yadmin::easmtp] - # wait for dns request to complete - ::dns::wait $tok - # check result - if {[::dns::status $tok] ne "ok"} { - ::yalog::error "not able to resolve $::yadmin::easmtp" - ::yalog::debug "This is the specific error: [::dns::error $tok]" - ::dns::cleanup $tok - ::dialogs::error . [mc "Invalid SMTP server address "] [mc "You must assign a valid SMTP server address to a an email account"] - return + # check for if smtp address resolve only if we have fqdn + if {[::yamisc::validate_ipv4 $::yadmin::easmtp] == 0} { + package require dns + ::dns::configure -timeout 3000 + set tok [::dns::resolve $::yadmin::easmtp] + # wait for dns request to complete + ::dns::wait $tok + # check result + if {[::dns::status $tok] ne "ok"} { + ::yalog::error "not able to resolve $::yadmin::easmtp" + ::yalog::debug "This is the specific error: [::dns::error $tok]" + ::dns::cleanup $tok + ::dialogs::error . [mc "Invalid SMTP server address "] [mc "You must assign a valid SMTP server address to a an email account"] + return + } } - # mode 0 = new, mode = 1 edit + set new [list name $::yadmin::eaname smtp $::yadmin::easmtp sender $::yadmin::easender user $::yadmin::eauser "pwd" $::yadmin::eapwd] set mode 0 set id "" - set new [list name $::yadmin::eaname smtp $::yadmin::easmtp sender $::yadmin::easender user $::yadmin::eauser "pwd" $::yadmin::eapwd] - - if {[llength [array names ::yadmin::email_account $::yadmin::eaname]] == 1} { - + if {[$::yadmin::ea_edit_win.ename cget -state] eq "readonly"} { # you're editing a provider set mode 1 set id $::yadmin::eidx Modified: branches/internal-stable/yaacs/yamisc.tcl =================================================================== --- branches/internal-stable/yaacs/yamisc.tcl 2012-04-04 08:20:36 UTC (rev 2165) +++ branches/internal-stable/yaacs/yamisc.tcl 2012-04-16 14:48:41 UTC (rev 2166) @@ -655,3 +655,15 @@ ::yalog::debug "submodule: $sname - rev/repo: $repo_rev" return [lsort $repo_rev] } + +# check if string is conforming with ipv4 address +proc ::yamisc::validate_ipv4 {string} { + if {[regexp {^\d+\.\d+\.\d+\.\d+$} $string] + && [scan $string %d.%d.%d.%d a b c d] == 4 + && 0 <= $a && $a <= 255 && 0 <= $b && $b <= 255 + && 0 <= $c && $c <= 255 && 0 <= $d && $d <= 255} { + return 1 + } else { + return 0 + } +} Modified: branches/internal-stable/yadmin.tcl =================================================================== --- branches/internal-stable/yadmin.tcl 2012-04-04 08:20:36 UTC (rev 2165) +++ branches/internal-stable/yadmin.tcl 2012-04-16 14:48:41 UTC (rev 2166) @@ -4306,29 +4306,28 @@ ::dialogs::error . [mc "Invalid sender address "] [mc "You must assign a valid sender address to a an email account"] return } - - package require dns - ::dns::configure -timeout 3000 - set tok [::dns::resolve $::yadmin::easmtp] - # wait for dns request to complete - ::dns::wait $tok - # check result - if {[::dns::status $tok] ne "ok"} { - ::yalog::error "not able to resolve $::yadmin::easmtp" - ::yalog::debug "This is the specific error: [::dns::error $tok]" - ::dns::cleanup $tok - ::dialogs::error . [mc "Invalid SMTP server address "] [mc "You must assign a valid SMTP server address to a an email account"] - return + # check for if smtp address resolve only if we have fqdn + if {[::yamisc::validate_ipv4 $::yadmin::easmtp] == 0} { + package require dns + ::dns::configure -timeout 3000 + set tok [::dns::resolve $::yadmin::easmtp] + # wait for dns request to complete + ::dns::wait $tok + # check result + if {[::dns::status $tok] ne "ok"} { + ::yalog::error "not able to resolve $::yadmin::easmtp" + ::yalog::debug "This is the specific error: [::dns::error $tok]" + ::dns::cleanup $tok + ::dialogs::error . [mc "Invalid SMTP server address "] [mc "You must assign a valid SMTP server address to a an email account"] + return + } } - # mode 0 = new, mode = 1 edit + set new [list name $::yadmin::eaname smtp $::yadmin::easmtp sender $::yadmin::easender user $::yadmin::eauser "pwd" $::yadmin::eapwd] set mode 0 set id "" - set new [list name $::yadmin::eaname smtp $::yadmin::easmtp sender $::yadmin::easender user $::yadmin::eauser "pwd" $::yadmin::eapwd] - - if {[llength [array names ::yadmin::email_account $::yadmin::eaname]] == 1} { - + if {[$::yadmin::ea_edit_win.ename cget -state] eq "readonly"} { # you're editing a provider set mode 1 set id $::yadmin::eidx Modified: trunk/yaacs/yamisc.tcl =================================================================== --- trunk/yaacs/yamisc.tcl 2012-04-04 08:20:36 UTC (rev 2165) +++ trunk/yaacs/yamisc.tcl 2012-04-16 14:48:41 UTC (rev 2166) @@ -655,3 +655,15 @@ ::yalog::debug "submodule: $sname - rev/repo: $repo_rev" return [lsort $repo_rev] } + +# check if string is conforming with ipv4 address +proc ::yamisc::validate_ipv4 {string} { + if {[regexp {^\d+\.\d+\.\d+\.\d+$} $string] + && [scan $string %d.%d.%d.%d a b c d] == 4 + && 0 <= $a && $a <= 255 && 0 <= $b && $b <= 255 + && 0 <= $c && $c <= 255 && 0 <= $d && $d <= 255} { + return 1 + } else { + return 0 + } +} Modified: trunk/yadmin.tcl =================================================================== --- trunk/yadmin.tcl 2012-04-04 08:20:36 UTC (rev 2165) +++ trunk/yadmin.tcl 2012-04-16 14:48:41 UTC (rev 2166) @@ -4306,29 +4306,28 @@ ::dialogs::error . [mc "Invalid sender address "] [mc "You must assign a valid sender address to a an email account"] return } - - package require dns - ::dns::configure -timeout 3000 - set tok [::dns::resolve $::yadmin::easmtp] - # wait for dns request to complete - ::dns::wait $tok - # check result - if {[::dns::status $tok] ne "ok"} { - ::yalog::error "not able to resolve $::yadmin::easmtp" - ::yalog::debug "This is the specific error: [::dns::error $tok]" - ::dns::cleanup $tok - ::dialogs::error . [mc "Invalid SMTP server address "] [mc "You must assign a valid SMTP server address to a an email account"] - return + # check for if smtp address resolve only if we have fqdn + if {[::yamisc::validate_ipv4 $::yadmin::easmtp] == 0} { + package require dns + ::dns::configure -timeout 3000 + set tok [::dns::resolve $::yadmin::easmtp] + # wait for dns request to complete + ::dns::wait $tok + # check result + if {[::dns::status $tok] ne "ok"} { + ::yalog::error "not able to resolve $::yadmin::easmtp" + ::yalog::debug "This is the specific error: [::dns::error $tok]" + ::dns::cleanup $tok + ::dialogs::error . [mc "Invalid SMTP server address "] [mc "You must assign a valid SMTP server address to a an email account"] + return + } } - # mode 0 = new, mode = 1 edit + set new [list name $::yadmin::eaname smtp $::yadmin::easmtp sender $::yadmin::easender user $::yadmin::eauser "pwd" $::yadmin::eapwd] set mode 0 set id "" - set new [list name $::yadmin::eaname smtp $::yadmin::easmtp sender $::yadmin::easender user $::yadmin::eauser "pwd" $::yadmin::eapwd] - - if {[llength [array names ::yadmin::email_account $::yadmin::eaname]] == 1} { - + if {[$::yadmin::ea_edit_win.ename cget -state] eq "readonly"} { # you're editing a provider set mode 1 set id $::yadmin::eidx This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <si...@us...> - 2012-04-04 08:20:42
|
Revision: 2165 http://yaacs.svn.sourceforge.net/yaacs/?rev=2165&view=rev Author: sickpig Date: 2012-04-04 08:20:36 +0000 (Wed, 04 Apr 2012) Log Message: ----------- FIX: from the tcl string (3tcl) fine man page: string trim string ?chars? Returns a value equal to string except that any leading or trailing characters present in the string given by chars are removed. If chars is not specified then white space is removed (spaces, tabs, newlines, and carriage returns). that means [string trim [read $sock]] simply chomp any leading carriege return from the channel, i.e. failt to proxy traffic Modified Paths: -------------- branches/external-stable/utility/smtpproxy.tcl branches/external-trunk/utility/smtpproxy.tcl branches/internal-stable/utility/smtpproxy.tcl trunk/utility/smtpproxy.tcl Modified: branches/external-stable/utility/smtpproxy.tcl =================================================================== --- branches/external-stable/utility/smtpproxy.tcl 2012-04-03 08:51:29 UTC (rev 2164) +++ branches/external-stable/utility/smtpproxy.tcl 2012-04-04 08:20:36 UTC (rev 2165) @@ -101,7 +101,7 @@ close $to ::thread::release } else { - set temp [string trim [read $from]] + set temp [read $from] if {$temp eq "CLOSECHILD"} { # we need to handle connection problem otherwise # nuber of created thread will increse Modified: branches/external-trunk/utility/smtpproxy.tcl =================================================================== --- branches/external-trunk/utility/smtpproxy.tcl 2012-04-03 08:51:29 UTC (rev 2164) +++ branches/external-trunk/utility/smtpproxy.tcl 2012-04-04 08:20:36 UTC (rev 2165) @@ -101,7 +101,7 @@ close $to ::thread::release } else { - set temp [string trim [read $from]] + set temp [read $from] if {$temp eq "CLOSECHILD"} { # we need to handle connection problem otherwise # nuber of created thread will increse Modified: branches/internal-stable/utility/smtpproxy.tcl =================================================================== --- branches/internal-stable/utility/smtpproxy.tcl 2012-04-03 08:51:29 UTC (rev 2164) +++ branches/internal-stable/utility/smtpproxy.tcl 2012-04-04 08:20:36 UTC (rev 2165) @@ -101,7 +101,7 @@ close $to ::thread::release } else { - set temp [string trim [read $from]] + set temp [read $from] if {$temp eq "CLOSECHILD"} { # we need to handle connection problem otherwise # nuber of created thread will increse Modified: trunk/utility/smtpproxy.tcl =================================================================== --- trunk/utility/smtpproxy.tcl 2012-04-03 08:51:29 UTC (rev 2164) +++ trunk/utility/smtpproxy.tcl 2012-04-04 08:20:36 UTC (rev 2165) @@ -101,7 +101,7 @@ close $to ::thread::release } else { - set temp [string trim [read $from]] + set temp [read $from] if {$temp eq "CLOSECHILD"} { # we need to handle connection problem otherwise # nuber of created thread will increse This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <si...@us...> - 2012-04-03 08:51:39
|
Revision: 2164 http://yaacs.svn.sourceforge.net/yaacs/?rev=2164&view=rev Author: sickpig Date: 2012-04-03 08:51:29 +0000 (Tue, 03 Apr 2012) Log Message: ----------- * FIX: cherry pick trunk commit 2159 and apply to all other active branches. for reference this is the original commit message: a thread release leak when smtpproxy fails to connect to the remote smtp server. While at it improve error handling in sendmail.tcl. commited only on trunk though cause I was able to test the patch only locally. Modified Paths: -------------- branches/external-stable/utility/smtpproxy.tcl branches/external-stable/yaacs/sendmail.tcl branches/external-trunk/utility/smtpproxy.tcl branches/external-trunk/yaacs/sendmail.tcl branches/internal-stable/utility/smtpproxy.tcl branches/internal-stable/yaacs/sendmail.tcl Modified: branches/external-stable/utility/smtpproxy.tcl =================================================================== --- branches/external-stable/utility/smtpproxy.tcl 2012-03-19 15:20:18 UTC (rev 2163) +++ branches/external-stable/utility/smtpproxy.tcl 2012-04-03 08:51:29 UTC (rev 2164) @@ -42,10 +42,9 @@ # if Tclx is present catch SIGTERM to log exiting gracefully if {![catch {package require Tclx}]} { proc my_exit {} { - set fd [open [::tsv::get log filep] a] set ts [clock format [clock scan now] -f "%b %d %T"] - puts $fd "${ts} Shutting down now...." - close $fd + set txt "${ts} Shutting down now...." + ::thread::send -async [::tsv::get log logger_id] [list log $txt] exit } @@ -53,10 +52,15 @@ signal -restart trap TERM my_exit } -# instrument loggin + +# instrument loggin setting variables shared +# across thread pool (it's a sort of hash) tsv::set log filep $logfile tsv::set log connlimit $connlimit +# thread that deal with loggin +# ig you need to log something just send +# to hise thread set logger [thread::create { proc log {txt} { set fd [open [::tsv::get log filep] a] @@ -78,19 +82,32 @@ return } set thread [::thread::create { - + proc log {txt} { ::thread::send -async [::tsv::get log logger_id] [list log $txt] } - + # that's the core thing, it works in both direction + # relaying traffic between by our client (e.g. yacati) + # that send SMTP commands and external SMTP server that + # replies back with commands output proc relay {from to} { + # if SMTP server close connection on QUIT command + # of whatever other reason we relase the read an close + # the connection to our client, otherwise we simply + # proxy from one end to the other if {[eof $from]} { log "Client [join [fconfigure $from -sockname] "/"] - Thread [::thread::id] close connection" close $from close $to ::thread::release } else { - set temp [read $from] + set temp [string trim [read $from]] + if {$temp eq "CLOSECHILD"} { + # we need to handle connection problem otherwise + # nuber of created thread will increse + log "Close child due to a previous connection error" + ::thread::release + } puts -nonewline $to $temp log [string replace $temp end end] } @@ -100,6 +117,7 @@ }] + # check for this one on Bret book ::thread::detach $clientsock ::thread::send -async $thread " @@ -116,23 +134,40 @@ set request [string trim [gets $clientsock]] log "Request: $request" if {$request eq "CLOSEME"} { - log "just recieved a CLOSEME command bye bye" + # FIX we can improve this we ca + log "just recieved a CLOSEME command after \ + aviability handshake, bye all" ::thread::release } else { set port 25 set host $request - set serversock [socket $host $port] - fconfigure $clientsock -blocking 0 -buffering none -translation binary - fconfigure $serversock -blocking 0 -buffering none -translation binary - fileevent $clientsock readable [list relay $clientsock $serversock] - fileevent $serversock readable [list relay $serversock $clientsock] + if {[catch {set serversock [socket $host $port]} err]} { + log "Unable to establish a connection to $host" + log "error details: $err" + ::thread::release + } else { + fconfigure $clientsock -blocking 0 -buffering none -translation binary + fconfigure $serversock -blocking 0 -buffering none -translation binary + fileevent $clientsock readable [list relay $clientsock $serversock] + fileevent $serversock readable [list relay $serversock $clientsock] + } } } } +# helper function used to log smttproxy activity +# this is visible only from main level (global) +# and in fact is a wrapper around log proc defined +# in a thread created with the on purpose to log things proc log {txt} { ::thread::send -async [::tsv::get log logger_id] [list log $txt] } + +# that's a wrapper around the main accept +# proc due to some thread trickness that I forgot +# to note once a wrote that script +# clientsock - socket trough clietn establish connection to us +# clienthost/port - host and port of our client proc _accept {clientsock clienthost clientport} { after 0 [list accept $clientsock $clienthost $clientport] } Modified: branches/external-stable/yaacs/sendmail.tcl =================================================================== --- branches/external-stable/yaacs/sendmail.tcl 2012-03-19 15:20:18 UTC (rev 2163) +++ branches/external-stable/yaacs/sendmail.tcl 2012-04-03 08:51:29 UTC (rev 2164) @@ -23,6 +23,7 @@ namespace eval ::sendmail { namespace export validateMail send realMail + variable ::sendmail::proxyConnectionOn } # validate an email address checking its and lenght @@ -168,7 +169,10 @@ # user tkwait or vwait vwait ::sendmail::temp_checker after cancel $id - + + # FIX we can improve this: instead of closing the already + # established connection just pass that socket to realMail + # after having properly set up the socket catch { puts $::sendmail::sock_check CLOSEME close $::sendmail::sock_check @@ -195,12 +199,13 @@ set pport [lindex [split $proxy ":"] 1] set pavail [::sendmail::checkSmtpProxyAvailability $phost $pport] } - + set ::sendmail::proxyConnectionOn 0 if {$proxy ne "" && $pavail == 1} { if {[catch {set ::sendmail::sock [socket -async $phost $pport]} errs]} { ::yalog::error "Fail to open a socket in async mode!!!! wtf... :/" return -1 } + set ::sendmail::proxyConnectionOn 1 } else { if {[catch {set ::sendmail::sock [socket -async $host $port]} errs]} { ::yalog::error "Fail to open a socket in async mode!!!! wtf... :/" @@ -221,7 +226,7 @@ puts $::sendmail::sock $host fileevent $::sendmail::sock readable { while {[gets $::sendmail::sock line] > 0} { - # need to parse line to check for error ? (5XX code) + # need to parse line to check for error 5XX code ::yalog::debug "Empty welcome: $line" } set ::sendmail::connection_state "ok line -1" @@ -357,13 +362,13 @@ set ret [::sendmail::connectSMTP $mxr $proxy] if {$ret == -1} { ::yalog::error "cannot open socket" - ::sendmail::closeSmtpSocket + ::sendmail::closeSmtpSocket 1 #try another time on the second mxr it it exists if {[info exists mxr2]} {set mxr $mxr2} after 100 if {[::sendmail::connectSMTP $mxr $proxy 3000] == -1} { ::yalog::error "cannot open socket two time in a row... give up" - ::sendmail::closeSmtpSocket + ::sendmail::closeSmtpSocket 1 return -2 } } @@ -372,27 +377,27 @@ # check for error on sending command to SMTP # usually means that server dropped connection unexpectedly if {$ret == -1} { - ::sendmail::closeSmtpSocket + ::sendmail::closeSmtpSocket 1 return -2 } # parsing the response # now we should wait for reply to be stored in ::sendmail::reply - if {![string match 2* $sendmail::reply]} { - ::yalog::error "error on HELO: $sendmail::reply"; - ::sendmail::closeSmtpSocket + if {![string match 2* $::sendmail::reply]} { + ::yalog::error "error on HELO: $::sendmail::reply"; + ::sendmail::closeSmtpSocket 1 return -3 } # set envelop sender set ret [::sendmail::sendSMTPcmd $::sendmail::sock "MAIL FROM:<$sender>"] if {$ret == -1} { - ::sendmail::closeSmtpSocket + ::sendmail::closeSmtpSocket 1 return -2 } if {![string match 2* $::sendmail::reply]} { - ::yalog::error "error on MAIL FROM: $sendmail::reply"; - ::sendmail::closeSmtpSocket + ::yalog::error "error on MAIL FROM: $::sendmail::reply"; + ::sendmail::closeSmtpSocket 1 return -3 } @@ -407,7 +412,7 @@ set ret [::sendmail::sendSMTPcmd $::sendmail::sock "RCPT TO:<$mail>" 6000] if {$ret == -1} { - ::sendmail::closeSmtpSocket + ::sendmail::closeSmtpSocket 1 return -2 } # need to take into account grey listing and temporary failure (4XX code) @@ -435,8 +440,9 @@ return 0 } -proc ::sendmail::closeSmtpSocket {} { +proc ::sendmail::closeSmtpSocket {{err 0}} { catch { + if {$err && $::sendmail::proxyConnectionOn} {puts $::sendmail::socket CLOSECHILD} puts $::sendmail::sock QUIT close $::sendmail::sock } err Modified: branches/external-trunk/utility/smtpproxy.tcl =================================================================== --- branches/external-trunk/utility/smtpproxy.tcl 2012-03-19 15:20:18 UTC (rev 2163) +++ branches/external-trunk/utility/smtpproxy.tcl 2012-04-03 08:51:29 UTC (rev 2164) @@ -42,10 +42,9 @@ # if Tclx is present catch SIGTERM to log exiting gracefully if {![catch {package require Tclx}]} { proc my_exit {} { - set fd [open [::tsv::get log filep] a] set ts [clock format [clock scan now] -f "%b %d %T"] - puts $fd "${ts} Shutting down now...." - close $fd + set txt "${ts} Shutting down now...." + ::thread::send -async [::tsv::get log logger_id] [list log $txt] exit } @@ -53,10 +52,15 @@ signal -restart trap TERM my_exit } -# instrument loggin + +# instrument loggin setting variables shared +# across thread pool (it's a sort of hash) tsv::set log filep $logfile tsv::set log connlimit $connlimit +# thread that deal with loggin +# ig you need to log something just send +# to hise thread set logger [thread::create { proc log {txt} { set fd [open [::tsv::get log filep] a] @@ -78,19 +82,32 @@ return } set thread [::thread::create { - + proc log {txt} { ::thread::send -async [::tsv::get log logger_id] [list log $txt] } - + # that's the core thing, it works in both direction + # relaying traffic between by our client (e.g. yacati) + # that send SMTP commands and external SMTP server that + # replies back with commands output proc relay {from to} { + # if SMTP server close connection on QUIT command + # of whatever other reason we relase the read an close + # the connection to our client, otherwise we simply + # proxy from one end to the other if {[eof $from]} { log "Client [join [fconfigure $from -sockname] "/"] - Thread [::thread::id] close connection" close $from close $to ::thread::release } else { - set temp [read $from] + set temp [string trim [read $from]] + if {$temp eq "CLOSECHILD"} { + # we need to handle connection problem otherwise + # nuber of created thread will increse + log "Close child due to a previous connection error" + ::thread::release + } puts -nonewline $to $temp log [string replace $temp end end] } @@ -100,6 +117,7 @@ }] + # check for this one on Bret book ::thread::detach $clientsock ::thread::send -async $thread " @@ -116,23 +134,40 @@ set request [string trim [gets $clientsock]] log "Request: $request" if {$request eq "CLOSEME"} { - log "just recieved a CLOSEME command bye bye" + # FIX we can improve this we ca + log "just recieved a CLOSEME command after \ + aviability handshake, bye all" ::thread::release } else { set port 25 set host $request - set serversock [socket $host $port] - fconfigure $clientsock -blocking 0 -buffering none -translation binary - fconfigure $serversock -blocking 0 -buffering none -translation binary - fileevent $clientsock readable [list relay $clientsock $serversock] - fileevent $serversock readable [list relay $serversock $clientsock] + if {[catch {set serversock [socket $host $port]} err]} { + log "Unable to establish a connection to $host" + log "error details: $err" + ::thread::release + } else { + fconfigure $clientsock -blocking 0 -buffering none -translation binary + fconfigure $serversock -blocking 0 -buffering none -translation binary + fileevent $clientsock readable [list relay $clientsock $serversock] + fileevent $serversock readable [list relay $serversock $clientsock] + } } } } +# helper function used to log smttproxy activity +# this is visible only from main level (global) +# and in fact is a wrapper around log proc defined +# in a thread created with the on purpose to log things proc log {txt} { ::thread::send -async [::tsv::get log logger_id] [list log $txt] } + +# that's a wrapper around the main accept +# proc due to some thread trickness that I forgot +# to note once a wrote that script +# clientsock - socket trough clietn establish connection to us +# clienthost/port - host and port of our client proc _accept {clientsock clienthost clientport} { after 0 [list accept $clientsock $clienthost $clientport] } Modified: branches/external-trunk/yaacs/sendmail.tcl =================================================================== --- branches/external-trunk/yaacs/sendmail.tcl 2012-03-19 15:20:18 UTC (rev 2163) +++ branches/external-trunk/yaacs/sendmail.tcl 2012-04-03 08:51:29 UTC (rev 2164) @@ -23,6 +23,7 @@ namespace eval ::sendmail { namespace export validateMail send realMail + variable ::sendmail::proxyConnectionOn } # validate an email address checking its and lenght @@ -168,7 +169,10 @@ # user tkwait or vwait vwait ::sendmail::temp_checker after cancel $id - + + # FIX we can improve this: instead of closing the already + # established connection just pass that socket to realMail + # after having properly set up the socket catch { puts $::sendmail::sock_check CLOSEME close $::sendmail::sock_check @@ -195,12 +199,13 @@ set pport [lindex [split $proxy ":"] 1] set pavail [::sendmail::checkSmtpProxyAvailability $phost $pport] } - + set ::sendmail::proxyConnectionOn 0 if {$proxy ne "" && $pavail == 1} { if {[catch {set ::sendmail::sock [socket -async $phost $pport]} errs]} { ::yalog::error "Fail to open a socket in async mode!!!! wtf... :/" return -1 } + set ::sendmail::proxyConnectionOn 1 } else { if {[catch {set ::sendmail::sock [socket -async $host $port]} errs]} { ::yalog::error "Fail to open a socket in async mode!!!! wtf... :/" @@ -221,7 +226,7 @@ puts $::sendmail::sock $host fileevent $::sendmail::sock readable { while {[gets $::sendmail::sock line] > 0} { - # need to parse line to check for error ? (5XX code) + # need to parse line to check for error 5XX code ::yalog::debug "Empty welcome: $line" } set ::sendmail::connection_state "ok line -1" @@ -357,13 +362,13 @@ set ret [::sendmail::connectSMTP $mxr $proxy] if {$ret == -1} { ::yalog::error "cannot open socket" - ::sendmail::closeSmtpSocket + ::sendmail::closeSmtpSocket 1 #try another time on the second mxr it it exists if {[info exists mxr2]} {set mxr $mxr2} after 100 if {[::sendmail::connectSMTP $mxr $proxy 3000] == -1} { ::yalog::error "cannot open socket two time in a row... give up" - ::sendmail::closeSmtpSocket + ::sendmail::closeSmtpSocket 1 return -2 } } @@ -372,27 +377,27 @@ # check for error on sending command to SMTP # usually means that server dropped connection unexpectedly if {$ret == -1} { - ::sendmail::closeSmtpSocket + ::sendmail::closeSmtpSocket 1 return -2 } # parsing the response # now we should wait for reply to be stored in ::sendmail::reply - if {![string match 2* $sendmail::reply]} { - ::yalog::error "error on HELO: $sendmail::reply"; - ::sendmail::closeSmtpSocket + if {![string match 2* $::sendmail::reply]} { + ::yalog::error "error on HELO: $::sendmail::reply"; + ::sendmail::closeSmtpSocket 1 return -3 } # set envelop sender set ret [::sendmail::sendSMTPcmd $::sendmail::sock "MAIL FROM:<$sender>"] if {$ret == -1} { - ::sendmail::closeSmtpSocket + ::sendmail::closeSmtpSocket 1 return -2 } if {![string match 2* $::sendmail::reply]} { - ::yalog::error "error on MAIL FROM: $sendmail::reply"; - ::sendmail::closeSmtpSocket + ::yalog::error "error on MAIL FROM: $::sendmail::reply"; + ::sendmail::closeSmtpSocket 1 return -3 } @@ -407,7 +412,7 @@ set ret [::sendmail::sendSMTPcmd $::sendmail::sock "RCPT TO:<$mail>" 6000] if {$ret == -1} { - ::sendmail::closeSmtpSocket + ::sendmail::closeSmtpSocket 1 return -2 } # need to take into account grey listing and temporary failure (4XX code) @@ -435,8 +440,9 @@ return 0 } -proc ::sendmail::closeSmtpSocket {} { +proc ::sendmail::closeSmtpSocket {{err 0}} { catch { + if {$err && $::sendmail::proxyConnectionOn} {puts $::sendmail::socket CLOSECHILD} puts $::sendmail::sock QUIT close $::sendmail::sock } err Modified: branches/internal-stable/utility/smtpproxy.tcl =================================================================== --- branches/internal-stable/utility/smtpproxy.tcl 2012-03-19 15:20:18 UTC (rev 2163) +++ branches/internal-stable/utility/smtpproxy.tcl 2012-04-03 08:51:29 UTC (rev 2164) @@ -42,10 +42,9 @@ # if Tclx is present catch SIGTERM to log exiting gracefully if {![catch {package require Tclx}]} { proc my_exit {} { - set fd [open [::tsv::get log filep] a] set ts [clock format [clock scan now] -f "%b %d %T"] - puts $fd "${ts} Shutting down now...." - close $fd + set txt "${ts} Shutting down now...." + ::thread::send -async [::tsv::get log logger_id] [list log $txt] exit } @@ -53,10 +52,15 @@ signal -restart trap TERM my_exit } -# instrument loggin + +# instrument loggin setting variables shared +# across thread pool (it's a sort of hash) tsv::set log filep $logfile tsv::set log connlimit $connlimit +# thread that deal with loggin +# ig you need to log something just send +# to hise thread set logger [thread::create { proc log {txt} { set fd [open [::tsv::get log filep] a] @@ -78,19 +82,32 @@ return } set thread [::thread::create { - + proc log {txt} { ::thread::send -async [::tsv::get log logger_id] [list log $txt] } - + # that's the core thing, it works in both direction + # relaying traffic between by our client (e.g. yacati) + # that send SMTP commands and external SMTP server that + # replies back with commands output proc relay {from to} { + # if SMTP server close connection on QUIT command + # of whatever other reason we relase the read an close + # the connection to our client, otherwise we simply + # proxy from one end to the other if {[eof $from]} { log "Client [join [fconfigure $from -sockname] "/"] - Thread [::thread::id] close connection" close $from close $to ::thread::release } else { - set temp [read $from] + set temp [string trim [read $from]] + if {$temp eq "CLOSECHILD"} { + # we need to handle connection problem otherwise + # nuber of created thread will increse + log "Close child due to a previous connection error" + ::thread::release + } puts -nonewline $to $temp log [string replace $temp end end] } @@ -100,6 +117,7 @@ }] + # check for this one on Bret book ::thread::detach $clientsock ::thread::send -async $thread " @@ -116,23 +134,40 @@ set request [string trim [gets $clientsock]] log "Request: $request" if {$request eq "CLOSEME"} { - log "just recieved a CLOSEME command bye bye" + # FIX we can improve this we ca + log "just recieved a CLOSEME command after \ + aviability handshake, bye all" ::thread::release } else { set port 25 set host $request - set serversock [socket $host $port] - fconfigure $clientsock -blocking 0 -buffering none -translation binary - fconfigure $serversock -blocking 0 -buffering none -translation binary - fileevent $clientsock readable [list relay $clientsock $serversock] - fileevent $serversock readable [list relay $serversock $clientsock] + if {[catch {set serversock [socket $host $port]} err]} { + log "Unable to establish a connection to $host" + log "error details: $err" + ::thread::release + } else { + fconfigure $clientsock -blocking 0 -buffering none -translation binary + fconfigure $serversock -blocking 0 -buffering none -translation binary + fileevent $clientsock readable [list relay $clientsock $serversock] + fileevent $serversock readable [list relay $serversock $clientsock] + } } } } +# helper function used to log smttproxy activity +# this is visible only from main level (global) +# and in fact is a wrapper around log proc defined +# in a thread created with the on purpose to log things proc log {txt} { ::thread::send -async [::tsv::get log logger_id] [list log $txt] } + +# that's a wrapper around the main accept +# proc due to some thread trickness that I forgot +# to note once a wrote that script +# clientsock - socket trough clietn establish connection to us +# clienthost/port - host and port of our client proc _accept {clientsock clienthost clientport} { after 0 [list accept $clientsock $clienthost $clientport] } Modified: branches/internal-stable/yaacs/sendmail.tcl =================================================================== --- branches/internal-stable/yaacs/sendmail.tcl 2012-03-19 15:20:18 UTC (rev 2163) +++ branches/internal-stable/yaacs/sendmail.tcl 2012-04-03 08:51:29 UTC (rev 2164) @@ -23,6 +23,7 @@ namespace eval ::sendmail { namespace export validateMail send realMail + variable ::sendmail::proxyConnectionOn } # validate an email address checking its and lenght @@ -168,7 +169,10 @@ # user tkwait or vwait vwait ::sendmail::temp_checker after cancel $id - + + # FIX we can improve this: instead of closing the already + # established connection just pass that socket to realMail + # after having properly set up the socket catch { puts $::sendmail::sock_check CLOSEME close $::sendmail::sock_check @@ -195,12 +199,13 @@ set pport [lindex [split $proxy ":"] 1] set pavail [::sendmail::checkSmtpProxyAvailability $phost $pport] } - + set ::sendmail::proxyConnectionOn 0 if {$proxy ne "" && $pavail == 1} { if {[catch {set ::sendmail::sock [socket -async $phost $pport]} errs]} { ::yalog::error "Fail to open a socket in async mode!!!! wtf... :/" return -1 } + set ::sendmail::proxyConnectionOn 1 } else { if {[catch {set ::sendmail::sock [socket -async $host $port]} errs]} { ::yalog::error "Fail to open a socket in async mode!!!! wtf... :/" @@ -221,7 +226,7 @@ puts $::sendmail::sock $host fileevent $::sendmail::sock readable { while {[gets $::sendmail::sock line] > 0} { - # need to parse line to check for error ? (5XX code) + # need to parse line to check for error 5XX code ::yalog::debug "Empty welcome: $line" } set ::sendmail::connection_state "ok line -1" @@ -357,13 +362,13 @@ set ret [::sendmail::connectSMTP $mxr $proxy] if {$ret == -1} { ::yalog::error "cannot open socket" - ::sendmail::closeSmtpSocket + ::sendmail::closeSmtpSocket 1 #try another time on the second mxr it it exists if {[info exists mxr2]} {set mxr $mxr2} after 100 if {[::sendmail::connectSMTP $mxr $proxy 3000] == -1} { ::yalog::error "cannot open socket two time in a row... give up" - ::sendmail::closeSmtpSocket + ::sendmail::closeSmtpSocket 1 return -2 } } @@ -372,27 +377,27 @@ # check for error on sending command to SMTP # usually means that server dropped connection unexpectedly if {$ret == -1} { - ::sendmail::closeSmtpSocket + ::sendmail::closeSmtpSocket 1 return -2 } # parsing the response # now we should wait for reply to be stored in ::sendmail::reply - if {![string match 2* $sendmail::reply]} { - ::yalog::error "error on HELO: $sendmail::reply"; - ::sendmail::closeSmtpSocket + if {![string match 2* $::sendmail::reply]} { + ::yalog::error "error on HELO: $::sendmail::reply"; + ::sendmail::closeSmtpSocket 1 return -3 } # set envelop sender set ret [::sendmail::sendSMTPcmd $::sendmail::sock "MAIL FROM:<$sender>"] if {$ret == -1} { - ::sendmail::closeSmtpSocket + ::sendmail::closeSmtpSocket 1 return -2 } if {![string match 2* $::sendmail::reply]} { - ::yalog::error "error on MAIL FROM: $sendmail::reply"; - ::sendmail::closeSmtpSocket + ::yalog::error "error on MAIL FROM: $::sendmail::reply"; + ::sendmail::closeSmtpSocket 1 return -3 } @@ -407,7 +412,7 @@ set ret [::sendmail::sendSMTPcmd $::sendmail::sock "RCPT TO:<$mail>" 6000] if {$ret == -1} { - ::sendmail::closeSmtpSocket + ::sendmail::closeSmtpSocket 1 return -2 } # need to take into account grey listing and temporary failure (4XX code) @@ -435,8 +440,9 @@ return 0 } -proc ::sendmail::closeSmtpSocket {} { +proc ::sendmail::closeSmtpSocket {{err 0}} { catch { + if {$err && $::sendmail::proxyConnectionOn} {puts $::sendmail::socket CLOSECHILD} puts $::sendmail::sock QUIT close $::sendmail::sock } err This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <si...@us...> - 2012-03-19 15:20:29
|
Revision: 2163 http://yaacs.svn.sourceforge.net/yaacs/?rev=2163&view=rev Author: sickpig Date: 2012-03-19 15:20:18 +0000 (Mon, 19 Mar 2012) Log Message: ----------- * FIX (sort of): the way yacati execute CATI_EXE. instead of appending rid and cod_com to survey url use an external php proxy script to take advantage of the new mod_survey feature: persistence 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 2012-03-19 10:22:48 UTC (rev 2162) +++ branches/external-stable/yacati.tcl 2012-03-19 15:20:18 UTC (rev 2163) @@ -3124,8 +3124,9 @@ set com_ms -1 } - ::yalog::debug "$url?action=display&numint=$contact(rid)&codcom=$com_ms" - set f [open "|$cati_exe $url?action=display&numint=$contact(rid)&codcom=$com_ms"] + append nurl $url "/join.php?token=" $contact(rid) "_" $com_ms "_" $survey(proj) + ::yalog::debug $nurl + set f [open "|$cati_exe $nurl"] fconfigure $f -blocking 0 fileevent $f readable [list yacati::lazy_reader $f $old_state] Modified: branches/external-trunk/yacati.tcl =================================================================== --- branches/external-trunk/yacati.tcl 2012-03-19 10:22:48 UTC (rev 2162) +++ branches/external-trunk/yacati.tcl 2012-03-19 15:20:18 UTC (rev 2163) @@ -3124,8 +3124,9 @@ set com_ms -1 } - ::yalog::debug "$url?action=display&numint=$contact(rid)&codcom=$com_ms" - set f [open "|$cati_exe $url?action=display&numint=$contact(rid)&codcom=$com_ms"] + append nurl $url "/join.php?token=" $contact(rid) "_" $com_ms "_" $survey(proj) + ::yalog::debug $nurl + set f [open "|$cati_exe $nurl"] fconfigure $f -blocking 0 fileevent $f readable [list yacati::lazy_reader $f $old_state] Modified: branches/internal-stable/yacati.tcl =================================================================== --- branches/internal-stable/yacati.tcl 2012-03-19 10:22:48 UTC (rev 2162) +++ branches/internal-stable/yacati.tcl 2012-03-19 15:20:18 UTC (rev 2163) @@ -3124,8 +3124,9 @@ set com_ms -1 } - ::yalog::debug "$url?action=display&numint=$contact(rid)&codcom=$com_ms" - set f [open "|$cati_exe $url?action=display&numint=$contact(rid)&codcom=$com_ms"] + append nurl $url "/join.php?token=" $contact(rid) "_" $com_ms "_" $survey(proj) + ::yalog::debug $nurl + set f [open "|$cati_exe $nurl"] fconfigure $f -blocking 0 fileevent $f readable [list yacati::lazy_reader $f $old_state] Modified: trunk/yacati.tcl =================================================================== --- trunk/yacati.tcl 2012-03-19 10:22:48 UTC (rev 2162) +++ trunk/yacati.tcl 2012-03-19 15:20:18 UTC (rev 2163) @@ -3124,8 +3124,9 @@ set com_ms -1 } - ::yalog::debug "$url?action=display&numint=$contact(rid)&codcom=$com_ms" - set f [open "|$cati_exe $url?action=display&numint=$contact(rid)&codcom=$com_ms"] + append nurl $url "/join.php?token=" $contact(rid) "_" $com_ms "_" $survey(proj) + ::yalog::debug $nurl + set f [open "|$cati_exe $nurl"] fconfigure $f -blocking 0 fileevent $f readable [list yacati::lazy_reader $f $old_state] This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <si...@us...> - 2012-03-19 10:22:59
|
Revision: 2162 http://yaacs.svn.sourceforge.net/yaacs/?rev=2162&view=rev Author: sickpig Date: 2012-03-19 10:22:48 +0000 (Mon, 19 Mar 2012) Log Message: ----------- FIX: use correct SQL syntax for ON COMMIT in CRETAE TABLE statement. it has to go at the end when using explicit field declaration. Whilst it has to go between table name and select statment if you're creating a new table based on a sql qry. Modified Paths: -------------- branches/external-stable/yaacs/admin.tcl branches/external-trunk/yaacs/admin.tcl branches/internal-stable/yaacs/admin.tcl trunk/yaacs/admin.tcl Modified: branches/external-stable/yaacs/admin.tcl =================================================================== --- branches/external-stable/yaacs/admin.tcl 2012-03-12 15:01:42 UTC (rev 2161) +++ branches/external-stable/yaacs/admin.tcl 2012-03-19 10:22:48 UTC (rev 2162) @@ -784,7 +784,7 @@ # firstly: for the new entry in panel table i want to update values for gender, age, study and job # from an external datafile (maybe one day we will integrate a questionnaire software here) set auxT "t[clock seconds]" - set sql "CREATE TEMP TABLE $auxT ON COMMIT DROP (cod_com integer, rid integer, study integer, job integer, byear integer, respname varchar, sex char(1))" + set sql "CREATE TEMP TABLE $auxT (cod_com integer, rid integer, study integer, job integer, byear integer, respname varchar, sex char(1)) ON COMMIT DROP " set fieldL [list cod_com rid study job byear respname sex] if {[::yadb::execl $db $sql] == -1} { ::yalog::error "unable to create table $auxT" Modified: branches/external-trunk/yaacs/admin.tcl =================================================================== --- branches/external-trunk/yaacs/admin.tcl 2012-03-12 15:01:42 UTC (rev 2161) +++ branches/external-trunk/yaacs/admin.tcl 2012-03-19 10:22:48 UTC (rev 2162) @@ -784,7 +784,7 @@ # firstly: for the new entry in panel table i want to update values for gender, age, study and job # from an external datafile (maybe one day we will integrate a questionnaire software here) set auxT "t[clock seconds]" - set sql "CREATE TEMP TABLE $auxT ON COMMIT DROP (cod_com integer, rid integer, study integer, job integer, byear integer, respname varchar, sex char(1))" + set sql "CREATE TEMP TABLE $auxT (cod_com integer, rid integer, study integer, job integer, byear integer, respname varchar, sex char(1)) ON COMMIT DROP " set fieldL [list cod_com rid study job byear respname sex] if {[::yadb::execl $db $sql] == -1} { ::yalog::error "unable to create table $auxT" Modified: branches/internal-stable/yaacs/admin.tcl =================================================================== --- branches/internal-stable/yaacs/admin.tcl 2012-03-12 15:01:42 UTC (rev 2161) +++ branches/internal-stable/yaacs/admin.tcl 2012-03-19 10:22:48 UTC (rev 2162) @@ -784,7 +784,7 @@ # firstly: for the new entry in panel table i want to update values for gender, age, study and job # from an external datafile (maybe one day we will integrate a questionnaire software here) set auxT "t[clock seconds]" - set sql "CREATE TEMP TABLE $auxT ON COMMIT DROP (cod_com integer, rid integer, study integer, job integer, byear integer, respname varchar, sex char(1))" + set sql "CREATE TEMP TABLE $auxT (cod_com integer, rid integer, study integer, job integer, byear integer, respname varchar, sex char(1)) ON COMMIT DROP " set fieldL [list cod_com rid study job byear respname sex] if {[::yadb::execl $db $sql] == -1} { ::yalog::error "unable to create table $auxT" Modified: trunk/yaacs/admin.tcl =================================================================== --- trunk/yaacs/admin.tcl 2012-03-12 15:01:42 UTC (rev 2161) +++ trunk/yaacs/admin.tcl 2012-03-19 10:22:48 UTC (rev 2162) @@ -784,7 +784,7 @@ # firstly: for the new entry in panel table i want to update values for gender, age, study and job # from an external datafile (maybe one day we will integrate a questionnaire software here) set auxT "t[clock seconds]" - set sql "CREATE TEMP TABLE $auxT ON COMMIT DROP (cod_com integer, rid integer, study integer, job integer, byear integer, respname varchar, sex char(1))" + set sql "CREATE TEMP TABLE $auxT (cod_com integer, rid integer, study integer, job integer, byear integer, respname varchar, sex char(1)) ON COMMIT DROP " set fieldL [list cod_com rid study job byear respname sex] if {[::yadb::execl $db $sql] == -1} { ::yalog::error "unable to create table $auxT" This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <si...@us...> - 2012-03-12 15:01:53
|
Revision: 2161 http://yaacs.svn.sourceforge.net/yaacs/?rev=2161&view=rev Author: sickpig Date: 2012-03-12 15:01:42 +0000 (Mon, 12 Mar 2012) Log Message: ----------- * FIX: yacati did not handle GUI state correctly when the prev contacts has an unallocated phone numbers enumerated in dis_phones field, it actually maintains the same state for widget related to not working numbers across contacts. 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 2012-03-09 16:54:23 UTC (rev 2160) +++ branches/external-stable/yacati.tcl 2012-03-12 15:01:42 UTC (rev 2161) @@ -351,6 +351,14 @@ catch {$w configure -state normal} err } + # in any case we have to keep disable + # phones number that resulted unallocated + # (non working) in prev phone calls + if {$state eq "contacting"} { + foreach w $::yacati::contact(dis_phones) { + ::yacati::disable_phone $w + } + } # set auto_call button state wrt auto_call survey's value if {$state eq "getting" && $::yacati::voip_mode != 0 && [info exists ::yacati::survey(auto_call)]} { switch -exact -- $::yacati::survey(auto_call) { @@ -561,6 +569,17 @@ ::yacati::show_entry $::yacati::phone3 "" ::yacati::show_entry $::yacati::phone4 "" + # ensure to restore phone# state + $::yacati::phone1 configure -state readonly + $::yacati::phone2 configure -state readonly + $::yacati::phone3 configure -state normal + $::yacati::phone4 configure -state normal + + $::yacati::radio1 configure -state normal + $::yacati::radio2 configure -state normal + $::yacati::radio3 configure -state normal + $::yacati::radio4 configure -state normal + set ::yacati::active_phone 0 set ::yacati::fax_on_completed 0 set ::yacati::email_on_completed 0 Modified: branches/external-trunk/yacati.tcl =================================================================== --- branches/external-trunk/yacati.tcl 2012-03-09 16:54:23 UTC (rev 2160) +++ branches/external-trunk/yacati.tcl 2012-03-12 15:01:42 UTC (rev 2161) @@ -350,6 +350,14 @@ catch {$w configure -state normal} err } + # in any case we have to keep disable + # phones number that resulted unallocated + # (non working) in prev phone calls + if {$state eq "contacting"} { + foreach w $::yacati::contact(dis_phones) { + ::yacati::disable_phone $w + } + } # set auto_call button state wrt auto_call survey's value if {$state eq "getting" && $::yacati::voip_mode != 0 && [info exists ::yacati::survey(auto_call)]} { switch -exact -- $::yacati::survey(auto_call) { @@ -560,6 +568,17 @@ ::yacati::show_entry $::yacati::phone3 "" ::yacati::show_entry $::yacati::phone4 "" + # ensure to restore phone# state + $::yacati::phone1 configure -state readonly + $::yacati::phone2 configure -state readonly + $::yacati::phone3 configure -state normal + $::yacati::phone4 configure -state normal + + $::yacati::radio1 configure -state normal + $::yacati::radio2 configure -state normal + $::yacati::radio3 configure -state normal + $::yacati::radio4 configure -state normal + set ::yacati::active_phone 0 set ::yacati::fax_on_completed 0 set ::yacati::email_on_completed 0 Modified: branches/internal-stable/yacati.tcl =================================================================== --- branches/internal-stable/yacati.tcl 2012-03-09 16:54:23 UTC (rev 2160) +++ branches/internal-stable/yacati.tcl 2012-03-12 15:01:42 UTC (rev 2161) @@ -350,6 +350,14 @@ catch {$w configure -state normal} err } + # in any case we have to keep disable + # phones number that resulted unallocated + # (non working) in prev phone calls + if {$state eq "contacting"} { + foreach w $::yacati::contact(dis_phones) { + ::yacati::disable_phone $w + } + } # set auto_call button state wrt auto_call survey's value if {$state eq "getting" && $::yacati::voip_mode != 0 && [info exists ::yacati::survey(auto_call)]} { switch -exact -- $::yacati::survey(auto_call) { @@ -560,6 +568,17 @@ ::yacati::show_entry $::yacati::phone3 "" ::yacati::show_entry $::yacati::phone4 "" + # ensure to restore phone# state + $::yacati::phone1 configure -state readonly + $::yacati::phone2 configure -state readonly + $::yacati::phone3 configure -state normal + $::yacati::phone4 configure -state normal + + $::yacati::radio1 configure -state normal + $::yacati::radio2 configure -state normal + $::yacati::radio3 configure -state normal + $::yacati::radio4 configure -state normal + set ::yacati::active_phone 0 set ::yacati::fax_on_completed 0 set ::yacati::email_on_completed 0 Modified: trunk/yacati.tcl =================================================================== --- trunk/yacati.tcl 2012-03-09 16:54:23 UTC (rev 2160) +++ trunk/yacati.tcl 2012-03-12 15:01:42 UTC (rev 2161) @@ -350,6 +350,14 @@ catch {$w configure -state normal} err } + # in any case we have to keep disable + # phones number that resulted unallocated + # (non working) in prev phone calls + if {$state eq "contacting"} { + foreach w $::yacati::contact(dis_phones) { + ::yacati::disable_phone $w + } + } # set auto_call button state wrt auto_call survey's value if {$state eq "getting" && $::yacati::voip_mode != 0 && [info exists ::yacati::survey(auto_call)]} { switch -exact -- $::yacati::survey(auto_call) { @@ -560,6 +568,17 @@ ::yacati::show_entry $::yacati::phone3 "" ::yacati::show_entry $::yacati::phone4 "" + # ensure to restore phone# state + $::yacati::phone1 configure -state readonly + $::yacati::phone2 configure -state readonly + $::yacati::phone3 configure -state normal + $::yacati::phone4 configure -state normal + + $::yacati::radio1 configure -state normal + $::yacati::radio2 configure -state normal + $::yacati::radio3 configure -state normal + $::yacati::radio4 configure -state normal + set ::yacati::active_phone 0 set ::yacati::fax_on_completed 0 set ::yacati::email_on_completed 0 This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <si...@us...> - 2012-03-09 16:54:34
|
Revision: 2160 http://yaacs.svn.sourceforge.net/yaacs/?rev=2160&view=rev Author: sickpig Date: 2012-03-09 16:54:23 +0000 (Fri, 09 Mar 2012) Log Message: ----------- * FIX: - remove home made caching from admin::getDataPj (more harmful than useful) - add home made polymorphism to admin::getDataPj: we can query for project data both for id or name without change internal api - fix some GUI stale state in yadmin GUI - fix a bug that prevent to reload sex/age sample distribution - fix stale temp table in the old subst sampling type algo Modified Paths: -------------- branches/external-stable/yaacs/admin.tcl branches/external-stable/yadmin.tcl branches/external-trunk/yaacs/admin.tcl branches/external-trunk/yadmin.tcl branches/internal-stable/yaacs/admin.tcl branches/internal-stable/yadmin.tcl trunk/yaacs/admin.tcl trunk/yadmin.tcl Modified: branches/external-stable/yaacs/admin.tcl =================================================================== --- branches/external-stable/yaacs/admin.tcl 2012-02-15 22:31:54 UTC (rev 2159) +++ branches/external-stable/yaacs/admin.tcl 2012-03-09 16:54:23 UTC (rev 2160) @@ -321,19 +321,20 @@ return [array get ret] } -# get all project's attribute. try to use -# cached value if possible. +# get all project's attribute. # # @param db database connection handler -# @param idPj project's id on db +# @param key project's id or name on db # @return attributes' list as specified # by namespace vars; an empty list on error -proc ::admin::getDataPj {db idPj} { - - # check if cached data can be used - if {$admin::cachedID == $idPj && [array size admin::cachedData] != 0} {return [array get ::admin::cachedData]} - - set res [::yadb::getTupleArray $db "select * from projects.projects where proj=$idPj"] +proc ::admin::getDataPj {db key} { + # home made polymorphism + if {[string is integer -strict $key] == 1} { + set qry "select * from projects.projects where proj=$key" + } else { + set qry "select * from projects.projects where name = [pg_quote $key]" + } + set res [::yadb::getTupleArray $db $qry] if {([llength $res] == 1) && ([lindex $res 0] == -1)} { ::yalog::error "Failing to retrive a project's attributes" return [list] @@ -341,7 +342,7 @@ array set ret $res if { [array size ret] == 0 } { - ::yalog::error "no project found with the specified id: $idPj" + ::yalog::error "no project found with the specified id: $key" return [list] } @@ -358,11 +359,6 @@ set ret(pjtable) $tab set ret(pjframe) $tab$suffixFrame - set admin::cachedID $idPj - array set ::admin::cachedData [array get ret] - # invalidate cached value for stat table - # otherwise I must 'recalculate' it. - set ::admin::cachedStat "" return [array get ret] } @@ -770,9 +766,10 @@ return $::admin::ERR_SSGA } } - # if we have genage quota (and study quota) + # if we have genage quota (or study quota) and + # we have just created the projects # start creating panel aux tables and view - if {($doImpGA || $doImpSd) && !$is4company} { + if {(($doImpGA || $doImpSd) && $ce == 0) && !$is4company} { if {[::admin::setupPanel $db $table $samplet] == -1} { ::yalog::error "Cannot create panel infrastructure for project $table" ::yadb::execl $db "rollback" @@ -787,7 +784,7 @@ # firstly: for the new entry in panel table i want to update values for gender, age, study and job # from an external datafile (maybe one day we will integrate a questionnaire software here) set auxT "t[clock seconds]" - set sql "CREATE TABLE $auxT (cod_com integer, rid integer, study integer, job integer, byear integer, respname varchar, sex char(1))" + set sql "CREATE TEMP TABLE $auxT ON COMMIT DROP (cod_com integer, rid integer, study integer, job integer, byear integer, respname varchar, sex char(1))" set fieldL [list cod_com rid study job byear respname sex] if {[::yadb::execl $db $sql] == -1} { ::yalog::error "unable to create table $auxT" @@ -852,13 +849,6 @@ return $::admin::ERR_PANEL } - # drop temp table - if {[::yadb::execl $db "DROP TABLE $auxT"] == -1} { - ::yalog::error "unable to drop table $auxT" - ::yadb::execl $db "rollback" - return $::admin::ERR_PANEL - } - #then i try to use a rule for panel outgoing, if a panel nominatives has ouid 8 it's good then give him status = 0 # else with ouid 6 or 7 increment his status. if {[::yadb::tableExists $db ${table}_panel projects]} { @@ -1570,10 +1560,16 @@ # @return quota list, -1 on generic error. proc ::admin::quotaSost {db idPj} { #going to create temp table to hepl quota calc + if {[::yadb::execl $db "BEGIN"] == -1} { + ::yalog::error "unable to open a transaction" + return -1 + } + set auxT "t[clock seconds]" - set sql "CREATE TABLE $auxT AS SELECT kindof,strata,qty FROM projects.${::yadmin::pjname}_theo" + set sql "CREATE TEMP TABLE $auxT ON COMMIT DROP AS SELECT kindof,strata,qty FROM projects.${::yadmin::pjname}_theo" if {[::yadb::execl $db $sql] == -1} { ::yalog::error "unable to create table $auxT" + ::yadb::execl $db "ROLLBACK" return -1 } @@ -1581,6 +1577,7 @@ set sql "ALTER TABLE $auxT ADD COLUMN done INTEGER" if {[::yadb::execl $db $sql] == -1} { ::yalog::error "unable to add done field to table $auxT" + ::yadb::execl $db "ROLLBACK" return -1 } @@ -1588,6 +1585,7 @@ set sql "UPDATE $auxT SET done = 0" if {[::yadb::execl $db $sql] == -1} { ::yalog::error "unable to set done qty = 0" + ::yadb::execl $db "ROLLBACK" return -1 } @@ -1600,12 +1598,19 @@ if {[::yadb::execl $db $sql] == -1} { ::yalog::error "unable to set done qty" + ::yadb::execl $db "ROLLBACK" return -1 } + + if {[::yadb::execl $db "COMMIT"]} { + ::yalog::error "unable to commit after updating quota (sost sampling)" + return -1 + } + set fields [list kindof strata qty done] set sorts [list kindof strata] - + set res [::admin::quotaFillIn $db $auxT $fields $sorts] return $res @@ -1978,7 +1983,7 @@ # create a view that join Cs contact info (e.g. phone,name etc) with panel # info (such as byear - if {[::yadb::execl $db "CREATE VIEW $panelTableView AS + if {[::yadb::execl $db "CREATE OR REPLACE VIEW $panelTableView AS SELECT a.*,b.byear,b.sex,b.study,b.job FROM $pjtable a, $panelTable b WHERE a.rid = b.rid and a.cod_com = b.cod_com"] == -1} { @@ -1991,7 +1996,7 @@ # contains only panel Cs, so selecting all panel contacts # that belong to close quota if {$samplet == 0} { - set qry "CREATE VIEW $panelTableViewClosed AS + set qry "CREATE OR REPLACE VIEW $panelTableViewClosed AS SELECT a.rid,a.cod_com,a.cod_prov,a.ouid,a.touch,a.quota,a.retry,a.capoluo,a.label,a.strata,a.byear,a.sex,a.study,a.job, (b.qty_capo - b.done_capo) as delta_capo, (b.qty_not_capo - b.done_not_capo) as delta_not_capo, @@ -2009,7 +2014,7 @@ AND ($year - byear) between min_age and max_age -- filter all tuples that do not match our age AND lower(a.sex) = lower(c.sex) -- and your gender" } else { - set qry "CREATE VIEW $panelTableViewClosed AS + set qry "CREATE OR REPLACE VIEW $panelTableViewClosed AS SELECT a.rid,a.cod_com,a.cod_prov,a.ouid,a.touch,a.quota,a.retry,a.capoluo,a.label,a.strata,a.byear,a.sex,a.study,a.job, b.qty, b.open, c.min_age, c.max_age, (c.qty + coalesce(c.corr,0) - c.done) as delta_genage Modified: branches/external-stable/yadmin.tcl =================================================================== --- branches/external-stable/yadmin.tcl 2012-02-15 22:31:54 UTC (rev 2159) +++ branches/external-stable/yadmin.tcl 2012-03-09 16:54:23 UTC (rev 2160) @@ -2641,24 +2641,21 @@ ::yadmin::clearSumms - array set survey [::project::get_proj $db $pjName] - array set ::yadmin::survey [array get survey] + array unset ::yadmin::survey + array set ::yadmin::survey [::admin::getDataPj $db $pjName] + set ::yadmin::pj $::yadmin::survey(proj) - set ::yadmin::pj $survey(proj) - array unset survey - array set survey [::admin::getDataPj $db $::yadmin::pj] + set ::yadmin::sampling_type $::yadmin::survey(sampling_type) + set ::yadmin::pjname $::yadmin::survey(name) + set ::yadmin::pjtable "projects.$::yadmin::survey(pjtable)" + set ::yadmin::isstudy $::yadmin::survey(study) - set ::yadmin::sampling_type $survey(sampling_type) - set ::yadmin::pjname $survey(name) - set ::yadmin::pjtable "projects.$survey(pjtable)" - set ::yadmin::isstudy $survey(study) - ::yadmin::clearQuotaSelection 0 $::yadmin::panelQuota 3 ::yadmin::clearQuotaSelection 0 $::yadmin::panelStudy 1 ::yadmin::clearTable wm title . "yadmin -- $::yadmin::version \[ $pjName \] " - .head configure -text [mc "Project: \[ %s \] - Id \[ %d \]" $pjName $survey(proj)] + .head configure -text [mc "Project: \[ %s \] - Id \[ %d \]" $pjName $::yadmin::survey(proj)] unset pjName if {[info exist ::yadmin::turnBack]} { @@ -2678,8 +2675,8 @@ return } - if {$survey(listed) eq "t"} { - if {$survey(sexage) eq "f"} { + if {$::yadmin::survey(listed) eq "t"} { + if {$::yadmin::survey(sexage) eq "f"} { ::yadmin::applicationState "connectedCompany" } else { ::yadmin::applicationState "connectedCompanyGA" @@ -2687,27 +2684,26 @@ } else { ::yadmin::applicationState "connectedPeople" } - if {$survey(active) eq "f"} { + if {$::yadmin::survey(active) eq "f"} { #enable stats flush for non active pj .mbar.mpj entryconfigure 2 -state normal } - if {$survey(accounted) eq "f"} { + if {$::yadmin::survey(accounted) eq "f"} { .mbar.mops entryconfigure 0 -state normal } else { .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")} { + if {(($::yadmin::sampling_type == 0) || ($::yadmin::sampling_type == 2)) && ($::yadmin::survey(sexage) eq "t")} { .mbar.msample entryconfigure 1 -state normal .mbar.msample entryconfigure 2 -state normal .mbar.mquota entryconfigure 1 -state normal - .mbar.mquota entryconfigure 2 -state normal .mbar.mquota entryconfigure 3 -state normal .ftools.ftool.panel configure -state normal } - if {($::yadmin::sampling_type == 2) && ($survey(study) eq "t")} { + if {(($::yadmin::sampling_type == 0) || ($::yadmin::sampling_type == 2)) && ($::yadmin::survey(study) eq "t")} { .mbar.mquota entryconfigure 2 -state normal } } @@ -2865,7 +2861,9 @@ # # @param db database connection handler proc ::yadmin::editPj {db {idPj ""}} { - array set yadmin::turns [::yadmin::turnArray $db] + array unset ::yadmin::turns + array set ::yadmin::turns [::yadmin::turnArray $db] + variable ::yadmin::tmpTurnsList [list] global is4company global samp @@ -2873,6 +2871,7 @@ global passedIdPj global settedStart global settedEnd + global is4company variable ::yadmin::importSome "" variable ::yadmin::importCs "" variable ::yadmin::importGenEta "" @@ -2889,6 +2888,7 @@ variable ::yadmin::mandatory_r_data "t" variable ::yadmin::email_on_response "f" variable ::yadmin::voip_provider + variable ::yadmin::voip_enable 0 variable ::yadmin::dial_prefix "" variable ::yadmin::email_account Modified: branches/external-trunk/yaacs/admin.tcl =================================================================== --- branches/external-trunk/yaacs/admin.tcl 2012-02-15 22:31:54 UTC (rev 2159) +++ branches/external-trunk/yaacs/admin.tcl 2012-03-09 16:54:23 UTC (rev 2160) @@ -321,19 +321,20 @@ return [array get ret] } -# get all project's attribute. try to use -# cached value if possible. +# get all project's attribute. # # @param db database connection handler -# @param idPj project's id on db +# @param key project's id or name on db # @return attributes' list as specified # by namespace vars; an empty list on error -proc ::admin::getDataPj {db idPj} { - - # check if cached data can be used - if {$admin::cachedID == $idPj && [array size admin::cachedData] != 0} {return [array get ::admin::cachedData]} - - set res [::yadb::getTupleArray $db "select * from projects.projects where proj=$idPj"] +proc ::admin::getDataPj {db key} { + # home made polymorphism + if {[string is integer -strict $key] == 1} { + set qry "select * from projects.projects where proj=$key" + } else { + set qry "select * from projects.projects where name = [pg_quote $key]" + } + set res [::yadb::getTupleArray $db $qry] if {([llength $res] == 1) && ([lindex $res 0] == -1)} { ::yalog::error "Failing to retrive a project's attributes" return [list] @@ -341,7 +342,7 @@ array set ret $res if { [array size ret] == 0 } { - ::yalog::error "no project found with the specified id: $idPj" + ::yalog::error "no project found with the specified id: $key" return [list] } @@ -358,11 +359,6 @@ set ret(pjtable) $tab set ret(pjframe) $tab$suffixFrame - set admin::cachedID $idPj - array set ::admin::cachedData [array get ret] - # invalidate cached value for stat table - # otherwise I must 'recalculate' it. - set ::admin::cachedStat "" return [array get ret] } @@ -770,9 +766,10 @@ return $::admin::ERR_SSGA } } - # if we have genage quota (and study quota) + # if we have genage quota (or study quota) and + # we have just created the projects # start creating panel aux tables and view - if {($doImpGA || $doImpSd) && !$is4company} { + if {(($doImpGA || $doImpSd) && $ce == 0) && !$is4company} { if {[::admin::setupPanel $db $table $samplet] == -1} { ::yalog::error "Cannot create panel infrastructure for project $table" ::yadb::execl $db "rollback" @@ -787,7 +784,7 @@ # firstly: for the new entry in panel table i want to update values for gender, age, study and job # from an external datafile (maybe one day we will integrate a questionnaire software here) set auxT "t[clock seconds]" - set sql "CREATE TABLE $auxT (cod_com integer, rid integer, study integer, job integer, byear integer, respname varchar, sex char(1))" + set sql "CREATE TEMP TABLE $auxT ON COMMIT DROP (cod_com integer, rid integer, study integer, job integer, byear integer, respname varchar, sex char(1))" set fieldL [list cod_com rid study job byear respname sex] if {[::yadb::execl $db $sql] == -1} { ::yalog::error "unable to create table $auxT" @@ -852,13 +849,6 @@ return $::admin::ERR_PANEL } - # drop temp table - if {[::yadb::execl $db "DROP TABLE $auxT"] == -1} { - ::yalog::error "unable to drop table $auxT" - ::yadb::execl $db "rollback" - return $::admin::ERR_PANEL - } - #then i try to use a rule for panel outgoing, if a panel nominatives has ouid 8 it's good then give him status = 0 # else with ouid 6 or 7 increment his status. if {[::yadb::tableExists $db ${table}_panel projects]} { @@ -1570,10 +1560,16 @@ # @return quota list, -1 on generic error. proc ::admin::quotaSost {db idPj} { #going to create temp table to hepl quota calc + if {[::yadb::execl $db "BEGIN"] == -1} { + ::yalog::error "unable to open a transaction" + return -1 + } + set auxT "t[clock seconds]" - set sql "CREATE TABLE $auxT AS SELECT kindof,strata,qty FROM projects.${::yadmin::pjname}_theo" + set sql "CREATE TEMP TABLE $auxT ON COMMIT DROP AS SELECT kindof,strata,qty FROM projects.${::yadmin::pjname}_theo" if {[::yadb::execl $db $sql] == -1} { ::yalog::error "unable to create table $auxT" + ::yadb::execl $db "ROLLBACK" return -1 } @@ -1581,6 +1577,7 @@ set sql "ALTER TABLE $auxT ADD COLUMN done INTEGER" if {[::yadb::execl $db $sql] == -1} { ::yalog::error "unable to add done field to table $auxT" + ::yadb::execl $db "ROLLBACK" return -1 } @@ -1588,6 +1585,7 @@ set sql "UPDATE $auxT SET done = 0" if {[::yadb::execl $db $sql] == -1} { ::yalog::error "unable to set done qty = 0" + ::yadb::execl $db "ROLLBACK" return -1 } @@ -1600,12 +1598,19 @@ if {[::yadb::execl $db $sql] == -1} { ::yalog::error "unable to set done qty" + ::yadb::execl $db "ROLLBACK" return -1 } + + if {[::yadb::execl $db "COMMIT"]} { + ::yalog::error "unable to commit after updating quota (sost sampling)" + return -1 + } + set fields [list kindof strata qty done] set sorts [list kindof strata] - + set res [::admin::quotaFillIn $db $auxT $fields $sorts] return $res @@ -1978,7 +1983,7 @@ # create a view that join Cs contact info (e.g. phone,name etc) with panel # info (such as byear - if {[::yadb::execl $db "CREATE VIEW $panelTableView AS + if {[::yadb::execl $db "CREATE OR REPLACE VIEW $panelTableView AS SELECT a.*,b.byear,b.sex,b.study,b.job FROM $pjtable a, $panelTable b WHERE a.rid = b.rid and a.cod_com = b.cod_com"] == -1} { @@ -1991,7 +1996,7 @@ # contains only panel Cs, so selecting all panel contacts # that belong to close quota if {$samplet == 0} { - set qry "CREATE VIEW $panelTableViewClosed AS + set qry "CREATE OR REPLACE VIEW $panelTableViewClosed AS SELECT a.rid,a.cod_com,a.cod_prov,a.ouid,a.touch,a.quota,a.retry,a.capoluo,a.label,a.strata,a.byear,a.sex,a.study,a.job, (b.qty_capo - b.done_capo) as delta_capo, (b.qty_not_capo - b.done_not_capo) as delta_not_capo, @@ -2009,7 +2014,7 @@ AND ($year - byear) between min_age and max_age -- filter all tuples that do not match our age AND lower(a.sex) = lower(c.sex) -- and your gender" } else { - set qry "CREATE VIEW $panelTableViewClosed AS + set qry "CREATE OR REPLACE VIEW $panelTableViewClosed AS SELECT a.rid,a.cod_com,a.cod_prov,a.ouid,a.touch,a.quota,a.retry,a.capoluo,a.label,a.strata,a.byear,a.sex,a.study,a.job, b.qty, b.open, c.min_age, c.max_age, (c.qty + coalesce(c.corr,0) - c.done) as delta_genage Modified: branches/external-trunk/yadmin.tcl =================================================================== --- branches/external-trunk/yadmin.tcl 2012-02-15 22:31:54 UTC (rev 2159) +++ branches/external-trunk/yadmin.tcl 2012-03-09 16:54:23 UTC (rev 2160) @@ -2641,24 +2641,21 @@ ::yadmin::clearSumms - array set survey [::project::get_proj $db $pjName] - array set ::yadmin::survey [array get survey] + array unset ::yadmin::survey + array set ::yadmin::survey [::admin::getDataPj $db $pjName] + set ::yadmin::pj $::yadmin::survey(proj) - set ::yadmin::pj $survey(proj) - array unset survey - array set survey [::admin::getDataPj $db $::yadmin::pj] + set ::yadmin::sampling_type $::yadmin::survey(sampling_type) + set ::yadmin::pjname $::yadmin::survey(name) + set ::yadmin::pjtable "projects.$::yadmin::survey(pjtable)" + set ::yadmin::isstudy $::yadmin::survey(study) - set ::yadmin::sampling_type $survey(sampling_type) - set ::yadmin::pjname $survey(name) - set ::yadmin::pjtable "projects.$survey(pjtable)" - set ::yadmin::isstudy $survey(study) - ::yadmin::clearQuotaSelection 0 $::yadmin::panelQuota 3 ::yadmin::clearQuotaSelection 0 $::yadmin::panelStudy 1 ::yadmin::clearTable wm title . "yadmin -- $::yadmin::version \[ $pjName \] " - .head configure -text [mc "Project: \[ %s \] - Id \[ %d \]" $pjName $survey(proj)] + .head configure -text [mc "Project: \[ %s \] - Id \[ %d \]" $pjName $::yadmin::survey(proj)] unset pjName if {[info exist ::yadmin::turnBack]} { @@ -2678,8 +2675,8 @@ return } - if {$survey(listed) eq "t"} { - if {$survey(sexage) eq "f"} { + if {$::yadmin::survey(listed) eq "t"} { + if {$::yadmin::survey(sexage) eq "f"} { ::yadmin::applicationState "connectedCompany" } else { ::yadmin::applicationState "connectedCompanyGA" @@ -2687,27 +2684,26 @@ } else { ::yadmin::applicationState "connectedPeople" } - if {$survey(active) eq "f"} { + if {$::yadmin::survey(active) eq "f"} { #enable stats flush for non active pj .mbar.mpj entryconfigure 2 -state normal } - if {$survey(accounted) eq "f"} { + if {$::yadmin::survey(accounted) eq "f"} { .mbar.mops entryconfigure 0 -state normal } else { .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")} { + if {(($::yadmin::sampling_type == 0) || ($::yadmin::sampling_type == 2)) && ($::yadmin::survey(sexage) eq "t")} { .mbar.msample entryconfigure 1 -state normal .mbar.msample entryconfigure 2 -state normal .mbar.mquota entryconfigure 1 -state normal - .mbar.mquota entryconfigure 2 -state normal .mbar.mquota entryconfigure 3 -state normal .ftools.ftool.panel configure -state normal } - if {($::yadmin::sampling_type == 2) && ($survey(study) eq "t")} { + if {(($::yadmin::sampling_type == 0) || ($::yadmin::sampling_type == 2)) && ($::yadmin::survey(study) eq "t")} { .mbar.mquota entryconfigure 2 -state normal } } @@ -2865,7 +2861,9 @@ # # @param db database connection handler proc ::yadmin::editPj {db {idPj ""}} { - array set yadmin::turns [::yadmin::turnArray $db] + array unset ::yadmin::turns + array set ::yadmin::turns [::yadmin::turnArray $db] + variable ::yadmin::tmpTurnsList [list] global is4company global samp @@ -2873,6 +2871,7 @@ global passedIdPj global settedStart global settedEnd + global is4company variable ::yadmin::importSome "" variable ::yadmin::importCs "" variable ::yadmin::importGenEta "" @@ -2889,6 +2888,7 @@ variable ::yadmin::mandatory_r_data "t" variable ::yadmin::email_on_response "f" variable ::yadmin::voip_provider + variable ::yadmin::voip_enable 0 variable ::yadmin::dial_prefix "" variable ::yadmin::email_account Modified: branches/internal-stable/yaacs/admin.tcl =================================================================== --- branches/internal-stable/yaacs/admin.tcl 2012-02-15 22:31:54 UTC (rev 2159) +++ branches/internal-stable/yaacs/admin.tcl 2012-03-09 16:54:23 UTC (rev 2160) @@ -321,19 +321,20 @@ return [array get ret] } -# get all project's attribute. try to use -# cached value if possible. +# get all project's attribute. # # @param db database connection handler -# @param idPj project's id on db +# @param key project's id or name on db # @return attributes' list as specified # by namespace vars; an empty list on error -proc ::admin::getDataPj {db idPj} { - - # check if cached data can be used - if {$admin::cachedID == $idPj && [array size admin::cachedData] != 0} {return [array get ::admin::cachedData]} - - set res [::yadb::getTupleArray $db "select * from projects.projects where proj=$idPj"] +proc ::admin::getDataPj {db key} { + # home made polymorphism + if {[string is integer -strict $key] == 1} { + set qry "select * from projects.projects where proj=$key" + } else { + set qry "select * from projects.projects where name = [pg_quote $key]" + } + set res [::yadb::getTupleArray $db $qry] if {([llength $res] == 1) && ([lindex $res 0] == -1)} { ::yalog::error "Failing to retrive a project's attributes" return [list] @@ -341,7 +342,7 @@ array set ret $res if { [array size ret] == 0 } { - ::yalog::error "no project found with the specified id: $idPj" + ::yalog::error "no project found with the specified id: $key" return [list] } @@ -358,11 +359,6 @@ set ret(pjtable) $tab set ret(pjframe) $tab$suffixFrame - set admin::cachedID $idPj - array set ::admin::cachedData [array get ret] - # invalidate cached value for stat table - # otherwise I must 'recalculate' it. - set ::admin::cachedStat "" return [array get ret] } @@ -770,9 +766,10 @@ return $::admin::ERR_SSGA } } - # if we have genage quota (and study quota) + # if we have genage quota (or study quota) and + # we have just created the projects # start creating panel aux tables and view - if {($doImpGA || $doImpSd) && !$is4company} { + if {(($doImpGA || $doImpSd) && $ce == 0) && !$is4company} { if {[::admin::setupPanel $db $table $samplet] == -1} { ::yalog::error "Cannot create panel infrastructure for project $table" ::yadb::execl $db "rollback" @@ -787,7 +784,7 @@ # firstly: for the new entry in panel table i want to update values for gender, age, study and job # from an external datafile (maybe one day we will integrate a questionnaire software here) set auxT "t[clock seconds]" - set sql "CREATE TABLE $auxT (cod_com integer, rid integer, study integer, job integer, byear integer, respname varchar, sex char(1))" + set sql "CREATE TEMP TABLE $auxT ON COMMIT DROP (cod_com integer, rid integer, study integer, job integer, byear integer, respname varchar, sex char(1))" set fieldL [list cod_com rid study job byear respname sex] if {[::yadb::execl $db $sql] == -1} { ::yalog::error "unable to create table $auxT" @@ -852,13 +849,6 @@ return $::admin::ERR_PANEL } - # drop temp table - if {[::yadb::execl $db "DROP TABLE $auxT"] == -1} { - ::yalog::error "unable to drop table $auxT" - ::yadb::execl $db "rollback" - return $::admin::ERR_PANEL - } - #then i try to use a rule for panel outgoing, if a panel nominatives has ouid 8 it's good then give him status = 0 # else with ouid 6 or 7 increment his status. if {[::yadb::tableExists $db ${table}_panel projects]} { @@ -1570,10 +1560,16 @@ # @return quota list, -1 on generic error. proc ::admin::quotaSost {db idPj} { #going to create temp table to hepl quota calc + if {[::yadb::execl $db "BEGIN"] == -1} { + ::yalog::error "unable to open a transaction" + return -1 + } + set auxT "t[clock seconds]" - set sql "CREATE TABLE $auxT AS SELECT kindof,strata,qty FROM projects.${::yadmin::pjname}_theo" + set sql "CREATE TEMP TABLE $auxT ON COMMIT DROP AS SELECT kindof,strata,qty FROM projects.${::yadmin::pjname}_theo" if {[::yadb::execl $db $sql] == -1} { ::yalog::error "unable to create table $auxT" + ::yadb::execl $db "ROLLBACK" return -1 } @@ -1581,6 +1577,7 @@ set sql "ALTER TABLE $auxT ADD COLUMN done INTEGER" if {[::yadb::execl $db $sql] == -1} { ::yalog::error "unable to add done field to table $auxT" + ::yadb::execl $db "ROLLBACK" return -1 } @@ -1588,6 +1585,7 @@ set sql "UPDATE $auxT SET done = 0" if {[::yadb::execl $db $sql] == -1} { ::yalog::error "unable to set done qty = 0" + ::yadb::execl $db "ROLLBACK" return -1 } @@ -1600,12 +1598,19 @@ if {[::yadb::execl $db $sql] == -1} { ::yalog::error "unable to set done qty" + ::yadb::execl $db "ROLLBACK" return -1 } + + if {[::yadb::execl $db "COMMIT"]} { + ::yalog::error "unable to commit after updating quota (sost sampling)" + return -1 + } + set fields [list kindof strata qty done] set sorts [list kindof strata] - + set res [::admin::quotaFillIn $db $auxT $fields $sorts] return $res @@ -1978,7 +1983,7 @@ # create a view that join Cs contact info (e.g. phone,name etc) with panel # info (such as byear - if {[::yadb::execl $db "CREATE VIEW $panelTableView AS + if {[::yadb::execl $db "CREATE OR REPLACE VIEW $panelTableView AS SELECT a.*,b.byear,b.sex,b.study,b.job FROM $pjtable a, $panelTable b WHERE a.rid = b.rid and a.cod_com = b.cod_com"] == -1} { @@ -1991,7 +1996,7 @@ # contains only panel Cs, so selecting all panel contacts # that belong to close quota if {$samplet == 0} { - set qry "CREATE VIEW $panelTableViewClosed AS + set qry "CREATE OR REPLACE VIEW $panelTableViewClosed AS SELECT a.rid,a.cod_com,a.cod_prov,a.ouid,a.touch,a.quota,a.retry,a.capoluo,a.label,a.strata,a.byear,a.sex,a.study,a.job, (b.qty_capo - b.done_capo) as delta_capo, (b.qty_not_capo - b.done_not_capo) as delta_not_capo, @@ -2009,7 +2014,7 @@ AND ($year - byear) between min_age and max_age -- filter all tuples that do not match our age AND lower(a.sex) = lower(c.sex) -- and your gender" } else { - set qry "CREATE VIEW $panelTableViewClosed AS + set qry "CREATE OR REPLACE VIEW $panelTableViewClosed AS SELECT a.rid,a.cod_com,a.cod_prov,a.ouid,a.touch,a.quota,a.retry,a.capoluo,a.label,a.strata,a.byear,a.sex,a.study,a.job, b.qty, b.open, c.min_age, c.max_age, (c.qty + coalesce(c.corr,0) - c.done) as delta_genage Modified: branches/internal-stable/yadmin.tcl =================================================================== --- branches/internal-stable/yadmin.tcl 2012-02-15 22:31:54 UTC (rev 2159) +++ branches/internal-stable/yadmin.tcl 2012-03-09 16:54:23 UTC (rev 2160) @@ -2641,24 +2641,21 @@ ::yadmin::clearSumms - array set survey [::project::get_proj $db $pjName] - array set ::yadmin::survey [array get survey] + array unset ::yadmin::survey + array set ::yadmin::survey [::admin::getDataPj $db $pjName] + set ::yadmin::pj $::yadmin::survey(proj) - set ::yadmin::pj $survey(proj) - array unset survey - array set survey [::admin::getDataPj $db $::yadmin::pj] + set ::yadmin::sampling_type $::yadmin::survey(sampling_type) + set ::yadmin::pjname $::yadmin::survey(name) + set ::yadmin::pjtable "projects.$::yadmin::survey(pjtable)" + set ::yadmin::isstudy $::yadmin::survey(study) - set ::yadmin::sampling_type $survey(sampling_type) - set ::yadmin::pjname $survey(name) - set ::yadmin::pjtable "projects.$survey(pjtable)" - set ::yadmin::isstudy $survey(study) - ::yadmin::clearQuotaSelection 0 $::yadmin::panelQuota 3 ::yadmin::clearQuotaSelection 0 $::yadmin::panelStudy 1 ::yadmin::clearTable wm title . "yadmin -- $::yadmin::version \[ $pjName \] " - .head configure -text [mc "Project: \[ %s \] - Id \[ %d \]" $pjName $survey(proj)] + .head configure -text [mc "Project: \[ %s \] - Id \[ %d \]" $pjName $::yadmin::survey(proj)] unset pjName if {[info exist ::yadmin::turnBack]} { @@ -2678,8 +2675,8 @@ return } - if {$survey(listed) eq "t"} { - if {$survey(sexage) eq "f"} { + if {$::yadmin::survey(listed) eq "t"} { + if {$::yadmin::survey(sexage) eq "f"} { ::yadmin::applicationState "connectedCompany" } else { ::yadmin::applicationState "connectedCompanyGA" @@ -2687,27 +2684,26 @@ } else { ::yadmin::applicationState "connectedPeople" } - if {$survey(active) eq "f"} { + if {$::yadmin::survey(active) eq "f"} { #enable stats flush for non active pj .mbar.mpj entryconfigure 2 -state normal } - if {$survey(accounted) eq "f"} { + if {$::yadmin::survey(accounted) eq "f"} { .mbar.mops entryconfigure 0 -state normal } else { .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")} { + if {(($::yadmin::sampling_type == 0) || ($::yadmin::sampling_type == 2)) && ($::yadmin::survey(sexage) eq "t")} { .mbar.msample entryconfigure 1 -state normal .mbar.msample entryconfigure 2 -state normal .mbar.mquota entryconfigure 1 -state normal - .mbar.mquota entryconfigure 2 -state normal .mbar.mquota entryconfigure 3 -state normal .ftools.ftool.panel configure -state normal } - if {($::yadmin::sampling_type == 2) && ($survey(study) eq "t")} { + if {(($::yadmin::sampling_type == 0) || ($::yadmin::sampling_type == 2)) && ($::yadmin::survey(study) eq "t")} { .mbar.mquota entryconfigure 2 -state normal } } @@ -2865,7 +2861,9 @@ # # @param db database connection handler proc ::yadmin::editPj {db {idPj ""}} { - array set yadmin::turns [::yadmin::turnArray $db] + array unset ::yadmin::turns + array set ::yadmin::turns [::yadmin::turnArray $db] + variable ::yadmin::tmpTurnsList [list] global is4company global samp @@ -2873,6 +2871,7 @@ global passedIdPj global settedStart global settedEnd + global is4company variable ::yadmin::importSome "" variable ::yadmin::importCs "" variable ::yadmin::importGenEta "" @@ -2889,6 +2888,7 @@ variable ::yadmin::mandatory_r_data "t" variable ::yadmin::email_on_response "f" variable ::yadmin::voip_provider + variable ::yadmin::voip_enable 0 variable ::yadmin::dial_prefix "" variable ::yadmin::email_account Modified: trunk/yaacs/admin.tcl =================================================================== --- trunk/yaacs/admin.tcl 2012-02-15 22:31:54 UTC (rev 2159) +++ trunk/yaacs/admin.tcl 2012-03-09 16:54:23 UTC (rev 2160) @@ -321,19 +321,20 @@ return [array get ret] } -# get all project's attribute. try to use -# cached value if possible. +# get all project's attribute. # # @param db database connection handler -# @param idPj project's id on db +# @param key project's id or name on db # @return attributes' list as specified # by namespace vars; an empty list on error -proc ::admin::getDataPj {db idPj} { - - # check if cached data can be used - if {$admin::cachedID == $idPj && [array size admin::cachedData] != 0} {return [array get ::admin::cachedData]} - - set res [::yadb::getTupleArray $db "select * from projects.projects where proj=$idPj"] +proc ::admin::getDataPj {db key} { + # home made polymorphism + if {[string is integer -strict $key] == 1} { + set qry "select * from projects.projects where proj=$key" + } else { + set qry "select * from projects.projects where name = [pg_quote $key]" + } + set res [::yadb::getTupleArray $db $qry] if {([llength $res] == 1) && ([lindex $res 0] == -1)} { ::yalog::error "Failing to retrive a project's attributes" return [list] @@ -341,7 +342,7 @@ array set ret $res if { [array size ret] == 0 } { - ::yalog::error "no project found with the specified id: $idPj" + ::yalog::error "no project found with the specified id: $key" return [list] } @@ -358,11 +359,6 @@ set ret(pjtable) $tab set ret(pjframe) $tab$suffixFrame - set admin::cachedID $idPj - array set ::admin::cachedData [array get ret] - # invalidate cached value for stat table - # otherwise I must 'recalculate' it. - set ::admin::cachedStat "" return [array get ret] } @@ -770,9 +766,10 @@ return $::admin::ERR_SSGA } } - # if we have genage quota (and study quota) + # if we have genage quota (or study quota) and + # we have just created the projects # start creating panel aux tables and view - if {($doImpGA || $doImpSd) && !$is4company} { + if {(($doImpGA || $doImpSd) && $ce == 0) && !$is4company} { if {[::admin::setupPanel $db $table $samplet] == -1} { ::yalog::error "Cannot create panel infrastructure for project $table" ::yadb::execl $db "rollback" @@ -787,7 +784,7 @@ # firstly: for the new entry in panel table i want to update values for gender, age, study and job # from an external datafile (maybe one day we will integrate a questionnaire software here) set auxT "t[clock seconds]" - set sql "CREATE TABLE $auxT (cod_com integer, rid integer, study integer, job integer, byear integer, respname varchar, sex char(1))" + set sql "CREATE TEMP TABLE $auxT ON COMMIT DROP (cod_com integer, rid integer, study integer, job integer, byear integer, respname varchar, sex char(1))" set fieldL [list cod_com rid study job byear respname sex] if {[::yadb::execl $db $sql] == -1} { ::yalog::error "unable to create table $auxT" @@ -852,13 +849,6 @@ return $::admin::ERR_PANEL } - # drop temp table - if {[::yadb::execl $db "DROP TABLE $auxT"] == -1} { - ::yalog::error "unable to drop table $auxT" - ::yadb::execl $db "rollback" - return $::admin::ERR_PANEL - } - #then i try to use a rule for panel outgoing, if a panel nominatives has ouid 8 it's good then give him status = 0 # else with ouid 6 or 7 increment his status. if {[::yadb::tableExists $db ${table}_panel projects]} { @@ -1570,10 +1560,16 @@ # @return quota list, -1 on generic error. proc ::admin::quotaSost {db idPj} { #going to create temp table to hepl quota calc + if {[::yadb::execl $db "BEGIN"] == -1} { + ::yalog::error "unable to open a transaction" + return -1 + } + set auxT "t[clock seconds]" - set sql "CREATE TABLE $auxT AS SELECT kindof,strata,qty FROM projects.${::yadmin::pjname}_theo" + set sql "CREATE TEMP TABLE $auxT ON COMMIT DROP AS SELECT kindof,strata,qty FROM projects.${::yadmin::pjname}_theo" if {[::yadb::execl $db $sql] == -1} { ::yalog::error "unable to create table $auxT" + ::yadb::execl $db "ROLLBACK" return -1 } @@ -1581,6 +1577,7 @@ set sql "ALTER TABLE $auxT ADD COLUMN done INTEGER" if {[::yadb::execl $db $sql] == -1} { ::yalog::error "unable to add done field to table $auxT" + ::yadb::execl $db "ROLLBACK" return -1 } @@ -1588,6 +1585,7 @@ set sql "UPDATE $auxT SET done = 0" if {[::yadb::execl $db $sql] == -1} { ::yalog::error "unable to set done qty = 0" + ::yadb::execl $db "ROLLBACK" return -1 } @@ -1600,12 +1598,19 @@ if {[::yadb::execl $db $sql] == -1} { ::yalog::error "unable to set done qty" + ::yadb::execl $db "ROLLBACK" return -1 } + + if {[::yadb::execl $db "COMMIT"]} { + ::yalog::error "unable to commit after updating quota (sost sampling)" + return -1 + } + set fields [list kindof strata qty done] set sorts [list kindof strata] - + set res [::admin::quotaFillIn $db $auxT $fields $sorts] return $res @@ -1978,7 +1983,7 @@ # create a view that join Cs contact info (e.g. phone,name etc) with panel # info (such as byear - if {[::yadb::execl $db "CREATE VIEW $panelTableView AS + if {[::yadb::execl $db "CREATE OR REPLACE VIEW $panelTableView AS SELECT a.*,b.byear,b.sex,b.study,b.job FROM $pjtable a, $panelTable b WHERE a.rid = b.rid and a.cod_com = b.cod_com"] == -1} { @@ -1991,7 +1996,7 @@ # contains only panel Cs, so selecting all panel contacts # that belong to close quota if {$samplet == 0} { - set qry "CREATE VIEW $panelTableViewClosed AS + set qry "CREATE OR REPLACE VIEW $panelTableViewClosed AS SELECT a.rid,a.cod_com,a.cod_prov,a.ouid,a.touch,a.quota,a.retry,a.capoluo,a.label,a.strata,a.byear,a.sex,a.study,a.job, (b.qty_capo - b.done_capo) as delta_capo, (b.qty_not_capo - b.done_not_capo) as delta_not_capo, @@ -2009,7 +2014,7 @@ AND ($year - byear) between min_age and max_age -- filter all tuples that do not match our age AND lower(a.sex) = lower(c.sex) -- and your gender" } else { - set qry "CREATE VIEW $panelTableViewClosed AS + set qry "CREATE OR REPLACE VIEW $panelTableViewClosed AS SELECT a.rid,a.cod_com,a.cod_prov,a.ouid,a.touch,a.quota,a.retry,a.capoluo,a.label,a.strata,a.byear,a.sex,a.study,a.job, b.qty, b.open, c.min_age, c.max_age, (c.qty + coalesce(c.corr,0) - c.done) as delta_genage Modified: trunk/yadmin.tcl =================================================================== --- trunk/yadmin.tcl 2012-02-15 22:31:54 UTC (rev 2159) +++ trunk/yadmin.tcl 2012-03-09 16:54:23 UTC (rev 2160) @@ -2641,24 +2641,21 @@ ::yadmin::clearSumms - array set survey [::project::get_proj $db $pjName] - array set ::yadmin::survey [array get survey] + array unset ::yadmin::survey + array set ::yadmin::survey [::admin::getDataPj $db $pjName] + set ::yadmin::pj $::yadmin::survey(proj) - set ::yadmin::pj $survey(proj) - array unset survey - array set survey [::admin::getDataPj $db $::yadmin::pj] + set ::yadmin::sampling_type $::yadmin::survey(sampling_type) + set ::yadmin::pjname $::yadmin::survey(name) + set ::yadmin::pjtable "projects.$::yadmin::survey(pjtable)" + set ::yadmin::isstudy $::yadmin::survey(study) - set ::yadmin::sampling_type $survey(sampling_type) - set ::yadmin::pjname $survey(name) - set ::yadmin::pjtable "projects.$survey(pjtable)" - set ::yadmin::isstudy $survey(study) - ::yadmin::clearQuotaSelection 0 $::yadmin::panelQuota 3 ::yadmin::clearQuotaSelection 0 $::yadmin::panelStudy 1 ::yadmin::clearTable wm title . "yadmin -- $::yadmin::version \[ $pjName \] " - .head configure -text [mc "Project: \[ %s \] - Id \[ %d \]" $pjName $survey(proj)] + .head configure -text [mc "Project: \[ %s \] - Id \[ %d \]" $pjName $::yadmin::survey(proj)] unset pjName if {[info exist ::yadmin::turnBack]} { @@ -2678,8 +2675,8 @@ return } - if {$survey(listed) eq "t"} { - if {$survey(sexage) eq "f"} { + if {$::yadmin::survey(listed) eq "t"} { + if {$::yadmin::survey(sexage) eq "f"} { ::yadmin::applicationState "connectedCompany" } else { ::yadmin::applicationState "connectedCompanyGA" @@ -2687,27 +2684,26 @@ } else { ::yadmin::applicationState "connectedPeople" } - if {$survey(active) eq "f"} { + if {$::yadmin::survey(active) eq "f"} { #enable stats flush for non active pj .mbar.mpj entryconfigure 2 -state normal } - if {$survey(accounted) eq "f"} { + if {$::yadmin::survey(accounted) eq "f"} { .mbar.mops entryconfigure 0 -state normal } else { .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")} { + if {(($::yadmin::sampling_type == 0) || ($::yadmin::sampling_type == 2)) && ($::yadmin::survey(sexage) eq "t")} { .mbar.msample entryconfigure 1 -state normal .mbar.msample entryconfigure 2 -state normal .mbar.mquota entryconfigure 1 -state normal - .mbar.mquota entryconfigure 2 -state normal .mbar.mquota entryconfigure 3 -state normal .ftools.ftool.panel configure -state normal } - if {($::yadmin::sampling_type == 2) && ($survey(study) eq "t")} { + if {(($::yadmin::sampling_type == 0) || ($::yadmin::sampling_type == 2)) && ($::yadmin::survey(study) eq "t")} { .mbar.mquota entryconfigure 2 -state normal } } @@ -2865,7 +2861,9 @@ # # @param db database connection handler proc ::yadmin::editPj {db {idPj ""}} { - array set yadmin::turns [::yadmin::turnArray $db] + array unset ::yadmin::turns + array set ::yadmin::turns [::yadmin::turnArray $db] + variable ::yadmin::tmpTurnsList [list] global is4company global samp @@ -2873,6 +2871,7 @@ global passedIdPj global settedStart global settedEnd + global is4company variable ::yadmin::importSome "" variable ::yadmin::importCs "" variable ::yadmin::importGenEta "" @@ -2889,6 +2888,7 @@ variable ::yadmin::mandatory_r_data "t" variable ::yadmin::email_on_response "f" variable ::yadmin::voip_provider + variable ::yadmin::voip_enable 0 variable ::yadmin::dial_prefix "" variable ::yadmin::email_account This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <si...@us...> - 2012-02-15 22:32:01
|
Revision: 2159 http://yaacs.svn.sourceforge.net/yaacs/?rev=2159&view=rev Author: sickpig Date: 2012-02-15 22:31:54 +0000 (Wed, 15 Feb 2012) Log Message: ----------- * FIX: a thread release leak when smtpproxy fails to connect to the remote smtp server. While at it improve error handling in sendmail.tcl. commited only on trunk though cause I was able to test the patch only locally. Modified Paths: -------------- trunk/utility/smtpproxy.tcl trunk/yaacs/sendmail.tcl Modified: trunk/utility/smtpproxy.tcl =================================================================== --- trunk/utility/smtpproxy.tcl 2012-02-14 10:29:09 UTC (rev 2158) +++ trunk/utility/smtpproxy.tcl 2012-02-15 22:31:54 UTC (rev 2159) @@ -42,10 +42,9 @@ # if Tclx is present catch SIGTERM to log exiting gracefully if {![catch {package require Tclx}]} { proc my_exit {} { - set fd [open [::tsv::get log filep] a] set ts [clock format [clock scan now] -f "%b %d %T"] - puts $fd "${ts} Shutting down now...." - close $fd + set txt "${ts} Shutting down now...." + ::thread::send -async [::tsv::get log logger_id] [list log $txt] exit } @@ -53,10 +52,15 @@ signal -restart trap TERM my_exit } -# instrument loggin + +# instrument loggin setting variables shared +# across thread pool (it's a sort of hash) tsv::set log filep $logfile tsv::set log connlimit $connlimit +# thread that deal with loggin +# ig you need to log something just send +# to hise thread set logger [thread::create { proc log {txt} { set fd [open [::tsv::get log filep] a] @@ -78,19 +82,32 @@ return } set thread [::thread::create { - + proc log {txt} { ::thread::send -async [::tsv::get log logger_id] [list log $txt] } - + # that's the core thing, it works in both direction + # relaying traffic between by our client (e.g. yacati) + # that send SMTP commands and external SMTP server that + # replies back with commands output proc relay {from to} { + # if SMTP server close connection on QUIT command + # of whatever other reason we relase the read an close + # the connection to our client, otherwise we simply + # proxy from one end to the other if {[eof $from]} { log "Client [join [fconfigure $from -sockname] "/"] - Thread [::thread::id] close connection" close $from close $to ::thread::release } else { - set temp [read $from] + set temp [string trim [read $from]] + if {$temp eq "CLOSECHILD"} { + # we need to handle connection problem otherwise + # nuber of created thread will increse + log "Close child due to a previous connection error" + ::thread::release + } puts -nonewline $to $temp log [string replace $temp end end] } @@ -100,6 +117,7 @@ }] + # check for this one on Bret book ::thread::detach $clientsock ::thread::send -async $thread " @@ -116,23 +134,40 @@ set request [string trim [gets $clientsock]] log "Request: $request" if {$request eq "CLOSEME"} { - log "just recieved a CLOSEME command bye bye" + # FIX we can improve this we ca + log "just recieved a CLOSEME command after \ + aviability handshake, bye all" ::thread::release } else { set port 25 set host $request - set serversock [socket $host $port] - fconfigure $clientsock -blocking 0 -buffering none -translation binary - fconfigure $serversock -blocking 0 -buffering none -translation binary - fileevent $clientsock readable [list relay $clientsock $serversock] - fileevent $serversock readable [list relay $serversock $clientsock] + if {[catch {set serversock [socket $host $port]} err]} { + log "Unable to establish a connection to $host" + log "error details: $err" + ::thread::release + } else { + fconfigure $clientsock -blocking 0 -buffering none -translation binary + fconfigure $serversock -blocking 0 -buffering none -translation binary + fileevent $clientsock readable [list relay $clientsock $serversock] + fileevent $serversock readable [list relay $serversock $clientsock] + } } } } +# helper function used to log smttproxy activity +# this is visible only from main level (global) +# and in fact is a wrapper around log proc defined +# in a thread created with the on purpose to log things proc log {txt} { ::thread::send -async [::tsv::get log logger_id] [list log $txt] } + +# that's a wrapper around the main accept +# proc due to some thread trickness that I forgot +# to note once a wrote that script +# clientsock - socket trough clietn establish connection to us +# clienthost/port - host and port of our client proc _accept {clientsock clienthost clientport} { after 0 [list accept $clientsock $clienthost $clientport] } Modified: trunk/yaacs/sendmail.tcl =================================================================== --- trunk/yaacs/sendmail.tcl 2012-02-14 10:29:09 UTC (rev 2158) +++ trunk/yaacs/sendmail.tcl 2012-02-15 22:31:54 UTC (rev 2159) @@ -23,6 +23,7 @@ namespace eval ::sendmail { namespace export validateMail send realMail + variable ::sendmail::proxyConnectionOn } # validate an email address checking its and lenght @@ -168,7 +169,10 @@ # user tkwait or vwait vwait ::sendmail::temp_checker after cancel $id - + + # FIX we can improve this: instead of closing the already + # established connection just pass that socket to realMail + # after having properly set up the socket catch { puts $::sendmail::sock_check CLOSEME close $::sendmail::sock_check @@ -195,12 +199,13 @@ set pport [lindex [split $proxy ":"] 1] set pavail [::sendmail::checkSmtpProxyAvailability $phost $pport] } - + set ::sendmail::proxyConnectionOn 0 if {$proxy ne "" && $pavail == 1} { if {[catch {set ::sendmail::sock [socket -async $phost $pport]} errs]} { ::yalog::error "Fail to open a socket in async mode!!!! wtf... :/" return -1 } + set ::sendmail::proxyConnectionOn 1 } else { if {[catch {set ::sendmail::sock [socket -async $host $port]} errs]} { ::yalog::error "Fail to open a socket in async mode!!!! wtf... :/" @@ -221,7 +226,7 @@ puts $::sendmail::sock $host fileevent $::sendmail::sock readable { while {[gets $::sendmail::sock line] > 0} { - # need to parse line to check for error ? (5XX code) + # need to parse line to check for error 5XX code ::yalog::debug "Empty welcome: $line" } set ::sendmail::connection_state "ok line -1" @@ -357,13 +362,13 @@ set ret [::sendmail::connectSMTP $mxr $proxy] if {$ret == -1} { ::yalog::error "cannot open socket" - ::sendmail::closeSmtpSocket + ::sendmail::closeSmtpSocket 1 #try another time on the second mxr it it exists if {[info exists mxr2]} {set mxr $mxr2} after 100 if {[::sendmail::connectSMTP $mxr $proxy 3000] == -1} { ::yalog::error "cannot open socket two time in a row... give up" - ::sendmail::closeSmtpSocket + ::sendmail::closeSmtpSocket 1 return -2 } } @@ -372,27 +377,27 @@ # check for error on sending command to SMTP # usually means that server dropped connection unexpectedly if {$ret == -1} { - ::sendmail::closeSmtpSocket + ::sendmail::closeSmtpSocket 1 return -2 } # parsing the response # now we should wait for reply to be stored in ::sendmail::reply - if {![string match 2* $sendmail::reply]} { - ::yalog::error "error on HELO: $sendmail::reply"; - ::sendmail::closeSmtpSocket + if {![string match 2* $::sendmail::reply]} { + ::yalog::error "error on HELO: $::sendmail::reply"; + ::sendmail::closeSmtpSocket 1 return -3 } # set envelop sender set ret [::sendmail::sendSMTPcmd $::sendmail::sock "MAIL FROM:<$sender>"] if {$ret == -1} { - ::sendmail::closeSmtpSocket + ::sendmail::closeSmtpSocket 1 return -2 } if {![string match 2* $::sendmail::reply]} { - ::yalog::error "error on MAIL FROM: $sendmail::reply"; - ::sendmail::closeSmtpSocket + ::yalog::error "error on MAIL FROM: $::sendmail::reply"; + ::sendmail::closeSmtpSocket 1 return -3 } @@ -407,7 +412,7 @@ set ret [::sendmail::sendSMTPcmd $::sendmail::sock "RCPT TO:<$mail>" 6000] if {$ret == -1} { - ::sendmail::closeSmtpSocket + ::sendmail::closeSmtpSocket 1 return -2 } # need to take into account grey listing and temporary failure (4XX code) @@ -435,8 +440,9 @@ return 0 } -proc ::sendmail::closeSmtpSocket {} { +proc ::sendmail::closeSmtpSocket {{err 0}} { catch { + if {$err && $::sendmail::proxyConnectionOn} {puts $::sendmail::socket CLOSECHILD} puts $::sendmail::sock QUIT close $::sendmail::sock } err This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <si...@us...> - 2012-02-14 10:29:20
|
Revision: 2158 http://yaacs.svn.sourceforge.net/yaacs/?rev=2158&view=rev Author: sickpig Date: 2012-02-14 10:29:09 +0000 (Tue, 14 Feb 2012) Log Message: ----------- * FIX: in freeComReal we need to skip some spurious tuples in sampling.subuniverse infact we add "AND prefix IS NOT NULL" in the WHERE clause of the sql statement used to compute number of unused contacts in sampling.universe. this is a workaround. we need to find out why those tuples are there (maybe some left over form previuos contacts update) unserstand if we can use those otherwise delete it. * FIX: user proper switch syntax in freeComReal adding "--" to explict define the end of switch options, otherwise $res_g if == -1 could be interpreted as a switch option Modified Paths: -------------- branches/external-stable/yaacs/sample.tcl branches/external-trunk/yaacs/sample.tcl branches/internal-stable/yaacs/sample.tcl trunk/yaacs/sample.tcl Modified: branches/external-stable/yaacs/sample.tcl =================================================================== --- branches/external-stable/yaacs/sample.tcl 2012-02-09 10:49:48 UTC (rev 2157) +++ branches/external-stable/yaacs/sample.tcl 2012-02-14 10:29:09 UTC (rev 2158) @@ -2523,7 +2523,10 @@ set ::sample::ERRCODE 0 set ::sample::TUPLECOUNT 0 set cmd { - set qry "SELECT count(*) FROM sampling.universe WHERE cod_com = $rec(cod_com) AND (NOT used OR used IS NULL)" + # in the WHERE clause below the "AND prefix IS NOT NULL" it's workaround + # cause we have our production db with spurious records in sampling.universe + # those tuples are defined by that aforementioned condition + set qry "SELECT count(*) FROM sampling.universe WHERE cod_com = $rec(cod_com) AND (NOT used OR used IS NULL) AND prefix is not null" set count_uni [lindex [::yadb::getTuple $db $qry 0] 0] if {$count_uni == -1} { ::yalog::error "unable to count of unused for cod_com $rec(cod_com) in sampling.universe" @@ -2587,8 +2590,8 @@ # it could be a syntax error or a handled error. in the # latter case ::sample::ERRCODE will be != 0. # if res_g = -2 qry_g failed - switch -exact $res_g { - -1 { + switch -exact -- $res_g { + "-1" { if {$::sample::ERRCODE != 0} { return $::sample::ERRCODE } else { Modified: branches/external-trunk/yaacs/sample.tcl =================================================================== --- branches/external-trunk/yaacs/sample.tcl 2012-02-09 10:49:48 UTC (rev 2157) +++ branches/external-trunk/yaacs/sample.tcl 2012-02-14 10:29:09 UTC (rev 2158) @@ -2523,7 +2523,10 @@ set ::sample::ERRCODE 0 set ::sample::TUPLECOUNT 0 set cmd { - set qry "SELECT count(*) FROM sampling.universe WHERE cod_com = $rec(cod_com) AND (NOT used OR used IS NULL)" + # in the WHERE clause below the "AND prefix IS NOT NULL" it's workaround + # cause we have our production db with spurious records in sampling.universe + # those tuples are defined by that aforementioned condition + set qry "SELECT count(*) FROM sampling.universe WHERE cod_com = $rec(cod_com) AND (NOT used OR used IS NULL) AND prefix is not null" set count_uni [lindex [::yadb::getTuple $db $qry 0] 0] if {$count_uni == -1} { ::yalog::error "unable to count of unused for cod_com $rec(cod_com) in sampling.universe" @@ -2587,8 +2590,8 @@ # it could be a syntax error or a handled error. in the # latter case ::sample::ERRCODE will be != 0. # if res_g = -2 qry_g failed - switch -exact $res_g { - -1 { + switch -exact -- $res_g { + "-1" { if {$::sample::ERRCODE != 0} { return $::sample::ERRCODE } else { Modified: branches/internal-stable/yaacs/sample.tcl =================================================================== --- branches/internal-stable/yaacs/sample.tcl 2012-02-09 10:49:48 UTC (rev 2157) +++ branches/internal-stable/yaacs/sample.tcl 2012-02-14 10:29:09 UTC (rev 2158) @@ -2523,7 +2523,10 @@ set ::sample::ERRCODE 0 set ::sample::TUPLECOUNT 0 set cmd { - set qry "SELECT count(*) FROM sampling.universe WHERE cod_com = $rec(cod_com) AND (NOT used OR used IS NULL)" + # in the WHERE clause below the "AND prefix IS NOT NULL" it's workaround + # cause we have our production db with spurious records in sampling.universe + # those tuples are defined by that aforementioned condition + set qry "SELECT count(*) FROM sampling.universe WHERE cod_com = $rec(cod_com) AND (NOT used OR used IS NULL) AND prefix is not null" set count_uni [lindex [::yadb::getTuple $db $qry 0] 0] if {$count_uni == -1} { ::yalog::error "unable to count of unused for cod_com $rec(cod_com) in sampling.universe" @@ -2587,8 +2590,8 @@ # it could be a syntax error or a handled error. in the # latter case ::sample::ERRCODE will be != 0. # if res_g = -2 qry_g failed - switch -exact $res_g { - -1 { + switch -exact -- $res_g { + "-1" { if {$::sample::ERRCODE != 0} { return $::sample::ERRCODE } else { Modified: trunk/yaacs/sample.tcl =================================================================== --- trunk/yaacs/sample.tcl 2012-02-09 10:49:48 UTC (rev 2157) +++ trunk/yaacs/sample.tcl 2012-02-14 10:29:09 UTC (rev 2158) @@ -2523,7 +2523,10 @@ set ::sample::ERRCODE 0 set ::sample::TUPLECOUNT 0 set cmd { - set qry "SELECT count(*) FROM sampling.universe WHERE cod_com = $rec(cod_com) AND (NOT used OR used IS NULL)" + # in the WHERE clause below the "AND prefix IS NOT NULL" it's workaround + # cause we have our production db with spurious records in sampling.universe + # those tuples are defined by that aforementioned condition + set qry "SELECT count(*) FROM sampling.universe WHERE cod_com = $rec(cod_com) AND (NOT used OR used IS NULL) AND prefix is not null" set count_uni [lindex [::yadb::getTuple $db $qry 0] 0] if {$count_uni == -1} { ::yalog::error "unable to count of unused for cod_com $rec(cod_com) in sampling.universe" @@ -2587,8 +2590,8 @@ # it could be a syntax error or a handled error. in the # latter case ::sample::ERRCODE will be != 0. # if res_g = -2 qry_g failed - switch -exact $res_g { - -1 { + switch -exact -- $res_g { + "-1" { if {$::sample::ERRCODE != 0} { return $::sample::ERRCODE } else { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <si...@us...> - 2012-02-09 10:49:59
|
Revision: 2157 http://yaacs.svn.sourceforge.net/yaacs/?rev=2157&view=rev Author: sickpig Date: 2012-02-09 10:49:48 +0000 (Thu, 09 Feb 2012) Log Message: ----------- * FIX: set extractable default to false Modified Paths: -------------- branches/external-stable/dbyaacs/migration.sql branches/external-stable/dbyaacs/sampling.sql branches/external-trunk/dbyaacs/migration.sql branches/external-trunk/dbyaacs/sampling.sql branches/internal-stable/dbyaacs/migration.sql branches/internal-stable/dbyaacs/sampling.sql trunk/dbyaacs/migration.sql trunk/dbyaacs/sampling.sql Modified: branches/external-stable/dbyaacs/migration.sql =================================================================== --- branches/external-stable/dbyaacs/migration.sql 2012-02-09 08:18:53 UTC (rev 2156) +++ branches/external-stable/dbyaacs/migration.sql 2012-02-09 10:49:48 UTC (rev 2157) @@ -2051,6 +2051,7 @@ ALTER TABLE sampling.theo_design ADD COLUMN label varchar; ALTER TABLE sampling.panel ALTER COLUMN extractable SET NOT NULL; +ALTER TABLE sampling.panel ALTER COLUMN extractable SET DEFAULT FALSE ; ALTER TABLE sampling.panel_str_theo_gen_eta DROP COLUMN qty; ALTER TABLE sampling.panel_str_theo_gen_eta ADD COLUMN qty_capo integer; Modified: branches/external-stable/dbyaacs/sampling.sql =================================================================== --- branches/external-stable/dbyaacs/sampling.sql 2012-02-09 08:18:53 UTC (rev 2156) +++ branches/external-stable/dbyaacs/sampling.sql 2012-02-09 10:49:48 UTC (rev 2157) @@ -320,7 +320,7 @@ priority integer, byear integer, sex character(1), - extractable boolean NOT NULL, + extractable boolean NOT NULL DEFAULT false, status integer DEFAULT 0, study integer, job integer, Modified: branches/external-trunk/dbyaacs/migration.sql =================================================================== --- branches/external-trunk/dbyaacs/migration.sql 2012-02-09 08:18:53 UTC (rev 2156) +++ branches/external-trunk/dbyaacs/migration.sql 2012-02-09 10:49:48 UTC (rev 2157) @@ -2044,6 +2044,7 @@ ALTER TABLE sampling.theo_design ADD COLUMN label varchar; ALTER TABLE sampling.panel ALTER COLUMN extractable SET NOT NULL; +ALTER TABLE sampling.panel ALTER COLUMN extractable SET DEFAULT FALSE ; ALTER TABLE sampling.panel_str_theo_gen_eta DROP COLUMN qty; ALTER TABLE sampling.panel_str_theo_gen_eta ADD COLUMN qty_capo integer; Modified: branches/external-trunk/dbyaacs/sampling.sql =================================================================== --- branches/external-trunk/dbyaacs/sampling.sql 2012-02-09 08:18:53 UTC (rev 2156) +++ branches/external-trunk/dbyaacs/sampling.sql 2012-02-09 10:49:48 UTC (rev 2157) @@ -320,7 +320,7 @@ priority integer, byear integer, sex character(1), - extractable boolean NOT NULL, + extractable boolean NOT NULL DEFAULT false, status integer DEFAULT 0, study integer, job integer, Modified: branches/internal-stable/dbyaacs/migration.sql =================================================================== --- branches/internal-stable/dbyaacs/migration.sql 2012-02-09 08:18:53 UTC (rev 2156) +++ branches/internal-stable/dbyaacs/migration.sql 2012-02-09 10:49:48 UTC (rev 2157) @@ -2045,6 +2045,7 @@ ALTER TABLE sampling.theo_design ADD COLUMN label varchar; ALTER TABLE sampling.panel ALTER COLUMN extractable SET NOT NULL; +ALTER TABLE sampling.panel ALTER COLUMN extractable SET DEFAULT FALSE ; ALTER TABLE sampling.panel_str_theo_gen_eta DROP COLUMN qty; ALTER TABLE sampling.panel_str_theo_gen_eta ADD COLUMN qty_capo integer; Modified: branches/internal-stable/dbyaacs/sampling.sql =================================================================== --- branches/internal-stable/dbyaacs/sampling.sql 2012-02-09 08:18:53 UTC (rev 2156) +++ branches/internal-stable/dbyaacs/sampling.sql 2012-02-09 10:49:48 UTC (rev 2157) @@ -320,7 +320,7 @@ priority integer, byear integer, sex character(1), - extractable boolean NOT NULL, + extractable boolean NOT NULL DEFAULT false, status integer DEFAULT 0, study integer, job integer, Modified: trunk/dbyaacs/migration.sql =================================================================== --- trunk/dbyaacs/migration.sql 2012-02-09 08:18:53 UTC (rev 2156) +++ trunk/dbyaacs/migration.sql 2012-02-09 10:49:48 UTC (rev 2157) @@ -2045,6 +2045,7 @@ ALTER TABLE sampling.theo_design ADD COLUMN label varchar; ALTER TABLE sampling.panel ALTER COLUMN extractable SET NOT NULL; +ALTER TABLE sampling.panel ALTER COLUMN extractable SET DEFAULT FALSE ; ALTER TABLE sampling.panel_str_theo_gen_eta DROP COLUMN qty; ALTER TABLE sampling.panel_str_theo_gen_eta ADD COLUMN qty_capo integer; Modified: trunk/dbyaacs/sampling.sql =================================================================== --- trunk/dbyaacs/sampling.sql 2012-02-09 08:18:53 UTC (rev 2156) +++ trunk/dbyaacs/sampling.sql 2012-02-09 10:49:48 UTC (rev 2157) @@ -320,7 +320,7 @@ priority integer, byear integer, sex character(1), - extractable boolean NOT NULL, + extractable boolean NOT NULL DEFAULT false, status integer DEFAULT 0, study integer, job integer, This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <si...@us...> - 2012-02-09 08:19:05
|
Revision: 2156 http://yaacs.svn.sourceforge.net/yaacs/?rev=2156&view=rev Author: sickpig Date: 2012-02-09 08:18:53 +0000 (Thu, 09 Feb 2012) Log Message: ----------- * FIX: All the process that deal with panel contacts belonged to closed quota (both geo and egn/age) was flawed. Hopefully now it is fixed. The things kicks every time you do a panel replicate and the correct steps are: - find fresh (unused) panel contacts (sampled previously) that belongs both to closed geo quota and closed gen/age quota. - delete those from project panel table and project contact table. - mark those as "unused" in the main panel table. - find callbacks panel contacts that belong to both to closed geo quota and closed gen/age quota - delete those cb from projects.schedule - mark those as almost unused in the main panel table - mark those with ouid -6 in the pj contact table Modified Paths: -------------- branches/external-stable/yaacs/sample.tcl branches/external-trunk/yaacs/sample.tcl branches/internal-stable/yaacs/sample.tcl trunk/yaacs/sample.tcl Modified: branches/external-stable/yaacs/sample.tcl =================================================================== --- branches/external-stable/yaacs/sample.tcl 2012-02-08 12:49:21 UTC (rev 2155) +++ branches/external-stable/yaacs/sample.tcl 2012-02-09 08:18:53 UTC (rev 2156) @@ -44,8 +44,10 @@ variable ::sample::ERR_BADCOM2 -4 #aux var - variable ::sample::unfitted [list] + variable ::sample::unfitted [list] variable ::sample::callback_ouid "(1,2,4,9,10,11,12)" + variable ::sample::cb_deleted_ouid -2 + variable ::sample::cb_deleted_panel_ouid -6 # self explenatory (actually we don't need this anymore cause panel # contact are handled like new contact and not like fake callback) @@ -96,51 +98,60 @@ return -1 } - # create a temp table for not fresh Cs belonging to a closed quota + # create a temp table for not fresh Cs belonging to a closed quota and ouid is a callback if {[::yadb::execl $db "CREATE TEMP TABLE $tomark ON COMMIT DROP AS SELECT rid, cod_com FROM $panelTableViewCLosed - WHERE (rid,cod_com) NOT IN (SELECT rid,cod_com FROM $todel)"] == -1} { + WHERE ouid in $::sample::callback_ouid"] == -1} { ::yalog::error "unable to create temp table $tomark" return -1 } # panel maintenance, touch setted to now() - 60 gg # it's a temporary measure we need to add a better heuristic - if {[::yadb::execl $db "UPDATE sampling.panel AS a - SET touch = (now()::date - integer [pg_quote 60]) - FROM $panelTableViewCLosed AS b - WHERE a.rid = b.rid AND a.cod_com = b.cod_com"] == -1} { + # mark as "unused" all those panel contact that we had + # extracted before but we have not used + if {[::yadb::execl $db "UPDATE sampling.panel AS a SET touch = (now()::date - integer [pg_quote 60]) + FROM $todel AS b WHERE a.rid = b.rid AND a.cod_com = b.cod_com"] == -1} { ::yalog::error "unable to touch field of sampling.panel" return -1 } + # panel maintenance, touch setted to now() - 30 gg + # mark as "almost unused" all those panel contact that we had + # extracted anca called but without getting an interview or a refusal + # (i.e callbacks) + if {[::yadb::execl $db "UPDATE sampling.panel AS a SET touch = (now()::date - integer [pg_quote 30]) + FROM $tomark AS b WHERE a.rid = b.rid AND a.cod_com = b.cod_com"] == -1} { + ::yalog::error "unable to touch field of sampling.panel" + return -1 + } # delete from panel project table those Cs that belong to panelTableViewCLosed - if {[::yadb::execl $db "DELETE FROM $panel AS a USING $panelTableViewCLosed AS b WHERE a.rid = b.rid AND a.cod_com = b.cod_com" + if {[::yadb::execl $db "DELETE FROM $panel AS a USING $todel AS b WHERE a.rid = b.rid AND a.cod_com = b.cod_com" ::yalog::error "unable to delete panel Cs from $panel"] == -1} { return -1 } # delete from project table all fresh Cs belonging to panelTableViewCLosed - if {[::yadb::execl $db "DELETE FROM $ptable AS a USING $todel AS b WHERE a.rid = b.rid AND a.cod_com = b.cod_com"] == -1} { + if {[::yadb::execl $db "DELETE FROM $ptable AS a USING $todel AS b WHERE a.rid = b.rid AND a.cod_com = b.cod_com"] == -1} { ::yalog::error "unable to delete panel Cs from $ptable" return -1 } # mark as panel quota filled all not fresh Cs belonging to closed quotai and delete # related callbacks, and last but not least add an activity for each Cs into log.activitylog - if {[::yadb::execl $db "DELETE FROM projects.schedule AS a USING $todel AS b WHERE a.rid=b.rid AND a.cod_com=b.cod_com AND a.proj=$idPj"] == -1} { + if {[::yadb::execl $db "DELETE FROM projects.schedule AS a USING $tomark AS b WHERE a.rid=b.rid AND a.cod_com=b.cod_com AND a.proj=$idPj"] == -1} { ::yalog::error "unable to delete callbacks from projects.schedule for projects $ptable ($idPj)" return -1 } # mark as quota fileld the Cs - if {[::yadb::execl $db "UPDATE $ptable AS a SET touch=now(), ouid = -6, quota = false FROM $tomark AS b WHERE a.rid = b.rid AND a.cod_com = b.cod_com"] == -1} { + if {[::yadb::execl $db "UPDATE $ptable AS a SET touch=now(), ouid = $::sample::cb_deleted_panel_ouid , quota = false FROM $tomark AS b WHERE a.rid = b.rid AND a.cod_com = b.cod_com"] == -1} { ::yalog::error "unable to mark as quota filled Cs in $ptable ($idPj)" return -1 } # add to log activity those admin operations if {[::yadb::execl $db "INSERT INTO log.activitylog (uid, proj, start_work, end_work, ouid, cod_com,rid) - SELECT -6, $idPj, now(), now(), -6, cod_com, rid FROM $todel"] == -1} { + SELECT $::sample::cb_deleted_panel_ouid , $idPj, now(), now(), $::sample::cb_deleted_panel_ouid, cod_com, rid FROM $tomark "] == -1} { ::yalog::error "unable to add log activity $todel" return -1 } Modified: branches/external-trunk/yaacs/sample.tcl =================================================================== --- branches/external-trunk/yaacs/sample.tcl 2012-02-08 12:49:21 UTC (rev 2155) +++ branches/external-trunk/yaacs/sample.tcl 2012-02-09 08:18:53 UTC (rev 2156) @@ -44,8 +44,10 @@ variable ::sample::ERR_BADCOM2 -4 #aux var - variable ::sample::unfitted [list] + variable ::sample::unfitted [list] variable ::sample::callback_ouid "(1,2,4,9,10,11,12)" + variable ::sample::cb_deleted_ouid -2 + variable ::sample::cb_deleted_panel_ouid -6 # self explenatory (actually we don't need this anymore cause panel # contact are handled like new contact and not like fake callback) @@ -96,51 +98,60 @@ return -1 } - # create a temp table for not fresh Cs belonging to a closed quota + # create a temp table for not fresh Cs belonging to a closed quota and ouid is a callback if {[::yadb::execl $db "CREATE TEMP TABLE $tomark ON COMMIT DROP AS SELECT rid, cod_com FROM $panelTableViewCLosed - WHERE (rid,cod_com) NOT IN (SELECT rid,cod_com FROM $todel)"] == -1} { + WHERE ouid in $::sample::callback_ouid"] == -1} { ::yalog::error "unable to create temp table $tomark" return -1 } # panel maintenance, touch setted to now() - 60 gg # it's a temporary measure we need to add a better heuristic - if {[::yadb::execl $db "UPDATE sampling.panel AS a - SET touch = (now()::date - integer [pg_quote 60]) - FROM $panelTableViewCLosed AS b - WHERE a.rid = b.rid AND a.cod_com = b.cod_com"] == -1} { + # mark as "unused" all those panel contact that we had + # extracted before but we have not used + if {[::yadb::execl $db "UPDATE sampling.panel AS a SET touch = (now()::date - integer [pg_quote 60]) + FROM $todel AS b WHERE a.rid = b.rid AND a.cod_com = b.cod_com"] == -1} { ::yalog::error "unable to touch field of sampling.panel" return -1 } + # panel maintenance, touch setted to now() - 30 gg + # mark as "almost unused" all those panel contact that we had + # extracted anca called but without getting an interview or a refusal + # (i.e callbacks) + if {[::yadb::execl $db "UPDATE sampling.panel AS a SET touch = (now()::date - integer [pg_quote 30]) + FROM $tomark AS b WHERE a.rid = b.rid AND a.cod_com = b.cod_com"] == -1} { + ::yalog::error "unable to touch field of sampling.panel" + return -1 + } # delete from panel project table those Cs that belong to panelTableViewCLosed - if {[::yadb::execl $db "DELETE FROM $panel AS a USING $panelTableViewCLosed AS b WHERE a.rid = b.rid AND a.cod_com = b.cod_com" + if {[::yadb::execl $db "DELETE FROM $panel AS a USING $todel AS b WHERE a.rid = b.rid AND a.cod_com = b.cod_com" ::yalog::error "unable to delete panel Cs from $panel"] == -1} { return -1 } # delete from project table all fresh Cs belonging to panelTableViewCLosed - if {[::yadb::execl $db "DELETE FROM $ptable AS a USING $todel AS b WHERE a.rid = b.rid AND a.cod_com = b.cod_com"] == -1} { + if {[::yadb::execl $db "DELETE FROM $ptable AS a USING $todel AS b WHERE a.rid = b.rid AND a.cod_com = b.cod_com"] == -1} { ::yalog::error "unable to delete panel Cs from $ptable" return -1 } # mark as panel quota filled all not fresh Cs belonging to closed quotai and delete # related callbacks, and last but not least add an activity for each Cs into log.activitylog - if {[::yadb::execl $db "DELETE FROM projects.schedule AS a USING $todel AS b WHERE a.rid=b.rid AND a.cod_com=b.cod_com AND a.proj=$idPj"] == -1} { + if {[::yadb::execl $db "DELETE FROM projects.schedule AS a USING $tomark AS b WHERE a.rid=b.rid AND a.cod_com=b.cod_com AND a.proj=$idPj"] == -1} { ::yalog::error "unable to delete callbacks from projects.schedule for projects $ptable ($idPj)" return -1 } # mark as quota fileld the Cs - if {[::yadb::execl $db "UPDATE $ptable AS a SET touch=now(), ouid = -6, quota = false FROM $tomark AS b WHERE a.rid = b.rid AND a.cod_com = b.cod_com"] == -1} { + if {[::yadb::execl $db "UPDATE $ptable AS a SET touch=now(), ouid = $::sample::cb_deleted_panel_ouid , quota = false FROM $tomark AS b WHERE a.rid = b.rid AND a.cod_com = b.cod_com"] == -1} { ::yalog::error "unable to mark as quota filled Cs in $ptable ($idPj)" return -1 } # add to log activity those admin operations if {[::yadb::execl $db "INSERT INTO log.activitylog (uid, proj, start_work, end_work, ouid, cod_com,rid) - SELECT -6, $idPj, now(), now(), -6, cod_com, rid FROM $todel"] == -1} { + SELECT $::sample::cb_deleted_panel_ouid , $idPj, now(), now(), $::sample::cb_deleted_panel_ouid, cod_com, rid FROM $tomark "] == -1} { ::yalog::error "unable to add log activity $todel" return -1 } Modified: branches/internal-stable/yaacs/sample.tcl =================================================================== --- branches/internal-stable/yaacs/sample.tcl 2012-02-08 12:49:21 UTC (rev 2155) +++ branches/internal-stable/yaacs/sample.tcl 2012-02-09 08:18:53 UTC (rev 2156) @@ -44,8 +44,10 @@ variable ::sample::ERR_BADCOM2 -4 #aux var - variable ::sample::unfitted [list] + variable ::sample::unfitted [list] variable ::sample::callback_ouid "(1,2,4,9,10,11,12)" + variable ::sample::cb_deleted_ouid -2 + variable ::sample::cb_deleted_panel_ouid -6 # self explenatory (actually we don't need this anymore cause panel # contact are handled like new contact and not like fake callback) @@ -96,51 +98,60 @@ return -1 } - # create a temp table for not fresh Cs belonging to a closed quota + # create a temp table for not fresh Cs belonging to a closed quota and ouid is a callback if {[::yadb::execl $db "CREATE TEMP TABLE $tomark ON COMMIT DROP AS SELECT rid, cod_com FROM $panelTableViewCLosed - WHERE (rid,cod_com) NOT IN (SELECT rid,cod_com FROM $todel)"] == -1} { + WHERE ouid in $::sample::callback_ouid"] == -1} { ::yalog::error "unable to create temp table $tomark" return -1 } # panel maintenance, touch setted to now() - 60 gg # it's a temporary measure we need to add a better heuristic - if {[::yadb::execl $db "UPDATE sampling.panel AS a - SET touch = (now()::date - integer [pg_quote 60]) - FROM $panelTableViewCLosed AS b - WHERE a.rid = b.rid AND a.cod_com = b.cod_com"] == -1} { + # mark as "unused" all those panel contact that we had + # extracted before but we have not used + if {[::yadb::execl $db "UPDATE sampling.panel AS a SET touch = (now()::date - integer [pg_quote 60]) + FROM $todel AS b WHERE a.rid = b.rid AND a.cod_com = b.cod_com"] == -1} { ::yalog::error "unable to touch field of sampling.panel" return -1 } + # panel maintenance, touch setted to now() - 30 gg + # mark as "almost unused" all those panel contact that we had + # extracted anca called but without getting an interview or a refusal + # (i.e callbacks) + if {[::yadb::execl $db "UPDATE sampling.panel AS a SET touch = (now()::date - integer [pg_quote 30]) + FROM $tomark AS b WHERE a.rid = b.rid AND a.cod_com = b.cod_com"] == -1} { + ::yalog::error "unable to touch field of sampling.panel" + return -1 + } # delete from panel project table those Cs that belong to panelTableViewCLosed - if {[::yadb::execl $db "DELETE FROM $panel AS a USING $panelTableViewCLosed AS b WHERE a.rid = b.rid AND a.cod_com = b.cod_com" + if {[::yadb::execl $db "DELETE FROM $panel AS a USING $todel AS b WHERE a.rid = b.rid AND a.cod_com = b.cod_com" ::yalog::error "unable to delete panel Cs from $panel"] == -1} { return -1 } # delete from project table all fresh Cs belonging to panelTableViewCLosed - if {[::yadb::execl $db "DELETE FROM $ptable AS a USING $todel AS b WHERE a.rid = b.rid AND a.cod_com = b.cod_com"] == -1} { + if {[::yadb::execl $db "DELETE FROM $ptable AS a USING $todel AS b WHERE a.rid = b.rid AND a.cod_com = b.cod_com"] == -1} { ::yalog::error "unable to delete panel Cs from $ptable" return -1 } # mark as panel quota filled all not fresh Cs belonging to closed quotai and delete # related callbacks, and last but not least add an activity for each Cs into log.activitylog - if {[::yadb::execl $db "DELETE FROM projects.schedule AS a USING $todel AS b WHERE a.rid=b.rid AND a.cod_com=b.cod_com AND a.proj=$idPj"] == -1} { + if {[::yadb::execl $db "DELETE FROM projects.schedule AS a USING $tomark AS b WHERE a.rid=b.rid AND a.cod_com=b.cod_com AND a.proj=$idPj"] == -1} { ::yalog::error "unable to delete callbacks from projects.schedule for projects $ptable ($idPj)" return -1 } # mark as quota fileld the Cs - if {[::yadb::execl $db "UPDATE $ptable AS a SET touch=now(), ouid = -6, quota = false FROM $tomark AS b WHERE a.rid = b.rid AND a.cod_com = b.cod_com"] == -1} { + if {[::yadb::execl $db "UPDATE $ptable AS a SET touch=now(), ouid = $::sample::cb_deleted_panel_ouid , quota = false FROM $tomark AS b WHERE a.rid = b.rid AND a.cod_com = b.cod_com"] == -1} { ::yalog::error "unable to mark as quota filled Cs in $ptable ($idPj)" return -1 } # add to log activity those admin operations if {[::yadb::execl $db "INSERT INTO log.activitylog (uid, proj, start_work, end_work, ouid, cod_com,rid) - SELECT -6, $idPj, now(), now(), -6, cod_com, rid FROM $todel"] == -1} { + SELECT $::sample::cb_deleted_panel_ouid , $idPj, now(), now(), $::sample::cb_deleted_panel_ouid, cod_com, rid FROM $tomark "] == -1} { ::yalog::error "unable to add log activity $todel" return -1 } Modified: trunk/yaacs/sample.tcl =================================================================== --- trunk/yaacs/sample.tcl 2012-02-08 12:49:21 UTC (rev 2155) +++ trunk/yaacs/sample.tcl 2012-02-09 08:18:53 UTC (rev 2156) @@ -44,8 +44,10 @@ variable ::sample::ERR_BADCOM2 -4 #aux var - variable ::sample::unfitted [list] + variable ::sample::unfitted [list] variable ::sample::callback_ouid "(1,2,4,9,10,11,12)" + variable ::sample::cb_deleted_ouid -2 + variable ::sample::cb_deleted_panel_ouid -6 # self explenatory (actually we don't need this anymore cause panel # contact are handled like new contact and not like fake callback) @@ -96,51 +98,60 @@ return -1 } - # create a temp table for not fresh Cs belonging to a closed quota + # create a temp table for not fresh Cs belonging to a closed quota and ouid is a callback if {[::yadb::execl $db "CREATE TEMP TABLE $tomark ON COMMIT DROP AS SELECT rid, cod_com FROM $panelTableViewCLosed - WHERE (rid,cod_com) NOT IN (SELECT rid,cod_com FROM $todel)"] == -1} { + WHERE ouid in $::sample::callback_ouid"] == -1} { ::yalog::error "unable to create temp table $tomark" return -1 } # panel maintenance, touch setted to now() - 60 gg # it's a temporary measure we need to add a better heuristic - if {[::yadb::execl $db "UPDATE sampling.panel AS a - SET touch = (now()::date - integer [pg_quote 60]) - FROM $panelTableViewCLosed AS b - WHERE a.rid = b.rid AND a.cod_com = b.cod_com"] == -1} { + # mark as "unused" all those panel contact that we had + # extracted before but we have not used + if {[::yadb::execl $db "UPDATE sampling.panel AS a SET touch = (now()::date - integer [pg_quote 60]) + FROM $todel AS b WHERE a.rid = b.rid AND a.cod_com = b.cod_com"] == -1} { ::yalog::error "unable to touch field of sampling.panel" return -1 } + # panel maintenance, touch setted to now() - 30 gg + # mark as "almost unused" all those panel contact that we had + # extracted anca called but without getting an interview or a refusal + # (i.e callbacks) + if {[::yadb::execl $db "UPDATE sampling.panel AS a SET touch = (now()::date - integer [pg_quote 30]) + FROM $tomark AS b WHERE a.rid = b.rid AND a.cod_com = b.cod_com"] == -1} { + ::yalog::error "unable to touch field of sampling.panel" + return -1 + } # delete from panel project table those Cs that belong to panelTableViewCLosed - if {[::yadb::execl $db "DELETE FROM $panel AS a USING $panelTableViewCLosed AS b WHERE a.rid = b.rid AND a.cod_com = b.cod_com" + if {[::yadb::execl $db "DELETE FROM $panel AS a USING $todel AS b WHERE a.rid = b.rid AND a.cod_com = b.cod_com" ::yalog::error "unable to delete panel Cs from $panel"] == -1} { return -1 } # delete from project table all fresh Cs belonging to panelTableViewCLosed - if {[::yadb::execl $db "DELETE FROM $ptable AS a USING $todel AS b WHERE a.rid = b.rid AND a.cod_com = b.cod_com"] == -1} { + if {[::yadb::execl $db "DELETE FROM $ptable AS a USING $todel AS b WHERE a.rid = b.rid AND a.cod_com = b.cod_com"] == -1} { ::yalog::error "unable to delete panel Cs from $ptable" return -1 } # mark as panel quota filled all not fresh Cs belonging to closed quotai and delete # related callbacks, and last but not least add an activity for each Cs into log.activitylog - if {[::yadb::execl $db "DELETE FROM projects.schedule AS a USING $todel AS b WHERE a.rid=b.rid AND a.cod_com=b.cod_com AND a.proj=$idPj"] == -1} { + if {[::yadb::execl $db "DELETE FROM projects.schedule AS a USING $tomark AS b WHERE a.rid=b.rid AND a.cod_com=b.cod_com AND a.proj=$idPj"] == -1} { ::yalog::error "unable to delete callbacks from projects.schedule for projects $ptable ($idPj)" return -1 } # mark as quota fileld the Cs - if {[::yadb::execl $db "UPDATE $ptable AS a SET touch=now(), ouid = -6, quota = false FROM $tomark AS b WHERE a.rid = b.rid AND a.cod_com = b.cod_com"] == -1} { + if {[::yadb::execl $db "UPDATE $ptable AS a SET touch=now(), ouid = $::sample::cb_deleted_panel_ouid , quota = false FROM $tomark AS b WHERE a.rid = b.rid AND a.cod_com = b.cod_com"] == -1} { ::yalog::error "unable to mark as quota filled Cs in $ptable ($idPj)" return -1 } # add to log activity those admin operations if {[::yadb::execl $db "INSERT INTO log.activitylog (uid, proj, start_work, end_work, ouid, cod_com,rid) - SELECT -6, $idPj, now(), now(), -6, cod_com, rid FROM $todel"] == -1} { + SELECT $::sample::cb_deleted_panel_ouid , $idPj, now(), now(), $::sample::cb_deleted_panel_ouid, cod_com, rid FROM $tomark "] == -1} { ::yalog::error "unable to add log activity $todel" return -1 } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <si...@us...> - 2012-02-08 12:49:30
|
Revision: 2155 http://yaacs.svn.sourceforge.net/yaacs/?rev=2155&view=rev Author: sickpig Date: 2012-02-08 12:49:21 +0000 (Wed, 08 Feb 2012) Log Message: ----------- * FIX: map lprob bool value to 0/1 notation Modified Paths: -------------- branches/external-stable/yaacs/sample.tcl branches/external-trunk/yaacs/sample.tcl branches/internal-stable/yaacs/sample.tcl trunk/yaacs/sample.tcl Modified: branches/external-stable/yaacs/sample.tcl =================================================================== --- branches/external-stable/yaacs/sample.tcl 2012-02-08 07:52:38 UTC (rev 2154) +++ branches/external-stable/yaacs/sample.tcl 2012-02-08 12:49:21 UTC (rev 2155) @@ -1094,7 +1094,7 @@ set sampType $dataPj(sampling_type) set frameTab $dataPj(pjframe) set defiTab [lindex [split [string trim $dataPj(pjtable)] "."] 1]_theo_def - set lprob $dataPj(lprobabilistic) + set lprob [expr {$dataPj(lprobabilistic) eq "f" ? 0 : 1}] # check if strata/cod_com table exixst (it needs to choose between old style cod_com sampling and new cod_col sampling) Modified: branches/external-trunk/yaacs/sample.tcl =================================================================== --- branches/external-trunk/yaacs/sample.tcl 2012-02-08 07:52:38 UTC (rev 2154) +++ branches/external-trunk/yaacs/sample.tcl 2012-02-08 12:49:21 UTC (rev 2155) @@ -1094,7 +1094,7 @@ set sampType $dataPj(sampling_type) set frameTab $dataPj(pjframe) set defiTab [lindex [split [string trim $dataPj(pjtable)] "."] 1]_theo_def - set lprob $dataPj(lprobabilistic) + set lprob [expr {$dataPj(lprobabilistic) eq "f" ? 0 : 1}] # check if strata/cod_com table exixst (it needs to choose between old style cod_com sampling and new cod_col sampling) Modified: branches/internal-stable/yaacs/sample.tcl =================================================================== --- branches/internal-stable/yaacs/sample.tcl 2012-02-08 07:52:38 UTC (rev 2154) +++ branches/internal-stable/yaacs/sample.tcl 2012-02-08 12:49:21 UTC (rev 2155) @@ -1094,7 +1094,7 @@ set sampType $dataPj(sampling_type) set frameTab $dataPj(pjframe) set defiTab [lindex [split [string trim $dataPj(pjtable)] "."] 1]_theo_def - set lprob $dataPj(lprobabilistic) + set lprob [expr {$dataPj(lprobabilistic) eq "f" ? 0 : 1}] # check if strata/cod_com table exixst (it needs to choose between old style cod_com sampling and new cod_col sampling) Modified: trunk/yaacs/sample.tcl =================================================================== --- trunk/yaacs/sample.tcl 2012-02-08 07:52:38 UTC (rev 2154) +++ trunk/yaacs/sample.tcl 2012-02-08 12:49:21 UTC (rev 2155) @@ -1094,7 +1094,7 @@ set sampType $dataPj(sampling_type) set frameTab $dataPj(pjframe) set defiTab [lindex [split [string trim $dataPj(pjtable)] "."] 1]_theo_def - set lprob $dataPj(lprobabilistic) + set lprob [expr {$dataPj(lprobabilistic) eq "f" ? 0 : 1}] # check if strata/cod_com table exixst (it needs to choose between old style cod_com sampling and new cod_col sampling) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <si...@us...> - 2012-02-08 07:52:52
|
Revision: 2154 http://yaacs.svn.sourceforge.net/yaacs/?rev=2154&view=rev Author: sickpig Date: 2012-02-08 07:52:38 +0000 (Wed, 08 Feb 2012) Log Message: ----------- * merging a lot of stuff taken from external dev branch svn merge -r 2070:HEAD https://yaacs.svn.sourceforge.net/svnroot/yaacs/branches/external-trunk . the list of new things are: 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 o) NEW: probabilistic sampling on listed pj NB you need to change your DB schema to get this yaacs version working (also you've to take care to modify your active project) Modified Paths: -------------- branches/external-stable/dbyaacs/data.sql branches/external-stable/dbyaacs/migration.sql branches/external-stable/dbyaacs/projects.sql branches/external-stable/dbyaacs/sampling.sql branches/external-stable/docs/user_manual/html/it/yacati.xml branches/external-stable/docs/user_manual/html/it/yacco.xml branches/external-stable/docs/user_manual/html/it/yachoo.xml branches/external-stable/docs/user_manual/html/it/yadmin.xml branches/external-stable/docs/user_manual/html/it/yamon.xml branches/external-stable/docs/user_manual/pdf/it/yacati.xml branches/external-stable/docs/yaacs.conf.sample branches/external-stable/yaacs/admin.tcl branches/external-stable/yaacs/cati.tcl branches/external-stable/yaacs/op.tcl branches/external-stable/yaacs/sample.tcl branches/external-stable/yaacs/sendfax.tcl branches/external-stable/yaacs/sendmail.tcl branches/external-stable/yaacs/yaconf.tcl branches/external-stable/yaacs/yadb.tcl branches/external-stable/yaacs/yavoip.tcl branches/external-stable/yacati.tcl branches/external-stable/yadmin.tcl Added Paths: ----------- branches/external-stable/dialogs_icons/icons/Tango/64x64/actions/image-missing.png branches/external-stable/dialogs_icons/icons/Tango/64x64/status/image-missing.png branches/external-stable/utility/proxy_init_script branches/external-stable/utility/smtpproxy.tcl Property Changed: ---------------- branches/external-stable/ Property changes on: branches/external-stable ___________________________________________________________________ Modified: svn:mergeinfo - /branches/external-trunk:1694-1837,1840-1876,1879-1887,1889-2020,2022-2042,2044-2069 /trunk:1624-1693 + /branches/external-trunk:1694-1837,1840-1876,1879-1887,1889-2020,2022-2042,2044-2069,2072-2151 /trunk:1624-1693,2094-2131 Modified: branches/external-stable/dbyaacs/data.sql =================================================================== --- branches/external-stable/dbyaacs/data.sql 2012-02-08 07:44:29 UTC (rev 2153) +++ branches/external-stable/dbyaacs/data.sql 2012-02-08 07:52:38 UTC (rev 2154) @@ -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: branches/external-stable/dbyaacs/migration.sql =================================================================== --- branches/external-stable/dbyaacs/migration.sql 2012-02-08 07:44:29 UTC (rev 2153) +++ branches/external-stable/dbyaacs/migration.sql 2012-02-08 07:52:38 UTC (rev 2154) @@ -1989,7 +1989,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; @@ -2039,3 +2039,1341 @@ 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 1... [truncated message content] |
From: <si...@us...> - 2012-02-08 07:44:40
|
Revision: 2153 http://yaacs.svn.sourceforge.net/yaacs/?rev=2153&view=rev Author: sickpig Date: 2012-02-08 07:44:29 +0000 (Wed, 08 Feb 2012) Log Message: ----------- FIX: add needed label info to ::cati::get_contact_panel_info FIX: add missing/proper quoting to ::cati::contact_belong_to_a_closed_quota and ::cati::callback_on_a_closed_quota Modified Paths: -------------- branches/external-trunk/yaacs/cati.tcl branches/internal-stable/yaacs/cati.tcl trunk/yaacs/cati.tcl Modified: branches/external-trunk/yaacs/cati.tcl =================================================================== --- branches/external-trunk/yaacs/cati.tcl 2012-02-07 18:23:56 UTC (rev 2152) +++ branches/external-trunk/yaacs/cati.tcl 2012-02-08 07:44:29 UTC (rev 2153) @@ -1167,7 +1167,7 @@ FROM projects.${pname}_theo_sex_age \ WHERE $age between min_age and max_age \ AND upper([pg_quote $data(schedule_sex)]) = upper(sex) - AND label = '$data(label)'" + AND label = [pg_quote $data(label)]" set res [::yadb::getTuple $db $qry 0] if {$res == -1} { ::yalog::error "unable to understand if callback belong to a closed quota (gender_age)" @@ -1204,7 +1204,7 @@ FROM projects.${pname}_theo_sex_age \ WHERE $age between min_age and max_age \ AND upper([pg_quote $data(sex)]) = upper(sex) - AND label = '$data(label)'" + AND label = [pg_quote $data(label)]" set res [::yadb::getTuple $db $qry 0] if {$res == -1} { ::yalog::error "unable to understand if contact belong to a closed quota (gender_age)" Modified: branches/internal-stable/yaacs/cati.tcl =================================================================== --- branches/internal-stable/yaacs/cati.tcl 2012-02-07 18:23:56 UTC (rev 2152) +++ branches/internal-stable/yaacs/cati.tcl 2012-02-08 07:44:29 UTC (rev 2153) @@ -1133,7 +1133,7 @@ proc ::cati::get_contact_panel_info {db pname rid cod_com} { - set sql "SELECT rid,cod_com, respname as name, lower(sex) as sex, byear, study, job FROM projects.${pname}_panel \ + set sql "SELECT rid,cod_com, respname as name, lower(sex) as sex, byear, study, job, label FROM projects.${pname}_panel \ WHERE rid = $rid AND cod_com = $cod_com LIMIT 1" set res [::yadb::getTupleArray $db $sql] if {$res == -1} { @@ -1167,7 +1167,7 @@ FROM projects.${pname}_theo_sex_age \ WHERE $age between min_age and max_age \ AND upper([pg_quote $data(schedule_sex)]) = upper(sex) - AND label = '$data(label)'" + AND label = [pg_quote $data(label)]" set res [::yadb::getTuple $db $qry 0] if {$res == -1} { ::yalog::error "unable to understand if callback belong to a closed quota (gender_age)" @@ -1204,7 +1204,7 @@ FROM projects.${pname}_theo_sex_age \ WHERE $age between min_age and max_age \ AND upper([pg_quote $data(sex)]) = upper(sex) - AND label = '$data(label)'" + AND label = [pg_quote $data(label)]" set res [::yadb::getTuple $db $qry 0] if {$res == -1} { ::yalog::error "unable to understand if contact belong to a closed quota (gender_age)" Modified: trunk/yaacs/cati.tcl =================================================================== --- trunk/yaacs/cati.tcl 2012-02-07 18:23:56 UTC (rev 2152) +++ trunk/yaacs/cati.tcl 2012-02-08 07:44:29 UTC (rev 2153) @@ -1133,7 +1133,7 @@ proc ::cati::get_contact_panel_info {db pname rid cod_com} { - set sql "SELECT rid,cod_com, respname as name, lower(sex) as sex, byear, study, job FROM projects.${pname}_panel \ + set sql "SELECT rid,cod_com, respname as name, lower(sex) as sex, byear, study, job, label FROM projects.${pname}_panel \ WHERE rid = $rid AND cod_com = $cod_com LIMIT 1" set res [::yadb::getTupleArray $db $sql] if {$res == -1} { @@ -1167,7 +1167,7 @@ FROM projects.${pname}_theo_sex_age \ WHERE $age between min_age and max_age \ AND upper([pg_quote $data(schedule_sex)]) = upper(sex) - AND label = $data(label)" + AND label = [pg_quote $data(label)]" set res [::yadb::getTuple $db $qry 0] if {$res == -1} { ::yalog::error "unable to understand if callback belong to a closed quota (gender_age)" @@ -1204,7 +1204,7 @@ FROM projects.${pname}_theo_sex_age \ WHERE $age between min_age and max_age \ AND upper([pg_quote $data(sex)]) = upper(sex) - AND label = $data(label)" + AND label = [pg_quote $data(label)]" set res [::yadb::getTuple $db $qry 0] if {$res == -1} { ::yalog::error "unable to understand if contact belong to a closed quota (gender_age)" This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <si...@us...> - 2012-02-07 18:24:02
|
Revision: 2152 http://yaacs.svn.sourceforge.net/yaacs/?rev=2152&view=rev Author: sickpig Date: 2012-02-07 18:23:56 +0000 (Tue, 07 Feb 2012) Log Message: ----------- * FIX misquoting Modified Paths: -------------- branches/external-trunk/yaacs/cati.tcl branches/internal-stable/yaacs/cati.tcl Modified: branches/external-trunk/yaacs/cati.tcl =================================================================== --- branches/external-trunk/yaacs/cati.tcl 2012-02-07 09:51:51 UTC (rev 2151) +++ branches/external-trunk/yaacs/cati.tcl 2012-02-07 18:23:56 UTC (rev 2152) @@ -1167,7 +1167,7 @@ FROM projects.${pname}_theo_sex_age \ WHERE $age between min_age and max_age \ AND upper([pg_quote $data(schedule_sex)]) = upper(sex) - AND label = $data(label)" + AND label = '$data(label)'" set res [::yadb::getTuple $db $qry 0] if {$res == -1} { ::yalog::error "unable to understand if callback belong to a closed quota (gender_age)" @@ -1204,7 +1204,7 @@ FROM projects.${pname}_theo_sex_age \ WHERE $age between min_age and max_age \ AND upper([pg_quote $data(sex)]) = upper(sex) - AND label = $data(label)" + AND label = '$data(label)'" set res [::yadb::getTuple $db $qry 0] if {$res == -1} { ::yalog::error "unable to understand if contact belong to a closed quota (gender_age)" Modified: branches/internal-stable/yaacs/cati.tcl =================================================================== --- branches/internal-stable/yaacs/cati.tcl 2012-02-07 09:51:51 UTC (rev 2151) +++ branches/internal-stable/yaacs/cati.tcl 2012-02-07 18:23:56 UTC (rev 2152) @@ -1167,7 +1167,7 @@ FROM projects.${pname}_theo_sex_age \ WHERE $age between min_age and max_age \ AND upper([pg_quote $data(schedule_sex)]) = upper(sex) - AND label = $data(label)" + AND label = '$data(label)'" set res [::yadb::getTuple $db $qry 0] if {$res == -1} { ::yalog::error "unable to understand if callback belong to a closed quota (gender_age)" @@ -1204,7 +1204,7 @@ FROM projects.${pname}_theo_sex_age \ WHERE $age between min_age and max_age \ AND upper([pg_quote $data(sex)]) = upper(sex) - AND label = $data(label)" + AND label = '$data(label)'" set res [::yadb::getTuple $db $qry 0] if {$res == -1} { ::yalog::error "unable to understand if contact belong to a closed quota (gender_age)" This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <si...@us...> - 2012-02-07 09:52:00
|
Revision: 2151 http://yaacs.svn.sourceforge.net/yaacs/?rev=2151&view=rev Author: sickpig Date: 2012-02-07 09:51:51 +0000 (Tue, 07 Feb 2012) Log Message: ----------- * FIX cut and paste error Modified Paths: -------------- branches/external-trunk/dbyaacs/migration.sql branches/internal-stable/dbyaacs/migration.sql trunk/dbyaacs/migration.sql Modified: branches/external-trunk/dbyaacs/migration.sql =================================================================== --- branches/external-trunk/dbyaacs/migration.sql 2012-02-06 11:39:08 UTC (rev 2150) +++ branches/external-trunk/dbyaacs/migration.sql 2012-02-07 09:51:51 UTC (rev 2151) @@ -3354,8 +3354,8 @@ 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; +ALTER TABLE projects.template drop column dis_phone1; +ALTER TABLE projects.template 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/internal-stable/dbyaacs/migration.sql =================================================================== --- branches/internal-stable/dbyaacs/migration.sql 2012-02-06 11:39:08 UTC (rev 2150) +++ branches/internal-stable/dbyaacs/migration.sql 2012-02-07 09:51:51 UTC (rev 2151) @@ -3355,8 +3355,8 @@ 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; +ALTER TABLE projects.template drop column dis_phone1; +ALTER TABLE projects.template 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: trunk/dbyaacs/migration.sql =================================================================== --- trunk/dbyaacs/migration.sql 2012-02-06 11:39:08 UTC (rev 2150) +++ trunk/dbyaacs/migration.sql 2012-02-07 09:51:51 UTC (rev 2151) @@ -3355,8 +3355,8 @@ 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; +ALTER TABLE projects.template drop column dis_phone1; +ALTER TABLE projects.template 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'); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <si...@us...> - 2012-02-06 11:39:22
|
Revision: 2150 http://yaacs.svn.sourceforge.net/yaacs/?rev=2150&view=rev Author: sickpig Date: 2012-02-06 11:39:08 +0000 (Mon, 06 Feb 2012) Log Message: ----------- * Big merge ahead... beware :) we are merging a lot of trunk changes into internal-stable with this command svn merge -r 2054:HEAD https://yaacs.svn.sourceforge.net/svnroot/yaacs/trunk . apart from doc update and skipping of i18n files, these are the hot things in this merge: 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 NB look for needed SQL schema changes in migratrion.sql Modified Paths: -------------- branches/internal-stable/dbyaacs/data.sql branches/internal-stable/dbyaacs/migration.sql branches/internal-stable/dbyaacs/projects.sql branches/internal-stable/dbyaacs/sampling.sql branches/internal-stable/docs/user_manual/html/it/yacati.xml branches/internal-stable/docs/user_manual/html/it/yacco.xml branches/internal-stable/docs/user_manual/html/it/yachoo.xml branches/internal-stable/docs/user_manual/html/it/yadmin.xml branches/internal-stable/docs/user_manual/html/it/yamon.xml branches/internal-stable/docs/user_manual/pdf/it/yacati.xml branches/internal-stable/docs/user_manual/pdf/it/yacco.xml branches/internal-stable/docs/user_manual/pdf/it/yachoo.xml branches/internal-stable/docs/user_manual/pdf/it/yadmin.xml branches/internal-stable/docs/user_manual/pdf/it/yamon.xml branches/internal-stable/docs/yaacs.conf.sample branches/internal-stable/yaacs/admin.tcl branches/internal-stable/yaacs/cati.tcl branches/internal-stable/yaacs/op.tcl branches/internal-stable/yaacs/sample.tcl branches/internal-stable/yaacs/sendfax.tcl branches/internal-stable/yaacs/sendmail.tcl branches/internal-stable/yaacs/yaconf.tcl branches/internal-stable/yaacs/yadb.tcl branches/internal-stable/yaacs/yavoip.tcl branches/internal-stable/yacati.tcl branches/internal-stable/yadmin.tcl Added Paths: ----------- branches/internal-stable/dialogs_icons/icons/Tango/64x64/actions/image-missing.png branches/internal-stable/dialogs_icons/icons/Tango/64x64/status/image-missing.png branches/internal-stable/utility/proxy_init_script branches/internal-stable/utility/smtpproxy.tcl Removed Paths: ------------- branches/internal-stable/utility/checkemail.tcl Property Changed: ---------------- branches/internal-stable/ Property changes on: branches/internal-stable ___________________________________________________________________ Modified: svn:mergeinfo - /trunk:1696-1835,1840-1867,1870-1886,1888-1922,1924-1957,1959-1975,1978-1991,1993-2017,2019-2053 + /trunk:1696-1835,1840-1867,1870-1886,1888-1922,1924-1957,1959-1975,1978-1991,1993-2017,2019-2053,2055-2149 Modified: branches/internal-stable/dbyaacs/data.sql =================================================================== --- branches/internal-stable/dbyaacs/data.sql 2012-02-06 09:47:10 UTC (rev 2149) +++ branches/internal-stable/dbyaacs/data.sql 2012-02-06 11:39:08 UTC (rev 2150) @@ -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: branches/internal-stable/dbyaacs/migration.sql =================================================================== --- branches/internal-stable/dbyaacs/migration.sql 2012-02-06 09:47:10 UTC (rev 2149) +++ branches/internal-stable/dbyaacs/migration.sql 2012-02-06 11:39:08 UTC (rev 2150) @@ -1983,7 +1983,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; @@ -2033,3 +2033,1341 @@ 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 +7... [truncated message content] |
From: <si...@us...> - 2012-02-06 09:47:20
|
Revision: 2149 http://yaacs.svn.sourceforge.net/yaacs/?rev=2149&view=rev Author: sickpig Date: 2012-02-06 09:47:10 +0000 (Mon, 06 Feb 2012) Log Message: ----------- * FIX: apply to ::cati::contact_belong_to_a_closed_quota the same fix applied to ::cati::callback_on_a_closed_quota on rev 2147 Revision Links: -------------- http://yaacs.svn.sourceforge.net/yaacs/?rev=2147&view=rev Modified Paths: -------------- branches/external-stable/yaacs/cati.tcl branches/external-trunk/yaacs/cati.tcl branches/internal-stable/yaacs/cati.tcl trunk/yaacs/cati.tcl Modified: branches/external-stable/yaacs/cati.tcl =================================================================== --- branches/external-stable/yaacs/cati.tcl 2012-01-31 08:20:29 UTC (rev 2148) +++ branches/external-stable/yaacs/cati.tcl 2012-02-06 09:47:10 UTC (rev 2149) @@ -1201,7 +1201,8 @@ set qry "SELECT CASE WHEN (qty - done) > 0 THEN 0 ELSE 1 END as open \ FROM projects.${pname}_theo_sex_age \ WHERE $age between min_age and max_age \ - AND upper([pg_quote $data(sex)]) = upper(sex)" + AND upper([pg_quote $data(sex)]) = upper(sex) + AND label = $data(label)" set res [::yadb::getTuple $db $qry 0] if {$res == -1} { ::yalog::error "unable to understand if contact belong to a closed quota (gender_age)" Modified: branches/external-trunk/yaacs/cati.tcl =================================================================== --- branches/external-trunk/yaacs/cati.tcl 2012-01-31 08:20:29 UTC (rev 2148) +++ branches/external-trunk/yaacs/cati.tcl 2012-02-06 09:47:10 UTC (rev 2149) @@ -1203,7 +1203,8 @@ set qry "SELECT CASE WHEN (qty - done) > 0 THEN 0 ELSE 1 END as open \ FROM projects.${pname}_theo_sex_age \ WHERE $age between min_age and max_age \ - AND upper([pg_quote $data(sex)]) = upper(sex)" + AND upper([pg_quote $data(sex)]) = upper(sex) + AND label = $data(label)" set res [::yadb::getTuple $db $qry 0] if {$res == -1} { ::yalog::error "unable to understand if contact belong to a closed quota (gender_age)" Modified: branches/internal-stable/yaacs/cati.tcl =================================================================== --- branches/internal-stable/yaacs/cati.tcl 2012-01-31 08:20:29 UTC (rev 2148) +++ branches/internal-stable/yaacs/cati.tcl 2012-02-06 09:47:10 UTC (rev 2149) @@ -1202,7 +1202,8 @@ set qry "SELECT CASE WHEN (qty - done) > 0 THEN 0 ELSE 1 END as open \ FROM projects.${pname}_theo_sex_age \ WHERE $age between min_age and max_age \ - AND upper([pg_quote $data(sex)]) = upper(sex)" + AND upper([pg_quote $data(sex)]) = upper(sex) + AND label = $data(label)" set res [::yadb::getTuple $db $qry 0] if {$res == -1} { ::yalog::error "unable to understand if contact belong to a closed quota (gender_age)" Modified: trunk/yaacs/cati.tcl =================================================================== --- trunk/yaacs/cati.tcl 2012-01-31 08:20:29 UTC (rev 2148) +++ trunk/yaacs/cati.tcl 2012-02-06 09:47:10 UTC (rev 2149) @@ -1203,7 +1203,8 @@ set qry "SELECT CASE WHEN (qty - done) > 0 THEN 0 ELSE 1 END as open \ FROM projects.${pname}_theo_sex_age \ WHERE $age between min_age and max_age \ - AND upper([pg_quote $data(sex)]) = upper(sex)" + AND upper([pg_quote $data(sex)]) = upper(sex) + AND label = $data(label)" set res [::yadb::getTuple $db $qry 0] if {$res == -1} { ::yalog::error "unable to understand if contact belong to a closed quota (gender_age)" This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <si...@us...> - 2012-01-31 08:20:40
|
Revision: 2148 http://yaacs.svn.sourceforge.net/yaacs/?rev=2148&view=rev Author: sickpig Date: 2012-01-31 08:20:29 +0000 (Tue, 31 Jan 2012) Log Message: ----------- * We have had 110 provs for while time to update... 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 2012-01-20 08:19:48 UTC (rev 2147) +++ branches/external-stable/yadmin.tcl 2012-01-31 08:20:29 UTC (rev 2148) @@ -2505,8 +2505,8 @@ } elseif {$inf > $sup} { ::dialogs::error .selmul [mc "Input error"] [mc "Wrong range definition (inferior limit > superior limit)."] return - } elseif {$sup > 107} { - ::dialogs::error .selmul [mc "Input error"] [mc "Wrong range definition (boundaries have to be in 1..107."] + } elseif {$sup > 110} { + ::dialogs::error .selmul [mc "Input error"] [mc "Wrong range definition (boundaries have to be in 1..110."] return } else { set ::yadmin::seleButton 1 @@ -5013,7 +5013,7 @@ # proc ::yadmin::doSampleUni { db } { - set infsup [::yadmin::selectBound [mc "Specify boundaries for cod_prov range (1..107)"]] + set infsup [::yadmin::selectBound [mc "Specify boundaries for cod_prov range (1..110)"]] if {$infsup == -1} { # they abort re-population ;) return Modified: branches/external-trunk/yadmin.tcl =================================================================== --- branches/external-trunk/yadmin.tcl 2012-01-20 08:19:48 UTC (rev 2147) +++ branches/external-trunk/yadmin.tcl 2012-01-31 08:20:29 UTC (rev 2148) @@ -2523,8 +2523,8 @@ } elseif {$inf > $sup} { ::dialogs::error .selmul [mc "Input error"] [mc "Wrong range definition (inferior limit > superior limit)."] return - } elseif {$sup > 107} { - ::dialogs::error .selmul [mc "Input error"] [mc "Wrong range definition (boundaries have to be in 1..107."] + } elseif {$sup > 110} { + ::dialogs::error .selmul [mc "Input error"] [mc "Wrong range definition (boundaries have to be in 1..110."] return } else { set ::yadmin::seleButton 1 @@ -5067,7 +5067,7 @@ # proc ::yadmin::doSampleUni { db } { - set infsup [::yadmin::selectBound [mc "Specify boundaries for cod_prov range (1..107)"]] + set infsup [::yadmin::selectBound [mc "Specify boundaries for cod_prov range (1..110)"]] if {$infsup == -1} { # they abort re-population ;) return Modified: branches/internal-stable/yadmin.tcl =================================================================== --- branches/internal-stable/yadmin.tcl 2012-01-20 08:19:48 UTC (rev 2147) +++ branches/internal-stable/yadmin.tcl 2012-01-31 08:20:29 UTC (rev 2148) @@ -2505,8 +2505,8 @@ } elseif {$inf > $sup} { ::dialogs::error .selmul [mc "Input error"] [mc "Wrong range definition (inferior limit > superior limit)."] return - } elseif {$sup > 107} { - ::dialogs::error .selmul [mc "Input error"] [mc "Wrong range definition (boundaries have to be in 1..107."] + } elseif {$sup > 110} { + ::dialogs::error .selmul [mc "Input error"] [mc "Wrong range definition (boundaries have to be in 1..110."] return } else { set ::yadmin::seleButton 1 @@ -5014,7 +5014,7 @@ # proc ::yadmin::doSampleUni { db } { - set infsup [::yadmin::selectBound [mc "Specify boundaries for cod_prov range (1..107)"]] + set infsup [::yadmin::selectBound [mc "Specify boundaries for cod_prov range (1..110)"]] if {$infsup == -1} { # they abort re-population ;) return @@ -5108,7 +5108,7 @@ # 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 +# 4: stands x out-of-quota interviews # 5: stands x study quota (completed interviews) # 6: stands x study quota (distance from goal) proc ::yadmin::quotaCheck {db idPj type {perc 0}} { Modified: trunk/yadmin.tcl =================================================================== --- trunk/yadmin.tcl 2012-01-20 08:19:48 UTC (rev 2147) +++ trunk/yadmin.tcl 2012-01-31 08:20:29 UTC (rev 2148) @@ -2523,8 +2523,8 @@ } elseif {$inf > $sup} { ::dialogs::error .selmul [mc "Input error"] [mc "Wrong range definition (inferior limit > superior limit)."] return - } elseif {$sup > 107} { - ::dialogs::error .selmul [mc "Input error"] [mc "Wrong range definition (boundaries have to be in 1..107."] + } elseif {$sup > 110} { + ::dialogs::error .selmul [mc "Input error"] [mc "Wrong range definition (boundaries have to be in 1..110."] return } else { set ::yadmin::seleButton 1 @@ -5067,7 +5067,7 @@ # proc ::yadmin::doSampleUni { db } { - set infsup [::yadmin::selectBound [mc "Specify boundaries for cod_prov range (1..107)"]] + set infsup [::yadmin::selectBound [mc "Specify boundaries for cod_prov range (1..110)"]] if {$infsup == -1} { # they abort re-population ;) return This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <si...@us...> - 2012-01-20 08:19:54
|
Revision: 2147 http://yaacs.svn.sourceforge.net/yaacs/?rev=2147&view=rev Author: sickpig Date: 2012-01-20 08:19:48 +0000 (Fri, 20 Jan 2012) Log Message: ----------- * FIX: add label check in where clause while checking for callback ina closed quota Modified Paths: -------------- branches/external-stable/yaacs/cati.tcl branches/external-trunk/yaacs/cati.tcl branches/internal-stable/yaacs/cati.tcl trunk/yaacs/cati.tcl Modified: branches/external-stable/yaacs/cati.tcl =================================================================== --- branches/external-stable/yaacs/cati.tcl 2012-01-19 10:02:23 UTC (rev 2146) +++ branches/external-stable/yaacs/cati.tcl 2012-01-20 08:19:48 UTC (rev 2147) @@ -1164,7 +1164,8 @@ set qry "SELECT CASE WHEN (qty - done) > 0 THEN 0 ELSE 1 END as open \ FROM projects.${pname}_theo_sex_age \ WHERE $age between min_age and max_age \ - AND upper([pg_quote $data(schedule_sex)]) = upper(sex)" + AND upper([pg_quote $data(schedule_sex)]) = upper(sex) + AND label = $data(label)" set res [::yadb::getTuple $db $qry 0] if {$res == -1} { ::yalog::error "unable to understand if callback belong to a closed quota (gender_age)" Modified: branches/external-trunk/yaacs/cati.tcl =================================================================== --- branches/external-trunk/yaacs/cati.tcl 2012-01-19 10:02:23 UTC (rev 2146) +++ branches/external-trunk/yaacs/cati.tcl 2012-01-20 08:19:48 UTC (rev 2147) @@ -1166,7 +1166,8 @@ set qry "SELECT CASE WHEN (qty - done) > 0 THEN 0 ELSE 1 END as open \ FROM projects.${pname}_theo_sex_age \ WHERE $age between min_age and max_age \ - AND upper([pg_quote $data(schedule_sex)]) = upper(sex)" + AND upper([pg_quote $data(schedule_sex)]) = upper(sex) + AND label = $data(label)" set res [::yadb::getTuple $db $qry 0] if {$res == -1} { ::yalog::error "unable to understand if callback belong to a closed quota (gender_age)" Modified: branches/internal-stable/yaacs/cati.tcl =================================================================== --- branches/internal-stable/yaacs/cati.tcl 2012-01-19 10:02:23 UTC (rev 2146) +++ branches/internal-stable/yaacs/cati.tcl 2012-01-20 08:19:48 UTC (rev 2147) @@ -1165,7 +1165,8 @@ set qry "SELECT CASE WHEN (qty - done) > 0 THEN 0 ELSE 1 END as open \ FROM projects.${pname}_theo_sex_age \ WHERE $age between min_age and max_age \ - AND upper([pg_quote $data(schedule_sex)]) = upper(sex)" + AND upper([pg_quote $data(schedule_sex)]) = upper(sex) + AND label = $data(label)" set res [::yadb::getTuple $db $qry 0] if {$res == -1} { ::yalog::error "unable to understand if callback belong to a closed quota (gender_age)" Modified: trunk/yaacs/cati.tcl =================================================================== --- trunk/yaacs/cati.tcl 2012-01-19 10:02:23 UTC (rev 2146) +++ trunk/yaacs/cati.tcl 2012-01-20 08:19:48 UTC (rev 2147) @@ -1166,7 +1166,8 @@ set qry "SELECT CASE WHEN (qty - done) > 0 THEN 0 ELSE 1 END as open \ FROM projects.${pname}_theo_sex_age \ WHERE $age between min_age and max_age \ - AND upper([pg_quote $data(schedule_sex)]) = upper(sex)" + AND upper([pg_quote $data(schedule_sex)]) = upper(sex) + AND label = $data(label)" set res [::yadb::getTuple $db $qry 0] if {$res == -1} { ::yalog::error "unable to understand if callback belong to a closed quota (gender_age)" This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <si...@us...> - 2012-01-19 10:02:34
|
Revision: 2146 http://yaacs.svn.sourceforge.net/yaacs/?rev=2146&view=rev Author: sickpig Date: 2012-01-19 10:02:23 +0000 (Thu, 19 Jan 2012) Log Message: ----------- * FIX: in rev 1927 we've committed needed DDL changes only to migration.sql and not to recrutitmen.sql this lead to error due to improper sql schema definition on a fresh yaacs installation Revision Links: -------------- http://yaacs.svn.sourceforge.net/yaacs/?rev=1927&view=rev Modified Paths: -------------- branches/external-stable/dbyaacs/recruitment.sql branches/external-trunk/dbyaacs/recruitment.sql branches/internal-stable/dbyaacs/recruitment.sql trunk/dbyaacs/recruitment.sql Modified: branches/external-stable/dbyaacs/recruitment.sql =================================================================== --- branches/external-stable/dbyaacs/recruitment.sql 2012-01-18 16:59:32 UTC (rev 2145) +++ branches/external-stable/dbyaacs/recruitment.sql 2012-01-19 10:02:23 UTC (rev 2146) @@ -13,6 +13,9 @@ txt varchar(160), tab varchar, open boolean default false, + min_score integer, + max_score integer, + free boolean, primary key (proj) ); Modified: branches/external-trunk/dbyaacs/recruitment.sql =================================================================== --- branches/external-trunk/dbyaacs/recruitment.sql 2012-01-18 16:59:32 UTC (rev 2145) +++ branches/external-trunk/dbyaacs/recruitment.sql 2012-01-19 10:02:23 UTC (rev 2146) @@ -13,6 +13,9 @@ txt varchar(160), tab varchar, open boolean default false, + min_score integer, + max_score integer, + free boolean, primary key (proj) ); Modified: branches/internal-stable/dbyaacs/recruitment.sql =================================================================== --- branches/internal-stable/dbyaacs/recruitment.sql 2012-01-18 16:59:32 UTC (rev 2145) +++ branches/internal-stable/dbyaacs/recruitment.sql 2012-01-19 10:02:23 UTC (rev 2146) @@ -13,6 +13,9 @@ txt varchar(160), tab varchar, open boolean default false, + min_score integer, + max_score integer, + free boolean, primary key (proj) ); Modified: trunk/dbyaacs/recruitment.sql =================================================================== --- trunk/dbyaacs/recruitment.sql 2012-01-18 16:59:32 UTC (rev 2145) +++ trunk/dbyaacs/recruitment.sql 2012-01-19 10:02:23 UTC (rev 2146) @@ -13,6 +13,9 @@ txt varchar(160), tab varchar, open boolean default false, + min_score integer, + max_score integer, + free boolean, primary key (proj) ); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |