#!/bin/bash
#author:Cristiano Siqueira
#descricao:Automatiza o backup da pasta sigpdv e banco postgres.
#Revisao:

user=`whoami`
skytef=n
scanntech=n
backup=n
openerp=n
rclocal=n
crontab=n
stahelenafrente=n
supervisor=n

if [[ $user == "root" ]]; then

    echo "|----------------------------|"
    echo "|  O que voce deseja fazer?  |"
    echo "|                            |"
    echo "|  (1) - Backup do Caixa.    |"
    echo "|  (2) - Restaurar Caixa.    |"
    echo "|----------------------------|"
    read bkprest

    echo "O PDV tem TEF da SkyTEF? (s/n)"
    read skytef
    echo "O PDV tem scanntech? (s/n)"
    read scanntech
    echo "O PDV tem a pasta /backup? (s/n)"
    read backup
    echo "O PDV tem OpeneERP instalado? (s/n)"
    read openerp
    echo "O PDV tem arquivo rc.local com algum tipo de configuração? (s/n)"
    read rclocal
    echo "O PDV possui algum tipo de configuração feita no arquivo crontab? (s/n)"
    read crontab
    echo "O PDV é Supervisor de alguma loja do Santa Helena? (s/n)"
    read stahelenafrente

    if [[ $bkprest == 1 ]]; then # Fazendo backup do caixa

        echo "Iniciando processo de backup do caixa."
        sleep 3

        echo "Verificando numero do caixa!!"
        sleep 2
        cat /usr/local/sigpdv/pdvconfig.cfg | grep caixa

        echo "Digite o numero do caixa: "
        read cx

        cat -n /usr/local/sigpdv/pdvconfig.cfg | grep -n ^ | grep ^8: | cut -d: -f2
        cat -n /usr/local/sigpdv/pdvconfig.cfg | grep -n ^ | grep ^9: | cut -d: -f2
        cat -n /usr/local/sigpdv/pdvconfig.cfg | grep -n ^ | grep ^10: | cut -d: -f2
        cat -n /usr/local/sigpdv/pdvconfig.cfg | grep -n ^ | grep ^11: | cut -d: -f2
        cat -n /usr/local/sigpdv/pdvconfig.cfg | grep -n ^ | grep ^12: | cut -d: -f2
        cat -n /usr/local/sigpdv/pdvconfig.cfg | grep -n ^ | grep ^13: | cut -d: -f2
        cat -n /usr/local/sigpdv/pdvconfig.cfg | grep -n ^ | grep ^14: | cut -d: -f2
        cat -n /usr/local/sigpdv/pdvconfig.cfg | grep -n ^ | grep ^15: | cut -d: -f2
        cat -n /usr/local/sigpdv/pdvconfig.cfg | grep -n ^ | grep ^16: | cut -d: -f2
        cat -n /usr/local/sigpdv/pdvconfig.cfg | grep -n ^ | grep ^17: | cut -d: -f2
        cat -n /usr/local/sigpdv/pdvconfig.cfg | grep -n ^ | grep ^18: | cut -d: -f2
        cat -n /usr/local/sigpdv/pdvconfig.cfg | grep -n ^ | grep ^19: | cut -d: -f2

        psql -U postgres -l

        echo "O computador é Caixa ou Supervisor/Caixa?"
        echo "|---------------------------|"
        echo "|  (1) Caixa - PDV somente  |"
        echo "|  (2) Caixa e Supervisor   |"
        echo "|---------------------------|"
        read pdvousup

        if [[ $pdvousup = 1 ]];then
            echo "Qual o nome do banco do Caixa $cx para backup?"
            read bpdv
        elif [[ $pdvousup = 2 ]];then
            echo "Qual o nome do banco do Caixa $cx para backup?"
            read bpdv
            echo "Qual o nome do banco do Supervisor para backup?"
            read spdv
        fi

        sleep 3

        echo " "
        echo "Fazendo backup da pasta sigpdv:"
        echo " "
        sleep 3

        if [ -e /recebe/ ];then
            echo "Pasta Recebe existe! Continuando processo."
            sleep 2
            echo "Dando permissões."
            sleep 2
            chmod 777 /recebe/bkpcx$cx/
            chown caixa:caixa /recebe/
        else
            echo "Pasta Recebe não existe. Criando pasta."
            sleep 2
            mkdir /recebe/bkpcx$cx/
            echo "Dando permissões."
            sleep 2
            chmod 777 /recebe/bkpcx$cx/
            chown caixa:caixa /recebe/
            cd /usr/local/
            tar cfvz sigpdv_$cx.tar.gz sigpdv
            cp sigpdv_$cx.tar.gz /tmp/bkpcx$cx
        fi

        if [[ $skytef = "s" ]];then
            if [ -e /etc/wnbtlscli/registry ];then
                cp /etc/wnbtlscli/registry /recebe/bkpcx$cx/
            else
                echo "O aquivo 'registry' não existe!"
                sleep 3
            fi
        fi

        if [[ $scanntech = "s" ]];then
            if [ -e /usr/local/scanntech/ ];then
                echo "|--------------------------------------|"
                echo "|  Gerando tar.gz da pasta scanntech.  |"
                echo "|  Isso pode demorar muito, dependendo |"
                echo "|  do tamanho e quantidade das pastas. |"
                echo "|--------------------------------------|"

                sleep 4
                cd /usr/local/scanntech/
                mv -r agente/ /tmp/
                cd /usr/local/
                tar cfvz scanntech_$cx.tar.gz scanntech/
                cp scanntech_$cx.tar.gz /recebe/bkpcx$cx/
                cd /tmp/
                mv -r agente/ /usr/local/scanntech/

                echo "|--------------------------------------|"
                echo "|     Finalizado criação do tar.gz     |"
                echo "|        da pasta do scanntech.        |"
                echo "|--------------------------------------|"
                sleep 2
            else
                echo "A pasta 'scanntech' não existe."
                sleep 3
            fi
        fi

        if [[ $backup = "s" ]]; then
            if [ -e /backup ];then
                echo "|--------------------------------------|"
                echo "|  Gerando tar.gz da pasta backup.     |"
                echo "|  Isso pode demorar muito, dependendo |"
                echo "|  do tamanho e quantidade das pastas. |"
                echo "|--------------------------------------|"
                sleep 4
                cd /
                tar cfvz backup_$cx.tar.gz /backup
                cp backup_$cx.tar.gz /recebe/bkpcx$cx/
                echo "|--------------------------------------|"
                echo "|     Finalizado criação do tar.gz     |"
                echo "|          da pasta do backup.         |"
                echo "|--------------------------------------|"
                sleep 2
            else
                echo "A pasta /backup não existe."
                sleep 3
            fi
        fi

        if [[ $openerp = "s" ]];then
            if [ -e /etc/openerp-server.conf ];then
                echo "Salvando openerp-server.conf."
                cp /etc/openerp-server.conf /recebe/bkpcx$cx/
                sleep 2
            else
                echo "O arquivo openerp-server.conf não existe."
                sleep 3
            fi
            if [ -e /usr/local/sigerp ];then
                echo "Salvando pasta 'sigerp'."
                cd /usr/local/
                tar cfvz sigerp_$cx.tar.gz sigerp/
                cp sigerp_$cx.tar.gz /recebe/bkpcx$cx/
            else
                echo "A pasta sigerp não foi encontrada."
                sleep 3
            fi
        fi

        if [[ $rclocal = "s" ]];then
            if [ -e /etc/rc.local ];then
                echo "Sanvando aqruivo rc.local."
                cp /etc/rc.local /recebe/bkpcx$cx/
                sleep 2
            else
                echo "O arquivo rc.local não foi encontrado."
                sleep 3
            fi
        fi

        if [[ $stahelenafrente = "s" ]];then
            if [ -e /etc/init.d/frente ];then
                echo "Salvando arquivo frente do Supervisor do Santa Helena."
                cp /etc/init.d/frente /recebe/bkpcx$cx/
            else
                echo "O arquivo 'frente' não foi encontrado."
                sleep 3
            fi
        fi

        if [[ $pdvousup = 1 ]];then
            echo " "
            echo "Criando dump sigpdv. . ."
            echo " "
            sleep 3

            pg_dump --host localhost --port 5432 --username "postgres" --role "postgres" --format custom --blobs --verbose --file /recebe/bkpcx$cx/sigpdv_$cx.dump $bpdv

        elif [[ $pdvousup = 2 ]];then
            echo " "
            echo "Criando dump sigpdv. . ."
            echo " "
            sleep 3

            pg_dump --host localhost --port 5432 --username "postgres" --role "postgres" --format custom --blobs --verbose --file /recebe/bkpcx$cx/sigpdv_$cx.dump $bpdv

            echo " "
            echo "Criando dump do supervisor. . ."
            echo " "
            sleep 3
            cat -n /usr/local/sigpdv/pdvconfig.cfg | grep -n ^ | grep ^8: | cut -d: -f2
            cat -n /usr/local/sigpdv/pdvconfig.cfg | grep -n ^ | grep ^9: | cut -d: -f2
            cat -n /usr/local/sigpdv/pdvconfig.cfg | grep -n ^ | grep ^10: | cut -d: -f2
            cat -n /usr/local/sigpdv/pdvconfig.cfg | grep -n ^ | grep ^11: | cut -d: -f2
            cat -n /usr/local/sigpdv/pdvconfig.cfg | grep -n ^ | grep ^12: | cut -d: -f2
            cat -n /usr/local/sigpdv/pdvconfig.cfg | grep -n ^ | grep ^13: | cut -d: -f2
            cat -n /usr/local/sigpdv/pdvconfig.cfg | grep -n ^ | grep ^14: | cut -d: -f2
            cat -n /usr/local/sigpdv/pdvconfig.cfg | grep -n ^ | grep ^15: | cut -d: -f2
            cat -n /usr/local/sigpdv/pdvconfig.cfg | grep -n ^ | grep ^16: | cut -d: -f2
            cat -n /usr/local/sigpdv/pdvconfig.cfg | grep -n ^ | grep ^17: | cut -d: -f2
            cat -n /usr/local/sigpdv/pdvconfig.cfg | grep -n ^ | grep ^18: | cut -d: -f2
            cat -n /usr/local/sigpdv/pdvconfig.cfg | grep -n ^ | grep ^19: | cut -d: -f2
            sleep 3

