sexta-feira, 4 de abril de 2008

Calculadora de salários

Primeiramente cuidado ao copiar os códigos aqui, essa pqp de blogger acha que é inteligente e fica mudando o que eu escrevo achando que é HTML, como não tem tag code, não tem como eu evitar alguns erros

Um bom profissional é aquele que sempre se atualiza, sabendo disto estou fazendo um curso de PHP, é verdade rsrs! Então já viu né exercicios bobinhos, dai resolvi postar aqui pra galera que quer aprender junto

Bom vamos a um exercício básico de aplicação do PHP que pode ser usada em um sistema de uma empresa, uma calculadora de salários. O exercício proposto no curso era apenas fazer uma calculadora com 3 condições de descontos, no entanto dei uma pequena incrementada, vamos ao que interessa:

Proponho que antes de ler as explicações abaixo leiam o código na imagem e tentem interpretar. Preste atenção pois quem não presta atenção se ferra...

Explicando:

Primeira condicional: formulário

if ($_POST["enviado"] == "sim") {
//conteudo
}

está condicional serve para verificar se o formulario foi enviado ou não, dessa forma podemos fazer com que a área de resultados apenas apareca quando solicitada

Varriavel salario

$salario = $_POST["salario"]; // Pega valor
str_replace(",", ".", $salario); // Substitui . por virgula

No PHP virgula é representada por pontos, logo poderá vir um ponto na string salario se vindo direto do banco de dados, ou mesmo o usuário pode cismar de digitar , invés de virgulas por isso uasamos a função str_replace ou seja "string_replace". A sintaxe é a seguinte

str_replace("[substituto]", "[caractere a ser substituido]", [varriavel ou string onde esta o tal caractere]);

Varriavel personalizado

$personalizado = $_POST["personalizado"]; // Serve para pegar se o desconto é personalzado ou não

Segunda condicional: salários

if ($salario < vtdesconto =" 4;" tkdesconto =" 5;" irdesconto =" 6;"> 401 and $salario <= 600) { // Multiplicadores de descontos dos que recebem até 600 $VtDesconto = 6; $TkDesconto = 7; $IrDesconto = 8; } elseif ($salario > 600) {
// Multiplicadores de descontos dos que recebem mais que 600
$VtDesconto = 8;
$TkDesconto = 9;
$IrDesconto = 11;
}

Essa condicional testa o valor do salário e aplica os mutiplicadores de cada um dos seus descontos:

Vt = Vale Tranporte
Tk - Ticket
Ir = Imposto

Porque os multiplicadores são estes valores? lembra da formula de porcetagem que vc aprendeu lá na quarta serie:

% = valor * porcentagem / 100

os mutiplicadores sao as porcetagens de cada condição

Como não existe salário (legalmente) abaixo de R$ 400,00 se o valor digitado for menor que 399 retorna erro.

Obs: lembra que eu falei pra prestar a atenção? se você leu até aqui é pq está prestando então vou te contar um segredo... tem um erro no código pronto e na imagem a condicional que retorna o erro esta abaixo das outras e assim não funciona, coloque a condicional de erro acima das outras.

Terceira condicional: Personalizado

Verifica se os valores foram personalizados e se sim muda os descontos para os que o usuario digitou:

if ($personalizado == "Calcular") {
// Multiplicadores de descontos personalizados
$VtDesconto = (int)$_POST["vtDesconto"];
$TkDesconto = (int)$_POST["tkDesconto"];
$IrDesconto = (int)$_POST["irDesconto"];
}

O (int) serve pra converter o valor em numero inteiro caso o usuário digite 1,3 o sistema entederá 1.

Condicional quarta: calculo

A condicinal verifica se os valores dos descontos realmente são numeros inteiros e efetua os calculos se nao retorna erro

if (is_integer($VtDesconto) and is_integer($TkDesconto) and is_integer($IrDesconto)) {
$vtDescontoValor = ($salario * $VtDesconto) / 100;
$tkDescontoValor = ($salario * $TkDesconto) / 100;
$irDescontoValor = ($salario * $IrDesconto) / 100;
} else {
print "Valor de desconto em formato inválido!";
}

Total do salário

$totalSalario = $salario - $vtDescontoValor - $tkDescontoValor - $irDescontoValor;

Não precisa explicar isso né?!

Agora é só imprimir

print "

Salário: R$ " . str_replace(".", ",", $salario) . "
";
print "Desconto de vale transporte: R$ " . str_replace(".", ",", $vtDescontoValor) . "
";
print "Desconto de ticket refeição: R$ " . str_replace(".", ",", $tkDescontoValor) . "
";
print "Desconto de Imposto de Renda: R$ " . str_replace(".", ",", $irDescontoValor) . "
";
print "
Total: R$ " . str_replace(".", ",", $totalSalario) . "

