private function getFieldNewName($field, $namesMap = null, $originalSource = null, $newSource = null) {
        $newName = null;
        if ($namesMap == null) {
            $namesMap = $this->getColumnNames();
        }
        //primero busca una entrada en el mapa para el nombre del campo indicado
        $newName = $this->fieldInMap($field, $namesMap);
        if (empty($newName) && $this->fieldInList($field, $namesMap)) {
            $newName = $field;
        }
        if (empty($newName)) {
            //si el field indicado comienza con nombre de tabla seguido de punto
            $fieldPos = strpos($field, "$originalSource.");
            if($fieldPos === 0) {
                $searchField = substr($field, strlen($originalSource)+1);
                $newName = $this->fieldInMap($searchField, $namesMap);
                if(!empty($newName) && !empty($newSource) && strpos($newName, '.') === false) {
                    $newName = "$newSource.$newName";
                }
            }
        }
        if (empty($newName)) {
            if (preg_match ( "/\w+\s*\(\s*(\w+)\s*\)/", $field, $matches)) {
                $newName = str_replace($matches[1], $this->getFieldNewName($matches[1]), $matches[0]);
            }
        }

        return empty($newName) ? null : $newName;
    }