You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

259 lines
7.8 KiB

#include <stdarg.h>
#include <base_utils\Mem.h>
#include <tccore\grm.h>
#include <tccore\grmtype.h>
#include <tc\iman.h>
#include <user_exits\user_exits.h>
#include <tccore\method.h>
#include <property\prop.h>
#include <tccore\aom_prop.h>
#include <property\prop_msg.h>
#include <tccore\imantype.h>
#include <property\prop_errors.h>
#include <tccore\item.h>
#include <lov\lov.h>
#include <sa\sa.h>
#include <tc\emh.h>
#include <res\reservation.h>
#include <tccore\workspaceobject.h>
#include <tc\wsouif_errors.h>
#include <tccore\aom.h>
#include <form\form.h>
#include <bom\bom.h>
#include <epm\cr.h>
#include <epm\releasestatus.h>
/**
* @headerfile standard c & cpp header files
*/
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <string>
#include <vector>
#include <map>
#include <fstream>
#include <iostream>
using namespace std;
/**
* @headerfile user's header files
*/
#include "epm_handler_common.h"
#include "error_handling.h"
#include "common_itk_util.h"
#include "string_helper.h"
#define SAFECALL(x) \
{ \
err_function = #x; err_line = __LINE__; \
if((rcode = (x)) != ITK_ok) \
{ \
goto CLEANUP; \
} \
}
void va_copy( va_list *dest , va_list * src ){
*dest = *src ;
}
static int SMP_ask_bomline_value( METHOD_message_t * m, va_list args )
{
int rcode = ITK_ok;
char *err_string,*err_function;
int err_line = -1;
tag_t objTag = NULLTAG;
const char * prop_name;
char** value = NULL;
char *bom_rev_status = NULL;
char sQty[] = "";
char sUnRead[] = "UNREADABLE";
va_list largs;
tag_t bom_line_item = NULLTAG;
tag_t bom_line_rev = NULLTAG;
tag_t last_rev = NULLTAG;
tag_t iman_type_tag = NULLTAG ;
char obj_class_name[TCTYPE_class_name_size_c+1];
char obj_type_name[TCTYPE_name_size_c+1];
int attr_bom_item = 0;
int attr_bom_rev = 0;
int attr_bom_rev_status = 0;
char item_rev_id[ITEM_id_size_c+1]="",item_id[ITEM_id_size_c+1]="",rev_id[ITEM_id_size_c+1]="",
strRow[BUFSIZ]="",txtfile[BUFSIZ]="", obj_type[WSO_object_type_size_c+1]="";
tag_t master_form_rel_type = NULLTAG;
int form_count = 0, attr_qty_id = 0;
tag_t *form_list=NULL, master_form = NULLTAG;
char *d_value=NULL, *qty_value = NULL;
METHOD_PROP_MESSAGE_OBJECT(m, objTag) /* objTag is the tag of the property's owning object */
METHOD_PROP_MESSAGE_PROP_NAME(m, prop_name) /* prop_name is the name of the current property */
printf("\n <20><><EFBFBD><EFBFBD> name : %s\n",prop_name);
va_copy( &largs, &args );
va_arg( largs, tag_t ); /* ignore the first tag_t arg */
value = va_arg( largs, char**);
va_end( largs );
//<2F><>ȡĿ<C8A1><C4BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
ITKCALL( TCTYPE_ask_object_type( objTag,&iman_type_tag ) );
ITKCALL( TCTYPE_ask_class_name(iman_type_tag,obj_class_name));//get ClassName of attachment
ITKCALL( TCTYPE_ask_name(iman_type_tag,obj_type_name) );
printf("\n Type name : %s\n",obj_type_name);
TC_write_syslog("\n Type name : %s\n",obj_type_name);
//if ( strcmp( obj_type_name , "Mfg0BvrPart" ) == 0 )
//{
//
//}
if ( strcmp( obj_type_name , "Mfg0BvrPart" ) == 0 )
//if ( strcmp( obj_type_name , "BOMLine" ) == 0 )
{
printf("\n is Mfg0BvrPart\n");
SAFECALL( BOM_line_look_up_attribute( bomAttr_lineItemTag , & attr_bom_item ) );
SAFECALL( BOM_line_look_up_attribute( bomAttr_lineItemRevTag , & attr_bom_rev ) );
SAFECALL( BOM_line_look_up_attribute( bomAttr_occQty , & attr_qty_id ) );
SAFECALL( BOM_line_ask_attribute_tag( objTag, attr_bom_item , &bom_line_item ));
SAFECALL( BOM_line_ask_attribute_tag( objTag, attr_bom_rev , &bom_line_rev ));
SAFECALL( BOM_line_ask_attribute_string( objTag, attr_qty_id, &qty_value ));
SAFECALL( WSOM_ask_object_type(bom_line_item, obj_type ));
printf("\n obj_type=%s",obj_type);
TC_write_syslog("\n obj_type=%s",obj_type);
//if( strcmp(obj_type, "Mfg0BvrPart") == 0)
if( strcmp(obj_type, "C7Part") == 0)
{
SAFECALL( GRM_find_relation_type( TC_master_form_rtype, &master_form_rel_type ) );
SAFECALL( GRM_list_secondary_objects_only(bom_line_rev, master_form_rel_type, &form_count, &form_list ));
master_form = form_list[0];
if( master_form != NULLTAG )
{
SAFECALL(AOM_UIF_ask_value(master_form, "c7GeneralClfion", &d_value));
printf("\n d_value=%s\n",d_value);
TC_write_syslog("\n d_value=%s\n",d_value);
//<2F><><EFBFBD><EFBFBD><EFBFBD>޸<EFBFBD><DEB8><EFBFBD><EFBFBD>ӱ<EFBFBD>ʶ
if( strcmp(d_value, "C") == 0
|| strcmp(d_value, "F") == 0
|| strcmp(d_value, "F1") == 0
|| strcmp(d_value, "F2") == 0
|| strcmp(d_value, "F3") == 0 )
{
strcpy(sQty,"");
}
else
{
if( strcmp(qty_value,"") == 0)
{
strcpy(sQty,"1");
}
else
strcpy(sQty,qty_value);
}
MEM_free(d_value);
}
MEM_free(form_list);
}
}
CLEANUP :
if( rcode != ITK_ok)
{
if ( 515001 == rcode || err_line == 80 ){
if ( *value != NULL ) MEM_free( *value );
*value = NULL;
*value = (char*)MEM_alloc ( 10 + 1 );
strcpy ( *value, "1" );
EMH_clear_errors( );
rcode = ITK_ok;
}else
{
EMH_ask_error_text (rcode, &err_string);
printf ("ERROR: %d ERROR MSG: %s.\n", rcode, err_string);
printf ("Function: %s FILE: %s LINE: %d\n", err_function, __FILE__, err_line);
MEM_free (err_string);
}
TC_write_syslog("\n rcode != ITK_ok");
}else{
if ( *value != NULL ) MEM_free( *value );
*value = NULL ;
*value = (char*)MEM_alloc ( strlen ( sQty ) + 1 );
strcpy ( *value, sQty );
TC_write_syslog("\n else sQty=%s",sQty);
}
return rcode;
}
int SMP_init_user_bomline_props(METHOD_message_t* m, va_list args)
{
int rcode = ITK_ok;
char *err_string,*err_function;
int err_line = -1;
tag_t type_tag;
tag_t pd_tag = NULLTAG;
METHOD_id_t method;
char typename_cpp[TCTYPE_name_size_c+1];
tag_t lov_tag;
tag_t tmp_lov_tag;
va_list largs;
va_copy( &largs, &args );
type_tag = va_arg( largs, tag_t );
va_end( largs );
ITKCALL( TCTYPE_ask_name( type_tag, typename_cpp ) );
/* ====== add properties for Bomline class types ====== */
/* ---- add superseded runtime property ---- */
ITKCALL( TCTYPE_add_runtime_property( type_tag, "JK8SupplyType",PROP_string,1,&pd_tag ) );
/* --- set display name...can also be done in user_property_names.uil --- */
ITKCALL( PROPDESC_set_display_name(pd_tag,"JK8SupplyType") );
/* --- register method to ask value --- */
ITKCALL( METHOD_register_prop_method( (const char*)typename_cpp, "JK8SupplyType", PROP_ask_value_string_msg, SMP_ask_bomline_value , 0 , &method ) );
printf("\n METHOD_register_prop_method");
/* --- register method to set value --- */
//SAFECALL( PROPDESC_set_protection( pd_tag, PROP_write ) );
//SAFECALL( METHOD_register_prop_method( (const char*)typename, "superseded", PROP_set_value_string_msg, SMP_set_bomline_superseded , 0 , &method ) );
CLEANUP:
if( rcode != ITK_ok)
{
EMH_ask_error_text (rcode, &err_string);
printf ("ERROR: %d ERROR MSG: %s.\n", rcode, err_string);
printf ("Function: %s FILE: %s LINE: %d\n", err_function, __FILE__, err_line);
MEM_free (err_string);
}
return( ITK_ok );
}
extern int Run_Time_register_properties( void )
{
int rcode = ITK_ok;
char *err_string,*err_function;
int err_line = -1;
USER_prop_init_entry_t user_types_methods[]= { { "BOMLine" , SMP_init_user_bomline_props , NULL } };
int n_types = sizeof(user_types_methods)/sizeof(USER_prop_init_entry_t);
SAFECALL( TCTYPE_register_properties(user_types_methods, n_types ));
printf("\n TCTYPE_register_properties\n");
TC_write_syslog("\n TCTYPE_register_properties\n");
CLEANUP:
if( rcode != ITK_ok)
{
EMH_ask_error_text (rcode, &err_string);
printf ("ERROR: %d ERROR MSG: %s.\n", rcode, err_string);
printf ("Function: FILE: %s LINE: %d\n", __FILE__, err_line);
MEM_free (err_string);
}
return rcode;
}