";

[ Download do código ]

domingo, 23 de março de 2008

PHP 5 - Orientação de objetos



Olá pessoal depois de algum tempo volto a postar sobre de desenvolvimento, o motivo é simples a tão esperada orientação por objetos do PHP 5, o famoso PHP O.O. Você que é da área já deve ter ao menos ouvido falar ou visto em uma vaga de empregos qualquer: "ter noções de PHP O.O" - o engraçado é que a maioria do povo que fala isso é pra trabalhar com frameworks de PHP, como o Cake por exemplo, onde em minha vista ter noções de orientação de objetos não basta, pois afinal a idéia do frameworks é tornar seu trabalho mais rápido, isso não quer dizer que você tendo um nível baixo de conhecimento você vá conseguir manipula-lo de forma correta. Mas vamos ao Post...

Recentemente comecei meus estudos sobre Orientação de Objetos através do livro PHP 5 Objects, Patterns, Pratice de MATT ZANDSTRA. Bom na verdade este livro trata-se de uma abordagem mais avançada do uso de PHP Orientado a Objetos em equipe, planejamento de projetos e etc. Muito bom, recomendo sua leitura, no entanto se você e iniciante, ou sempre programou em PHP 4 sem usar classes (como foi no meu caso) terá de procurar informação na Internet sobre O.O e muitas vezes se deparará com tutoriais do tipo: "olha o código aí e se vira", bom isto funciona mas na verdade você não cria um base de conhecimento sobre o assunto ali monstrado. Por isto decidi escrever este pequeno tutorial, onde tentarei explicar um pouco sobre Orientação de Objetos.

Vamos iniciar dizendo o que são classes e por que usa-las

Classes e objetos

A melhor definição de classes é olhar elas como se fossem modelos, imagine um time de futebol, você cria um modelo de uniforme todos usam ele mas nem por isto todos são iguais, um dibla melhor, o outro marca melhor, o outro tem melhor chute e por ai vai. Vamos ilustrar isso como um modelo:

uniforme = azulchuteiras = brancasdible = Xchute = Ymarcacao = Z

Temos um modelo, todos os nossos jogadores terão o mesmo uniforme e chuteiras brancas, no entanto suas qualidades dible, chute e marcacao sao varriaveis PERTECENTES a cada jogador. Agora imagine: troque a plavra jogador por OBJETO e imagine que cada OBJETO vira especificando suas habilidades.

Imaginou? se sim você já entendeu 90% da Orientação por Objetos e também qual sua vantagem, afinal é simples: Você pode colocar seu jogador no modelo do seu time importando suas qualidades.

"OBJETO terá suas habilidades incluídas no modelo CLASSE."

Sintaxe de uma classe

Você sempre iniciará uma classe com a palavra class seguida de um nome que vocêe definir para a classe

class minhaclass {

}

Após iniciar a classe você vai declarar as varriáveis que serão usadas pela classe, incluindo as que vem de fora da classe.

class minhaclass {

var $chute;

}

As váriáveis podem ser publicas, protegidas ou privadas mais tarde veremos sobre isto, por enquanto use apenas public, desta forma ficaria assim:

class minhaclass {

public $chute;

}

As varriavéis publicas sãos as que podem ser acessadas de dentro ou de fora da classe, afinal elas são publicas

Após ter declarado as varriavéis você criará as funções da sua classe ou seja METODOS

O primeiro metodo a ser criado numa classe geralmente é o __construct usado para atribuir suas varriaveis.

class minhaclass {

public $chute;

function __construct ($chute) {

$this->chute = $chute;

}

}

Pronto agora sua varriavel está atribuida ou seja onde estiver escrito chute agora é o mesmo que $chute.

Esse $this-> que apareceu ai é uma varriavel padrão do PHP, pense nele como se fosse a varriavel $_POST só que invés de ['campo'] na frente tu coloca ->metodo.$this é o mesmo que o objeto que está chamando aquela classe ou seja $this no nosso exemplo é igual ao jogador:




$jogador->chute




sendo que chute é dinamico varia de jogador pra jogador, no final seria:




fulano->99 // 99 é o que ele teria de chute




Bom como neste primeiro exemplo a varrivel é public é só imprimir agora certo?




errado, antes de imprimir você deve iniciar o objeto, ou seja você deve agora criar o jogador:




$objeto_jogador = new minhaclass(99)




$objeto_jogador é uma varriavel qualquer, new minhaclass cria o jogador, 99 atribui 99 ao seu chute




