Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
55 changes: 55 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -62,3 +62,58 @@ Desenvolver uma aplicação em Delphi que simule um sistema de gerenciamento de
- Testes e documentação.

Boa sorte com o desafio! Estamos animados para ver o que você pode criar.


----------------------------------------------------------------------------

## - Solução proposta:

Foi desenvolvido um sistema para entrada e saida de produtos

Fluxograma da solução

![Diagramas técnicos](https://github.com/winaba/desafio-delphi/assets/17182623/9d1b9d47-60ef-4746-9d3c-27ed1d01973f)


Composto por:
- telas de Login,
- cadastro de usuario,
- entrada e saida de produtos,
- cadastro de produtos

Ao abrir o sistema é apresentado a tela de login:

![Captura de tela 2024-03-09 031242](https://github.com/winaba/desafio-delphi/assets/17182623/e37e77fd-d421-472f-9c55-d029268fbd6e)


Caso não possua usuario, é necessario cadastra-lo no botão 'Cadastrar'

![Captura de tela 2024-03-09 031328](https://github.com/winaba/desafio-delphi/assets/17182623/33e715f1-b734-4fc4-93e8-8e8d57a22e24)


Depois de possuir o cadastro e se logar, será apresentado a tela de entrada e saída de prdoutos

![Captura de tela 2024-03-09 031959](https://github.com/winaba/desafio-delphi/assets/17182623/4ec5fbcb-7ecf-4557-afba-34bc86bdc4f5)

Caso no momento do cadastro da movimentação o produto não esteja disponivel, clique no botão '+'

![Captura de tela 2024-03-09 032032](https://github.com/winaba/desafio-delphi/assets/17182623/46ddf955-c97c-406a-b624-931e8849ed45)


Configuração

Para rodar a aplicação é necerio tem um arquivo ini ```config.ini``` configurado no mesmo diretório que o exe

Exemplo:

```
[base]
path=E:\estudos\delphi\desafio_khipo2\desafio-delphi\src\database\desafio_delphi.db
```
Banco de dados

O banco de dados utilizado nesta aplicação foi o SQLite

há exemplos de banco de dados em 'src/database'


Binary file added src/database/desafio_delphi.db
Binary file not shown.
Empty file added src/database/desafio_delphi.db2
Empty file.
Binary file added src/database/desafio_delphi_bk.db
Binary file not shown.
Binary file added src/imagens/Diagramas técnicos.jpg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added src/imagens/add_button.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
11 changes: 11 additions & 0 deletions src/model/DAO/desafio.model.dao.connection.dfm
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
object DMConnection: TDMConnection
Height = 305
Width = 426
PixelsPerInch = 120
object FDConnection1: TFDConnection
Params.Strings = (
'DriverID=SQLite')
Left = 160
Top = 80
end
end
31 changes: 31 additions & 0 deletions src/model/DAO/desafio.model.dao.connection.pas
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
unit desafio.model.dao.connection;

interface

uses
System.SysUtils, System.Classes, FireDAC.Stan.Intf, FireDAC.Stan.Option,
FireDAC.Stan.Error, FireDAC.UI.Intf, FireDAC.Phys.Intf, FireDAC.Stan.Def,
FireDAC.Stan.Pool, FireDAC.Stan.Async, FireDAC.Phys, FireDAC.VCLUI.Wait,
Data.DB, FireDAC.Comp.Client, FireDAC.Phys.SQLite, FireDAC.Phys.SQLiteDef,
FireDAC.Stan.ExprFuncs, FireDAC.Phys.SQLiteWrapper.Stat, FireDAC.Stan.Param,
FireDAC.DatS, FireDAC.DApt.Intf, FireDAC.DApt, FireDAC.Comp.DataSet;

type
TDMConnection = class(TDataModule)
FDConnection1: TFDConnection;
private
{ Private declarations }
public
{ Public declarations }
end;

var
DMConnection: TDMConnection;

implementation

{%CLASSGROUP 'Vcl.Controls.TControl'}

{$R *.dfm}

end.
163 changes: 163 additions & 0 deletions src/model/implements/desafio.model.implements.connection.pas
Original file line number Diff line number Diff line change
@@ -0,0 +1,163 @@
unit desafio.model.implements.connection;

interface

uses
desafio.model.interfaces.connection, desafio.model.dao.connection,
FireDAC.Comp.Client, Data.DB, inifiles;

type
TConnection = class(TInterfacedObject, iConnection)
private
dm : TDMConnection;
FQuery : TFDQuery;
FDataSource : TDataSource;
public

function sql(aValue : String) : iConnection;
function result : TDataSet;
function datasource : TDataSource;
function query : TFDQuery;

function open : iConnection;
function close : iConnection;
function exec : iConnection;
function params(aParams : String; aValue : Integer) : iConnection; overload;
function params(aParams : String; aValue : String) : iConnection; overload;
function params(aParams : String; aValue : Currency) : iConnection; overload;
function insert : iConnection;
function cancel : iConnection;
function post : iConnection;

constructor Create;
destructor Destroy; override;
class function New : iConnection;
end;

implementation

uses
System.SysUtils, Vcl.Forms;

{ TConnection }

function TConnection.cancel: iConnection;
begin
FQuery.Cancel;
Result := Self;
end;

function TConnection.close: iConnection;
begin
FQuery.Close;
Result := Self;
end;

constructor TConnection.Create;
var
iniConf : TIniFile;
vServer, vPath: String;
begin

iniConf := TIniFile.Create(ExtractFilePath(Application.exeName)+'config.ini');
try
vPath := iniConf.ReadString('base', 'path', '');
finally
iniConf.Free;
end;

dm := TDMConnection.Create(nil);

dm.FDConnection1.Params.Add('Database='+vPath) ;

FQuery := TFDQuery.Create(nil);
FQuery.Connection := dm.FDConnection1;

FDataSource := TDataSource.Create(nil);
FDataSource.DataSet := FQuery;


end;

function TConnection.datasource: TDataSource;
begin
Result := FDataSource;
end;

destructor TConnection.Destroy;
begin
FDataSource.Free;
FQuery.Free;
dm.Free;

inherited;
end;

function TConnection.exec: iConnection;
begin
FQuery.ExecSQL;
Result := Self;
end;

function TConnection.insert: iConnection;
begin
FQuery.Insert;
end;

class function TConnection.New: iConnection;
begin
Result := self.Create;
end;

function TConnection.open: iConnection;
begin
FQuery.Open;
Result := Self;
end;

function TConnection.params(aParams: String; aValue: Integer): iConnection;
begin
FQuery.ParamByName(aParams).AsInteger := aValue;
Result := self;
end;

function TConnection.params(aParams: String; aValue: String): iConnection;
begin
FQuery.ParamByName(aParams).AsString := aValue;
Result := self;
end;


function TConnection.params(aParams: String; aValue: Currency): iConnection;
begin
FQuery.ParamByName(aParams).AsCurrency := aValue;
Result := self;
end;

function TConnection.post: iConnection;
begin
FQuery.Post;
Result := Self;
end;

function TConnection.query: TFDQuery;
begin
result := FQuery;
end;

function TConnection.result: TDataSet;
begin
Result := FQuery;
end;

function TConnection.sql(aValue: String): iConnection;
begin
Fquery.Close;
FQuery.SQL.Clear;
FQuery.SQL.Text := aValue;

Result := Self;
end;


end.
Loading