package [Link].
controllers;
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link].R;
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
public class MainActivity extends BaseActivity {
private TextView tvFuncionarioNome, tvTotal;
private Button btnFinalizar;
private ImageView menuIcon;
View viewCardFuncionario;
private BroadcastReceiver broadcastReceiver;
TabLayout tabLayout;
private RecyclerView recyclerItensVendaProdutos;
private List<ItemVendaModel> listaProdutos = new ArrayList<>();
private ActivityMainAdapter adapter;
private FrameLayout tabContentContainer;
[Link] vendaTab, perfilTab;
private int abaSelecionada = 0;
private Boolean pendenteHabilitacao = null;
private boolean tabsHabilitadas = false;
@Override
protected void onCreate(Bundle savedInstanceState) {
[Link](savedInstanceState);
runOnUiThread(() -> [Link]("Estabelecendo Conexão...",
this));
setContentView([Link].activity_main);
[Link]();
tabLayout = findViewById([Link]);
tvFuncionarioNome = findViewById([Link]);
tvTotal = findViewById([Link]);
menuIcon = findViewById([Link]);
btnFinalizar = findViewById([Link]);
viewCardFuncionario = findViewById([Link]);
tabContentContainer = findViewById([Link]);
setupCustomTabs(tabLayout);
FuncionarioSession session = [Link]();
String nomeFuncionario = [Link]();
[Link](nomeFuncionario != null ? nomeFuncionario :
"Nenhum funcionário selecionado");
actionsClick();
habilitaDesabilitaBotoes(false);
}
@Override
protected void onResume() {
[Link]();
registerReceiver(socketReceiver, new IntentFilter("SOCKET_RECONNECTED"));
if(![Link]() &&
[Link]().getConnectionId() != 0){
new Handler([Link]()).post(() -> {
execute();
});
habilitaDesabilitaBotoes(false);
}
FuncionarioSession session = [Link]();
if ([Link]() != null && ![Link]().isEmpty()) {
[Link]();
}
String nomeFuncionario = [Link]();
TextView tvNomeFuncionario = findViewById([Link]);
if (nomeFuncionario != null && ![Link]()) {
[Link](nomeFuncionario);
} else {
[Link]("Nenhum funcionário selecionado");
}
existeTurnosAtivos();
}
@Override
protected void execute() {
[Link]();
[Link]().setCurrentActivity(this);
loadServerConfig(() ->
login(() -> {
obterFuncionarios(() -> {
[Link]();
loadTerminalConfig(() -> {
[Link]();
broadcastReceiver = new
BroadcastReceiver() {
@Override
public void onReceive(Context arg0,
Intent intent) {
[Link](broadcastReceiver);
if
([Link]().equals(Constants.INTENT_ACTION_LOGIN_SUCCESS_MESSAGE)) {
finish();
}
}
};
[Link]([Link], broadcastReceiver, new
IntentFilter(Constants.INTENT_ACTION_LOGIN_SUCCESS_MESSAGE),
ContextCompat.RECEIVER_NOT_EXPORTED);
});
}
);
}
)
);
}
private void actionsClick() {
// Clique para selecionar funcionário
[Link](v -> {
Intent intent = new Intent(this, [Link]);
startActivity(intent);
});
// Clique no menu
[Link](v -> showCustomMenuDialog());
[Link](v -> [Link](this, "Venda
finalizada", Toast.LENGTH_SHORT).show());
}
private void setupCustomTabs(TabLayout tabLayout) {
// Primeira aba
LinearLayout tab1 = (LinearLayout)
getLayoutInflater().inflate([Link].tab_item, null);
ImageView tab1Icon = [Link]([Link]);
[Link]([Link].ic_cart);
[Link]([Link](this,
[Link].tab_icon_color));
((TextView) [Link]([Link])).setText("VENDA");
vendaTab = [Link]().setCustomView(tab1);
[Link](vendaTab);
// Segunda aba
LinearLayout tab2 = (LinearLayout)
getLayoutInflater().inflate([Link].tab_item, null);
ImageView tab2Icon = [Link]([Link]);
[Link]([Link].ic_cart_gray);
[Link]([Link](this,
[Link].tab_icon_color));
((TextView) [Link]([Link])).setText("VENDA");
perfilTab = [Link]().setCustomView(tab2);
[Link](perfilTab);
// Forçar atualização de cor quando trocar de aba
[Link](new [Link]() {
@Override
public void onTabSelected([Link] tab) {
if (!tabsHabilitadas) {
// Voltar à aba anterior
[Link]([Link](abaSelecionada));
[Link]([Link], "Selecione um funcionário com
turno ativo.", Toast.LENGTH_SHORT).show();
return;
}
View view = [Link]();
if (view != null) {
ImageView icon = [Link]([Link]);
if (icon != null) [Link](true);
}
abaSelecionada = [Link]();
carregarLayoutTab(abaSelecionada);
}
@Override
public void onTabUnselected([Link] tab) {
View view = [Link]();
if (view != null) {
ImageView icon = [Link]([Link]);
if (icon != null) [Link](false);
}
}
@Override
public void onTabReselected([Link] tab) {}
});
carregarLayoutTab(0); // Tab padrão: VENDA
}
private void showCustomMenuDialog() {
Dialog dialog = new Dialog(this);
[Link](Window.FEATURE_NO_TITLE);
[Link]([Link].dialog_menu_opcoes);
[Link](true);
SessionModel session = [Link]().getSession();
// Adiciona os itens manualmente
LinearLayout menuContainer = [Link]([Link]);
if(![Link]().isEmpty()) {
addMenuItem(menuContainer, [Link].ic_clock, "Histórico de Vendas",
() -> {
Intent intent = new Intent(this, [Link]);
startActivity(intent);
});
}
addMenuItem(menuContainer, [Link].ic_wifi, "Conexão de rede", () -> {
Intent intent = new Intent(this, [Link]);
startActivity(intent);
[Link]();
});
addMenuItem(menuContainer, [Link].ic_settings, "Adm Getnet", () -> {
[Link](this, "Adm Getnet", Toast.LENGTH_SHORT).show();
[Link]();
});
PlataformaIpirangaHandler kmv = [Link]();
if (kmv != null && [Link]() != null &&
[Link]().getCodigoVIP() > 0) {
addMenuItem(menuContainer, [Link].ic_card, "KMV - Resgate avulso",
() -> {
showDialogKMV();
[Link]();
});
}
[Link]();
}
private void addMenuItem(LinearLayout container, int iconRes, String text,
Runnable onClick) {
LinearLayout item = new LinearLayout(this);
[Link]([Link]);
[Link](8, 16, 8, 16);
[Link](Gravity.CENTER_VERTICAL);
[Link](new
[Link]([Link].MATCH_PARENT,
[Link].WRAP_CONTENT));
TextView label = new TextView(this);
[Link](text);
[Link](16);
[Link]([Link]);
[Link](new [Link](0,
[Link].WRAP_CONTENT, 1f)); // Ocupa tudo até o ícone
ImageView icon = new ImageView(this);
[Link](iconRes);
[Link]([Link]("#757575"));
[Link] iconParams = new [Link](48,
48);
[Link](iconParams);
Space spacer = new Space(this);
[Link](new [Link](80,
[Link].WRAP_CONTENT));
[Link](label);
[Link](spacer);
[Link](icon);
[Link](v -> [Link]());
[Link](item);
}
private void showDialogKMV() {
Dialog dialog = new Dialog(this);
[Link]([Link].dialog_resgate_kmv);
[Link](false);
EditText etKm = [Link]([Link]);
EditText etCpf = [Link]([Link]);
EditText etSenha = [Link]([Link]);
EditText etVipCodigo = [Link]([Link]);
EditText etVipSenha = [Link]([Link]);
[Link]([Link]).setOnClickListener(v ->
[Link]());
[Link]([Link]).setOnClickListener(v ->
[Link]());
[Link]([Link]).setOnClickListener(v -> {
boolean valido = true;
// Resetando erros visuais
[Link]([Link].bg_edittext);
[Link]([Link].bg_edittext);
[Link]([Link].bg_edittext);
[Link]([Link].bg_edittext);
[Link]([Link].bg_edittext);
// Validação individual
if ([Link]().toString().trim().isEmpty()) {
[Link]([Link].bg_edittext_error);
[Link]();
valido = false;
} else if ([Link]().toString().trim().isEmpty()) {
[Link]([Link].bg_edittext_error);
[Link]();
valido = false;
} else if ([Link]().toString().trim().isEmpty()) {
[Link]([Link].bg_edittext_error);
[Link]();
valido = false;
} else if ([Link]().toString().trim().isEmpty()) {
[Link]([Link].bg_edittext_error);
[Link]();
valido = false;
} else if ([Link]().toString().trim().isEmpty()) {
[Link]([Link].bg_edittext_error);
[Link]();
valido = false;
}
if (!valido) {
[Link](this, "Preencha todos os campos corretamente.",
Toast.LENGTH_LONG).show();
return;
}
// Grava os dados na sessão
KMVSession session = [Link]();
[Link]([Link]().toString().trim());
[Link]([Link]().toString().trim());
[Link]([Link]().toString().trim());
[Link]([Link]().toString().trim());
[Link]([Link]().toString().trim());
[Link](this, "Dados salvos com sucesso!",
Toast.LENGTH_SHORT).show();
[Link]();
});
[Link]();
Window window = [Link]();
if (window != null) {
[Link]((int) (getResources().getDisplayMetrics().widthPixels
* 0.95), // 95% da largura da tela
(int) (getResources().getDisplayMetrics().heightPixels *
0.85) // 85% da altura da tela
);
[Link]([Link]);
[Link]([Link]);
}
private void login(Runnable onSuccess) {
[Link]().login([Link],
() -> {
if (onSuccess != null) {
if (![Link]()) {
Intent serviceIntent = new Intent(this,
[Link]);
startService(serviceIntent);
}
[Link]();
}
;
});
}
private void showConnectionFailure(String message) {
(new [Link]())
.setMessage(message)
.setSenderActivity([Link])
.show();
}
private void loadServerConfig(Runnable onSuccess) {
broadcastReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context arg0, Intent intent) {
[Link](broadcastReceiver);
if
([Link]().equals(Constants.INTENT_ACTION_CONFIG_SERVER_RETURN)
||
[Link]().equals(Constants.INTENT_ACTION_CONFIG_SERVER_PWD_RETURN)) {
execute();
}
}
};
[Link](broadcastReceiver, new
IntentFilter(Constants.INTENT_ACTION_CONFIG_SERVER_RETURN));
[Link](broadcastReceiver, new
IntentFilter(Constants.INTENT_ACTION_CONFIG_SERVER_PWD_RETURN));
[Link]().loadConfigServer([Link],
new ServerConfigCallbackInterface() {
@Override
public void onSuccess() {
ConfigServerModel config =
[Link]().getSession().getConfigServer();
if (config != null) {
String serverAddress =
[Link]([Link](),
[Link]().toString());
[Link]().getSession().setServerAddress(serverAddress);
}
if
([Link]().getSession().getServerAddress().isEmpty()) {
showConnectionFailure("Nenhuma configuração
encontrada");
return;
}
if (onSuccess != null) {
[Link]();
}
}
@Override
public void onFailure(String message) {
[Link]();
showConnectionFailure(message);
}
});
}
private void loadTerminalConfig(Runnable onSuccess) {
broadcastReceiver = null;
[Link]().loadConfigTerminal([Link],
() -> {
if (onSuccess != null) {
[Link]();
}
});
}
private void obterFuncionarios(Runnable onComplete) {
if ([Link]() && [Link]()) {
runOnUiThread(() -> [Link]("Buscando
Funcionários...", this));
[Link]([Link])
.thenAccept(funcionarios -> {
runOnUiThread(() -> {
if ([Link]()) {
new [Link]()
.setSenderActivity([Link])
.setSuccess(false)
.setCanReturn(true)
.setDuration(Constants.FAILURE_MESSAGE_SHOW
_SECONDS)
.setTitle("Nenhum funcionário encontrado")
.setMessage("Não foram encontrados
funcionários vinculados à filial.")
.show();
} else {
// Se houver funcionários mas nenhum foi
selecionado ainda
FuncionarioSession session =
[Link]();
if ([Link]() == null ||
[Link]().isEmpty()) {
Animation blinkAnimation =
[Link]([Link], [Link]);
[Link]([Link].bg_card_funcionario_alert);
[Link](blinkAnimation);
[Link]();
}
}
[Link]();
if (onComplete != null) [Link]();
});
})
.exceptionally(ex -> {
runOnUiThread(() -> {
[Link]();
new [Link]()
.setSenderActivity([Link])
.setSuccess(false)
.setCanReturn(true)
.setDuration(Constants.FAILURE_MESSAGE_SHOW_SEC
ONDS)
.setTitle("Erro ao consultar funcionários")
.setMessage("Falha ao obter funcionários: " +
[Link]())
.show();
if (onComplete != null) {
[Link]();
[Link]();
}
});
return null;
});
} else {
if (onComplete != null) {
[Link]();
[Link]();
}
}
}
public void habilitaDesabilitaBotoes(boolean habilita) {
[Link](habilita);
[Link](habilita ? 1.0f : 0.5f);
[Link](habilita ? 1.0f : 0.5f);
tabsHabilitadas = habilita;
if (abaSelecionada == 0) {
View abaVenda = ([Link]() > 0)
? [Link](0)
: null;
pendenteHabilitacao = habilita;
if (abaVenda != null) {
aplicarEstadoBotoesVenda(abaVenda, habilita);
}
}
}
private void existeTurnosAtivos(){
if([Link]()){
buscaVendaAberta();
if([Link]())
habilitaDesabilitaBotoes(true);
} else {
[Link]();
habilitaDesabilitaBotoes(false);
}
}
private final BroadcastReceiver socketReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
if ("SOCKET_RECONNECTED".equals([Link]())) {
existeTurnosAtivos();
}
}
};
private void carregarLayoutTab(int position) {
runOnUiThread(() -> {
[Link]();
});
View layout;
if (position == 0) {
layout = getLayoutInflater().inflate([Link].layout_tab_venda,
tabContentContainer, false);
Button btnAbastecidas = [Link]([Link]);
Button btnProdutos = [Link]([Link]);
Button btnComandas = [Link]([Link]);
//listaProdutos = buscaItemVendaAberta();
recyclerItensVendaProdutos =
[Link]([Link]);
[Link](new
LinearLayoutManager(this));
adapter = new ActivityMainAdapter(listaProdutos, new
[Link]() {
@Override
public void onItemRemovido(boolean removido, String message) {
[Link]([Link], message,
Toast.LENGTH_SHORT).show();
buscaVendaAberta();
}
});
[Link](adapter);
[Link](v -> {
Intent intent = new Intent(this, [Link]);
startActivity(intent);
});
[Link](v -> {
Intent intent = new Intent(this, [Link]);
startActivity(intent);
});
[Link](v -> {
Intent intent = new Intent(this, [Link]);
startActivity(intent);
});
}
else {
layout = getLayoutInflater().inflate([Link].layout_tab_perfil,
tabContentContainer, false);
}
runOnUiThread(() -> {
[Link](layout);
});
if (position == 0 && pendenteHabilitacao != null) {
aplicarEstadoBotoesVenda(layout, pendenteHabilitacao);
pendenteHabilitacao = null;
}
}
private void aplicarEstadoBotoesVenda(View abaVenda, boolean habilita) {
Button btnAbastecidas = [Link]([Link]);
Button btnProdutos = [Link]([Link]);
Button btnComandas = [Link]([Link]);
if (btnAbastecidas != null) {
[Link](habilita);
[Link](habilita ? 1.0f : 0.5f);
}
if (btnProdutos != null) {
[Link](habilita);
[Link](habilita ? 1.0f : 0.5f);
}
if (btnComandas != null) {
[Link](habilita);
[Link](habilita ? 1.0f : 0.5f);
}
}
private void buscaVendaAberta(){
Integer idCfgTerminal =
[Link]().getConfigTerminal().getIdCfgTerminal();
[Link]([Link], idCfgTerminal, new
[Link]() {
@Override
public void onSuccess(ItemVendaModel itemVenda) {
listaProdutos = buscaItemVendaAberta();
carregarLayoutTab(0);
// Venda aberta encontrada, não precisa iniciar uma nova
[Link]();
if([Link]()) {
habilitaDesabilitaBotoes(true);
}
}
@Override
public void onNotFound() {
runOnUiThread(() -> [Link]("iniciando venda...",
[Link]));
[Link](
() -> {
[Link]();
},
() -> {
[Link]();
[Link]();
},
[Link]
);
}
@Override
public void onFailure(String errorMessage) {
(new [Link]())
.setSenderActivity([Link])
.setSuccess(false)
.setCanReturn(true)
.setDuration(Constants.FAILURE_MESSAGE_SHOW_SECONDS)
.setTitle("Erro ao processar retorno da venda aberta")
.setMessage(errorMessage)
.show();
}
@Override
public void onFailure(String errorMessage, String title) {
(new [Link]())
.setSenderActivity([Link])
.setSuccess(false)
.setCanReturn(true)
.setDuration(Constants.FAILURE_MESSAGE_SHOW_SECONDS)
.setTitle(title)
.setMessage(errorMessage)
.show();
}
});
}
private List<ItemVendaModel> buscaItemVendaAberta() {
List<ItemVendaModel> listaItemVenda = new ArrayList<>();
if (![Link]()) {
ArrayList<ItemVendaComandaModel> listadeItensVendaAberta =
[Link]().getVenda().getComandas().getItems();
[Link](itemVendaComandaModel -> {
[Link]([Link]());
});
totalDeVenda(listadeItensVendaAberta);
}
return listaItemVenda;
}
private void totalDeVenda(ArrayList<ItemVendaComandaModel>
listadeItensVendaAberta) {
final double[] total = {0};
double subtotal = 0.0;
[Link](itemVendaComandaModel -> {
total[0] = total[0] + [Link]().getTotal();
// subtotal = [Link]().getDesconto();
});
runOnUiThread(new Runnable() {
@Override
public void run() {
[Link]([Link](total[0]));
}
});