Giter Club home page Giter Club logo

testepratico-henrique-consultoria's Introduction

HCT -Teste Prático - PHP 7.3.9 - Composer MVC

Como eu ja fiz este mesmo teste, eu fiz umas melhorias deixei duas branches para comparar.

Layout

Desktop

img-dkt1

img-dkt2

img-dkt3

Mobile

img-mb1

img-mb2

img-mb3

Ferramentas

composer.json

  "require": {
    "ext-json": "*",
    "coffeecode/router": "1.0.7",
    "coffeecode/optimizer": "2.0.0",
    "coffeecode/datalayer": "1.1.4",
    "league/plates": "v4.0.0-alpha",
    "components/jquery": "3.5.1",
    "components/jqueryui": "1.12.1",
    "igorescobar/jquery-mask-plugin": "v1.14.1",
    "twbs/bootstrap": "4.5.3",
    "fortawesome/font-awesome": "5.15.1",
    "matthiasmullie/minify": "1.3.61"
  }

Resolução do problema - LP

Caixa.php

  • caixaCalc()

Este método e chamado na requisição via ajax e faz validação, transformado de string em float, soma todos os produtos do array, método arredondamento do dinheiro do cliente PagamentoCliente(), método de verifica as notas a retornar ao cliente Troco() e retorna um JSON

 public function caixaCalc($data): void
    {


        $produtos = filter_var_array($data['valorProduto'], FILTER_SANITIZE_STRIPPED);
        // validação
        if (in_array('', $produtos)) {
            echo $this->ajaxResponse(["message" => ["type" => "error", "message" => "Preeancha todos os campos para fazer calculo dos produtos"]]);
            return;
        }
        // fomato dinheiro (string) para decimal com array
        $produtos = $this->formtNormal($produtos);
        // somar os valores do array
        $valorTotal = array_sum($produtos);
        //  fazer o arredondamento do pagamento do cliente
        $this->PagamentoCliente((float) $valorTotal);
        // retorna as notas para troco
        $log = $this->Troco();
        // retorna para ajax via json
        if (!@$log['result']) {
            # code...
            echo $this->ajaxResponse(['message' => ['message' => "Ops erro interno ", 'type' => 'error']], 500);
            return;
        }
        echo $this->ajaxResponse(['message' => ['message' => 'Sucesso ao calcular o troco', 'type' => 'success'], 'result' => $log['result'], 'methodType' => $log['methodType'], 'cod' => $log['cod']]);
    }
  • PagamentoCliente()

Método arredondamento do dinheiro do cliente e seta os valores total do cliente e da compra

   /**
     * @param mixed $valorTotal
     *
     * @return void
     */
    public function PagamentoCliente($valorTotal): void
    {
        $this->valorTotal = $valorTotal;
        $rest = ceil($valorTotal / 100);
        $result = $rest * 100;

        $this->pgTotalCliente = $result;
    }
  • Troco()

Um método que inicia array de indice com as notas e valores as quantidade, eu vejo o troco com variável $this->valorTroco e coloco em variável auxiliar $this->auxTroco, depois uso while ele se repete até $this->valorTroco ficar a 0, logo verifico se o troco é menor que nota se for o while repete até achar a nota que não é menor que troco e com isso pega a nota achada e desconta no troco e somar a quatidade da nota e retorno um array.

    public function Troco(): array
    {

        $log['cod'] = 1;
        $log['methodType'] = 'troco';
        // $notas = [100.0, 50.0, 20.0, 10.0, 5.0, 2.0, 1.0, 0.5, 0.25, 0.10, 0.05];

        // $ContNotas = array(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);

        $ContNotas = ["100.0" => 0, "50.0" => 0, "20.0" => 0, "10.0" => 0, "5.0" => 0, "2.0" => 0, "1.0" => 0, "0.50" => 0, "0.25" => 0, "0.10" => 0, "0.05" => 0];
        $notas = array_keys($ContNotas);
        $troco = (float) $this->pgTotalCliente - (float) $this->valorTotal;

        $this->valorTroco = number_format($troco, 2);
        $this->auxTroco = $this->valorTroco;

        $indice = 0;

        while ($indice < count($notas) and $this->valorTroco != 0) {


            // encontrar primeira nota do troco
            while ($indice < count($notas) and $this->valorTroco < (float) $notas[$indice]) {


                $indice++;
            }


            if ($indice < count($notas)) {
                $nota = number_format($notas[$indice], 2);
                // descontar o valor do troco com a nota achada
                $this->valorTroco = number_format($this->valorTroco, 2) - $nota;
                // somar quantas notas precisa
                $ContNotas[$notas[$indice]] += 1;
            }


            // fazer o arredondar do centavos restantes
            if (number_format($this->valorTroco, 2) >= 0.03 && number_format($this->valorTroco, 2) < 0.05) {
                $this->valorTroco = 0.05;
            } else if (number_format($this->valorTroco, 2) >= 0.01 && number_format($this->valorTroco, 2) <= 0.02 && number_format($this->valorTroco, 2) < 0.03 || number_format($this->valorTroco, 2) < 0.01) {
                $this->valorTroco = 0;
            }
        }
        // retornar um array com formatação de dinheiro e retonar as notas e contas notas de troco
        $log['result']['valorCompra'] = $this->formtMoney($this->valorTotal);
        $log['result']['dinheiroCliente'] = $this->formtMoney($this->pgTotalCliente);
        $log['result']['troco'] = $this->formtMoney($this->auxTroco);
        $log['result']['contNotas'] = $ContNotas;
        $log['result']['notas'] =  $this->formtMoneyArr($notas);

        return $log;
    }

Resolução do problema - BD

HCT-BD/index.php

Arquivo config.php esta a configuraçao do banco e database.php e um class com métodos com conexao no banco, este métodos retorna um array com as chaves 'result' que mostra retorno do banco, 'message' e 'error' uma messagem do banco e o problema e 'cod' retorna 0 ou 1 (0 para erro e 1 não deu erro).

    include './config.php';
    include './database.php';

    $db = new Banco();
    $log = $db->getLog();
    $log['Insert'] = $db->insertDB('cadastro', ['nome' => 'Teste Teste','email'=>'[email protected]','estado' => 'SP', 'comentarios'=> 'Desativado']);
    $log['Questao 2'] = $db->selectDB('cadastro');
    $log['Questao 3'] = $db->selectDB('cadastro', ['estado' => 'SP']);
    $log['Questao 5'] = $db->selectQueryDB("SELECT distinct email FROM cadastro");
    $log['Questao 6'] = $db->updateDB('cadastro', ['nome'=> 'XX'],['estado'=>'SP']);
    $log['Questao 4'] = $db->forceDeleteWhereDB('cadastro', ['estado' => 'SP', 'comentarios'=> 'Desativado']);
    echo json_encode($log);

Requisitos

  • Composer;
  • Extensão extension=php_intl.dll;

    Configurar o apache no arquivo php.ini na ultima linha colocar esta configuração extension=php_intl.dll

Instalação

  • Clonagem da branche usando git clone ou Download zip na pasta do localhost;

    se for Zip renomear a pasta TestePratico-Henrique-consultoria-master para TestePratico-Henrique-consultoria;

  • Acessar a raiz do projeto com CMD executar o comando cd .\LP-hct\LP-composer\ ;
  • Logo depois executar o comando composer install ;
  • Esta pronto para rodar no servidor

testepratico-henrique-consultoria's People

Contributors

danielfalcaodf avatar

Watchers

James Cloos avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.