Jump to content

Kellison Ruan

Members
  • Content count

    25
  • Joined

  • Last visited

Community Reputation

0 Comum

About Kellison Ruan

Recent Profile Visitors

487 profile views
  1. Olá galera, Boa tarde! Estou com um probleminha em Ionic que está quebrando muito minha cabeça por dias. Método de pagamento do paypal aparece em meu site, mas não aparece no app ionic, o que será? Já tentei de tudo. Esse app faz comunicação via API do Woocommerce, e lá está habilitado a forma de pagamento com PayPal, porém só não aparece no app, já que na página de checkout no meu site, aparece. Segue o código da página de checkout do app: import { Component, Inject } from '@angular/core'; import { NavController, NavParams, AlertController, Loading, LoadingController, ToastController, App } from 'ionic-angular'; import { PlacedPage } from '../placed/placed'; import { PaymentGateway } from "../../models/payment-gateway.models"; import { Constants } from "../../models/constants.models"; import { WordpressClient } from '../../providers/wordpress-client.service'; import { Global } from '../../providers/global'; import { Subscription } from "rxjs/Subscription"; import { CartItem } from "../../models/cart-item.models"; import { OrderRequest } from "../../models/order-request.models"; import { Address } from "../../models/address.models"; import { ShippingLine } from "../../models/shipping-line.models"; import { UserResponse } from "../../models/user-response.models"; import { OrderResponse } from "../../models/order-response.models"; import { Currency } from "../../models/currency.models"; import { InAppBrowser, InAppBrowserOptions } from '@ionic-native/in-app-browser'; import { sha512 } from 'js-sha512'; import { APP_CONFIG, AppConfig } from '../../app/app.config'; import { OrderUpdateRequest } from '../../models/order-update-request.models'; import { Coupon } from '../../models/coupon.models'; import { HomePage } from '../home/home'; import { TranslateService } from '@ngx-translate/core'; import { Helper } from '../../models/helper.models'; import { ShippingMethod } from '../../models/shipping-method.models'; import { PayPal, PayPalPayment, PayPalConfiguration, PayPalPaymentDetails } from '@ionic-native/paypal'; @Component({ selector: 'page-payment', templateUrl: 'payment.html', providers: [WordpressClient] }) export class PaymentPage { private loading: Loading; private loadingShown: Boolean = false; private placedPagePushed: Boolean = false; private paymentDone: Boolean = false; private paymentFailAlerted: Boolean = false; private subscriptions: Array<Subscription> = []; private paymentGateways = new Array<PaymentGateway>(); private cartItems: Array<CartItem>; private selectedPaymentGateway; private selectedAddress: Address; private orderRequest: OrderRequest; private orderId = -1; private user: UserResponse; private totalItems = 0; private total = 0; private couponApplied = false; private pickupTime = 0; private deliveryTime = 0; private shippingChargeGlobal: number; constructor(@Inject(APP_CONFIG) private config: AppConfig, public translate: TranslateService, private iab: InAppBrowser, private toastCtrl: ToastController, public navCtrl: NavController, private navParams: NavParams, private service: WordpressClient, private loadingCtrl: LoadingController, private alertCtrl: AlertController, public appCtrl: App) { this.cartItems = this.navParams.get('cart'); this.totalItems = this.navParams.get('totalItems'); this.total = this.navParams.get('total'); this.shippingChargeGlobal = this.navParams.get('shippingChargeGlobal'); let paymentGateways = JSON.parse(window.localStorage.getItem(Constants.PAYMENT_GATEWAYS)); this.selectedAddress = JSON.parse(window.localStorage.getItem(Constants.SELECTED_ADDRESS)); if (paymentGateways != null) { for (let pg of paymentGateways) { if (pg.enabled && this.paymentImplemented(pg.id)) { this.paymentGateways.push(pg); } } } } ionViewWillLeave() { this.subscriptions.forEach((subscription: Subscription) => { subscription.unsubscribe(); }); this.dismissLoading(); } paymentImplemented(id) { return id === "pumcp" || id === "payuindia" || id === "cod"; } paymentMethod(paymentGateway) { this.selectedPaymentGateway = paymentGateway; } placedPage() { if (this.selectedPaymentGateway == null) { this.translate.get('field_error_payment_method').subscribe(value => { this.showToast(value); }); } else { this.orderRequest = new OrderRequest(); this.orderRequest.payment_method = this.selectedPaymentGateway.id ? this.selectedPaymentGateway.id : "cod"; this.orderRequest.payment_method_title = this.selectedPaymentGateway.title ? this.selectedPaymentGateway.title : "cod"; this.orderRequest.set_paid = false; this.orderRequest.billing = this.selectedAddress; this.orderRequest.shipping = this.selectedAddress; this.user = JSON.parse(window.localStorage.getItem(Constants.USER_KEY)); this.orderRequest.customer_id = String(this.user.id); let selectedShippingMethod: ShippingMethod = JSON.parse(window.localStorage.getItem(Constants.SELECTED_SHIPPING_METHOD)); if (selectedShippingMethod) { let shippingTotal = 0; for (let ci of this.cartItems) { if (!ci.product.shipping_cost_use_global && ci.product.shipping_cost != 1) shippingTotal = shippingTotal + ci.product.shipping_cost; } if (this.shippingChargeGlobal != -1) { shippingTotal = shippingTotal + this.shippingChargeGlobal; } this.orderRequest.shipping_lines = new Array<ShippingLine>(); this.orderRequest.shipping_lines.push(new ShippingLine(selectedShippingMethod.method_id, selectedShippingMethod.method_title, String(shippingTotal))); } this.orderRequest.line_items = this.cartItems; for (let item of this.orderRequest.line_items) { item.product = null; } this.translate.get('order_creating').subscribe(value => { this.presentLoading(value); }); let coupon: Coupon = JSON.parse(window.localStorage.getItem(Constants.SELECTED_COUPON)); let subscription: Subscription = this.service.createOrder(window.localStorage.getItem(Constants.ADMIN_API_KEY), this.orderRequest).subscribe(data => { this.orderId = data.id; if (coupon) { this.applyCoupon(coupon); } else { this.orderPlaced(); } }, err => { console.log(err); this.dismissLoading(); let orderId = Helper.extractOrderIdFromError(err); if (orderId != -1) { this.orderId = orderId; if (coupon) { this.applyCoupon(coupon); } else { this.orderPlaced(); } } else { this.translate.get('order_failed').subscribe(value => { this.showToast(value); }); this.appCtrl.getRootNav().setRoot(HomePage); } }); this.subscriptions.push(subscription); } } applyCoupon(coupon) { let couponSubs: Subscription = this.service.applyCouponCode(window.localStorage.getItem(Constants.ADMIN_API_KEY), String(this.orderId), coupon.code).subscribe(data => { this.couponApplied = true; window.localStorage.removeItem(Constants.SELECTED_COUPON); this.translate.get('confirm_order_coupon_applied').subscribe(value => { this.showToast(value); }); this.orderPlaced(); }, err => { console.log(err); this.dismissLoading(); }); this.subscriptions.push(couponSubs); } orderPlaced() { this.dismissLoading(); if (this.selectedPaymentGateway.id && this.selectedPaymentGateway.id === "cod") { this.clearCart(); this.navCtrl.setRoot(PlacedPage); } else if (this.selectedPaymentGateway.id === "pumcp" || this.selectedPaymentGateway.id === "payuindia") { this.initPayUMoney(); } else { this.translate.get('order_placed_cod').subscribe(value => { this.showToast(value); }); this.clearCart(); this.navCtrl.setRoot(PlacedPage); } } initPayUMoney() { let name = this.user.first_name && this.user.first_name.length ? this.user.first_name : this.user.username; let mobile = this.user.username; let email = this.user.email; let bookingId = String(Math.floor(Math.random() * (99 - 10 + 1) + 10)) + this.orderId; let productinfo = this.orderId; let salt = this.config.payuSalt; let key = this.config.payuKey; let amt = this.couponApplied ? this.total : this.totalItems; let string = key + '|' + bookingId + '|' + amt + '|' + productinfo + '|' + name + '|' + email + '|||||||||||' + salt; let encrypttext = sha512(string); //let url = "payumoney/payuBiz.html?amt=" + amt + "&name=" + name + "&mobileNo=" + mobile + "&email=" + email + "&bookingId=" + bookingId + "&productinfo=" + productinfo + "&salt=" + salt + "&key=" + key; let url = "payumoney/payuBiz.html?amt=" + amt + "&name=" + name + "&mobileNo=" + mobile + "&email=" + email + "&bookingId=" + bookingId + "&productinfo=" + productinfo + "&hash=" + encrypttext + "&salt=" + salt + "&key=" + key; let options: InAppBrowserOptions = { location: 'yes', clearcache: 'yes', zoom: 'yes', toolbar: 'no', closebuttoncaption: 'back' }; const browser: any = this.iab.create(url, '_blank', options); browser.on('loadstop').subscribe(event => { browser.executeScript({ file: "payumoney/payumoneyPaymentGateway.js" }); if (event.url == "http://localhost/success.php") { this.paymentSuccess(); browser.close(); } if (event.url == "http://localhost/failure.php") { this.paymentFailure(); browser.close(); } }); browser.on('exit').subscribe(event => { if (!this.paymentDone && !this.paymentFailAlerted) { this.paymentFailure(); } }); browser.on('loaderror').subscribe(event => { this.showToast('something_went_wrong'); }); } paymentFailure() { this.paymentFailAlerted = true; let subscription: Subscription = this.service.updateOrder(window.localStorage.getItem(Constants.ADMIN_API_KEY), String(this.orderId), new OrderUpdateRequest('cancelled')).subscribe(data => { }, err => { console.log(err); }); this.subscriptions.push(subscription); this.translate.get(['payment_fail_title', 'payment_fail_message', 'ok']).subscribe(res => { let alert = this.alertCtrl.create({ title: res.payment_fail_title, message: res.payment_fail_message, buttons: [{ text: res.ok, role: 'cancel', handler: () => { this.done(); console.log('Okay clicked'); } }] }); alert.present(); }); } paymentSuccess() { this.paymentDone = true; this.clearCart(); this.translate.get('just_a_moment').subscribe(value => { this.presentLoading(value); }); let subscription: Subscription = this.service.updateOrder(window.localStorage.getItem(Constants.ADMIN_API_KEY), String(this.orderId), { set_paid: true }).subscribe(data => { this.done(); }, err => { this.done(); this.paymentSuccess(); console.log(err); }); this.subscriptions.push(subscription); } done() { if (!this.placedPagePushed) { this.placedPagePushed = true; this.dismissLoading(); this.appCtrl.getRootNav().setRoot(this.paymentFailAlerted ? HomePage : PlacedPage); } } private presentLoading(message: string) { this.loading = this.loadingCtrl.create({ content: message }); this.loading.onDidDismiss(() => { }); this.loading.present(); this.loadingShown = true; } private dismissLoading() { if (this.loadingShown) { this.loadingShown = false; this.loading.dismiss(); } } private presentErrorAlert(msg: string) { let alert = this.alertCtrl.create({ title: 'Error', subTitle: msg, buttons: ['OK'] }); alert.present(); } showToast(message: string) { let toast = this.toastCtrl.create({ message: message, duration: 3000, position: 'bottom' }); toast.onDidDismiss(() => { console.log('Dismissed toast'); }); toast.present(); } clearCart() { let cartItems = new Array<CartItem>(); window.localStorage.setItem('cartItems', JSON.stringify(cartItems)); } }
  2. Kellison Ruan

    Método Recursivo em C#

    Gente, alguém me explica o que acontece quando invoco o método recursivo no c#??? Tipo assim: int [] arr, int esquerda, int direita int pivo = Particao(arr, esquerda, direita); O que aconteceu, com esses valores da Particao? pivo é igual a que? A 3 valores, esses listados entre parênteses??? Tá difícil entender essa parte. Desde já obrigado!
  3. Kellison Ruan

    Limitando quantidade de seleção em checkbox.

    CONSEGUI!!! Uhul, valeu galerinha! Era porque em meu input checkbox, tinha uma class. Por isso o script não reconhecia o input!
  4. Kellison Ruan

    Limitando quantidade de seleção em checkbox.

    Consegui esse código aqui: <script type="text/javascript"> (function(){ "use strict"; var marcados = 0; var verifyCheckeds = function($checks) { if( marcados>=2 ) { loop($checks, function($element) { $element.disabled = $element.checked ? '' : 'disabled'; }); } else { loop($checks, function($element) { $element.disabled = ''; }); } }; var loop = function($elements, cb) { var max = $elements.length; while(max--) { cb($elements[max]); } } var count = function($element) { return $element.checked ? marcados + 1 : marcados - 1; } window.onload = function(){ var $checks = document.querySelectorAll('input[type="checkbox"]'); loop($checks, function($element) { $element.onclick = function(){ marcados = count(this); verifyCheckeds($checks); } if($element.checked) marcados = marcados + 1; }); verifyCheckeds($checks); } }()); </script> Porém, não funciona com apenas um CHECKBOX, só com a lista de checkbox já determinada, tipo assim: <label><input type="checkbox" value="1" />Item 1</label> <label><input type="checkbox" value="2" />Item 2</label> <label><input type="checkbox" value="3" />Item 3</label> <label><input type="checkbox" value="4" />Item 4</label> <label><input type="checkbox" value="5" />Item 5</label> :/
  5. Kellison Ruan

    Limitando quantidade de seleção em checkbox.

    Eu não sei direito, mas ele não conta a cada checkbox selecionado, não sei se por ser só um. E deveria contar a quantidades de cliques em checkbox, não sei se haveria de ter alguma função onclick para contagem de quantos cliques, porque se é somente um checkbox no código???
  6. Kellison Ruan

    Limitando quantidade de seleção em checkbox.

    Veja bem, aí temos um problema, que quando o usuário 'descelecionar' , ele não ativa automaticamente os outros que foram desabilitados pelo sistema. E outra coisa, hehehe. Em meu código, eu tenho apenas um checkbox, dentro de um while, ou seja vários checkbox irão aparecer conforme a quantidade de registros que forem exibidos. <?php $sql_1 = mysql_query("SELECT * FROM notas_aluno WHERE matricula_aluno_notas = '$codigo' AND situacao != 'MT' AND situacao != 'AF' AND situacao != 'PF' AND situacao != 'AM'"); while($res_1 = mysql_fetch_array($sql_1)){ $disci_nota = $res_1['disciplina_nota']; $situacao = $res_1['situacao']; ?> <tr> <td><?php $sql_3 = mysql_query("SELECT * FROM disciplinas WHERE id_disc = '$disci_nota'"); while($res_3 = mysql_fetch_array($sql_3)){ $id_prof = $res_3['professor']; $id_disc = $res_3['id_disc']; ?> <div class="col-md-4"> <label class="check"><input type="checkbox" class="icheckbox"/></label> </div> Eu não posso fazer isso: <!DOCTYPE html> <html> <head> <meta name="description" content="Limitando quantidade de seleção em checkbox"> <meta charset="utf-8"> <meta name="viewport" content="width=device-width"> <title>Limitando quantidade de seleção em checkbox</title> </head> <body> <div class="container"> <div class="checkbox"> <label><input id="" type="checkbox" value="1">Option 1</label> </div> <div class="checkbox"> <label><input id="" type="checkbox" value="2">Option 2</label> </div> <div class="checkbox"> <label><input id="" type="checkbox" value="3">Option 3</label> </div> <div class="checkbox"> <label><input id="" type="checkbox" value="4">Option 4</label> </div> <div class="checkbox"> <label><input id="" type="checkbox" value="5">Option 5</label> </div> <div class="checkbox"> <label><input id="" type="checkbox" value="6">Option 6</label> </div> <div class="checkbox"> <label><input id="" type="checkbox" value="7">Option 7</label> </div> <div class="checkbox"> <label><input id="" type="checkbox" value="8">Option 8</label> </div> <div class="checkbox"> <label><input id="" type="checkbox" value="9">Option 9</label> </div> </div> <script src="https://code.jquery.com/jquery.min.js"></script> <link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css" rel="stylesheet" type="text/css" /> <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/js/bootstrap.min.js"></script> </body> </html> Pois, eu não sei a quantidade de dados que vão ser exibidos, se eu precisasse de 9 checkbox, esse cairia bem. Mas, é uma quantidade indeterminada, que só o sistema vai gerar conforme a quantidade de registros exibidos.
  7. Kellison Ruan

    Limitando quantidade de seleção em checkbox.

    Eu quero enviar um id de cada disciplina selecionada para o BD, pelo checkbox, mas como já disse: Eu quero que o aluno selecione apenas 7 checkbox das inúmeras disciplinas que aparecerão para ele cursar no semestre.
  8. Kellison Ruan

    Limitando quantidade de seleção em checkbox.

    Não! Eu não tenho essa estrutura: <input type="checkbox">1<br> <input type="checkbox">2<br> <input type="checkbox">3<br> <input type="checkbox">4<br> <input type="checkbox">5<br> <input type="checkbox">6<br> <input type="checkbox">7<br> <input type="checkbox">8<br> <input type="checkbox">9<br> E sim essa: <td><?php $sql_3 = mysql_query("SELECT * FROM disciplinas WHERE id_disc = '$disci_nota'"); while($res_3 = mysql_fetch_array($sql_3)){ $id_prof = $res_3['professor']; $id_disc = $res_3['id_disc']; ?> <div class="col-md-4"> <label class="check"><input type="checkbox" class="icheckbox"/></label> </div> </td> Como o checkbox está dentro de um while: while($res_3 = mysql_fetch_array($sql_3)){ $id_prof = $res_3['professor']; $id_disc = $res_3['id_disc']; ?> <div class="col-md-4"> <label class="check"><input type="checkbox" class="icheckbox"/></label> </div> Ele aparece de acordo a quantidade de dados vindo do BD. Entendeu??? Rsrsrs
  9. Kellison Ruan

    Limitando quantidade de seleção em checkbox.

    Aqui, é porque um único checkbox está dentro do while, trazendo os dados que quero do BD, quero saber se há alguma forma de saber se quando clicado nele por 7 vezes, já deixe o restante desabilitado. <td><?php $sql_3 = mysql_query("SELECT * FROM disciplinas WHERE id_disc = '$disci_nota'"); while($res_3 = mysql_fetch_array($sql_3)){ $id_prof = $res_3['professor']; $id_disc = $res_3['id_disc']; ?> <div class="col-md-4"> <label class="check"><input type="checkbox" class="icheckbox"/></label> </div> </td> Eu não quero usar essa estrutura de vários checkbox: <input type="checkbox">1<br> <input type="checkbox">2<br> <input type="checkbox">3<br> <input type="checkbox">4<br> <input type="checkbox">5<br> <input type="checkbox">6<br> <input type="checkbox">7<br> <input type="checkbox">8<br> <input type="checkbox">9<br> Pois, os dados vêm do BD, serão de acordo ao que vier do while.
  10. Kellison Ruan

    Limitando quantidade de seleção em checkbox.

    Deixa eu retificar: Será apenas um checkbox para trazer vários dados do BD, então como vai ser essa contagem? Para quando o usuário clicasse 7 vezes desabilitasse. Na verdade, seria mais por essa lógica. Desde já, agradeço a atenção!
  11. Kellison Ruan

    Limitando quantidade de seleção em checkbox.

    Porque o aluno terá direito a escolher dentre várias disciplinas, somente 7 para serem cursadas em determinado semestre.
  12. Olá pessoal, Preciso da ajuda de vocês, com um script para que determine que quando o usuário selecionar 7 checkbox, os outros apareçam automaticamente desabilitados para ele, sem que ele consiga selecionar. Desde já, fico grato por toda a atenção!
  13. Kellison Ruan

    Como não repetir os dados exibidos de uma tabela?

    Cara, tu BROCOU! Hauhauahaua, fiz e funfou legal! Do jeitinho que queria. Valeeeeeeeu mano!
  14. Gente, por favor me ajude, empaquei com o meu código nesse problema, e não consegui sair. É o seguinte, estou criando um sistema de matrícula online, para faculdade, onde na página das disciplinas disponíveis para cursar, estarão exibidas, as disciplinas que o aluno perdeu, e que vai estar disponível para ele cursá-la novamente, e a outra exibição será das disciplinas novas, que o aluno poderá selecionar quais queres cursar. O problema é que, estou fazendo a exibição dos dados das disciplinas perdidas assim: <?php $sql_1 = mysql_query("SELECT * FROM notas_aluno WHERE matricula_aluno_notas = '$codigo' AND situacao != 'MT' AND situacao != 'AF' AND situacao != 'PF' AND situacao != 'AM'"); while($res_1 = mysql_fetch_array($sql_1)){ $disci_nota = $res_1['disciplina_nota']; $situacao = $res_1['situacao']; ?> <tr> <td><?php $sql_3 = mysql_query("SELECT * FROM disciplinas WHERE id_disc = '$disci_nota'"); while($res_3 = mysql_fetch_array($sql_3)){ $id_prof = $res_3['professor']; $id_disc = $res_3['id_disc']; ?> <div class="col-md-4"> <label class="check"><input type="checkbox" class="icheckbox"/></label> </div> </td> <td><?php echo $res_3['nome_disc']; ?></td> <td><?php echo $res_3['turma']; ?></td> <td><?php echo $res_3['horas']; ?></td> <td><?php echo $res_3['turno']; ?></td> <td><?php echo $res_3['horario']; ?></td> <td><?php echo $res_3['dia']; ?></td> <td><?php $sql = mysql_query("SELECT * FROM dados_prof WHERE id_prof = '$id_prof'"); $contar = mysql_num_rows($sql); if ($contar <='0'){ echo "Não definido"; }else { while ($rs = mysql_fetch_array ($sql)){ $nome_prof = $rs['1']; echo $nome_prof; }?></td> </tr> <?php }}}?> Ignorem o HTML, foquem no código php. Bem, como podem ver, dependo de fazer esse select: (SELECT * FROM notas_aluno WHERE matricula_aluno_notas = '$codigo' AND situacao != 'MT' AND situacao != 'AF' AND situacao != 'PF' AND situacao != 'AM'") para que ele mostre apenas as disciplinas onde 'situacao' for diferente das siglas de MT = Matriculado, AF = Aprovado na Prova Final, PF = Vai para a Prova Final, AM = Aprovado por média. Pois, não faz sentido o aluno se matricular nem nenhuma disciplina já passada, ou matriculada. Bom, e o outro código é na mesma página que exibe este, e eles está desse jeito: <?php $sql_3 = mysql_query("SELECT * FROM disciplinas WHERE id_disc != '$disci_nota' AND curso = '$id_do_curso'"); while($res_3 = mysql_fetch_array($sql_3)){ $id_prof = $res_3['professor']; ?> <td> <div class="col-md-4"> <label class="check"><input type="checkbox" class="icheckbox"/></label> </div> </td> <td><?php echo $res_3['nome_disc']; ?></td> <td><?php echo $res_3['turma']; ?></td> <td><?php echo $res_3['horas']; ?></td> <td><?php echo $res_3['turno']; ?></td> <td><?php echo $res_3['horario']; ?></td> <td><?php echo $res_3['dia']; ?></td> <td><?php $sql = mysql_query("SELECT * FROM dados_prof WHERE id_prof = '$id_prof'"); $contar = mysql_num_rows($sql); if ($contar <='0'){ echo "Não definido"; }else { while ($rs = mysql_fetch_array ($sql)){ $nome_prof = $rs['1']; echo $nome_prof; }?></td> </tr> <?php }}?> O problema maior está neste código, ele mostra para mim todas as disciplinas, mas eu preciso que apareça apenas as outras disciplinas que estejam disponíveis para cursar, com exceção das que já foram exibidas lá nas disciplinas perdidas e que o aluno irá cursar novamente (primeiro código). Este código está exibindo todas as disciplinas, inclusive repetindo as do primeiro código, não sei mais o que fazer. Me ajude!!! Grato, desde já!
  15. Kellison Ruan

    Listagem de atletas com cadastro de pontos

    Valeu, muito obrigado pelo toque. Eu realmente, peço desculpas pois o meu desespero em achar a solução foi maior do que a falta de atenção. Valeu por corrigir o título! Pessoal, pronto consegui um modelo de como quero. Tomado por referência este modelo! Quando eu selecionar a equipe tipo: SÃO BERNARDO, OU SESI como na imagem. Apareça (como na imagem) o nome dos jogadores já cadastrados em cada equipe. E esse A, B, S e T como na tabela da imagem da imagem, é a quantidade de pontos de cada jogador em cada fundamento no jogo. E em cima, é o ponto a ponto ao vivo do jogo! Agradeço a todos, pela colaboração em respostas e soluções!
×

Important Information

Ao usar o fórum, você concorda com nossos Terms of Use.