dai a pergunta mas como 99 vai atribuir ao chute? e se tiver outra varriavel como o codigo vai saber qual que é qual?




Lembra da função mail por exemplo? como vc usa ela? mail($para, $assunto, $mensagem) não é?




Ele vai saber que 99 se refere ao chute pelo mesmo motivo que a mail sabe que o seu $para se refere ao email destinatario. Porque lá em cima vc colocou as varriaveis (parametros) nessa ordem ao constuir a função dentro da classe, lembra?




class minhaclass { public $chute; function __construct ($chute) { $this->chute = $chute; }




Agora podemos imprimir o a qualidade do jogador assim




echo "Chute".$objeto_jogador->chute.;




// $objeto_jogador->chute = objeto>metodo




Enfim agora vemos como ficou:




sexta-feira, 21 de dezembro de 2007

Sistema Privilege


Sistema criado para controle de compras e vendas, clientes e lojas do Privilege um grande projeto da Sirius Office, http://www.siriusoffice.com.br/, cujo o objetivo é dar privilégios as pessoas que tem o livro nos melhores estabelecimentos de Belo Horizonte e região. O livro possui anúncios dos estabelecimentos e junto ao anúncio 4 cupons destacaveis que dão direito ao usuário do livro obter descontos na realização de compras naquela empresa.


A lógica


Cada livro possui um código único, ao adquirir o livro o usuário vai até o site www.livrodedescontos.com.br/sistema e cadastra seu código a partir dai ele está liberado para usar os cupons do livro (o cadastro tb pode ser efetuado na hora da compra ou mesmo após ela).

Após efetuado o cadastro o cliente vai na loja destaca seu cupom, inseri seu codigo no verso e o vendedor cadastra a venda realizada ou envia o cupom para a Sirius Office que posteriormente cadastrará a venda.

O cliente por sua vez através do seu painel também pode cadastrar suas compras que servirão de comparação no modulo do administrador e como tabela de controle do proprio cliente.

Quando utilizado os 4 cupons em um loja o sistema para de cadastrar as vendas até que o administrador libere mais cupons naquela loja para aquele cliente.



O administrador tem controle sobre os dados de cada cliente e em que loja ele compra, tendo também acesso a estatisticas de perfis de clientes, assim podendo fazer um rastreamento de vendas por loja ou perfil o que da a possibilidade de orientar cada uma das lojas com relação a seus clientes.

Módulos

O sistema é dividido em 3 módulos:


Cliente
Cadastro; atualiza informações ; cadastra compras ; indica amigos ; recupera senha.

Lojista
Atualiza informações ; cadastra vendas

Administrador
Visualiza estatísticas ; relatórios ; altera lojas ; altera clientes ; compara compras e vendas ; libera cupons ; zera cupons ; visualiza clientes que excederam o limite ou estão no limite


Festa de lançamento

O Privilege foi lançado no dia 11/12/2007 em uma festa no Raja Hall em Belo Horizonte que contou com a presença de personalidades importantes do mundo dos negócios, cenário político e da mídia mineira, alguma das personalizades que estiveram presentes: Alfredo Campos (Ex-senador), Bruno Campos (presidente da Sirius Office), Daniel Alex (Diretor da Agência Rubra), Paulo Navarro (Apresentador de TV), dentre outros.
E eu é claro estava lá hehe.

Informações Técnicas



Liguagens usadas: PHP 4.x (sem orientação por objetos) + ajax
Banco de dados: MySQL 4.1
Uso de cookies: sim
função mail(): sim
register_globals: sim
Tempo de desenvolvimento: 20 dias

quarta-feira, 24 de outubro de 2007

BrServidor

Bom galera mais um trabalho meu em PHP + MySQL, uma novidade nesse trabalho é que ele foi escrito seguindo o padrão Tableless, que elimina as tabelas na disposição do layout do site e usa classes CSS para posicionar o conteúdo. A vantagem disso é que a página carrega mais rápido e fica mais compatível com navegadores e resoluções diferentes.

No http://www.brservidor.com/ além de encontrar hospedagem, registro de domínios e criação de web site, você tem acesso livre a uma área de suporte do tipo "você pergunta... eu respondo", onde as respostas dadas através de vídeo aulas gratuitas.

O controle do BrServidor é realizado através do Controle de Servidor, sistema de minha autoria para gerenciamento de contas de servidores de hospedadem, o sistema conta com os seguintes módulos:

