Advertisement
rizkyalviandra

sales.js

Sep 26th, 2019
214
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. //library
  2. import React from 'react';
  3. import axios from 'axios';
  4. import { connect } from 'react-redux';
  5. import { Formik } from 'formik';
  6. import { StyleSheet, Picker, View, Text, Alert, ScrollView, RefreshControl, FlatList } from 'react-native';
  7. import * as Yup from 'yup';
  8. import { Button } from 'react-native-elements';
  9. import moment from 'moment';
  10.  
  11. //component
  12. import InputForm from '../../components/_inputform';
  13. import TransactionCard from '../../components/_transactioncard';
  14. import TransactionPopup from '../../components/_transactionpopup';
  15. import DatePickerButton from '../../components/_datepickerbutton';
  16. import LoadingIndicator from '../../components/__loadingindicator';
  17. import ConfirmationModal from '../../components/__confirmationmodal';
  18.  
  19. //states
  20. import { onUpdateDateFrom, onUpdateDateTo } from '../../states/__dateutils';
  21. import { transactionFetch } from '../../states/_transaction';
  22. import { onUpdateOVT, onResetOVT } from '../../states/__utils';
  23. import { onNoSale } from '../../states/_sale';
  24.  
  25. //selector
  26. import { outletsUserSelector } from '../../states/selector/_outlet';
  27. import { saleStatusSelector, NSCounterSelector } from '../../states/selector/__utils';
  28. import { transactionsByDate } from '../../states/selector/_transaction';
  29. import { OutletVsTransactionSelector } from '../../states/selector/__utils';
  30.  
  31. //other
  32. import API_URL from '../../url';
  33. import { color, common, utility } from '../../styles/theme';
  34.  
  35.  
  36. export const OUTLETS_URL = `${API_URL}/warehouse`;
  37.  
  38. class SaleConsignment extends React.Component {
  39.  
  40.   state = {
  41.     modalVisible: false,
  42.     date: moment().format('YYYY-MM-DD'),
  43.     dateTo: moment().format('YYYY-MM-DD'),
  44.     outletName: "",
  45.     is_approved: "",
  46.     dataTransaction: [],
  47.     // dataTransaction: '',
  48.     popupIsOpen: false,
  49.   };
  50.  
  51.     componentDidMount = () => {
  52.         this.getOutlet()
  53.     }
  54.  
  55.     //outlet
  56.     handleOutlet = (outletCode) => {
  57.         this.props.updateOVT(outletCode);
  58.     };
  59.  
  60.     //date sales filtering
  61.     handleFromDate = (dateFrom) => {
  62.         this.props.updateDateFrom(dateFrom);
  63.       };
  64.    
  65.       handleToDate = (dateTo) => {
  66.         this.props.updateDateTo(dateTo);
  67.       };
  68.  
  69.     handleModal = () => {
  70.         this.setState({ modalVisible: !this.state.modalVisible });
  71.         console.log('is submit data');
  72.  
  73.         if(this.state.outletName === ""){
  74.             this.setState({outletName: this.state.outletFrist });
  75.         }
  76.  
  77.         // if(this.state.is_approved === ""){
  78.         //     this.setState({is_approved: "" });
  79.         // }
  80.     };
  81.  
  82.   //transaction
  83.  
  84.   openTransaction = () => {
  85.     this.setState({
  86.       popupIsOpen: true,
  87.     });
  88.   };
  89.  
  90.   transactionCard = ({ item, index }) => (
  91.     <TransactionCard data={item} id={index} onOpen={this.openTransaction} editData={this.editData} />
  92.   );
  93.  
  94.   editData = (data) =>{
  95.     console.log('tess')
  96.     console.log(data)
  97.     this.props.navigation.navigate('NewTransaction', {data:data})
  98.   }
  99.  
  100.   transactionCardItemKey = item => {
  101.     return item.id
  102.   };
  103.  
  104.   closeTransaction = () => {
  105.     this.setState({
  106.       popupIsOpen: false,
  107.     });
  108.   };
  109.  
  110.   getOutlet = () => {
  111.     const { user } = this.props;
  112.  
  113.     axios({
  114.       method: 'post',
  115.       url: OUTLETS_URL,
  116.       headers: {
  117.         Authorization: `Bearer ${user}`,
  118.       },
  119.       data: {
  120.         header: {
  121.           page: 1,
  122.           sort: 'ASC',
  123.         },
  124.         body: {},
  125.       },
  126.     }).then((response) => {
  127.       if (response.data.header.response_code === '99') {
  128.         this.setState({outletFrist: response.data.body[1].kd_gdg_art });
  129.       } else {
  130.         console.log("error" + response.body)
  131.       }
  132.     });
  133.   }
  134.  
  135.   handleSubmit = () => {
  136.  
  137.     if(this.state.outletName === ""){
  138.         this.setState({outletName: this.state.outletFrist });
  139.     }
  140.  
  141.     const { user } = this.props;
  142.  
  143.     let dataReport = {
  144.       kd_counter: this.state.outletName == '' ? this.state.outletFrist : this.state.outletName,
  145.       start_date:  moment(this.state.date).format('YYYY-MM-DD'),
  146.       end_date:  moment(this.state.dateTo).format('YYYY-MM-DD'),
  147.       is_approved: ""
  148.   };
  149.   axios({
  150.       method: 'post',
  151.       url: API_URL+'/sales/filter',
  152.       headers: {
  153.         Authorization: `Bearer ${user}`,
  154.       },
  155.       data: {
  156.         header: {
  157.             id:0
  158.         },
  159.         body: {
  160.             kd_counter: this.state.outletName == '' ? "" : this.state.outletName,
  161.             start_date:  moment(this.state.date).format('YYYY-MM-DD'),
  162.             end_date:  moment(this.state.dateTo).format('YYYY-MM-DD'),
  163.             is_approved: ""
  164.         }
  165.     },
  166.     }).then((response) => {
  167.       // console.log('cek date response code' + response.data.header.response_code);
  168.     //   console.warn(response)
  169.     //   break;
  170.       if (response.data.header.response_code === '99') {
  171.         console.log("data report");
  172.         console.log(dataReport);
  173.         // console.warn(response.data.header.response_code)
  174.        
  175.         // console.log('sukses cui add no sales')
  176.  
  177.         this.setState({
  178.             dataTransaction: response.data.body
  179.         });
  180.         console.warn(this.state.dataTransaction)
  181.  
  182.  
  183.         console.log('cek data report outletss');
  184.         console.log(this.state.dataTransaction);
  185.         console.log('get length');
  186.  
  187.         console.log(this.state.dataTransaction.length);
  188.  
  189.         Alert.alert("Success", "Success Filtered");
  190.         // console.warn(dataTransaction)
  191.         // this.setState({ modalVisible: !this.state.modalVisible });
  192.       }else{
  193.  
  194.         this.state.dataTransaction = [];
  195.         Alert.alert("Failed", response.data.header.response_description);
  196.         console.log(response.data.header);
  197.       }
  198.     });
  199.   }
  200.  
  201.   render() {
  202.     const { dataOutlet, noTransaction } = this.props;
  203.     return (
  204.       // <View style={[utility.containerStart, utility.screenContainer, common.backgroundBase]}>
  205.       <ScrollView
  206.         contentContainerStyle={[
  207.           utility.containerBetween,
  208.           utility.screenContainer,
  209.           common.backgroundBase,
  210.         ]}
  211.       >
  212.         <Formik
  213.           initialValues={{
  214.             transactionNo: noTransaction,
  215.             outletName: [],
  216.             transactionDate: moment(),
  217.             transactionDateTo: moment(),
  218.           }}
  219.           onSubmit={(values) => {
  220.             this.setState({ modalVisible: false });
  221.  
  222.             setTimeout(() => {
  223.               this.props.navigation.navigate('Main');
  224.             }, 2000);
  225.           }}
  226.           render={({
  227.             values, errors, touched, handleSubmit, setFieldValue, setFieldTouched,
  228.           }) => (
  229.             <React.Fragment>
  230.               <View style={common.formContainer}>
  231.                 <View style={common.pickerContainer}>
  232.                     {/* <Picker
  233.                         mode="dialog"
  234.                         selectedValue={selectedOutlet}
  235.                         style={common.pickerContent}
  236.                         onValueChange={itemValue => this.handleOutlet(itemValue)}
  237.                     >
  238.                         <Picker.Item key="" label="CHOOSE OUTLET" value="" />
  239.                         {dataOutlet.map(outlet => (
  240.                             <Picker.Item
  241.                                 label={outlet.keterangan}
  242.                                 value={outlet.kd_gdg_art}
  243.                                 key={outlet.id}
  244.                             />
  245.                         ))}
  246.                     </Picker> */}
  247.  
  248.                     <Picker
  249.                     mode="dialog"
  250.                     selectedValue={values.outletName}
  251.                     style={common.pickerContent}
  252.                     // prompt="Choose Outlet"
  253.                     onValueChange={(outlet) => {
  254.                       setFieldValue('outletName', outlet);
  255.                       this.setState({outletName: outlet });
  256.                     }}
  257.                   >
  258.                   <Picker.Item label='CHOOSE OUTLET' value='' key=''  />
  259.                     {dataOutlet.map(outlet => (
  260.                       <Picker.Item
  261.                         label={outlet.keterangan}
  262.                         value={outlet.kd_gdg_art}
  263.                         key={outlet.id}
  264.                       />
  265.                     ))}
  266.                   </Picker>
  267.                 </View>
  268.                 <DatePickerButton
  269.                   label="From"
  270.                   content={moment(values.transactionDate).format('DD MMMM YYYY')}
  271.                   onConfirm={(date) => {
  272.                     setFieldValue('transactionDate', date);
  273.                     this.setState({date: date });
  274.                   }}
  275.                 />
  276.  
  277.                 <DatePickerButton
  278.                   label="To"
  279.                   content={moment(values.transactionDateTo).format('DD MMMM YYYY')}
  280.                   onConfirm={(date) => {
  281.                     setFieldValue('transactionDateTo', date);
  282.                     this.setState({dateTo: date });
  283.                   }}
  284.                 />
  285.  
  286.                 {/* <View style={common.pickerContainer}>
  287.                   <Picker
  288.                   mode="dialog"
  289.                   selectedValue={values.is_approved}
  290.                   style={common.pickerContent}
  291.                   prompt="Choose Status"
  292.                   onValueChange={(status) => {
  293.                     setFieldValue('is_approved', status)
  294.                     this.setState({is_approved: status})
  295.                   }}
  296.                   >
  297.                     <Picker.Item key="" label='All' value='' />
  298.                     <Picker.Item key="0" label='Open' value='0' />
  299.                     <Picker.Item key="1" label='Approved' value='1' />
  300.                   </Picker>
  301.                 </View> */}
  302.  
  303.                 {/* <View style={common.pickerContainer}>
  304.                   <Picker
  305.                     mode="dialog"
  306.                     selectedValue={values.outletName}
  307.                     style={common.pickerContent}
  308.                     prompt="Choose Outlet"
  309.                     onValueChange={(outlet) => {
  310.                       setFieldValue('outletName', outlet);
  311.                       this.setState({outletName: outlet });
  312.                     }}
  313.                   >
  314.                     {dataOutlet.map(outlet => (
  315.                       <Picker.Item
  316.                         label={outlet.keterangan}
  317.                         value={outlet.kd_gdg_art}
  318.                         key={outlet.id}
  319.                       />
  320.                     ))}
  321.                   </Picker>
  322.                 </View> */}
  323.  
  324.                 <Button
  325.                     buttonStyle={common.buttonMain}
  326.                     containerStyle={common.buttonBlock}
  327.                     title="Refresh"
  328.                     onPress={this.handleSubmit}
  329.                 />
  330.               </View>
  331.             </React.Fragment>
  332.           )}
  333.         />
  334.  
  335.         {/* <View
  336.           style={{
  337.             borderBottomColor: 'grey',
  338.             borderBottomWidth: 1,
  339.             paddingTop:0
  340.           }}
  341.         /> */}
  342.  
  343.         {this.state.dataTransaction.length === 0 ? (
  344.             //console.warn(this.state.dataTransaction)
  345.             <Text style={common.textCenter}>Data Not Found</Text>
  346.         ) : (
  347.               <FlatList
  348.                   data={this.state.dataTransaction}
  349.                   renderItem={this.transactionCard}
  350.                   keyExtractor={this.transactionCardItemKey}
  351.                   contentContainerStyle={{ paddingHorizontal: 19 }}
  352.               />
  353.         )}
  354.         {/* <LoadingIndicator isShowing={this.props.transactionStatus} /> */}
  355.         <TransactionPopup isOpen={this.state.popupIsOpen} onClose={this.closeTransaction} />
  356.         <View style={[utility.itemsCenter, styles.buttonBottom]}>
  357.           <Button
  358.             title="Add New Transactions"
  359.             containerStyle={common.buttonFull}
  360.             buttonStyle={common.buttonValid}
  361.             onPress={() => this.props.navigation.navigate('NewTransaction', {data: []})}
  362.           />
  363.         </View>
  364.         </ScrollView>
  365.        
  366.     );
  367.   }
  368. }
  369.  
  370.  
  371. const styles = StyleSheet.create({
  372.   transactionCardContainer: {
  373.     padding: 4,
  374.     paddingHorizontal: 16,
  375.     marginBottom: 8,
  376.     borderRadius: 4,
  377.     justifyContent: 'center',
  378.     backgroundColor: color.colorOff,
  379.   },
  380.   buttonBottom: {
  381.     bottom: 0,
  382.     position: 'absolute',
  383.     width: '100%'
  384.   }
  385. });
  386.  
  387. const mapStateToProps = state => ({
  388.     transactionStore: state.transactionStore,
  389.     dataOutlet: outletsUserSelector(state),
  390.     //   transactionStatus: saleStatusSelector(state),
  391.     noTransaction: NSCounterSelector(state),
  392.     dataTransaction: transactionsByDate(state),
  393.     selectedOutlet: OutletVsTransactionSelector(state),
  394.     user: state.userStore.userToken,
  395. });
  396.  
  397. const mapDispatchToProps = dispatch => ({
  398.     onFetch: () => {
  399.         dispatch(transactionFetch());
  400.     },
  401.     updateDateFrom: (dateFrom) => {
  402.         dispatch(onUpdateDateFrom(dateFrom));
  403.     },
  404.     updateDateTo: (dateTo) => {
  405.         dispatch(onUpdateDateTo(dateTo));
  406.     },
  407.     updateOVT: (outletCode) => {
  408.         dispatch(onUpdateOVT(outletCode));
  409.     },
  410.     resetOVT: () => {
  411.         dispatch(onResetOVT());
  412.     },
  413. });
  414.  
  415. export default connect(
  416.   mapStateToProps,
  417.   mapDispatchToProps,
  418. )(SaleConsignment);
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement