Changeset 2042 for trunk/workflow


Ignore:
Timestamp:
02/22/10 16:23:36 (14 years ago)
Author:
pedroerp
Message:

Ticket #441 - Suporte a cadastro de substituições de chefia por períodos determinados.

Location:
trunk/workflow
Files:
11 edited

Legend:

Unmodified
Added
Removed
  • trunk/workflow/inc/class.bo_orgchart.inc.php

    r1245 r2042  
    524524        function listArea($params) 
    525525        { 
    526                 $result = $this->so->getArea($params['organizacao_id']); 
     526                $result = $this->so->getArea($params['organizacao_id'], $params['area_id']); 
    527527                $this->disconnect_all(); 
    528528 
     
    552552        function addArea($params) 
    553553        { 
    554                 $result = $this->so->addArea($params['centro_custo_id'], $params['organizacao_id'], $params['area_status_id'], $this->_nullReplace($params['substituto_funcionario_id']), $this->_nullReplace($params['titular_funcionario_id']), $this->_nullReplace($params['superior_area_id']), $params['sigla'], $params['descricao'], $params['ativa'], $this->_nullReplace($params['auxiliar_funcionario_id'])); 
     554                $result = $this->so->addArea($params['centro_custo_id'], $params['organizacao_id'], $params['area_status_id'], $this->_nullReplace($params['titular_funcionario_id']), $this->_nullReplace($params['superior_area_id']), $params['sigla'], $params['descricao'], $params['ativa'], $this->_nullReplace($params['auxiliar_funcionario_id'])); 
    555555                $this->disconnect_all(); 
    556556 
     
    566566        function updateArea($params) 
    567567        { 
    568                 $result = $this->so->updateArea($params['centro_custo_id'], $params['organizacao_id'], $params['area_status_id'], $this->_nullReplace($params['substituto_funcionario_id']), $this->_nullReplace($params['titular_funcionario_id']), $this->_nullReplace($params['superior_area_id']), $params['sigla'], $params['descricao'], $params['ativa'], $this->_nullReplace($params['auxiliar_funcionario_id']), $params['area_id']); 
     568                $result = $this->so->updateArea($params['centro_custo_id'], $params['organizacao_id'], $params['area_status_id'], $this->_nullReplace($params['titular_funcionario_id']), $this->_nullReplace($params['superior_area_id']), $params['sigla'], $params['descricao'], $params['ativa'], $this->_nullReplace($params['auxiliar_funcionario_id']), $params['area_id']); 
    569569                $this->disconnect_all(); 
    570570 
     
    669669                return $result; 
    670670        } 
     671 
     672        /** 
     673         * Add a substitution to an specific area 
     674         * @param array $params An array filled by the substitution parameters 
     675         * @return bool TRUE if we are successfull, FALSE otherwise 
     676         * @access public 
     677         */ 
     678        function addSubstitution( $params ) 
     679        { 
     680                $result = $this -> so -> addSubstitution( $params[ 'organizacao_id' ], $params[ 'area_id' ], $params[ 'substituto_funcionario_id' ], $params[ 'data_inicio' ], $params[ 'data_fim' ] ); 
     681                $this->disconnect_all( ); 
     682 
     683                return $result; 
     684        } 
     685 
     686        /** 
     687         * Update a substitution 
     688         * @param array $params An array filled by the substitution parameters 
     689         * @return bool TRUE if we are successfull, FALSE otherwise 
     690         * @access public 
     691         */ 
     692        function updateSubstitution( $params ) 
     693        { 
     694                $result = $this -> so -> updateSubstitution( $params[ 'organizacao_id' ], $params[ 'area_id' ], $params[ 'substituto_funcionario_id' ], $params[ 'data_inicio' ], $params[ 'data_fim' ], $params['substituicao_id'] ); 
     695                $this->disconnect_all( ); 
     696 
     697                return $result; 
     698        } 
     699 
     700        /** 
     701         * List the substitutions for a given area. 
     702         * @param array $params An array containing the areaID 
     703         * @return array Substitution's list 
     704         * @access public 
     705         */ 
     706        function listSubstitution( $params ) 
     707        { 
     708                $result = $this -> so -> getSubstitutions( $params['organizacao_id'], $params[ 'area_id' ] ); 
     709                $this -> disconnect_all( ); 
     710 
     711                return $result; 
     712        } 
     713 
     714        /** 
     715         * Remove a substitution 
     716         * @param array $params An array containing a substitutionID 
     717         * @return bool 
     718         * @access public 
     719         */ 
     720        function removeSubstitution( $params ) 
     721        { 
     722                $result = $this -> so -> removeSubstitution( $params['organizacao_id'], $params[ 'substituicao_id' ] ); 
     723                $this -> disconnect_all( ); 
     724 
     725                return $result; 
     726        } 
    671727} 
    672728?> 
  • trunk/workflow/inc/class.so_orgchart.inc.php

    r1446 r2042  
    739739                $unifiedResult = array(); 
    740740 
     741                /* FIXME - this piece of code should use the new CacheLdap class */ 
    741742                if (is_numeric($searchTerm)) 
    742743                { 
     
    890891         * @access public 
    891892         */ 
    892         function getArea($organizationID) 
     893        function getArea($organizationID, $areaID = -1) 
    893894        { 
    894895                $this->_checkAccess($organizationID); 
    895896 
    896897                $output = array(); 
    897  
    898                 $query = "SELECT area_id, centro_custo_id, organizacao_id, area_status_id, substituto_funcionario_id, titular_funcionario_id, superior_area_id, sigla, descricao, ativa, auxiliar_funcionario_id FROM area WHERE organizacao_id = ? ORDER BY sigla"; 
    899                 $result = $this->db->query($query, array($organizationID)); 
     898                $values = array($organizationID); 
     899 
     900                // if we are looking for a specific area 
     901                $area_condition = ""; 
     902                if (($areaID != -1) && !empty($areaID)) { 
     903                        $area_condition = " AND area_id = ? "; 
     904                        $values[]= $areaID; 
     905                } 
     906 
     907                $query = "SELECT area_id, centro_custo_id, organizacao_id, area_status_id, titular_funcionario_id, superior_area_id, sigla, descricao, ativa, auxiliar_funcionario_id FROM area WHERE organizacao_id = ? " . $area_condition . " ORDER BY sigla"; 
     908                $result = $this->db->query($query, $values); 
    900909                $this->_checkError($result); 
    901910 
     
    958967         * @param int $organizationID O ID da organização. 
    959968         * @param int $areaStatusID O ID do status da área. 
    960          * @param int $backupEmployeeID O ID do funcionário que está substituindo o superior da área. 
    961969         * @param int $supervisorID O ID do funcionário que é superior da área. 
    962970         * @param int $superiorAreaID O ID da área que é superior a que está sendo adicionada (NULL caso não possua área superior). 
     
    968976         * @access public 
    969977         */ 
    970         function addArea($costCenterID, $organizationID, $areaStatusID, $backupEmployeeID, $supervisorID, $superiorAreaID, $acronym, $description, $active, $assistantID) 
    971         { 
    972                 $this->_checkAccess($organizationID); 
    973  
    974                 $checkEmployees = array($backupEmployeeID, $supervisorID, $assistantID); 
     978        function addArea($costCenterID, $organizationID, $areaStatusID, $supervisorID, $superiorAreaID, $acronym, $description, $active, $assistantID) 
     979        { 
     980                $this->_checkAccess($organizationID); 
     981 
     982                $checkEmployees = array($supervisorID, $assistantID); 
    975983                $errors = array(); 
    976984                foreach ($checkEmployees as $checkEmployee) 
     
    991999                } 
    9921000 
    993                 $query = "INSERT INTO area(centro_custo_id, organizacao_id, area_status_id, substituto_funcionario_id, titular_funcionario_id, superior_area_id, sigla, descricao, ativa, auxiliar_funcionario_id) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)"; 
    994                 $result = $this->db->query($query, array($costCenterID, $organizationID, $areaStatusID, $backupEmployeeID, $supervisorID, $superiorAreaID, $acronym, $description, $active, $assistantID)); 
     1001                $query = "INSERT INTO area(centro_custo_id, organizacao_id, area_status_id, titular_funcionario_id, superior_area_id, sigla, descricao, ativa, auxiliar_funcionario_id) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)"; 
     1002                $result = $this->db->query($query, array($costCenterID, $organizationID, $areaStatusID, $supervisorID, $superiorAreaID, $acronym, $description, $active, $assistantID)); 
    9951003                $this->_checkError($result); 
    9961004 
     
    10031011         * @param int $organizationID O ID da organização. 
    10041012         * @param int $areaStatusID O ID do status da área. 
    1005          * @param int $backupEmployeeID O ID do funcionário que está substituindo o superior da área. 
    10061013         * @param int $supervisorID O ID do funcionário que é superior da área. 
    10071014         * @param int $superiorAreaID O ID da área que é superior a que está sendo atualizada (NULL caso não possua área superior). 
     
    10141021         * @access public 
    10151022         */ 
    1016         function updateArea($costCenterID, $organizationID, $areaStatusID, $backupEmployeeID, $supervisorID, $superiorAreaID, $acronym, $description, $active, $assistantID, $areaID) 
    1017         { 
    1018                 $this->_checkAccess($organizationID); 
    1019  
    1020                 $checkEmployees = array($backupEmployeeID, $supervisorID, $assistantID); 
     1023        function updateArea($costCenterID, $organizationID, $areaStatusID, $supervisorID, $superiorAreaID, $acronym, $description, $active, $assistantID, $areaID) 
     1024        { 
     1025                $this->_checkAccess($organizationID); 
     1026 
     1027                $checkEmployees = array($supervisorID, $assistantID); 
    10211028                $errors = array(); 
    10221029                foreach ($checkEmployees as $checkEmployee) 
     
    10331040                { 
    10341041                        $errors[] = '-----------------'; 
    1035                         $errors[] = 'Somente funcionários que estão vinculados a alguma área podem ser colocados na posição de titular, substituto ou auxiliar administrativo.'; 
     1042                        $errors[] = 'Somente funcionários que estão vinculados a alguma área podem ser colocados na posição de titular ou auxiliar administrativo.'; 
    10361043                        $this->endExecution($errors); 
    10371044                } 
    10381045 
    1039                 $query = "UPDATE area SET centro_custo_id = ?, organizacao_id = ?, area_status_id = ?, substituto_funcionario_id = ?, titular_funcionario_id = ?, superior_area_id = ?, sigla = ?, descricao = ?, ativa = ?, auxiliar_funcionario_id = ? WHERE (area_id = ?)"; 
    1040                 $result = $this->db->query($query, array($costCenterID, $organizationID, $areaStatusID, $backupEmployeeID, $supervisorID, $superiorAreaID, $acronym, $description, $active, $assistantID, $areaID)); 
     1046                $query = "UPDATE area SET centro_custo_id = ?, organizacao_id = ?, area_status_id = ?, titular_funcionario_id = ?, superior_area_id = ?, sigla = ?, descricao = ?, ativa = ?, auxiliar_funcionario_id = ? WHERE (area_id = ?)"; 
     1047                $result = $this->db->query($query, array($costCenterID, $organizationID, $areaStatusID, $supervisorID, $superiorAreaID, $acronym, $description, $active, $assistantID, $areaID)); 
    10411048                $this->_checkError($result); 
    10421049 
     
    10801087 
    10811088                $cachedLDAP = $GLOBALS['workflow']['factory']->newInstance('CachedLDAP'); 
     1089 
     1090                /* here we need fresh information. Let's access ldap first */ 
    10821091                $cachedLDAP->setOperationMode($cachedLDAP->OPERATION_MODE_LDAP_DATABASE); 
    10831092                $employeeEntry = $cachedLDAP->getEntryByID($employeeID); 
     
    13571366                return ( ( $result === false ) ? false : true ); 
    13581367        } 
     1368 
     1369        /** 
     1370         * Validate start and end dates for a substitution 
     1371         * @param int $areaID Area's ID. 
     1372         * @param string $date_start Substitution's start date. 
     1373         * @param string $date_start Substitution's end date. 
     1374         * @return bool 
     1375         * @access private 
     1376         */ 
     1377        function validateSubstitutionDates($areaID, $date_start, $date_end, $substitutionID = -1) 
     1378        { 
     1379                /* TODO 
     1380                * I'm not supose to be here.. (date validations speaking) 
     1381                * move me to some validation class! 
     1382                */  
     1383 
     1384                /* validating dates */ 
     1385                $date_pattern = '/^(0[1-9]|[12][0-9]|3[01])\/(0[1-9]|1[0-2])\/[12][0-9]{3}$/'; 
     1386 
     1387                if (!preg_match($date_pattern, $date_start)) 
     1388                        $this->endExecution("Formato inválido para data de início."); 
     1389                if (!preg_match($date_pattern, $date_end)) 
     1390                        $this->endExecution("Formato inválido para data de término. "); 
     1391 
     1392                $date_start_arr = explode('/', $date_start); 
     1393                $date_end_arr = explode('/', $date_end); 
     1394 
     1395                /* is it a gregorian date? */ 
     1396                if (!checkdate($date_start_arr[1], $date_start_arr[0], $date_start_arr[2])) 
     1397                        $this->endExecution("Data de início inválida."); 
     1398                if (!checkdate($date_end_arr[1], $date_end_arr[0], $date_end_arr[2])) 
     1399                        $this->endExecution("Data de término inválida. "); 
     1400 
     1401                /* is date_end greater then date_start? */ 
     1402                if (mktime(0,0,0, $date_start_arr[1], $date_start_arr[0], $date_start_arr[2]) >= mktime(0,0,0, $date_end_arr[1], $date_end_arr[0], $date_end_arr[2])) 
     1403                        $this->endExecution("A data de término deve ser maior que a data de início."); 
     1404 
     1405                /* preparing dates to database */ 
     1406                $date_start = implode('-', array_reverse($date_start_arr)); 
     1407                $date_end = implode('-', array_reverse($date_end_arr)); 
     1408 
     1409                /* checking if there is a substitution in conflict with these dates */ 
     1410                $query  = "SELECT * FROM substituicao WHERE "; 
     1411                $query .= "     area_id = ? "; 
     1412                $query .= " AND "; 
     1413                $query .= "     substituicao_id != ? "; 
     1414                $query .= " AND "; 
     1415                $query .= "     ("; 
     1416                $query .= "             (? BETWEEN data_inicio AND data_fim) "; 
     1417                $query .= "     OR "; 
     1418                $query .= "             (? BETWEEN data_inicio AND data_fim)"; 
     1419                $query .= "     OR "; 
     1420                $query .= "             (data_inicio BETWEEN ? AND ?)"; 
     1421                $query .= "     ) "; 
     1422 
     1423                // raise an error if there is any record 
     1424                if ($row = $this->db->query($query, array( $areaID, $substitutionID, $date_start, $date_end, $date_start, $date_end ))->fetchRow()) 
     1425                { 
     1426                        $row['data_inicio'] = implode('/', array_reverse(explode('-', $row['data_inicio']))); 
     1427                        $row['data_fim'] = implode('/', array_reverse(explode('-', $row['data_fim']))); 
     1428                        $this->endExecution('Já existe uma substituição no período de '. $row['data_inicio'] . ' a ' . $row['data_fim']); 
     1429                } 
     1430                return true; 
     1431        } 
     1432 
     1433        /** 
     1434         * Add a substitution. 
     1435         * @param int $organizationID Organization's ID. 
     1436         * @param int $areaID Area's ID. 
     1437         * @param int $substituteID Substitute's employee ID. 
     1438         * @param string $date_start Substitution's start date. 
     1439         * @param string $date_start Substitution's end date. 
     1440         * @return bool 
     1441         * @access public 
     1442         */ 
     1443        function addSubstitution( $organizationID, $areaID, $substituteID, $date_start, $date_end ) 
     1444        { 
     1445                $this->_checkAccess( $organizationID ); 
     1446 
     1447                if (!$this->validateSubstitutionDates($areaID, $date_start, $date_end)) 
     1448                        return false; 
     1449 
     1450                /* formating dates */ 
     1451                $date_start = implode('-', array_reverse(explode('/', $date_start))); 
     1452                $date_end = implode('-', array_reverse(explode('/', $date_end))); 
     1453 
     1454                $query = "INSERT INTO substituicao (area_id, funcionario_id, data_inicio, data_fim) VALUES (?, ?, ?, ?)"; 
     1455                $result = $this -> db -> query( $query, array( $areaID, $substituteID, $date_start, $date_end ) ); 
     1456                $this->_checkError( $result ); 
     1457                 
     1458                return ( ( $result === false ) ? false : true ); 
     1459        } 
     1460 
     1461        /** 
     1462         * Update a substitution. 
     1463         * @param int $organizationID Organization's ID. 
     1464         * @param int $areaID Area's ID. 
     1465         * @param int $substituteID Substitute's employee ID. 
     1466         * @param string $date_start Substitution's start date. 
     1467         * @param string $date_start Substitution's end date. 
     1468         * @return bool 
     1469         * @access public 
     1470         */ 
     1471        function updateSubstitution( $organizationID, $areaID, $substituteID, $date_start, $date_end, $substitutionID ) 
     1472        { 
     1473                $this->_checkAccess( $organizationID ); 
     1474 
     1475                if (!$this->validateSubstitutionDates($areaID, $date_start, $date_end, $substitutionID)) 
     1476                        return false; 
     1477 
     1478                /* formating dates */ 
     1479                $date_start = implode('-', array_reverse(explode('/', $date_start))); 
     1480                $date_end = implode('-', array_reverse(explode('/', $date_end))); 
     1481 
     1482                $query = "UPDATE substituicao SET funcionario_id = ?, data_inicio = ?, data_fim = ? WHERE substituicao_id = ?"; 
     1483                $result = $this -> db -> query( $query, array( $substituteID, $date_start, $date_end, $substitutionID ) ); 
     1484                $this->_checkError( $result ); 
     1485                 
     1486                return ( ( $result === false ) ? false : true ); 
     1487        } 
     1488 
     1489        /** 
     1490         * List all the substituions for a given area 
     1491         * @return array List of the substitutions 
     1492         * @access public 
     1493         */ 
     1494        function getSubstitutions( $organizationID, $areaID ) 
     1495        { 
     1496                $this -> _checkAccess( $organizationID ); 
     1497 
     1498                /* we must join area table to get organizacao_id */ 
     1499                $query = "SELECT s.*, a.organizacao_id FROM substituicao s INNER JOIN area a USING(area_id) WHERE area_id = ? ORDER BY data_inicio DESC"; 
     1500                $result = $this -> db -> query( $query, array( $areaID ) ); 
     1501                $this -> _checkError( $result ); 
     1502 
     1503                /* we must query ldap to get full user names. In workflow db we just store uids */ 
     1504                $cachedLDAP = $GLOBALS['workflow']['factory']->newInstance('CachedLDAP'); 
     1505 
     1506                $cachedLDAP->getEntryByID(); 
     1507 
     1508                $output = $result->GetArray(-1); 
     1509                for ($i = 0; $i < count($output); $i++) { 
     1510                        for ($j = 0; $j < $result->_numOfFields; $j++) 
     1511                                unset($output[$i][$j]); 
     1512 
     1513                        /* including substitute full name */ 
     1514                        $ldap_result = $cachedLDAP->getEntryByID($output[$i]['funcionario_id']); 
     1515                        $output[$i]['substituto_funcionario_id'] = $output[$i]['funcionario_id']; 
     1516                        $output[$i]['substituto_funcionario_id_desc'] = $ldap_result['cn']; 
     1517 
     1518                        /* formating dates */ 
     1519                        $output[$i]['data_inicio'] = implode('/', array_reverse(explode('-', $output[$i]['data_inicio']))); 
     1520                        $output[$i]['data_fim'] = implode('/', array_reverse(explode('-', $output[$i]['data_fim']))); 
     1521                } 
     1522                return $output; 
     1523        } 
     1524 
     1525        /** 
     1526         * Remove a substitution 
     1527         * @param int $organizationID Organization's ID 
     1528         * @param int $telephoneID Substitution's ID 
     1529         * @return bool  
     1530         * @access public 
     1531         */ 
     1532        function removeSubstitution( $organizationID, $substitutionID ) 
     1533        { 
     1534                $this->_checkAccess( $organizationID ); 
     1535 
     1536                $query = "DELETE FROM substituicao WHERE substituicao_id = ?"; 
     1537                $result = $this -> db -> query( $query, array( $substitutionID ) ); 
     1538                $this -> _checkError( $result ); 
     1539 
     1540                return ( ( $result === false ) ? false : true ); 
     1541        } 
    13591542} 
    13601543?> 
  • trunk/workflow/inc/class.so_userinterface.inc.php

    r1470 r2042  
    509509        function getAreaWithSubtituteBoss( $organizationID ) 
    510510        { 
    511                 $result = $this -> db -> query( "SELECT sigla as area, titular_funcionario_id as titular, substituto_funcionario_id as substituto FROM area WHERE (organizacao_id = ?) and substituto_funcionario_id is not null ORDER BY area", array( $organizationID ) ); 
     511                $result = $this -> db -> query( "SELECT a.sigla as area, a.titular_funcionario_id as titular, s.funcionario_id as substituto, s.data_inicio, s.data_fim FROM area a INNER JOIN substituicao s USING (area_id) WHERE (organizacao_id = ?) and CURRENT_DATE BETWEEN data_inicio AND data_fim ORDER BY area", array( $organizationID ) ); 
    512512 
    513513                $cachedLDAP = $GLOBALS[ 'workflow' ][ 'factory' ] -> newInstance( 'CachedLDAP' ); 
     
    527527                        if ( $entry && ( ! is_null( $entry[ 'cn' ] ) ) ) 
    528528                                $output[ $i ][ 'substituto' ] = $entry[ 'cn' ]; 
     529 
     530                        $output[$i]['data_inicio'] = implode('/', array_reverse(explode('-', $output[$i]['data_inicio']))); 
     531                        $output[$i]['data_fim'] = implode('/', array_reverse(explode('-', $output[$i]['data_fim']))); 
    529532                } 
    530533 
  • trunk/workflow/inc/local/classes/class.wf_orgchart.php

    r1320 r2042  
    133133        function getOrganizationAreas($organizationID) 
    134134        { 
    135                 $query = "SELECT organizacao_id, area_id, area_status_id, " . 
    136                                  "       superior_area_id, centro_custo_id, titular_funcionario_id," . 
    137                                  "       substituto_funcionario_id, sigla, descricao, ativa, auxiliar_funcionario_id" . 
    138                                  "  FROM area" . 
    139                                  " WHERE (organizacao_id = ?)" . 
    140                                  " ORDER BY sigla, descricao"; 
     135                $query = "SELECT a.organizacao_id, a.area_id, a.area_status_id, " . 
     136                                 "       a.superior_area_id, a.centro_custo_id, a.titular_funcionario_id, " . 
     137                                 "       a.sigla, a.descricao, a.ativa, a.auxiliar_funcionario_id, " . 
     138                                 "               s.funcionario_id as substituto_funcionario_id " . 
     139                                 " FROM area a " . 
     140                                 "  LEFT OUTER JOIN substituicao s " . 
     141                                 "  USING(area_id) " . 
     142                                 " WHERE " .  
     143                                 "      (a.organizacao_id = ?) " . 
     144                                 " AND " .  
     145                                 "      ((CURRENT_DATE BETWEEN s.data_inicio AND s.data_fim) " . 
     146                                 "      OR " .  
     147                                 "      (s.substituicao_id is null)) " . 
     148                                 " ORDER BY a.sigla, a.descricao"; 
    141149 
    142150                $result = $this->db->query($query, array($organizationID)); 
     
    320328        function getArea($areaID) 
    321329        { 
    322                 $query = "SELECT organizacao_id, area_id, area_status_id, " . 
    323                                  "       superior_area_id, centro_custo_id, titular_funcionario_id," . 
    324                                  "       substituto_funcionario_id, sigla, descricao, ativa, auxiliar_funcionario_id" . 
    325                                  "  FROM area" . 
    326                                  " WHERE (area_id = ?)"; 
     330                $query = "SELECT a.organizacao_id, a.area_id, a.area_status_id, " . 
     331                                 "       a.superior_area_id, a.centro_custo_id, a.titular_funcionario_id, " . 
     332                                 "       a.sigla, a.descricao, a.ativa, a.auxiliar_funcionario_id, " . 
     333                                 "               s.funcionario_id as substituto_funcionario_id " . 
     334                                 " FROM area a " . 
     335                                 "  LEFT OUTER JOIN substituicao s " . 
     336                                 "  USING(area_id) " . 
     337                                 " WHERE " .  
     338                                 "      (a.area_id = ?) " . 
     339                                 " AND " .  
     340                                 "      ((CURRENT_DATE BETWEEN s.data_inicio AND s.data_fim) " . 
     341                                 "      OR " .  
     342                                 "      (s.substituicao_id is null)) " . 
     343                                 " ORDER BY a.sigla, a.descricao"; 
     344 
    327345 
    328346                $result = $this->db->query($query, array($areaID)); 
     
    357375        function getAreaByName($acronym, $organizationID = 1) 
    358376        { 
    359                 $query = "SELECT organizacao_id, area_id, area_status_id, " . 
    360                                  "       superior_area_id, centro_custo_id, titular_funcionario_id," . 
    361                                  "       substituto_funcionario_id, sigla, descricao, ativa, auxiliar_funcionario_id" . 
    362                                  "  FROM area" . 
    363                                  " WHERE (UPPER(sigla) = UPPER(?) and (organizacao_id = ?))"; 
     377                $query = "SELECT a.organizacao_id, a.area_id, a.area_status_id, " . 
     378                                 "       a.superior_area_id, a.centro_custo_id, a.titular_funcionario_id, " . 
     379                                 "       a.sigla, a.descricao, a.ativa, a.auxiliar_funcionario_id, " . 
     380                                 "               s.funcionario_id as substituto_funcionario_id " . 
     381                                 " FROM area a " . 
     382                                 "  LEFT OUTER JOIN substituicao s " . 
     383                                 "  USING(area_id) " . 
     384                                 " WHERE " .  
     385                                 "      (UPPER(a.sigla) = UPPER(?)) " . 
     386                                 " AND " .  
     387                                 "      (a.organizacao_id = ?) " . 
     388                                 " AND " .  
     389                                 "      ((CURRENT_DATE BETWEEN s.data_inicio AND s.data_fim) " . 
     390                                 "      OR " .  
     391                                 "      (s.substituicao_id is null)) " . 
     392                                 " ORDER BY a.sigla, a.descricao"; 
     393 
    364394 
    365395                $result = $this->db->query($query, array($acronym, (int) $organizationID)); 
     
    395425                $result = array(); 
    396426 
    397                 $query = "SELECT organizacao_id, area_id, area_status_id, " . 
    398                                  "       superior_area_id, centro_custo_id, titular_funcionario_id," . 
    399                                  "       substituto_funcionario_id, sigla, descricao, ativa, auxiliar_funcionario_id" . 
    400                                  "  FROM area" . 
    401                                  " WHERE (area_status_id = ?)"; 
     427                $query = "SELECT a.organizacao_id, a.area_id, a.area_status_id, " . 
     428                                 "       a.superior_area_id, a.centro_custo_id, a.titular_funcionario_id, " . 
     429                                 "       a.sigla, a.descricao, a.ativa, a.auxiliar_funcionario_id, " . 
     430                                 "               s.funcionario_id as substituto_funcionario_id " . 
     431                                 " FROM area a " . 
     432                                 "  LEFT OUTER JOIN substituicao s " . 
     433                                 "  USING(area_id) " . 
     434                                 " WHERE " .  
     435                                 "      (a.area_status_id = ?) " . 
     436                                 " AND " .  
     437                                 "      ((CURRENT_DATE BETWEEN s.data_inicio AND s.data_fim) " . 
     438                                 "      OR " .  
     439                                 "      (s.substituicao_id is null)) " . 
     440                                 " ORDER BY a.sigla, a.descricao"; 
     441 
     442 
    402443 
    403444                $result = $this->db->query($query, array($areaStatusID)); 
     
    436477                $areas = implode(', ', $areaIDs); 
    437478 
    438                 $query = "SELECT organizacao_id, area_id, area_status_id, " . 
    439                                  "       superior_area_id, centro_custo_id, titular_funcionario_id," . 
    440                                  "       substituto_funcionario_id, sigla, descricao, ativa, auxiliar_funcionario_id" . 
    441                                  "  FROM area" . 
    442                                  " WHERE area_id IN ($areas)" . 
    443                                  " ORDER BY sigla, descricao"; 
     479                $query = "SELECT a.organizacao_id, a.area_id, a.area_status_id, " . 
     480                                 "       a.superior_area_id, a.centro_custo_id, a.titular_funcionario_id, " . 
     481                                 "       a.sigla, a.descricao, a.ativa, a.auxiliar_funcionario_id, " . 
     482                                 "               s.funcionario_id as substituto_funcionario_id " . 
     483                                 " FROM area a " . 
     484                                 "  LEFT OUTER JOIN substituicao s " . 
     485                                 "  USING(area_id) " . 
     486                                 " WHERE " .  
     487                                 "      (a.area_id IN ($areas)) " . 
     488                                 " AND " .  
     489                                 "      ((CURRENT_DATE BETWEEN s.data_inicio AND s.data_fim) " . 
     490                                 "      OR " .  
     491                                 "      (s.substituicao_id is null)) " . 
     492                                 " ORDER BY a.sigla, a.descricao"; 
    444493 
    445494                // A execução é realizada sem o segundo parâmetro pois este não pode estar entre aspas 
     
    506555        function getSubAreasByParentAreaID($parentAreaID, $onlyActiveAreas = false) 
    507556        { 
    508                 $query = "SELECT organizacao_id, area_id, area_status_id, " . 
    509                                  "       superior_area_id, centro_custo_id, titular_funcionario_id," . 
    510                                  "       substituto_funcionario_id, sigla, descricao, ativa, auxiliar_funcionario_id" . 
    511                                  "  FROM area" . 
    512                                  " WHERE superior_area_id = ?"; 
     557                $query = "SELECT a.organizacao_id, a.area_id, a.area_status_id, " . 
     558                                 "       a.superior_area_id, a.centro_custo_id, a.titular_funcionario_id, " . 
     559                                 "       a.sigla, a.descricao, a.ativa, a.auxiliar_funcionario_id, " . 
     560                                 "               s.funcionario_id as substituto_funcionario_id " . 
     561                                 " FROM area a " . 
     562                                 "  LEFT OUTER JOIN substituicao s " . 
     563                                 "  USING(area_id) " . 
     564                                 " WHERE " .  
     565                                 "      (a.superior_area_id = ?) " . 
     566                                 " AND " .  
     567                                 "      ((CURRENT_DATE BETWEEN s.data_inicio AND s.data_fim) " . 
     568                                 "      OR " .  
     569                                 "      (s.substituicao_id is null)) "; 
     570 
    513571 
    514572                if ($onlyActiveAreas){ 
    515573                        $query .= " AND ativa = 'S'"; 
    516574                } 
    517                 $query .= " ORDER BY sigla, descricao"; 
     575                $query .= " ORDER BY a.sigla, a.descricao"; 
    518576 
    519577                $result = $this->db->query($query, array($parentAreaID)); 
  • trunk/workflow/js/jscode/common_functions.js

    r795 r2042  
    9090        return false; 
    9191} 
     92 
     93function formatDateField(e, obj) 
     94{ 
     95        // assuring it works on IE 
     96        var e = window.event || e; 
     97        var code = e.charCode || e.keyCode; 
     98         
     99        switch (code) { 
     100                case (8): // backspace 
     101                case (9): // tab 
     102                case (35): // end 
     103                case (36): // home 
     104                case (37): // left arrow 
     105                case (39): // right arrow 
     106                case (46): // delete 
     107                        return true; 
     108        } 
     109 
     110        if (obj.value.length == 2) 
     111                obj.value += '/'; 
     112        else if (obj.value.length == 5) 
     113                obj.value += '/'; 
     114        else if (obj.value.length >= 10) 
     115                return false; 
     116 
     117        // just numbers! 
     118        return ((code >= 48) && (code <= 57))? true : false; 
     119} 
  • trunk/workflow/js/orgchart/organization.js

    r1279 r2042  
    169169                        if (data.length == 0) 
    170170                        { 
    171                                 displayArea.innerHTML += '<br/><br/><center><strong>Nenhum registro encontrado</strong></center>'; 
     171                                //displayArea.innerHTML += '<br/><br/><center><strong>Nenhum registro encontrado</strong></center>'; 
     172                                elem = document.createElement('div'); 
     173                                elem.id = this.name.capitalize() + 'List'; 
     174                                elem.innerHTML = '<br/><br/><center><strong>Nenhum registro encontrado</strong></center>'; 
     175                                displayArea.appendChild(elem); 
    172176                                return true; 
    173177                        } 
     
    369373Object.extend(objTelephones, CadastroTelefone); 
    370374 
     375var CadastroSubstituto = 
     376{ 
     377        name: 'substitution', 
     378        required: new Array('organizacao_id', 'area_id', 'descricao', 'titular_funcionario_id', 'substituto_funcionario_id', 'data_inicio', 'data_fim'), 
     379        tableHeader: {'substituto_funcionario_id_desc': 'Nome', 'data_inicio': 'Data de início', 'data_fim': 'Data de término'}, 
     380        combo: {} 
     381}; 
     382var objSubstitution = new CadastroAjax(); 
     383Object.extend(objSubstitution, CadastroSubstituto); 
     384 
     385 
    371386function createOrganizationLayout(organizationID, organizationDiv) 
    372387{ 
     
    397412        content += '<option onclick="loadAddEmployeeUI(' + organizationID  + ');" class="lbOn">Funcionários</option>' 
    398413        content += '<option onclick="loadAddTelephoneUI(' + organizationID  + ');" class="lbOn">Telefones</option>' 
     414        content += '<option onclick="loadAddSubstitutionUI(' + organizationID  + ');" class="lbOn">Substituições</option>' 
    399415        content += '</select></li>'; 
    400416        content += '<li><a><input type="text" name="search_term" id="search_term" onkeypress="if (((window.Event) ? event.which : event.keyCode) == 13) $(\'search_span_' + organizationID  + '\').onclick(); return true;" /> <span id="search_span_' + organizationID + '" onclick="tmp = $$(\'div#orgchartAreas_' + organizationID + ' a.destaque\'); if (tmp[0]) tmp[0].removeClassName(\'destaque\'); searchEmployee(' + organizationID + ', $(\'orgchartEmployees_' + organizationID + '\')); return false;">busca</span></a></li>'; 
     
    745761        content += ' <a href="javascript:void(0)" onclick="$(\'titular_funcionario_id\').value=\'\'; $(\'titular_funcionario_id_desc\').value=\'\'; return false;"><img border="0" width="16" height="16" src="workflow/templateFile.php?file=images/delete_user.png" /></a>'; 
    746762        content += '</td></tr>'; 
    747         content += '<tr><td><label for="substituto_funcionario_id">Substituto</label></td><td>'; 
    748         content += '<input type="hidden" name="substituto_funcionario_id" id="substituto_funcionario_id" value="" />'; 
    749         content += '<input type="input" name="substituto_funcionario_id_desc" id="substituto_funcionario_id_desc" value="" readonly="true" size="40" />'; 
    750         content += '<a href="javascript:void(0)" onclick="openParticipants(\'substituto_funcionario_id\', \'uid=1&hidegroups=1\');"><img border="0" width="16" height="16" src="workflow/templateFile.php?file=images/add_user.png" /></a>'; 
    751         content += ' <a href="javascript:void(0)" onclick="$(\'substituto_funcionario_id\').value=\'\'; $(\'substituto_funcionario_id_desc\').value=\'\'; return false;"><img border="0" width="16" height="16" src="workflow/templateFile.php?file=images/delete_user.png" /></a>'; 
    752         content += '</td></tr>'; 
    753763        content += '<tr><td><label for="auxiliar_funcionario_id">Auxiliar Administrativo</label></td><td>'; 
    754764        content += '<input type="hidden" name="auxiliar_funcionario_id" id="auxiliar_funcionario_id" value="" />'; 
     
    808818} 
    809819 
     820 
     821function loadAddSubstitutionUI(organizationID) 
     822{ 
     823        var area_id = 'combo_area'; 
     824        var content; 
     825 
     826        content  = '<h2 id="modalTitle">Adicionar Substituição</h2>'; 
     827        content += '<form name="orgchartForm" id="orgchartForm">'; 
     828        content += '<input type="hidden" name="organizacao_id" id="organizacao_id" value="' + organizationID + '" />'; 
     829        content += "<table>"; 
     830        content += '<tr><td><label for="area_id">Sigla</label>'; 
     831        content += '<input type="hidden" name="area_id" id="area_id" value="" />'; 
     832        content += '</td><td id="comboArea"><i>carregando</i></td></tr>'; 
     833        content += '<tr><td><label for="descricao">Nome</label></td><td><input type="text" name="descricao" id="descricao" readonly="true" size="40" /></td></tr>'; 
     834        content += '<tr><td><label for="titular_funcionario_id">Titular</label></td><td>'; 
     835        content += '<input type="hidden" name="titular_funcionario_id" id="titular_funcionario_id" value="" readonly="true" />'; 
     836        content += '<input type="input" name="titular_funcionario_id_desc" id="titular_funcionario_id_desc" value="" readonly="true" size="40" />'; 
     837        content += '</td></tr>'; 
     838        content += '<tr><td><label for="substituto_funcionario_id">Substituto</label></td><td>'; 
     839        content += '<input type="hidden" name="substituto_funcionario_id" id="substituto_funcionario_id" value="" />'; 
     840        content += '<input type="input" name="substituto_funcionario_id_desc" id="substituto_funcionario_id_desc" value="" readonly="true" size="40" />'; 
     841        content += '<a href="javascript:void(0)" onclick="openParticipants(\'substituto_funcionario_id\', \'uid=1&hidegroups=1\');"><img border="0" width="16" height="16" src="workflow/templateFile.php?file=images/add_user.png" /></a>'; 
     842        content += ' <a href="javascript:void(0)" onclick="$(\'substituto_funcionario_id\').value=\'\'; $(\'substituto_funcionario_id_desc\').value=\'\'; return false;"><img border="0" width="16" height="16" src="workflow/templateFile.php?file=images/delete_user.png" /></a>'; 
     843        content += '</td></tr>'; 
     844        content += '<tr><td><label for="data_inicio">Data de início</label></td><td><input type="text" name="data_inicio" id="data_inicio" size="15" onkeypress="return formatDateField(event, this);" /></td></tr>'; 
     845        content += '<tr><td><label for="data_fim">Data de término</label></td><td><input type="text" name="data_fim" id="data_fim" size="15" onkeypress="return formatDateField(event, this);"/></td></tr>'; 
     846        content += "</table>"; 
     847        content += '</form>'; 
     848        content += '<button id="inserir" onclick="objSubstitution.add(); return false;">Inserir</button>'; 
     849        content += '<button onclick="valid.deactivate(); return false;">Cancelar</button>'; 
     850 
     851        var divLB = $('lbContent'); 
     852        divLB.innerHTML = content; 
     853 
     854        // function that must be called after loading areas on the combobox 
     855        var areas_callback = function () { 
     856 
     857                // every change on the combo box must query for area information 
     858                $(area_id).onchange = function () { 
     859                        if ($('SubstitutionList')) 
     860                                $('SubstitutionList').remove(); 
     861                         
     862                        var info_callback = function (data) { 
     863 
     864                                // just to be sure 
     865                                if (!data[0]) { 
     866                                        alert("Não foi possível encontrar os dados."); 
     867                                } 
     868 
     869                                // we received an empty response. Let's reset the form. 
     870                                if ((data[0]['area_id'] == '') || (data[0]['area_id'] == null)) { 
     871                                        alert('RESET'); 
     872                                        $('area_id').value = ''; 
     873                                        $('descricao').value = ''; 
     874                                        $('titular_funcionario_id').value = ''; 
     875                                        $('titular_funcionario_id_desc').value = ''; 
     876                                } 
     877                                // fill the form 
     878                                else { 
     879                                        $('area_id').value = data[0]['area_id']; 
     880                                        $('descricao').value = data[0]['descricao']; 
     881                                        $('titular_funcionario_id').value = data[0]['titular_funcionario_id']; 
     882                                        $('titular_funcionario_id_desc').value = data[0]['titular_funcionario_id_desc']; 
     883                                } 
     884 
     885                                // get the list of substitutions 
     886                                objSubstitution.generateUpdateTable({'organization_id': organizationID, 'area_id': $(area_id).value}, divLB); 
     887                        } 
     888                        objArea.list(info_callback, {'organizacao_id': organizationID, 'area_id': $(area_id).value}); 
     889 
     890                } 
     891        } 
     892        objArea.generateComboBox({'organizacao_id': organizationID}, $('comboArea'), true, area_id, areas_callback); 
     893} 
     894 
    810895function getEmployeeInfoTimer(e, employeeID, organizationID) 
    811896{ 
  • trunk/workflow/js/orgchart/utils.js

    r795 r2042  
    33        /*** constrói a tabela ***/ 
    44        var table = document.createElement("TABLE"); 
     5 
     6        table.style.marginTop = "10px"; 
    57 
    68        /* configura a tabela */ 
  • trunk/workflow/js/userinterface/orgchart.js

    r1452 r2042  
    171171        var content = '<center><h2>Substituição de Chefia</h2></center>'; 
    172172        content += '<table class="employeeList">'; 
    173         content += '<tr><th>Área</th><th>Titular</th><th>Substituto</th></tr>'; 
     173        content += '<tr><th>Área</th><th>Titular</th><th>Substituto</th><th>Data de início</th><th>Data de término</th></tr>'; 
    174174        var current; 
    175175        for (var i = 0; i < data.length; i++) 
     
    180180                content += '<td>' + current['titular'] + '</td>'; 
    181181                content += '<td>' + current['substituto'] + '</td>'; 
     182                content += '<td>' + current['data_inicio'] + '</td>'; 
     183                content += '<td>' + current['data_fim'] + '</td>'; 
    182184                content += '</tr>'; 
    183185        } 
  • trunk/workflow/setup/default_records.inc.php

    r1980 r2042  
    8686        $workflowDB->query('CREATE TABLE localidade (organizacao_id integer NOT NULL, localidade_id serial NOT NULL, centro_custo_id integer, descricao character varying(50) NOT NULL, empresa CHARACTER VARYING(100), endereco CHARACTER VARYING(100), complemento CHARACTER VARYING(50), cep CHARACTER VARYING(9), bairro CHARACTER VARYING(30), cidade CHARACTER VARYING(50), uf CHARACTER(2))'); 
    8787        $workflowDB->query('CREATE TABLE funcionario (funcionario_id int4 NOT NULL, area_id integer NOT NULL, localidade_id integer NOT NULL, centro_custo_id integer, organizacao_id integer NOT NULL, funcionario_status_id integer NOT NULL, cargo_id int4, nivel int2, funcionario_categoria_id int4, titulo CHARACTER VARYING(30))'); 
    88         $workflowDB->query('CREATE TABLE area (organizacao_id integer NOT NULL, area_id serial NOT NULL, area_status_id integer NOT NULL, areasup_organizacao_id integer, superior_area_id integer, centro_custo_id integer, titular_funcionario_id int4, substituto_funcionario_id int4, sigla character varying(20) NOT NULL, descricao character varying(100) NOT NULL, ativa character varying(1) NOT NULL, auxiliar_funcionario_id int4)'); 
     88        $workflowDB->query('CREATE TABLE area (organizacao_id integer NOT NULL, area_id serial NOT NULL, area_status_id integer NOT NULL, areasup_organizacao_id integer, superior_area_id integer, centro_custo_id integer, titular_funcionario_id int4, sigla character varying(20) NOT NULL, descricao character varying(100) NOT NULL, ativa character varying(1) NOT NULL, auxiliar_funcionario_id int4)'); 
    8989        $workflowDB->query('CREATE TABLE funcionario_status (funcionario_status_id serial NOT NULL, descricao character varying(50) NOT NULL, exibir character varying(1) NOT NULL, organizacao_id integer NOT NULL)'); 
    9090        $workflowDB->query('CREATE TABLE cargo (cargo_id serial NOT NULL, descricao character varying(150), organizacao_id int4)'); 
    9191        $workflowDB->query('CREATE TABLE funcionario_categoria (funcionario_categoria_id serial NOT NULL, descricao character varying(150), organizacao_id int4)'); 
    9292        $workflowDB->query('CREATE TABLE telefone (telefone_id serial NOT NULL, descricao character varying(50) NOT NULL, numero character varying(50) NOT NULL, organizacao_id integer NOT NULL)'); 
     93        $workflowDB->query('CREATE TABLE substituicao (substituicao_id serial NOT NULL, area_id integer NOT NULL, funcionario_id integer NOT NULL, data_inicio date NOT NULL, data_fim date NOT NULL)'); 
     94 
    9395 
    9496        /* add the constraints */ 
     
    100102        $workflowDB->query('ALTER TABLE ONLY localidade ADD CONSTRAINT localidade_pkey PRIMARY KEY (organizacao_id, localidade_id)'); 
    101103        $workflowDB->query('ALTER TABLE ONLY funcionario ADD CONSTRAINT funcionario_pkey PRIMARY KEY (funcionario_id)'); 
    102         $workflowDB->query('ALTER TABLE ONLY area ADD CONSTRAINT area_pkey PRIMARY KEY (organizacao_id, area_id)'); 
     104        $workflowDB->query('ALTER TABLE ONLY area ADD CONSTRAINT area_pkey PRIMARY KEY (area_id)'); 
    103105        $workflowDB->query('ALTER TABLE ONLY funcionario_status ADD CONSTRAINT funcionario_status_pkey PRIMARY KEY (funcionario_status_id)'); 
    104106        $workflowDB->query('ALTER TABLE ONLY telefone ADD CONSTRAINT telefone_pkey PRIMARY KEY (telefone_id)'); 
     107        $workflowDB->query('ALTER TABLE ONLY substituicao ADD CONSTRAINT substituicao_pkey PRIMARY KEY (substituicao_id)'); 
     108 
    105109 
    106110        /* foreign keys */ 
     
    119123        $workflowDB->query('ALTER TABLE ONLY area ADD CONSTRAINT "$2" FOREIGN KEY (centro_custo_id, organizacao_id) REFERENCES centro_custo(centro_custo_id, organizacao_id)'); 
    120124        $workflowDB->query('ALTER TABLE ONLY area ADD CONSTRAINT "$3" FOREIGN KEY (titular_funcionario_id) REFERENCES funcionario(funcionario_id)'); 
    121         $workflowDB->query('ALTER TABLE ONLY area ADD CONSTRAINT "$4" FOREIGN KEY (substituto_funcionario_id) REFERENCES funcionario(funcionario_id)'); 
    122         $workflowDB->query('ALTER TABLE ONLY area ADD CONSTRAINT "$5" FOREIGN KEY (organizacao_id) REFERENCES organizacao(organizacao_id)'); 
    123         $workflowDB->query('ALTER TABLE ONLY area ADD CONSTRAINT "$6" FOREIGN KEY (area_status_id, organizacao_id) REFERENCES area_status(area_status_id, organizacao_id)'); 
    124         $workflowDB->query('ALTER TABLE ONLY area ADD CONSTRAINT "$7" FOREIGN KEY (auxiliar_funcionario_id) REFERENCES funcionario(funcionario_id)'); 
     125        $workflowDB->query('ALTER TABLE ONLY area ADD CONSTRAINT "$4" FOREIGN KEY (organizacao_id) REFERENCES organizacao(organizacao_id)'); 
     126        $workflowDB->query('ALTER TABLE ONLY area ADD CONSTRAINT "$5" FOREIGN KEY (area_status_id, organizacao_id) REFERENCES area_status(area_status_id, organizacao_id)'); 
     127        $workflowDB->query('ALTER TABLE ONLY area ADD CONSTRAINT "$6" FOREIGN KEY (auxiliar_funcionario_id) REFERENCES funcionario(funcionario_id)'); 
    125128        $workflowDB->query('ALTER TABLE ONLY telefone ADD CONSTRAINT "$1" FOREIGN KEY (organizacao_id) REFERENCES organizacao(organizacao_id)'); 
     129        $workflowDB->query('ALTER TABLE ONLY substituicao ADD CONSTRAINT "$1" FOREIGN KEY (area_id) REFERENCES area(area_id)'); 
     130        $workflowDB->query('ALTER TABLE ONLY substituicao ADD CONSTRAINT "$2" FOREIGN KEY (funcionario_id) REFERENCES funcionario(funcionario_id)'); 
     131 
    126132 
    127133        /* set the permissions to the database objects */ 
    128         $dbObjects = array('organizacao', 'area_status', 'centro_custo', 'localidade', 'funcionario', 'area', 'funcionario_status', 'telefone', 'organizacao_organizacao_id_seq', 'area_status_area_status_id_seq', 'centro_custo_centro_custo_id_seq', 'localidade_localidade_id_seq', 'area_area_id_seq', 'funcionario_status_funcionario_status_id_seq', 'cargo', 'cargo_cargo_id_seq', 'funcionario_categoria', 'funcionario_categoria_funcionario_categoria_id_seq', 'telefone_telefone_id_seq'); 
     134        $dbObjects = array('organizacao', 'area_status', 'centro_custo', 'localidade', 'funcionario', 'area', 'funcionario_status', 'telefone', 'substituicao', 'organizacao_organizacao_id_seq', 'area_status_area_status_id_seq', 'centro_custo_centro_custo_id_seq', 'localidade_localidade_id_seq', 'area_area_id_seq', 'funcionario_status_funcionario_status_id_seq', 'cargo', 'cargo_cargo_id_seq', 'funcionario_categoria', 'funcionario_categoria_funcionario_categoria_id_seq', 'telefone_telefone_id_seq', 'substituicao_substituicao_id_seq'); 
    129135 
    130136        foreach ($dbObjects as $dbObject) 
  • trunk/workflow/setup/setup.inc.php

    r1974 r2042  
    1313        $setup_info['workflow']['name']                 = 'workflow'; 
    1414        $setup_info['workflow']['title']                = 'Workflow management'; 
    15         $setup_info['workflow']['version']              = '2.1.000'; 
     15        $setup_info['workflow']['version']              = '2.2.000'; 
    1616        $setup_info['workflow']['app_order']    = 10; 
    1717        $setup_info['workflow']['enable']               = 1; 
  • trunk/workflow/setup/tables_update.inc.php

    r1981 r2042  
    451451                                $workflowDB->query('ALTER TABLE ONLY localidade ADD CONSTRAINT localidade_pkey PRIMARY KEY (organizacao_id, localidade_id)'); 
    452452                                $workflowDB->query('ALTER TABLE ONLY funcionario ADD CONSTRAINT funcionario_pkey PRIMARY KEY (funcionario_id)'); 
    453                                 $workflowDB->query('ALTER TABLE ONLY area ADD CONSTRAINT area_pkey PRIMARY KEY (organizacao_id, area_id)'); 
     453                                $workflowDB->query('ALTER TABLE ONLY area ADD CONSTRAINT area_pkey PRIMARY KEY (area_id)'); 
    454454                                $workflowDB->query('ALTER TABLE ONLY funcionario_status ADD CONSTRAINT funcionario_status_pkey PRIMARY KEY (funcionario_status_id)'); 
    455455                                $workflowDB->query('ALTER TABLE ONLY area_status ADD CONSTRAINT "$1" FOREIGN KEY (organizacao_id) REFERENCES organizacao(organizacao_id)'); 
     
    12191219                return $GLOBALS['setup_info']['workflow']['currentver']; 
    12201220        } 
     1221        $test[] = '2.1.000'; 
     1222        function workflow_upgrade2_1_000() 
     1223        { 
     1224                if (!$GLOBALS['phpgw_setup']->oProc->m_bDeltaOnly) 
     1225                { 
     1226                        $workflowHostInfo = extractDatabaseParameters(); 
     1227 
     1228                        /* connect to workflow database */ 
     1229                        $workflowDB = $GLOBALS['phpgw']->ADOdb; 
     1230                        if ($workflowDB->connect($workflowHostInfo['host'], $workflowHostInfo['user'], $workflowHostInfo['password'], 'workflow')) 
     1231                        { 
     1232                                /* creating table substitution */ 
     1233                                $workflowDB->query('CREATE TABLE substituicao (substituicao_id serial NOT NULL, area_id integer NOT NULL, funcionario_id integer NOT NULL, data_inicio date NOT NULL, data_fim date NOT NULL)'); 
     1234 
     1235                                $workflowDB->query('ALTER TABLE ONLY public.substituicao ADD CONSTRAINT substituicao_pkey PRIMARY KEY (substituicao_id)'); 
     1236                                $workflowDB->query('ALTER TABLE ONLY public.substituicao ADD CONSTRAINT "$1" FOREIGN KEY (area_id) REFERENCES area(area_id)'); 
     1237                                $workflowDB->query('ALTER TABLE ONLY public.substituicao ADD CONSTRAINT "$2" FOREIGN KEY (funcionario_id) REFERENCES funcionario(funcionario_id)'); 
     1238 
     1239                                /* granting privilegies */ 
     1240                                $workflowDB->query("GRANT ALL ON TABLE public.substituicao TO admin_workflow"); 
     1241                                $workflowDB->query("GRANT ALL ON TABLE public.substituicao TO postgres"); 
     1242                                $workflowDB->query("GRANT SELECT ON TABLE public.substituicao TO public"); 
     1243                                $workflowDB->query("GRANT ALL ON TABLE public.substituicao_substituicao_id_seq TO admin_workflow"); 
     1244                                $workflowDB->query("GRANT ALL ON TABLE public.substituicao_substituicao_id_seq TO postgres"); 
     1245                                $workflowDB->query("GRANT SELECT ON TABLE public.substituicao_substituicao_id_seq TO public"); 
     1246 
     1247                                /* migrating records */ 
     1248                                $result = $workflowDB->query('SELECT area_id, substituto_funcionario_id FROM area WHERE substituto_funcionario_id IS NOT NULL'); 
     1249                                if ($result) 
     1250                                        while ($row = $result->fetchRow()) { 
     1251                                                $values = array($row['area_id'], $row['substituto_funcionario_id']); 
     1252                                                $workflowDB->query('INSERT INTO substituicao (area_id, funcionario_id, data_inicio, data_fim) VALUES (?, ?, CURRENT_DATE, CURRENT_DATE+integer \'7\')', $values); 
     1253                                        } 
     1254 
     1255 
     1256                                /* erasing old atributes */ 
     1257                                $workflowDB->query("ALTER TABLE area DROP COLUMN substituto_funcionario_id"); 
     1258                        } 
     1259 
     1260                        /* reconnect to the previous database */ 
     1261                        $GLOBALS['phpgw']->ADOdb->connect($workflowHostInfo['host'], $workflowHostInfo['user'], $workflowHostInfo['password'], $workflowHostInfo['dbname']); 
     1262                } 
     1263 
     1264                #updating the current version 
     1265                $GLOBALS['setup_info']['workflow']['currentver'] = '2.2.000'; 
     1266                return $GLOBALS['setup_info']['workflow']['currentver']; 
     1267        } 
    12211268?> 
Note: See TracChangeset for help on using the changeset viewer.