From 3f9afd5569c58d1768ccc14a66d4580b299e5e37 Mon Sep 17 00:00:00 2001 From: Semyon Babushkin Date: Mon, 9 Oct 2017 18:46:51 +0300 Subject: [PATCH] purchase success info --- .editorconfig | 21 +++++ lib/i18n/messages_en.dart | 4 + lib/i18n/messages_es.dart | 4 + lib/i18n/messages_ru.dart | 4 + lib/i18n/messages_ua.dart | 4 + lib/screens/purchase.dart | 4 +- lib/screens/purchase_success.dart | 152 ++++++++++++++++++++++++++---- lib/strings.dart | 6 +- 8 files changed, 178 insertions(+), 21 deletions(-) create mode 100644 .editorconfig diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 0000000..8428f68 --- /dev/null +++ b/.editorconfig @@ -0,0 +1,21 @@ +# EditorConfig helps developers define and maintain consistent +# coding styles between different editors and IDEs +# editorconfig.org + +root = true + + +[*] + +# Change these settings to your own preference +indent_style = space +indent_size = 2 + +# We recommend you to keep these unchanged +end_of_line = lf +charset = utf-8 +trim_trailing_whitespace = true +insert_final_newline = true + +[*.md] +trim_trailing_whitespace = false diff --git a/lib/i18n/messages_en.dart b/lib/i18n/messages_en.dart index 7487e61..e95445f 100644 --- a/lib/i18n/messages_en.dart +++ b/lib/i18n/messages_en.dart @@ -36,6 +36,10 @@ class MessageLookup extends MessageLookupByLibrary { "request_sent_wait_activ" : MessageLookupByLibrary.simpleMessage("Activation request for the application has been sent, please wait for administrator approval"), "reward" : MessageLookupByLibrary.simpleMessage("Reward"), "bonus" : MessageLookupByLibrary.simpleMessage("Bonus on account"), + "discount_rate" : MessageLookupByLibrary.simpleMessage("Dicount Rate"), + "discount_sum" : MessageLookupByLibrary.simpleMessage("Dicount Sum"), + "bonus_plus" : MessageLookupByLibrary.simpleMessage("Bonus points"), + "bonus_minus" : MessageLookupByLibrary.simpleMessage("Bonus was charged"), "scan" : MessageLookupByLibrary.simpleMessage("Scan"), "sign_up" : MessageLookupByLibrary.simpleMessage("Sign Up"), "specify_din_store" : MessageLookupByLibrary.simpleMessage("Specify the store ID"), diff --git a/lib/i18n/messages_es.dart b/lib/i18n/messages_es.dart index fa7f656..f986e34 100644 --- a/lib/i18n/messages_es.dart +++ b/lib/i18n/messages_es.dart @@ -33,6 +33,10 @@ class MessageLookup extends MessageLookupByLibrary { "request_sent_wait_activ" : MessageLookupByLibrary.simpleMessage("El requieremento de activación de aplicación esta mandado, esperad la activación por el administrador."), "reward" : MessageLookupByLibrary.simpleMessage("Gratificación"), "bonus" : MessageLookupByLibrary.simpleMessage("Bono por cuenta"), + "discount_rate" : MessageLookupByLibrary.simpleMessage("Tasa de descuento"), + "discount_sum" : MessageLookupByLibrary.simpleMessage("El monto del descuento"), + "bonus_plus" : MessageLookupByLibrary.simpleMessage("Puntos de bonificación"), + "bonus_minus" : MessageLookupByLibrary.simpleMessage("El bono fue cobrado"), "scan" : MessageLookupByLibrary.simpleMessage("Escanear"), "sign_up" : MessageLookupByLibrary.simpleMessage("Registrarse"), "specify_din_store" : MessageLookupByLibrary.simpleMessage("Hay que dar DIN del negocio"), diff --git a/lib/i18n/messages_ru.dart b/lib/i18n/messages_ru.dart index 318cca0..d2d6acb 100644 --- a/lib/i18n/messages_ru.dart +++ b/lib/i18n/messages_ru.dart @@ -36,6 +36,10 @@ class MessageLookup extends MessageLookupByLibrary { "request_sent_wait_activ" : MessageLookupByLibrary.simpleMessage("Запрос на активацию приложения отправлен, дождитесь подтверждения активации администратором"), "reward" : MessageLookupByLibrary.simpleMessage("Вознаграждение"), "bonus" : MessageLookupByLibrary.simpleMessage("Бонусов на счету"), + "discount_rate" : MessageLookupByLibrary.simpleMessage("Процент скидки"), + "discount_sum" : MessageLookupByLibrary.simpleMessage("Сумма скидки"), + "bonus_plus" : MessageLookupByLibrary.simpleMessage("Бонусов начислено"), + "bonus_minus" : MessageLookupByLibrary.simpleMessage("Бонусов списано"), "scan" : MessageLookupByLibrary.simpleMessage("Сканировать"), "sign_up" : MessageLookupByLibrary.simpleMessage("Зарегистрироваться"), "specify_din_store" : MessageLookupByLibrary.simpleMessage("Необходимо указать ID магазина"), diff --git a/lib/i18n/messages_ua.dart b/lib/i18n/messages_ua.dart index 5dbe989..e52929b 100644 --- a/lib/i18n/messages_ua.dart +++ b/lib/i18n/messages_ua.dart @@ -36,6 +36,10 @@ class MessageLookup extends MessageLookupByLibrary { "request_sent_wait_activ" : MessageLookupByLibrary.simpleMessage("Запит на активацію додатку відправлений, дочекайтеся підтвердження активації адміністратором"), "reward" : MessageLookupByLibrary.simpleMessage("Винагорода"), "bonus" : MessageLookupByLibrary.simpleMessage("Бонусів на рахунку"), + "discount_rate" : MessageLookupByLibrary.simpleMessage("Відсоток знижки"), + "discount_sum" : MessageLookupByLibrary.simpleMessage("Сума знижки"), + "bonus_plus" : MessageLookupByLibrary.simpleMessage("Бонусів нараховано"), + "bonus_minus" : MessageLookupByLibrary.simpleMessage("Бонусів списано"), "scan" : MessageLookupByLibrary.simpleMessage("Сканувати"), "sign_up" : MessageLookupByLibrary.simpleMessage("Зареєструватися"), "specify_din_store" : MessageLookupByLibrary.simpleMessage("Необхідно вказати ID магазину"), diff --git a/lib/screens/purchase.dart b/lib/screens/purchase.dart index dfc2ca1..35f7c47 100644 --- a/lib/screens/purchase.dart +++ b/lib/screens/purchase.dart @@ -247,7 +247,9 @@ class PurchaseScreenState extends BaseState { sumTotal, user['first_name'] == null ? '' : user['first_name'], helper, - app)); + app, + parsedMap + )); } }).catchError((error) { purchaseInProgress = false; diff --git a/lib/screens/purchase_success.dart b/lib/screens/purchase_success.dart index 043bedc..fb95a44 100644 --- a/lib/screens/purchase_success.dart +++ b/lib/screens/purchase_success.dart @@ -8,28 +8,45 @@ import 'package:flutter/material.dart'; /// Экран проведения покупки. class PurchaseSuccessScreen extends StatefulWidget { - PurchaseSuccessScreen(this.val, this.name, this.helper, this.app); + PurchaseSuccessScreen(this.val, this.name, this.helper, this.app, this.details); final String val; final String name; final String app; final SqliteHelper helper; + final Map details; @override State createState() => - new PurchaseSuccessScreenState(val, name, helper, app); + new PurchaseSuccessScreenState(val, name, helper, app, details); } class PurchaseSuccessScreenState extends BaseState { - PurchaseSuccessScreenState(String sum, String username, SqliteHelper helper, - String app) { + PurchaseSuccessScreenState( + String sum, String username, SqliteHelper helper, + String app, Map details + ){ this.sum = sum; this.username = username; this.helper = helper; this.app = app; + this.details = details; + + String regexString = r'(\d+) начислено, (\d+).*'; + RegExp regExp = new RegExp(regexString); + var matches = regExp.allMatches(this.details['sum_bonus']); + if(matches.length != 0) { + var match = matches.elementAt(0); // => extract the first (and only) match + bonusPlus = int.parse(match.group(1)); + bonusMinus = int.parse(match.group(2)); + } + } String sum, username; + Map details; + int bonusPlus = 0; + int bonusMinus = 0; int currency; @override String getTitle() { @@ -52,12 +69,27 @@ class PurchaseSuccessScreenState extends BaseState { } @override Widget getScreenContent() { - return new Column(children: [ - getValueWithDescription(StringsLocalization.buyer(), username), - getSuccessMessage(), - new Expanded(child: new Center()), - wrapButton(getScreenMargins(74.0), getScanButton()) - ]); + + + + List widgetList = []; + widgetList.add(getValueWithDescription(StringsLocalization.buyer(), username)); + widgetList.add(getSuccessMessage()); + if (bonusPlus > 0) { + widgetList.add(getValueWithDescription(StringsLocalization.bonusPlus(), bonusPlus.toString())); + } + if (bonusMinus > 0) { + widgetList.add(getValueWithDescription(StringsLocalization.bonusMinus(), bonusMinus.toString())); + } + widgetList.add(getValueWithDescription(StringsLocalization.discountRate(), '${details['discount']}%')); + widgetList.add(getValueWithDescription(StringsLocalization.discountSum(), '${details['sum_discount']}')); + widgetList.add(getCoupons()); + widgetList.add( new Expanded(child: new Center())); + widgetList.add(wrapButton(getScreenMargins(74.0), getScanButton())); + + return new Column( + children: widgetList + ); } getScreenMargins(double bottom) { @@ -70,15 +102,97 @@ class PurchaseSuccessScreenState extends BaseState { return buildRaisedButton(title, () => startScanner(context, app, helper)); } + + ExpansionPanelHeaderBuilder get headerBuilder { + return (BuildContext context, bool isExpanded) { + return new Text('Purchase details'); + }; + } + + + getCoupons() { + EdgeInsets margin = new EdgeInsets.only(left: 20.0, right: 20.0); + TextStyle titleStyle = Theme.of(context).textTheme.button.copyWith( + fontWeight: FontWeight.bold, + color: faqTitlesColor + ); + + final List detailsRows = []; + +// this.details.forEach((key, value) => detailsRows.add( +// new Text(key) +// new Row( +// crossAxisAlignment: CrossAxisAlignment.start, +// children: [ +// new Text('1'), +// new Text('2'), +// +// new Container( +// margin: const EdgeInsets.only(right: 16.0), +// child: new CircleAvatar(child: new Text('D')), +// ), +// new Column( +// crossAxisAlignment: CrossAxisAlignment.start, +// children: [ +// new Text(key, style: Theme.of(context).textTheme.subhead), +// new Container( +// margin: const EdgeInsets.only(top: 0.5), +// child: new Text(key) +// ) +// ] +// ) +// ], +// ) +// )); + + print(detailsRows.length); + + return new Container( + margin: margin, + child: new Card( + child: new ExpansionTile( + //key: new PageStorageKey(root), + title: new Text( + 'Coupons', + style: titleStyle + ), + children: [ + new Container( + margin: margin, + padding: new EdgeInsets.only(top: 12.0, bottom: 20.0), + child: new Text('Coupons'), + decoration: new BoxDecoration( + border: new Border( + top: new BorderSide( + color: greyTextColor, + width: 0.5 + ) + ) + ) + ) + ] + ) + ) + ); + } + getSuccessMessage() { - return new Row(children: [new Expanded(child: new Container( - margin: new EdgeInsets.only(top: 20.0), height: 64.0, - decoration: new BoxDecoration(color: greenBackground), - child: new Center( - child: new Text(getMessageTitle(), textAlign: TextAlign.center, - style: new TextStyle(fontWeight: FontWeight.bold, - color: tokenActiveTextColor))))) - ]); + return new Row( + children: [ + new Expanded(child: new Container( + margin: new EdgeInsets.only(top: 20.0), height: 64.0, + decoration: new BoxDecoration(color: greenBackground), + child: new Center( + child: new Text( + getMessageTitle(), textAlign: TextAlign.center, + style: new TextStyle( + fontWeight: FontWeight.bold, + color: tokenActiveTextColor + ) + ) + ) + )) + ]); } getMessageTitle() { @@ -89,4 +203,4 @@ class PurchaseSuccessScreenState extends BaseState { } } -} \ No newline at end of file +} diff --git a/lib/strings.dart b/lib/strings.dart index 1e25175..7c22c25 100644 --- a/lib/strings.dart +++ b/lib/strings.dart @@ -101,6 +101,10 @@ class StringsLocalization { static String completePurchase() => Intl.message('complite_purchase', name: 'complite_purchase', locale: Intl.defaultLocale); static String scan() => Intl.message('scan', name: 'scan', locale: Intl.defaultLocale); static String buyer() => Intl.message('buyer', name: 'buyer', locale: Intl.defaultLocale); + static String discountRate() => Intl.message('discount_rate', name: 'discount_rate', locale: Intl.defaultLocale); + static String discountSum() => Intl.message('discount_sum', name: 'discount_sum', locale: Intl.defaultLocale); + static String bonusPlus() => Intl.message('bonus_plus', name: 'bonus_plus', locale: Intl.defaultLocale); + static String bonusMinus() => Intl.message('bonus_minus', name: 'bonus_minus', locale: Intl.defaultLocale); static String idNotFound() => Intl.message('ID_not_found', name: 'ID_not_found', locale: Intl.defaultLocale); static String settings() => Intl.message('settings', name: 'settings', locale: Intl.defaultLocale); static String help() => Intl.message('help', name: 'help', locale: Intl.defaultLocale); @@ -137,4 +141,4 @@ class StringsLocalization { static String supportGuide(String phone, String url) { return sprintf(Intl.message('support_guide', name: 'support_guide', locale: Intl.defaultLocale), [phone, url]); } -} \ No newline at end of file +}