#pg_dump --host localhost --port 5432 --username "postgres" --role "postgres" --format custom --blobs --verbose --file /recebe/bkpcx/sigpdv.dump sigpdv
#pg_dump --host localhost --port 5432 --username "openerp" --role "openerp" --format custom --blobs --verbose --file /recebe/bkpcx/supervisor.dump supervisor

            pg_dump --host localhost --port 5432 --username "openerp" --role "openerp" --format custom --blobs --verbose --file /recebe/bkpcx$cx/$spdv.$cx.dump $spdv
        else
            echo "Você digitou uma opção errada."
            echo "O processo de restore do banco não será feito. faça manualmente."
            echo " "
            echo " "
            echo "          ----------"
            echo "          |  ERRO  |"
            echo "          ----------"
            echo " "
            sleep 4
        fi

        echo " "
        echo "Arquivos salvos na pasta de /recebe/bkpcx$cx:"
        echo " "
        ls -lha /recebe/bkpcx$cx/
        sleep 3

        echo " "
        echo " "
        echo "          ---------"
        echo "          |  FIM  |"
        echo "          ---------"
        echo " "
        exit

    elif [[ $bkprest == 2 ]]; then # Restaurando backup do caixa!!

        echo "Iniciando processo de restauração do caixa."
        sleep 3

        echo "Digite o numero do caixa: "
        read cx
        sleep 2

        echo "Este PDV é Caixa Supervisor? (s/n)"
        read supervisor
        if [[ $supervisor = "s" ]];then
            echo "Qual o nome do banco do Supervisor para backup?"
            read spdv
        fi

         if [ -e /recebe/ ];then
            echo "Pasta Recebe existe! Continuando processo."
            sleep 2
            chmod 777 /recebe/
            chown caixa:caixa /recebe/
            cd /recebe/
            chmod 777 bkpcx$cx/
            chown caixa:caixa bkpcx$cx/
        else
            clear
            echo "Pasta Recebe não existe. Criando pasta."
            echo "Verifique o que pode estar errado!!"
            exit
        fi

        cd /usr/local/
        tar cfvz sigpdv_newinstall_$cx.tar.gz sigpdv
        cp sigpdv_newinstall_$cx.tar.gz /recebe/bkpcx$cx

        cd /recebe/bkpcx$cx/
        cp sigpdv_$cx.tar.gz /usr/local/
        sleep 3

        cd /usr/local/
        rm -rf sigpdv/
        tar xfvz sigpdv_$cx.tar.gz
        sleep 3

        cd /recebe/bkpcx$cx/
        cp start-sigpdv /usr/bin/
        cat /usr/bin/start-sigpdv
        sleep 3

        cd /recebe/bkpcx$cx/
        tar xfvz nfe-4.51.11.tls12.tar.gz
        cd /recebe/bkpcx$cx/nfe-4.51.11
        sudo python setup.py install
        cd /recebe/bkpcx$cx/
        rm -rf nfe-4.51.11/

        #Aqui estão os arquivos importantes para funcionamento de caixa e/ou caixa/supervisor.

        if [[ $skytef = "s" ]];then
            if [[ -e /etc/wnbtlscli/ ]];then
                echo "O SkyTEF já se econtra instalado. Veja se ele está funcionando normalmente."
                sleep 3
            else
                echo "O SkyTEF não está instalado. Intale-o!"
                echo "Use as informações do arquivo registry para registar o caixa novamente."
                sleep 4
            fi
        fi

        if [[ $scanntech = "s" ]];then
            echo "Verificando se o scanntech está instalado:"
            sleep 2
            if [[ -e /usr/local/scanntech/ ]];then
                cd /recebe/bkpcx$cx/
                cp /recebe/bkpcx$cx/scanntech_$cx.tar.gz /usr/local/
                cd /usr/local/
                tar xfvz scanntech_$cx.tar.gz scanntech/
            else
                echo "O scanntech não está instalado. Instale ele, depois descompacte o backup."
                sleep 3
            fi
        fi

        if [[ $backup = "s" ]];then
            if [ -e /recebe/bkpcx$cx/backup_$cx.tar.gz ];then
                echo "Voltando pasta de backup para seu devido lugar."
                sleep 3
                cp -r /recebe/bkpcx$cx/backup_$cx.tar.gz /
                cd /
                tar xfvz backup_$cx.tar.gz
            else
                echo "Não foi possível encontrar o arquivo tar da pasta backup."
                sleep 3
            fi
        fi

        if [[ $openerp = "s" ]];then
            if [[ -e /usr/local/sigerp/ ]];then
                echo "Copiando arquivos OpenERP para seu devido lugar."
                sleep 3
                cp /recebe/bkpcx$cx/openerp-server.conf /etc/
                cd /usr/local/
                rm -rf sigerp/
                cp /recebe/bkpcx$cx/sigerp_$cx.tar.gz /usr/local/
                tar xfvz sigerp_$cx.tar.gz
            else
                echo "O OpenERP e o SigERP não estão instalados. Instale-os!!"
                sleep 3
            fi
        fi

        if [[ $rclocal = "s" ]];then
            if [ -e /recebe/bkpcx$cx/rc.local ];then
                echo "Copiando rc.local para seu devido local."
                sleep 2
                cp /recebe/bkpcx$cx/rc.local /etc/
            else
                echo "O arquivo rc.local não foi encontrado."
                sleep 3
            fi
        fi

        if [[ $crontab = "s" ]];then
            if [ -e /recebe/bkpcx$cx/crontab ];then
                echo "Copiando crontab para seu devido local."
                sleep 2
                cp /recebe/bkpcx$cx/crontab /etc/
            else
                echo "O arquivo crontab não foi encontrado."
                sleep 3
            fi
        fi

        if [[ $stahelenafrente = "s" ]];then
            if [ -e /recebe/bkpcx$cx/frente ];then
                echo "Copiando arquivo 'frente', usado pelo Fred, para envio de carga aos caixas."
                sleep 3
                cp /recebe/bkpcx$cx/frente /etc/init.d/
            else
                echo "O arquivo 'frente' não foi encontrado."
                sleep 3
            fi
        fi

        if [[ $pdvousup = 1 ]];then
            echo " "
            echo "Subindo base sigpdv do caixa $cx. . ."
            echo " "
            sleep 3

            pg_restore --host localhost --port 5432 --username "postgres" --role "postgres" --dbname sigpdv --verbose /recebe/bkpcx$cx/sigpdv_$cx.dump

        elif [[ $pdvousup = 2 ]];then
            echo " "
            echo "Subindo base sigpdv do caixa $cx. . ."
            echo " "
            sleep 3

            pg_restore --host localhost --port 5432 --username "postgres" --role "postgres" --dbname sigpdv --verbose /recebe/bkpcx$cx/sigpdv_$cx.dump

            echo " "
            echo "Criando dump do supervisor. . ."
            echo " "
            sleep 3
            cat -n /usr/local/sigpdv/pdvconfig.cfg | grep -n ^ | grep ^8: | cut -d: -f2
            cat -n /usr/local/sigpdv/pdvconfig.cfg | grep -n ^ | grep ^9: | cut -d: -f2
            cat -n /usr/local/sigpdv/pdvconfig.cfg | grep -n ^ | grep ^10: | cut -d: -f2
            cat -n /usr/local/sigpdv/pdvconfig.cfg | grep -n ^ | grep ^11: | cut -d: -f2
            cat -n /usr/local/sigpdv/pdvconfig.cfg | grep -n ^ | grep ^12: | cut -d: -f2
            cat -n /usr/local/sigpdv/pdvconfig.cfg | grep -n ^ | grep ^13: | cut -d: -f2
            cat -n /usr/local/sigpdv/pdvconfig.cfg | grep -n ^ | grep ^14: | cut -d: -f2
            cat -n /usr/local/sigpdv/pdvconfig.cfg | grep -n ^ | grep ^15: | cut -d: -f2
            cat -n /usr/local/sigpdv/pdvconfig.cfg | grep -n ^ | grep ^16: | cut -d: -f2
            cat -n /usr/local/sigpdv/pdvconfig.cfg | grep -n ^ | grep ^17: | cut -d: -f2
            cat -n /usr/local/sigpdv/pdvconfig.cfg | grep -n ^ | grep ^18: | cut -d: -f2
            cat -n /usr/local/sigpdv/pdvconfig.cfg | grep -n ^ | grep ^19: | cut -d: -f2
            sleep 3

            psql -U postgres -l

            pg_restore --host localhost --port 5432 --username "openerp" --role "openerp" --dbname $spdv --verbose /recebe/bkpcx$cx/$spdv.$cx.dump

        else
            echo "Você digitou uma opção errada."
            echo "O processo de restore do banco não será feito. Reveja manualmente."
            sleep 4
        fi

        echo " "
        echo " "
        echo "          ---------"
        echo "          |  FIM  |"
        echo "          ---------"
        echo " "
        exit

    else

        echo "        Opção incorreta!"
        sleep 3
        echo " "
        echo " "
        echo "          ----------"
        echo "          |  ERRO  |"
        echo "          ----------"
        echo " "
        exit

    fi

else
    clear
    echo "Execute este aplicatvo como Root, por favor."
    exit
fi