  • Atendimento
    Faz todo o atedimento de pedidos de hospedagem, resgistros de domínios e criação de websites. Também dá controle sobre as contas já existentes podendo bloquea-las e ativa-las.
  • Configurações
    Cadastra e atualiza todos os serviços oferecidos pelo servidor, assim como seus preços e varriáveis que são apresentadas nos formulários preenchidos pelos clientes
  • Relátorio
    Exibe relátorios completos de contas e pedidos realizados.
  • Suporte
    Cadastra e edita as perguntas e respostas do sistema de suporte.

O sistema ainda conta com recuperação de senha e outros acessórios para melhor acessibilidade.

Informações tecnicas

Linguagem: PHP
Banco de dados: MySQL
Zend Optimizer: enable
Versão: 1.0

terça-feira, 23 de outubro de 2007

Gerenciamento de Publicidade


Esse é o mapa, do sistema de Gerenciamento de Agências de Publicidade que terminei está semana.

O sistema visa solucionar problemas de trafego em agências de publicidade oferecendo controle total aos JOBS de uma agência.

As grandes vantagens desse sistema na minha opnião são a agilidade e acessibilidaade do mesmo;

  1. Por ser um sistema web ele pode ser acessado de qualquer parte do planeta o que possibilita que a equipe de capitação de JOBS cadastre os clientes, jobs e faça o brienfing deles diretamente da empresa deles.
  2. Ao programar o sistema tentei ao máximo dar agilidade a ele, pois notei no trabalho de pesquisa que a maioria dos sistemas desse seguimento dava muita importancia ao design e esqueciam da acessibilidade do mesmo, criando páginas pesadas, menus popups lindos, mas dificeis de usar e principalmente "loading's" de pagina que nao deixam vc executar o trabalho enquanto tudo não for carregado. Em função disso fiz um sistema agil, prevendo ações do usuário e retirando componentes que fariam o sistema ficar lento.
O sistema conta com os seguintes módulos:



  • Módulo Empresas
    Onde você pode cadastrar, editar, fazer o brienfing, excluir e ver o histórico de serviços de uma empresa

  • Módulo Serviços (Jobs)
    Onde você pode cadastrar, editar, fazer o brienfing, excluir e ver o histórico de serviços de um serviço

  • Módulo Ideias
    Onde os funcionários poderão cadastrar idéias, ilustra-las e etc

  • Módulo Trafego
    Controla totalmente o tráfego de jobs da agencia. Exibe os serviços por prioridades e status; mostra os serviços que tem apresentação agendada para a data atual (hoje)

  • Módulo Agenda
    Cadastra, lista e mostra os compromissos agendados .

  • Módulo aniversários
    Mostra os clientes que estão faazendo aniversário e envia e-mails para eles com uma msg de aniversário predefinida

  • Modulo Email Marketing
    Possibilita o envio de e-mails em massa

  • Modulo de administração
    Permite gerenciar funcionários, compromissos e editar informações do sistema

  • Recuperação de senha
    Recupera senha do usuário

  • Assistente de configuração do sistema
    Permite configurar os nomes de situações, status, setores e demais varriaveis de formulário, ou seja as opções de cada select. Assim permitindo que o sistema se adeque as particularidades de qualquer agência
Atualizações

20/10/2007 - Adicionado módulo de recados
20/10/2007 - Corrigidos erros ortográficos encontrados no sistema
20/10/2007 - Assistente de configuração adicionado na lateral

01/11/2007 - Tranferência efetuada da rede local para um servidor web

16/11/2007 - Menu pop revitalizado e trocado para o evento onclick
16/11/2007 - Adicionado relatório de entrada de jobs por datas
16/11/2007 - Adicionado relatório de conclusão de jobs por datas
16/11/2007 - Campos do tipo select trocados para textfield
16/11/2007 - Autopreechimento de datas ativado.
16/11/2007 - Layout do sistema passado para includes, assim permitindo que o layout seja trocado automaticamente.
16/11/2007 - Alterada função de recados para permitir que apenas o funcionário para qual o recado seja destinado visualize o mesmo

Informações Tecnicas

Linguagem principal: PHP
Banco de dados: MySQL
Níveis de usuários: Administrador e Funcionários
Salva senha: sim, por cookie
Funções requeridas: register_globals, upload_file, mail() e zend optimizer
Versão do PHP requerida 4.x+
Versão do MySQL requerida: 4.x+

Funciona perfeitamente no IE, FF e Opera (outros ainda não foram testados).

Licença: FREEWARE

Instalação e personalização:


Valor único : R$ 200,00

Este valor é cobrado para instalar o sistema em seu servidor de hospedagem e colocar sua logo-marca no mesmo.

Para outro tipo de instalação, como por exemplo em rede local, é necessário que seja feito um orçamento.

Para ver todas informações detalhadas de como contratar este serviço leia o contrato de prestação de serviço de personalização.